diff --git a/apps/web/src/dialogs/api-key/registry.tsx b/apps/web/src/dialogs/api-key/registry.tsx index 97618d1e0..122d7d5ac 100644 --- a/apps/web/src/dialogs/api-key/registry.tsx +++ b/apps/web/src/dialogs/api-key/registry.tsx @@ -1,6 +1,6 @@ -import { defineDialogRenderer, defineDialogRendererRegistry } from "../renderer-registry"; +import type { AnyDialogRendererEntry } from "../renderer-registry"; import { CreateApiKeyDialog } from "./create"; -export const apiKeyDialogRendererRegistry = defineDialogRendererRegistry("api-key", [ - defineDialogRenderer("api-key.create", () => ), -]); +export const apiKeyDialogRenderers: readonly AnyDialogRendererEntry[] = [ + { type: "api-key.create", render: () => }, +]; diff --git a/apps/web/src/dialogs/auth/registry.tsx b/apps/web/src/dialogs/auth/registry.tsx index ca2466ba1..f41c558c4 100644 --- a/apps/web/src/dialogs/auth/registry.tsx +++ b/apps/web/src/dialogs/auth/registry.tsx @@ -1,10 +1,10 @@ -import { defineDialogRenderer, defineDialogRendererRegistry } from "../renderer-registry"; +import type { AnyDialogRendererEntry } from "../renderer-registry"; import { ChangePasswordDialog } from "./change-password"; import { DisableTwoFactorDialog } from "./disable-two-factor"; import { EnableTwoFactorDialog } from "./enable-two-factor"; -export const authDialogRendererRegistry = defineDialogRendererRegistry("auth", [ - defineDialogRenderer("auth.change-password", () => ), - defineDialogRenderer("auth.two-factor.enable", () => ), - defineDialogRenderer("auth.two-factor.disable", () => ), -]); +export const authDialogRenderers: readonly AnyDialogRendererEntry[] = [ + { type: "auth.change-password", render: () => }, + { type: "auth.two-factor.enable", render: () => }, + { type: "auth.two-factor.disable", render: () => }, +]; diff --git a/apps/web/src/dialogs/renderer-registry.ts b/apps/web/src/dialogs/renderer-registry.ts index 6adf70c06..cd4f83e68 100644 --- a/apps/web/src/dialogs/renderer-registry.ts +++ b/apps/web/src/dialogs/renderer-registry.ts @@ -1,26 +1,12 @@ import type { ReactNode } from "react"; import type { DialogSchema, DialogType } from "./schemas"; -export interface DialogRendererEntry { +// ponytail: defineDialogRenderer/defineDialogRendererRegistry were identity fns; inlined +export type DialogRendererEntry = { type: T; render: (dialog: Extract) => ReactNode; -} +}; export type AnyDialogRendererEntry = { [T in DialogType]: DialogRendererEntry; }[DialogType]; - -export interface DialogRendererRegistry { - domain: string; - renderers: readonly AnyDialogRendererEntry[]; -} - -export const defineDialogRenderer = ( - type: T, - render: (dialog: Extract) => ReactNode, -): DialogRendererEntry => ({ type, render }); - -export const defineDialogRendererRegistry = ( - domain: string, - renderers: readonly AnyDialogRendererEntry[], -): DialogRendererRegistry => ({ domain, renderers }); diff --git a/apps/web/src/dialogs/renderers.tsx b/apps/web/src/dialogs/renderers.tsx index 34922beb0..7caadec32 100644 --- a/apps/web/src/dialogs/renderers.tsx +++ b/apps/web/src/dialogs/renderers.tsx @@ -1,25 +1,17 @@ import type { DialogSchema } from "./schemas"; -import { apiKeyDialogRendererRegistry } from "./api-key/registry"; -import { authDialogRendererRegistry } from "./auth/registry"; -import { resumeDialogRendererRegistry } from "./resume/registry"; - -const dialogRendererRegistries = [ - authDialogRendererRegistry, - apiKeyDialogRendererRegistry, - resumeDialogRendererRegistry, -] as const; +import { apiKeyDialogRenderers } from "./api-key/registry"; +import { authDialogRenderers } from "./auth/registry"; +import { resumeDialogRenderers } from "./resume/registry"; const dialogRendererByType = new Map( - dialogRendererRegistries.flatMap((registry) => - registry.renderers.map((renderer) => [renderer.type, renderer] as const), + [...authDialogRenderers, ...apiKeyDialogRenderers, ...resumeDialogRenderers].map( + (renderer) => [renderer.type, renderer] as const, ), ); export const renderDialog = (dialog: DialogSchema | null) => { if (!dialog) return null; - const renderer = dialogRendererByType.get(dialog.type); if (renderer) return renderer.render(dialog as never); - return null; }; diff --git a/apps/web/src/dialogs/resume/registry.tsx b/apps/web/src/dialogs/resume/registry.tsx index cd9cdd3fd..bbc7a289e 100644 --- a/apps/web/src/dialogs/resume/registry.tsx +++ b/apps/web/src/dialogs/resume/registry.tsx @@ -1,4 +1,4 @@ -import { defineDialogRenderer, defineDialogRendererRegistry } from "../renderer-registry"; +import type { AnyDialogRendererEntry } from "../renderer-registry"; import { CreateResumeDialog, DuplicateResumeDialog, UpdateResumeDialog } from "."; import { ImportResumeDialog } from "./import"; import { CreateAwardDialog, UpdateAwardDialog } from "./sections/award"; @@ -18,44 +18,46 @@ import { CreateSummaryItemDialog, UpdateSummaryItemDialog } from "./sections/sum import { CreateVolunteerDialog, UpdateVolunteerDialog } from "./sections/volunteer"; import { TemplateGalleryDialog } from "./template/gallery"; -export const resumeDialogRendererRegistry = defineDialogRendererRegistry("resume", [ - defineDialogRenderer("resume.create", () => ), - defineDialogRenderer("resume.update", ({ data }) => ), - defineDialogRenderer("resume.duplicate", ({ data }) => ), - defineDialogRenderer("resume.import", () => ), - defineDialogRenderer("resume.template.gallery", () => ), - defineDialogRenderer("resume.sections.profiles.create", ({ data }) => ), - defineDialogRenderer("resume.sections.profiles.update", ({ data }) => ), - defineDialogRenderer("resume.sections.experience.create", ({ data }) => ), - defineDialogRenderer("resume.sections.experience.update", ({ data }) => ), - defineDialogRenderer("resume.sections.education.create", ({ data }) => ), - defineDialogRenderer("resume.sections.education.update", ({ data }) => ), - defineDialogRenderer("resume.sections.skills.create", ({ data }) => ), - defineDialogRenderer("resume.sections.skills.update", ({ data }) => ), - defineDialogRenderer("resume.sections.projects.create", ({ data }) => ), - defineDialogRenderer("resume.sections.projects.update", ({ data }) => ), - defineDialogRenderer("resume.sections.certifications.create", ({ data }) => ( - - )), - defineDialogRenderer("resume.sections.certifications.update", ({ data }) => ( - - )), - defineDialogRenderer("resume.sections.languages.create", ({ data }) => ), - defineDialogRenderer("resume.sections.languages.update", ({ data }) => ), - defineDialogRenderer("resume.sections.publications.create", ({ data }) => ), - defineDialogRenderer("resume.sections.publications.update", ({ data }) => ), - defineDialogRenderer("resume.sections.awards.create", ({ data }) => ), - defineDialogRenderer("resume.sections.awards.update", ({ data }) => ), - defineDialogRenderer("resume.sections.interests.create", ({ data }) => ), - defineDialogRenderer("resume.sections.interests.update", ({ data }) => ), - defineDialogRenderer("resume.sections.volunteer.create", ({ data }) => ), - defineDialogRenderer("resume.sections.volunteer.update", ({ data }) => ), - defineDialogRenderer("resume.sections.references.create", ({ data }) => ), - defineDialogRenderer("resume.sections.references.update", ({ data }) => ), - defineDialogRenderer("resume.sections.summary.create", ({ data }) => ), - defineDialogRenderer("resume.sections.summary.update", ({ data }) => ), - defineDialogRenderer("resume.sections.cover-letter.create", ({ data }) => ), - defineDialogRenderer("resume.sections.cover-letter.update", ({ data }) => ), - defineDialogRenderer("resume.sections.custom.create", ({ data }) => ), - defineDialogRenderer("resume.sections.custom.update", ({ data }) => ), -]); +export const resumeDialogRenderers: readonly AnyDialogRendererEntry[] = [ + { type: "resume.create", render: () => }, + { type: "resume.update", render: ({ data }) => }, + { type: "resume.duplicate", render: ({ data }) => }, + { type: "resume.import", render: () => }, + { type: "resume.template.gallery", render: () => }, + { type: "resume.sections.profiles.create", render: ({ data }) => }, + { type: "resume.sections.profiles.update", render: ({ data }) => }, + { type: "resume.sections.experience.create", render: ({ data }) => }, + { type: "resume.sections.experience.update", render: ({ data }) => }, + { type: "resume.sections.education.create", render: ({ data }) => }, + { type: "resume.sections.education.update", render: ({ data }) => }, + { type: "resume.sections.skills.create", render: ({ data }) => }, + { type: "resume.sections.skills.update", render: ({ data }) => }, + { type: "resume.sections.projects.create", render: ({ data }) => }, + { type: "resume.sections.projects.update", render: ({ data }) => }, + { + type: "resume.sections.certifications.create", + render: ({ data }) => , + }, + { + type: "resume.sections.certifications.update", + render: ({ data }) => , + }, + { type: "resume.sections.languages.create", render: ({ data }) => }, + { type: "resume.sections.languages.update", render: ({ data }) => }, + { type: "resume.sections.publications.create", render: ({ data }) => }, + { type: "resume.sections.publications.update", render: ({ data }) => }, + { type: "resume.sections.awards.create", render: ({ data }) => }, + { type: "resume.sections.awards.update", render: ({ data }) => }, + { type: "resume.sections.interests.create", render: ({ data }) => }, + { type: "resume.sections.interests.update", render: ({ data }) => }, + { type: "resume.sections.volunteer.create", render: ({ data }) => }, + { type: "resume.sections.volunteer.update", render: ({ data }) => }, + { type: "resume.sections.references.create", render: ({ data }) => }, + { type: "resume.sections.references.update", render: ({ data }) => }, + { type: "resume.sections.summary.create", render: ({ data }) => }, + { type: "resume.sections.summary.update", render: ({ data }) => }, + { type: "resume.sections.cover-letter.create", render: ({ data }) => }, + { type: "resume.sections.cover-letter.update", render: ({ data }) => }, + { type: "resume.sections.custom.create", render: ({ data }) => }, + { type: "resume.sections.custom.update", render: ({ data }) => }, +];