@webiny/app-website-builder 6.3.0-beta.2 → 6.3.0-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/BaseEditor/components/Editor.js +7 -0
- package/BaseEditor/components/Editor.js.map +1 -1
- package/BaseEditor/config/EditorConfig.d.ts +1 -2
- package/BaseEditor/config/EditorConfig.js.map +1 -1
- package/BaseEditor/defaultConfig/Content/Preview/PreviewEvents.js +1 -1
- package/BaseEditor/defaultConfig/Content/Preview/PreviewEvents.js.map +1 -1
- package/Extension.js +3 -0
- package/Extension.js.map +1 -1
- package/ecommerce/components/ResourcesList.js +2 -2
- package/ecommerce/components/ResourcesList.js.map +1 -1
- package/ecommerce/components/ResourcesPicker.js +1 -1
- package/ecommerce/components/ResourcesPicker.js.map +1 -1
- package/editorSdk/createCommand.js +1 -1
- package/editorSdk/createCommand.js.map +1 -1
- package/exports/admin/website-builder/page/editor.d.ts +1 -0
- package/exports/admin/website-builder/page/editor.js +1 -0
- package/exports/admin/website-builder/page/editor.js.map +1 -1
- package/modules/pages/PageEditor/DefaultPageEditorConfig.js +1 -2
- package/modules/pages/PageEditor/DefaultPageEditorConfig.js.map +1 -1
- package/modules/pages/PageEditor/PageEditorConfig.d.ts +180 -198
- package/modules/pages/PageEditor/PageEditorConfig.js +2 -7
- package/modules/pages/PageEditor/PageEditorConfig.js.map +1 -1
- package/modules/pages/PageEditor/PageSettings/PageSettingsPresenter.d.ts +22 -0
- package/modules/pages/PageEditor/PageSettings/PageSettingsPresenter.js +154 -0
- package/modules/pages/PageEditor/PageSettings/PageSettingsPresenter.js.map +1 -0
- package/modules/pages/PageEditor/PageSettings/abstractions.d.ts +54 -0
- package/modules/pages/PageEditor/PageSettings/abstractions.js +12 -0
- package/modules/pages/PageEditor/PageSettings/abstractions.js.map +1 -0
- package/modules/pages/PageEditor/PageSettings/feature.d.ts +3 -0
- package/modules/pages/PageEditor/PageSettings/feature.js +24 -0
- package/modules/pages/PageEditor/PageSettings/feature.js.map +1 -0
- package/modules/pages/PageEditor/PageSettings/groups/GeneralSettingsGroup.d.ts +17 -0
- package/modules/pages/PageEditor/PageSettings/groups/GeneralSettingsGroup.js +42 -0
- package/modules/pages/PageEditor/PageSettings/groups/GeneralSettingsGroup.js.map +1 -0
- package/modules/pages/PageEditor/PageSettings/groups/SchemaSettingsGroup.d.ts +17 -0
- package/modules/pages/PageEditor/PageSettings/groups/SchemaSettingsGroup.js +34 -0
- package/modules/pages/PageEditor/PageSettings/groups/SchemaSettingsGroup.js.map +1 -0
- package/modules/pages/PageEditor/PageSettings/groups/SeoSettingsGroup.d.ts +27 -0
- package/modules/pages/PageEditor/PageSettings/groups/SeoSettingsGroup.js +52 -0
- package/modules/pages/PageEditor/PageSettings/groups/SeoSettingsGroup.js.map +1 -0
- package/modules/pages/PageEditor/PageSettings/groups/SocialSettingsGroup.d.ts +17 -0
- package/modules/pages/PageEditor/PageSettings/groups/SocialSettingsGroup.js +44 -0
- package/modules/pages/PageEditor/PageSettings/groups/SocialSettingsGroup.js.map +1 -0
- package/modules/pages/PageEditor/PageSettings/index.d.ts +3 -0
- package/modules/pages/PageEditor/PageSettings/index.js +5 -0
- package/modules/pages/PageEditor/PageSettings/index.js.map +1 -0
- package/modules/pages/PageEditor/TopBar/PageSettingsDrawer.d.ts +11 -0
- package/modules/pages/PageEditor/TopBar/PageSettingsDrawer.js +35 -0
- package/modules/pages/PageEditor/TopBar/PageSettingsDrawer.js.map +1 -0
- package/modules/pages/PageEditor/TopBar/SettingsButton.d.ts +0 -6
- package/modules/pages/PageEditor/TopBar/SettingsButton.js +29 -26
- package/modules/pages/PageEditor/TopBar/SettingsButton.js.map +1 -1
- package/modules/pages/PageEditor/usePageEditorConfig.d.ts +4 -20
- package/modules/pages/PageEditor/usePageEditorConfig.js +1 -8
- package/modules/pages/PageEditor/usePageEditorConfig.js.map +1 -1
- package/package.json +31 -28
- package/presentation/navigation/Extension.js +5 -6
- package/presentation/navigation/Extension.js.map +1 -1
- package/presentation/pages/CreatePage/AddLanguageModifier.js +5 -5
- package/presentation/pages/CreatePage/AddLanguageModifier.js.map +1 -1
- package/presentation/pages/CreatePage/CreatePage.test.js +9 -13
- package/presentation/pages/CreatePage/CreatePage.test.js.map +1 -1
- package/presentation/pages/CreatePage/CreatePagePresenter.js +1 -1
- package/presentation/pages/CreatePage/CreatePagePresenter.js.map +1 -1
- package/shared/PagePath.js +1 -1
- package/shared/PagePath.js.map +1 -1
- package/shared/pagePathFromTitle.js +1 -1
- package/shared/pagePathFromTitle.js.map +1 -1
- package/modules/pages/PageEditor/PageSettings/PageSettings.d.ts +0 -30
- package/modules/pages/PageEditor/PageSettings/PageSettings.js +0 -84
- package/modules/pages/PageEditor/PageSettings/PageSettings.js.map +0 -1
- package/modules/pages/PageEditor/PageSettings/PageSettingsConfig.d.ts +0 -2
- package/modules/pages/PageEditor/PageSettings/PageSettingsConfig.js +0 -98
- package/modules/pages/PageEditor/PageSettings/PageSettingsConfig.js.map +0 -1
- package/modules/pages/PageEditor/PageSettings/elements/GeneralImage.d.ts +0 -2
- package/modules/pages/PageEditor/PageSettings/elements/GeneralImage.js +0 -31
- package/modules/pages/PageEditor/PageSettings/elements/GeneralImage.js.map +0 -1
- package/modules/pages/PageEditor/PageSettings/elements/GeneralPath.d.ts +0 -2
- package/modules/pages/PageEditor/PageSettings/elements/GeneralPath.js +0 -16
- package/modules/pages/PageEditor/PageSettings/elements/GeneralPath.js.map +0 -1
- package/modules/pages/PageEditor/PageSettings/elements/GeneralSnippet.d.ts +0 -2
- package/modules/pages/PageEditor/PageSettings/elements/GeneralSnippet.js +0 -14
- package/modules/pages/PageEditor/PageSettings/elements/GeneralSnippet.js.map +0 -1
- package/modules/pages/PageEditor/PageSettings/elements/GeneralTags.d.ts +0 -2
- package/modules/pages/PageEditor/PageSettings/elements/GeneralTags.js +0 -14
- package/modules/pages/PageEditor/PageSettings/elements/GeneralTags.js.map +0 -1
- package/modules/pages/PageEditor/PageSettings/elements/GeneralTitle.d.ts +0 -2
- package/modules/pages/PageEditor/PageSettings/elements/GeneralTitle.js +0 -16
- package/modules/pages/PageEditor/PageSettings/elements/GeneralTitle.js.map +0 -1
- package/modules/pages/PageEditor/PageSettings/elements/SchemaEditor.d.ts +0 -2
- package/modules/pages/PageEditor/PageSettings/elements/SchemaEditor.js +0 -31
- package/modules/pages/PageEditor/PageSettings/elements/SchemaEditor.js.map +0 -1
- package/modules/pages/PageEditor/PageSettings/elements/SeoCanonicalUrl.d.ts +0 -2
- package/modules/pages/PageEditor/PageSettings/elements/SeoCanonicalUrl.js +0 -26
- package/modules/pages/PageEditor/PageSettings/elements/SeoCanonicalUrl.js.map +0 -1
- package/modules/pages/PageEditor/PageSettings/elements/SeoDescription.d.ts +0 -2
- package/modules/pages/PageEditor/PageSettings/elements/SeoDescription.js +0 -15
- package/modules/pages/PageEditor/PageSettings/elements/SeoDescription.js.map +0 -1
- package/modules/pages/PageEditor/PageSettings/elements/SeoMetaTags.d.ts +0 -2
- package/modules/pages/PageEditor/PageSettings/elements/SeoMetaTags.js +0 -18
- package/modules/pages/PageEditor/PageSettings/elements/SeoMetaTags.js.map +0 -1
- package/modules/pages/PageEditor/PageSettings/elements/SeoNoFollow.d.ts +0 -2
- package/modules/pages/PageEditor/PageSettings/elements/SeoNoFollow.js +0 -16
- package/modules/pages/PageEditor/PageSettings/elements/SeoNoFollow.js.map +0 -1
- package/modules/pages/PageEditor/PageSettings/elements/SeoNoIndex.d.ts +0 -2
- package/modules/pages/PageEditor/PageSettings/elements/SeoNoIndex.js +0 -16
- package/modules/pages/PageEditor/PageSettings/elements/SeoNoIndex.js.map +0 -1
- package/modules/pages/PageEditor/PageSettings/elements/SeoTitle.d.ts +0 -2
- package/modules/pages/PageEditor/PageSettings/elements/SeoTitle.js +0 -15
- package/modules/pages/PageEditor/PageSettings/elements/SeoTitle.js.map +0 -1
- package/modules/pages/PageEditor/PageSettings/elements/SocialDescription.d.ts +0 -2
- package/modules/pages/PageEditor/PageSettings/elements/SocialDescription.js +0 -15
- package/modules/pages/PageEditor/PageSettings/elements/SocialDescription.js.map +0 -1
- package/modules/pages/PageEditor/PageSettings/elements/SocialImage.d.ts +0 -2
- package/modules/pages/PageEditor/PageSettings/elements/SocialImage.js +0 -31
- package/modules/pages/PageEditor/PageSettings/elements/SocialImage.js.map +0 -1
- package/modules/pages/PageEditor/PageSettings/elements/SocialMetaTags.d.ts +0 -2
- package/modules/pages/PageEditor/PageSettings/elements/SocialMetaTags.js +0 -18
- package/modules/pages/PageEditor/PageSettings/elements/SocialMetaTags.js.map +0 -1
- package/modules/pages/PageEditor/PageSettings/elements/SocialTitle.d.ts +0 -2
- package/modules/pages/PageEditor/PageSettings/elements/SocialTitle.js +0 -15
- package/modules/pages/PageEditor/PageSettings/elements/SocialTitle.js.map +0 -1
- package/modules/pages/PageEditor/TopBar/Settings/KeyValueGridEditor.d.ts +0 -2
- package/modules/pages/PageEditor/TopBar/Settings/KeyValueGridEditor.js +0 -59
- package/modules/pages/PageEditor/TopBar/Settings/KeyValueGridEditor.js.map +0 -1
- package/modules/pages/PageEditor/TopBar/Settings/MetaTags.d.ts +0 -11
- package/modules/pages/PageEditor/TopBar/Settings/MetaTags.js +0 -80
- package/modules/pages/PageEditor/TopBar/Settings/MetaTags.js.map +0 -1
- package/modules/pages/PageEditor/TopBar/Settings/PageSettingsDialog.d.ts +0 -2
- package/modules/pages/PageEditor/TopBar/Settings/PageSettingsDialog.js +0 -37
- package/modules/pages/PageEditor/TopBar/Settings/PageSettingsDialog.js.map +0 -1
- package/modules/pages/PageEditor/TopBar/Settings/PageSettingsDrawer.d.ts +0 -3
- package/modules/pages/PageEditor/TopBar/Settings/PageSettingsDrawer.js +0 -73
- package/modules/pages/PageEditor/TopBar/Settings/PageSettingsDrawer.js.map +0 -1
- package/modules/pages/PageEditor/TopBar/Settings/SettingsDialogBody.d.ts +0 -6
- package/modules/pages/PageEditor/TopBar/Settings/SettingsDialogBody.js +0 -21
- package/modules/pages/PageEditor/TopBar/Settings/SettingsDialogBody.js.map +0 -1
- package/modules/pages/PageEditor/TopBar/Settings/SimpleTags.d.ts +0 -7
- package/modules/pages/PageEditor/TopBar/Settings/SimpleTags.js +0 -75
- package/modules/pages/PageEditor/TopBar/Settings/SimpleTags.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["describe","it","expect","FormModel","FormModelImpl","AddLanguageModifier","PagePath","createLanguageMocks","languages","repository","execute","getLanguages","useCase","createBaseForm","config","fields","title","text","label","required","onBlur","value","f","currentPath","field","getValue","setValue","fromTitle","String","toString","path","beforeChange","create","slugify","pageType","hidden","defaultValue","layout","row","setTitleAndBlur","form","blur","toBeDefined","data","getData","toBe","fieldNames","vm","filter","n","type","flatMap","map","name","not","toContain","toBeNull","result","submit","toEqual","errors","length","toBeGreaterThan","buildForm","modifiers","modifyForm","modifier","staticPageType","productPageType","product","select","options","setDisabled","before","disabled","langs","id","code","isDefault","languageModifier","pageTypes","static","changePageType","currentForm","newType","previousData","setData","staticForm","productForm","toHaveProperty","langValue"],"sources":["CreatePage.test.ts"],"sourcesContent":["import { describe, it, expect } from \"vitest\";\nimport { FormModel as FormModelImpl } from \"@webiny/app-admin/features/formModel/FormModel.js\";\nimport type { IFormModel, IFormModelConfig, IRowNodeVM } from \"@webiny/app-admin\";\nimport type { LanguageDto } from \"@webiny/languages/admin/features/listLanguages/abstractions.js\";\nimport { AddLanguageModifier } from \"./AddLanguageModifier.js\";\nimport { PagePath } from \"~/shared/PagePath.js\";\nimport type { IPageType, ICreatePageFormModifier } from \"./abstractions.js\";\n\n/**\n * Creates a mock use case + repository pair for the AddLanguageModifier.\n * Languages are pre-populated (simulating a completed fetch).\n */\nfunction createLanguageMocks(languages: LanguageDto[]) {\n const repository = {\n execute: async () => languages,\n getLanguages: () => languages\n };\n const useCase = {\n execute: async () => languages\n };\n return { useCase, repository };\n}\n\n/**\n * Creates the same base form that CreatePagePresenter builds,\n * without requiring DI or the page type cache.\n */\nfunction createBaseForm(config?: Partial<IFormModelConfig>) {\n return new FormModelImpl({\n fields: fields => ({\n title: fields\n .text()\n .label(\"Title\")\n .required(\"Title is required\")\n .onBlur((value, f) => {\n const currentPath = f.field(\"path\").getValue();\n if (currentPath) {\n return;\n }\n f.field(\"path\").setValue(PagePath.fromTitle(String(value)).toString());\n }),\n path: fields\n .text()\n .label(\"Path\")\n .required(\"Path is required\")\n .beforeChange(value => {\n return PagePath.create(String(value)).slugify().toString();\n }),\n pageType: fields.text().hidden().defaultValue(\"staticPage\")\n }),\n layout: layout => [layout.row(\"title\"), layout.row(\"path\")],\n ...config\n });\n}\n\n/**\n * Helper: set title and blur to trigger path generation.\n */\nfunction setTitleAndBlur(form: IFormModel, value: string) {\n form.field(\"title\").setValue(value);\n form.field(\"title\").blur();\n}\n\ndescribe(\"CreatePage base form\", () => {\n it(\"should create a form with title, path, and hidden pageType\", () => {\n const form = createBaseForm();\n expect(form.field(\"title\")).toBeDefined();\n expect(form.field(\"path\")).toBeDefined();\n expect(form.field(\"pageType\")).toBeDefined();\n });\n\n it(\"should include pageType in getData but not in layout\", () => {\n const form = createBaseForm();\n const data = form.getData();\n expect(data.pageType).toBe(\"staticPage\");\n\n const fieldNames = form.vm.layout\n .filter((n): n is IRowNodeVM => n.type === \"row\")\n .flatMap(row => row.fields.map(f => f.name));\n expect(fieldNames).not.toContain(\"pageType\");\n });\n\n it(\"should auto-generate path from title on blur\", () => {\n const form = createBaseForm();\n setTitleAndBlur(form, \"Hello World\");\n expect(form.field(\"path\").getValue()).toBe(\"/hello-world\");\n });\n\n it(\"should not auto-generate path on setValue alone (before blur)\", () => {\n const form = createBaseForm();\n form.field(\"title\").setValue(\"Hello World\");\n expect(form.field(\"path\").getValue()).toBeNull();\n });\n\n it(\"should not overwrite path when manually edited\", () => {\n const form = createBaseForm();\n setTitleAndBlur(form, \"Hello World\");\n form.field(\"path\").setValue(\"/custom-path\");\n setTitleAndBlur(form, \"New Title\");\n expect(form.field(\"path\").getValue()).toBe(\"/custom-path\");\n });\n\n it(\"should return data on valid submit\", async () => {\n const form = createBaseForm();\n form.field(\"title\").setValue(\"My Page\");\n form.field(\"path\").setValue(\"/my-page\");\n\n const result = await form.submit();\n expect(result).toEqual({\n title: \"My Page\",\n path: \"/my-page\",\n pageType: \"staticPage\"\n });\n });\n\n it(\"should return false on invalid submit\", async () => {\n const form = createBaseForm();\n const result = await form.submit();\n expect(result).toBe(false);\n expect(form.errors.length).toBeGreaterThan(0);\n });\n});\n\ndescribe(\"PageType + Modifier 3-layer architecture\", () => {\n /**\n * Simulates the 3-layer build order used by CreatePagePresenter:\n * 1. Base form (title, path, pageType)\n * 2. Page type modify\n * 3. Cross-cutting modifiers\n */\n function buildForm(pageType: IPageType, modifiers: ICreatePageFormModifier[] = []): IFormModel {\n const form = createBaseForm();\n pageType.modifyForm?.(form);\n for (const modifier of modifiers) {\n modifier.modifyForm(form);\n }\n return form;\n }\n\n const staticPageType: IPageType = {\n name: \"static\",\n label: \"Static Page\",\n modifyForm() {\n // no-op\n }\n };\n\n const productPageType: IPageType = {\n name: \"product\",\n label: \"Product Page\",\n modifyForm(form) {\n form.fields(fields => ({\n product: fields\n .select()\n .label(\"Product\")\n .required(\"Product is required\")\n .options([\n { label: \"Shoes\", value: \"shoes\" },\n { label: \"Hats\", value: \"hats\" }\n ])\n }));\n form.field(\"title\").setDisabled(true);\n form.field(\"path\").setDisabled(true);\n form.layout(layout => [layout.row(\"product\").before(\"title\")]);\n }\n };\n\n it(\"should leave base form unchanged for static page type\", () => {\n const form = buildForm(staticPageType);\n const fieldNames = form.vm.layout\n .filter((n): n is IRowNodeVM => n.type === \"row\")\n .flatMap(row => row.fields.map(f => f.name));\n expect(fieldNames).toEqual([\"title\", \"path\"]);\n });\n\n it(\"should add product field and disable title/path for product page type\", () => {\n const form = buildForm(productPageType);\n const fieldNames = form.vm.layout\n .filter((n): n is IRowNodeVM => n.type === \"row\")\n .flatMap(row => row.fields.map(f => f.name));\n expect(fieldNames).toEqual([\"product\", \"title\", \"path\"]);\n\n expect(form.field(\"title\").vm.disabled).toBe(true);\n expect(form.field(\"path\").vm.disabled).toBe(true);\n });\n\n it(\"should include product in getData\", () => {\n const form = buildForm(productPageType);\n form.field(\"product\").setValue(\"shoes\");\n const data = form.getData();\n expect(data.product).toBe(\"shoes\");\n });\n\n it(\"should apply cross-cutting modifier after page type\", () => {\n const langs: LanguageDto[] = [\n { id: \"en\", code: \"en\", name: \"English\", isDefault: true },\n { id: \"de\", code: \"de\", name: \"German\" }\n ];\n const { useCase, repository } = createLanguageMocks(langs);\n const languageModifier = new AddLanguageModifier(useCase, repository);\n\n const form = buildForm(productPageType, [languageModifier]);\n const fieldNames = form.vm.layout\n .filter((n): n is IRowNodeVM => n.type === \"row\")\n .flatMap(row => row.fields.map(f => f.name));\n\n // language before title (from modifier), product before title (from page type)\n expect(fieldNames).toEqual([\"product\", \"language\", \"title\", \"path\"]);\n });\n\n it(\"should apply cross-cutting modifier to static page type too\", () => {\n const langs: LanguageDto[] = [\n { id: \"en\", code: \"en\", name: \"English\", isDefault: true },\n { id: \"de\", code: \"de\", name: \"German\" }\n ];\n const { useCase, repository } = createLanguageMocks(langs);\n const languageModifier = new AddLanguageModifier(useCase, repository);\n\n const form = buildForm(staticPageType, [languageModifier]);\n const fieldNames = form.vm.layout\n .filter((n): n is IRowNodeVM => n.type === \"row\")\n .flatMap(row => row.fields.map(f => f.name));\n\n expect(fieldNames).toEqual([\"language\", \"title\", \"path\"]);\n });\n});\n\ndescribe(\"Form rebuild on page type switch\", () => {\n const staticPageType: IPageType = {\n name: \"static\",\n label: \"Static Page\",\n modifyForm() {\n // no-op\n }\n };\n\n const productPageType: IPageType = {\n name: \"product\",\n label: \"Product Page\",\n modifyForm(form) {\n form.fields(fields => ({\n product: fields\n .select()\n .label(\"Product\")\n .required(\"Product is required\")\n .options([\n { label: \"Shoes\", value: \"shoes\" },\n { label: \"Hats\", value: \"hats\" }\n ])\n }));\n form.field(\"title\").setDisabled(true);\n form.field(\"path\").setDisabled(true);\n form.layout(layout => [layout.row(\"product\").before(\"title\")]);\n }\n };\n\n const pageTypes: Record<string, IPageType> = {\n static: staticPageType,\n product: productPageType\n };\n\n /**\n * Simulates the presenter's changePageType: getData → rebuild → setData.\n * The real presenter sets `this.selectedPageType` before `buildForm()`,\n * which sets the hidden field's defaultValue. Here we just rebuild and restore.\n */\n function changePageType(\n currentForm: IFormModel,\n newType: string,\n modifiers: ICreatePageFormModifier[] = []\n ): IFormModel {\n const previousData = currentForm.getData();\n const form = createBaseForm();\n pageTypes[newType].modifyForm?.(form);\n for (const modifier of modifiers) {\n modifier.modifyForm(form);\n }\n form.setData(previousData);\n return form;\n }\n\n it(\"should preserve common field values when switching page types\", () => {\n // Start with static page, fill in title and path.\n const staticForm = createBaseForm();\n staticPageType.modifyForm?.(staticForm);\n staticForm.field(\"title\").setValue(\"My Page\");\n staticForm.field(\"path\").setValue(\"/my-page\");\n\n // Switch to product page.\n const productForm = changePageType(staticForm, \"product\");\n\n expect(productForm.field(\"title\").getValue()).toBe(\"My Page\");\n expect(productForm.field(\"path\").getValue()).toBe(\"/my-page\");\n });\n\n it(\"should drop page-type-specific fields on switch\", () => {\n // Start with product page, select a product.\n const productForm = createBaseForm();\n productPageType.modifyForm?.(productForm);\n productForm.field(\"product\").setValue(\"shoes\");\n\n // Switch to static page — product field should not exist.\n const staticForm = changePageType(productForm, \"static\");\n\n const fieldNames = staticForm.vm.layout\n .filter((n): n is IRowNodeVM => n.type === \"row\")\n .flatMap(row => row.fields.map(f => f.name));\n expect(fieldNames).toEqual([\"title\", \"path\"]);\n expect(staticForm.getData()).not.toHaveProperty(\"product\");\n });\n\n it(\"should preserve cross-cutting modifier values across page type switch\", () => {\n const langs: LanguageDto[] = [\n { id: \"en\", code: \"en\", name: \"English\", isDefault: true },\n { id: \"de\", code: \"de\", name: \"German\" }\n ];\n const { useCase, repository } = createLanguageMocks(langs);\n const languageModifier = new AddLanguageModifier(useCase, repository);\n\n // Start with static page + language modifier.\n const staticForm = createBaseForm();\n staticPageType.modifyForm?.(staticForm);\n languageModifier.modifyForm(staticForm);\n staticForm.field(\"title\").setValue(\"Demo\");\n // Language is auto-assigned \"en\" by the modifier reaction.\n\n const langValue = staticForm.field(\"language\").getValue();\n expect(langValue).toBe(\"en\");\n\n // Switch to product page with same modifier.\n const productForm = changePageType(staticForm, \"product\", [languageModifier]);\n\n expect(productForm.field(\"language\").getValue()).toBe(\"en\");\n expect(productForm.field(\"title\").getValue()).toBe(\"Demo\");\n });\n\n it(\"should preserve hidden field values across rebuild\", () => {\n const staticForm = createBaseForm();\n staticPageType.modifyForm?.(staticForm);\n expect(staticForm.getData().pageType).toBe(\"staticPage\");\n\n // Switch to product — setData restores pageType from previous form.\n const productForm = changePageType(staticForm, \"product\");\n\n // The hidden pageType field is preserved via setData.\n // In the real presenter, buildForm() sets defaultValue to the new type,\n // so the hidden field gets the correct value regardless.\n expect(productForm.field(\"pageType\").getValue()).toBe(\"staticPage\");\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["describe","it","expect","Container","FormModelFeature","FormModelFactory","AddLanguageModifier","PagePath","createLanguageMocks","languages","repository","execute","getLanguages","useCase","createBaseForm","config","container","register","factory","resolve","create","fields","title","text","label","required","onBlur","value","f","currentPath","field","getValue","setValue","fromTitle","String","toString","path","beforeChange","slugify","pageType","hidden","defaultValue","layout","row","setTitleAndBlur","form","blur","toBeDefined","data","getData","toBe","fieldNames","vm","filter","n","type","flatMap","map","name","not","toContain","toBeNull","result","submit","toEqual","errors","length","toBeGreaterThan","buildForm","modifiers","modifyForm","modifier","staticPageType","productPageType","product","options","setDisabled","before","disabled","langs","id","code","isDefault","languageModifier","pageTypes","static","changePageType","currentForm","newType","previousData","setData","staticForm","productForm","toHaveProperty","langValue"],"sources":["CreatePage.test.ts"],"sourcesContent":["import { describe, it, expect } from \"vitest\";\nimport { Container } from \"@webiny/di\";\nimport { FormModelFeature } from \"@webiny/app-admin/features/formModel/feature.js\";\nimport { FormModelFactory } from \"@webiny/app-admin/features/formModel/abstractions.js\";\nimport type { IFormModel, IFormModelConfig, IRowNodeVM } from \"@webiny/app-admin\";\nimport type { LanguageDto } from \"@webiny/languages/admin/features/listLanguages/abstractions.js\";\nimport { AddLanguageModifier } from \"./AddLanguageModifier.js\";\nimport { PagePath } from \"~/shared/PagePath.js\";\nimport type { IPageType, ICreatePageFormModifier } from \"./abstractions.js\";\n\nfunction createLanguageMocks(languages: LanguageDto[]) {\n const repository = {\n execute: async () => languages,\n getLanguages: () => languages\n };\n const useCase = {\n execute: async () => languages\n };\n return { useCase, repository };\n}\n\nfunction createBaseForm(config?: Partial<IFormModelConfig>) {\n const container = new Container();\n FormModelFeature.register(container);\n const factory = container.resolve(FormModelFactory);\n\n return factory.create({\n fields: fields => ({\n title: fields\n .text()\n .label(\"Title\")\n .required(\"Title is required\")\n .onBlur((value, f) => {\n const currentPath = f.field(\"path\").getValue();\n if (currentPath) {\n return;\n }\n f.field(\"path\").setValue(PagePath.fromTitle(String(value)).toString());\n }),\n path: fields\n .text()\n .label(\"Path\")\n .required(\"Path is required\")\n .beforeChange(value => {\n return PagePath.create(String(value)).slugify().toString();\n }),\n pageType: fields.text().hidden().defaultValue(\"staticPage\")\n }),\n layout: layout => [layout.row(\"title\"), layout.row(\"path\")],\n ...config\n });\n}\n\n/**\n * Helper: set title and blur to trigger path generation.\n */\nfunction setTitleAndBlur(form: IFormModel, value: string) {\n form.field(\"title\").setValue(value);\n form.field(\"title\").blur();\n}\n\ndescribe(\"CreatePage base form\", () => {\n it(\"should create a form with title, path, and hidden pageType\", () => {\n const form = createBaseForm();\n expect(form.field(\"title\")).toBeDefined();\n expect(form.field(\"path\")).toBeDefined();\n expect(form.field(\"pageType\")).toBeDefined();\n });\n\n it(\"should include pageType in getData but not in layout\", () => {\n const form = createBaseForm();\n const data = form.getData();\n expect(data.pageType).toBe(\"staticPage\");\n\n const fieldNames = form.vm.layout\n .filter((n): n is IRowNodeVM => n.type === \"row\")\n .flatMap(row => row.fields.map(f => f.name));\n expect(fieldNames).not.toContain(\"pageType\");\n });\n\n it(\"should auto-generate path from title on blur\", () => {\n const form = createBaseForm();\n setTitleAndBlur(form, \"Hello World\");\n expect(form.field(\"path\").getValue()).toBe(\"/hello-world\");\n });\n\n it(\"should not auto-generate path on setValue alone (before blur)\", () => {\n const form = createBaseForm();\n form.field(\"title\").setValue(\"Hello World\");\n expect(form.field(\"path\").getValue()).toBeNull();\n });\n\n it(\"should not overwrite path when manually edited\", () => {\n const form = createBaseForm();\n setTitleAndBlur(form, \"Hello World\");\n form.field(\"path\").setValue(\"/custom-path\");\n setTitleAndBlur(form, \"New Title\");\n expect(form.field(\"path\").getValue()).toBe(\"/custom-path\");\n });\n\n it(\"should return data on valid submit\", async () => {\n const form = createBaseForm();\n form.field(\"title\").setValue(\"My Page\");\n form.field(\"path\").setValue(\"/my-page\");\n\n const result = await form.submit();\n expect(result).toEqual({\n title: \"My Page\",\n path: \"/my-page\",\n pageType: \"staticPage\"\n });\n });\n\n it(\"should return false on invalid submit\", async () => {\n const form = createBaseForm();\n const result = await form.submit();\n expect(result).toBe(false);\n expect(form.errors.length).toBeGreaterThan(0);\n });\n});\n\ndescribe(\"PageType + Modifier 3-layer architecture\", () => {\n /**\n * Simulates the 3-layer build order used by CreatePagePresenter:\n * 1. Base form (title, path, pageType)\n * 2. Page type modify\n * 3. Cross-cutting modifiers\n */\n function buildForm(pageType: IPageType, modifiers: ICreatePageFormModifier[] = []): IFormModel {\n const form = createBaseForm();\n pageType.modifyForm?.(form);\n for (const modifier of modifiers) {\n modifier.modifyForm(form);\n }\n return form;\n }\n\n const staticPageType: IPageType = {\n name: \"static\",\n label: \"Static Page\",\n modifyForm() {\n // no-op\n }\n };\n\n const productPageType: IPageType = {\n name: \"product\",\n label: \"Product Page\",\n modifyForm(form) {\n form.fields(fields => ({\n product: fields\n .text()\n .label(\"Product\")\n .required(\"Product is required\")\n .options([\n { label: \"Shoes\", value: \"shoes\" },\n { label: \"Hats\", value: \"hats\" }\n ])\n }));\n form.field(\"title\").setDisabled(true);\n form.field(\"path\").setDisabled(true);\n form.layout(layout => [layout.row(\"product\").before(\"title\")]);\n }\n };\n\n it(\"should leave base form unchanged for static page type\", () => {\n const form = buildForm(staticPageType);\n const fieldNames = form.vm.layout\n .filter((n): n is IRowNodeVM => n.type === \"row\")\n .flatMap(row => row.fields.map(f => f.name));\n expect(fieldNames).toEqual([\"title\", \"path\"]);\n });\n\n it(\"should add product field and disable title/path for product page type\", () => {\n const form = buildForm(productPageType);\n const fieldNames = form.vm.layout\n .filter((n): n is IRowNodeVM => n.type === \"row\")\n .flatMap(row => row.fields.map(f => f.name));\n expect(fieldNames).toEqual([\"product\", \"title\", \"path\"]);\n\n expect(form.field(\"title\").vm.disabled).toBe(true);\n expect(form.field(\"path\").vm.disabled).toBe(true);\n });\n\n it(\"should include product in getData\", () => {\n const form = buildForm(productPageType);\n form.field(\"product\").setValue(\"shoes\");\n const data = form.getData();\n expect(data.product).toBe(\"shoes\");\n });\n\n it(\"should apply cross-cutting modifier after page type\", () => {\n const langs: LanguageDto[] = [\n { id: \"en\", code: \"en\", name: \"English\", isDefault: true },\n { id: \"de\", code: \"de\", name: \"German\" }\n ];\n const { useCase, repository } = createLanguageMocks(langs);\n const languageModifier = new AddLanguageModifier(useCase, repository);\n\n const form = buildForm(productPageType, [languageModifier]);\n const fieldNames = form.vm.layout\n .filter((n): n is IRowNodeVM => n.type === \"row\")\n .flatMap(row => row.fields.map(f => f.name));\n\n // language before title (from modifier), product before title (from page type)\n expect(fieldNames).toEqual([\"product\", \"language\", \"title\", \"path\"]);\n });\n\n it(\"should apply cross-cutting modifier to static page type too\", () => {\n const langs: LanguageDto[] = [\n { id: \"en\", code: \"en\", name: \"English\", isDefault: true },\n { id: \"de\", code: \"de\", name: \"German\" }\n ];\n const { useCase, repository } = createLanguageMocks(langs);\n const languageModifier = new AddLanguageModifier(useCase, repository);\n\n const form = buildForm(staticPageType, [languageModifier]);\n const fieldNames = form.vm.layout\n .filter((n): n is IRowNodeVM => n.type === \"row\")\n .flatMap(row => row.fields.map(f => f.name));\n\n expect(fieldNames).toEqual([\"language\", \"title\", \"path\"]);\n });\n});\n\ndescribe(\"Form rebuild on page type switch\", () => {\n const staticPageType: IPageType = {\n name: \"static\",\n label: \"Static Page\",\n modifyForm() {\n // no-op\n }\n };\n\n const productPageType: IPageType = {\n name: \"product\",\n label: \"Product Page\",\n modifyForm(form) {\n form.fields(fields => ({\n product: fields\n .text()\n .label(\"Product\")\n .required(\"Product is required\")\n .options([\n { label: \"Shoes\", value: \"shoes\" },\n { label: \"Hats\", value: \"hats\" }\n ])\n }));\n form.field(\"title\").setDisabled(true);\n form.field(\"path\").setDisabled(true);\n form.layout(layout => [layout.row(\"product\").before(\"title\")]);\n }\n };\n\n const pageTypes: Record<string, IPageType> = {\n static: staticPageType,\n product: productPageType\n };\n\n /**\n * Simulates the presenter's changePageType: getData → rebuild → setData.\n * The real presenter sets `this.selectedPageType` before `buildForm()`,\n * which sets the hidden field's defaultValue. Here we just rebuild and restore.\n */\n function changePageType(\n currentForm: IFormModel,\n newType: string,\n modifiers: ICreatePageFormModifier[] = []\n ): IFormModel {\n const previousData = currentForm.getData();\n const form = createBaseForm();\n pageTypes[newType].modifyForm?.(form);\n for (const modifier of modifiers) {\n modifier.modifyForm(form);\n }\n form.setData(previousData);\n return form;\n }\n\n it(\"should preserve common field values when switching page types\", () => {\n // Start with static page, fill in title and path.\n const staticForm = createBaseForm();\n staticPageType.modifyForm?.(staticForm);\n staticForm.field(\"title\").setValue(\"My Page\");\n staticForm.field(\"path\").setValue(\"/my-page\");\n\n // Switch to product page.\n const productForm = changePageType(staticForm, \"product\");\n\n expect(productForm.field(\"title\").getValue()).toBe(\"My Page\");\n expect(productForm.field(\"path\").getValue()).toBe(\"/my-page\");\n });\n\n it(\"should drop page-type-specific fields on switch\", () => {\n // Start with product page, select a product.\n const productForm = createBaseForm();\n productPageType.modifyForm?.(productForm);\n productForm.field(\"product\").setValue(\"shoes\");\n\n // Switch to static page — product field should not exist.\n const staticForm = changePageType(productForm, \"static\");\n\n const fieldNames = staticForm.vm.layout\n .filter((n): n is IRowNodeVM => n.type === \"row\")\n .flatMap(row => row.fields.map(f => f.name));\n expect(fieldNames).toEqual([\"title\", \"path\"]);\n expect(staticForm.getData()).not.toHaveProperty(\"product\");\n });\n\n it(\"should preserve cross-cutting modifier values across page type switch\", () => {\n const langs: LanguageDto[] = [\n { id: \"en\", code: \"en\", name: \"English\", isDefault: true },\n { id: \"de\", code: \"de\", name: \"German\" }\n ];\n const { useCase, repository } = createLanguageMocks(langs);\n const languageModifier = new AddLanguageModifier(useCase, repository);\n\n // Start with static page + language modifier.\n const staticForm = createBaseForm();\n staticPageType.modifyForm?.(staticForm);\n languageModifier.modifyForm(staticForm);\n staticForm.field(\"title\").setValue(\"Demo\");\n // Language is auto-assigned \"en\" by the modifier reaction.\n\n const langValue = staticForm.field(\"language\").getValue();\n expect(langValue).toBe(\"en\");\n\n // Switch to product page with same modifier.\n const productForm = changePageType(staticForm, \"product\", [languageModifier]);\n\n expect(productForm.field(\"language\").getValue()).toBe(\"en\");\n expect(productForm.field(\"title\").getValue()).toBe(\"Demo\");\n });\n\n it(\"should preserve hidden field values across rebuild\", () => {\n const staticForm = createBaseForm();\n staticPageType.modifyForm?.(staticForm);\n expect(staticForm.getData().pageType).toBe(\"staticPage\");\n\n // Switch to product — setData restores pageType from previous form.\n const productForm = changePageType(staticForm, \"product\");\n\n // The hidden pageType field is preserved via setData.\n // In the real presenter, buildForm() sets defaultValue to the new type,\n // so the hidden field gets the correct value regardless.\n expect(productForm.field(\"pageType\").getValue()).toBe(\"staticPage\");\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -95,7 +95,7 @@ class CreatePagePresenterImpl {
|
|
|
95
95
|
const form = this.factory.create({
|
|
96
96
|
fields: fields => ({
|
|
97
97
|
title: fields.text().label("Title").required("Title is required").onBlur((value, form) => {
|
|
98
|
-
const currentPath = form.field("path").getValue();
|
|
98
|
+
const currentPath = form.field("path").as("text").getValue() ?? "";
|
|
99
99
|
if (!PagePath.create(currentPath).isEmpty()) {
|
|
100
100
|
return;
|
|
101
101
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["makeAutoObservable","computed","runInAction","FormModelFactory","CreatePageUseCase","CreatePagePresenter","PresenterAbstraction","PageTypeProvider","CreatePageFormModifier","PagePath","CreatePagePresenterImpl","selectedPageType","folderId","loading","constructor","factory","pageTypeProvider","modifiers","createPage","pageTypes","getPageTypes","form","buildForm","vm","autoBind","init","staticPage","find","p","name","changePageType","pageType","previousData","getData","setData","submit","data","input","location","String","properties","title","path","metadata","documentType","elements","root","type","id","component","pt","mapFromForm","modifier","execute","create","fields","text","label","required","onBlur","value","currentPath","field","getValue","isEmpty","newPath","fromTitle","toString","setValue","beforeChange","slugify","hidden","defaultValue","layout","row","modifyForm","createImplementation","implementation","dependencies","multiple"],"sources":["CreatePagePresenter.ts"],"sourcesContent":["import { makeAutoObservable, computed, runInAction } from \"mobx\";\nimport type { IFormModel, IFormModelFactory } from \"@webiny/app-admin\";\nimport { FormModelFactory } from \"@webiny/app-admin\";\nimport { CreatePageUseCase } from \"~/features/pages/createPage/abstractions.js\";\nimport type { CreatePageParams } from \"~/features/pages/createPage/abstractions.js\";\nimport {\n CreatePagePresenter as PresenterAbstraction,\n PageTypeProvider,\n CreatePageFormModifier\n} from \"./abstractions.js\";\nimport { PagePath } from \"~/shared/PagePath.js\";\n\nclass CreatePagePresenterImpl implements PresenterAbstraction.Interface {\n private readonly pageTypes;\n private form: IFormModel;\n private selectedPageType = \"\";\n private folderId = \"\";\n private loading = false;\n\n constructor(\n private factory: IFormModelFactory,\n pageTypeProvider: PageTypeProvider.Interface,\n private modifiers: CreatePageFormModifier.Interface[],\n private createPage: CreatePageUseCase.Interface\n ) {\n this.pageTypes = pageTypeProvider.getPageTypes();\n this.form = this.buildForm();\n\n makeAutoObservable(this, { vm: computed }, { autoBind: true });\n }\n\n get vm(): PresenterAbstraction.ViewModel {\n return {\n form: this.form.vm,\n pageTypes: this.pageTypes,\n selectedPageType: this.selectedPageType,\n loading: this.loading\n };\n }\n\n init(folderId: string): void {\n this.folderId = folderId;\n const staticPage = this.pageTypes.find(p => p.name === \"static\");\n this.selectedPageType = staticPage ? \"static\" : this.pageTypes[0]?.name;\n this.form = this.buildForm();\n }\n\n changePageType(pageType: string): void {\n const previousData = this.form.getData();\n this.selectedPageType = pageType;\n this.form = this.buildForm();\n this.form.setData(previousData);\n }\n\n async submit() {\n const data = await this.form.submit();\n if (!data) {\n return null;\n }\n\n const input: CreatePageParams = {\n location: {\n folderId: String(data.folderId)\n },\n properties: {\n title: data.title,\n path: data.path\n },\n metadata: {\n documentType: \"page\",\n pageType: data.pageType\n },\n elements: {\n root: {\n type: \"Webiny/Element\",\n id: \"root\",\n component: {\n name: \"Webiny/Root\"\n }\n }\n }\n };\n\n // Let the active page type map its form data.\n const pageType = this.pageTypes.find(pt => pt.name === this.selectedPageType);\n if (pageType?.mapFromForm) {\n pageType.mapFromForm(data, input);\n }\n\n // Let cross-cutting modifiers map their form data.\n for (const modifier of this.modifiers) {\n if (modifier.mapFromForm) {\n modifier.mapFromForm(data, input);\n }\n }\n\n runInAction(() => {\n this.loading = true;\n });\n try {\n return await this.createPage.execute(input);\n } finally {\n runInAction(() => {\n this.loading = false;\n });\n }\n }\n\n private buildForm(): IFormModel {\n // Layer 1: Base form — always present regardless of page type\n const form = this.factory.create({\n fields: fields => ({\n title: fields\n .text()\n .label(\"Title\")\n .required(\"Title is required\")\n .onBlur((value, form) => {\n const currentPath = form.field(\"path\").getValue<string>();\n if (!PagePath.create(currentPath).isEmpty()) {\n return;\n }\n const newPath = PagePath.fromTitle(String(value)).toString();\n form.field(\"path\").setValue(newPath);\n }),\n path: fields\n .text()\n .label(\"Path\")\n .required(\"Path is required\")\n .beforeChange(value => {\n return PagePath.create(String(value)).slugify().toString();\n }),\n pageType: fields\n .text()\n .hidden()\n .defaultValue(this.selectedPageType || \"static\"),\n folderId: fields.text().hidden().defaultValue(this.folderId)\n }),\n layout: layout => [layout.row(\"title\"), layout.row(\"path\")]\n });\n\n // Layer 2: Apply the selected page type's modifications\n const pageType = this.pageTypes.find(pt => pt.name === this.selectedPageType);\n if (pageType && typeof pageType.modifyForm === \"function\") {\n pageType.modifyForm(form);\n }\n\n // Layer 3: Apply cross-cutting modifiers (Language, etc.)\n for (const modifier of this.modifiers) {\n modifier.modifyForm(form);\n }\n\n return form;\n }\n}\n\nexport const CreatePagePresenter = PresenterAbstraction.createImplementation({\n implementation: CreatePagePresenterImpl,\n dependencies: [\n FormModelFactory,\n PageTypeProvider,\n [CreatePageFormModifier, { multiple: true }],\n CreatePageUseCase\n ]\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["makeAutoObservable","computed","runInAction","FormModelFactory","CreatePageUseCase","CreatePagePresenter","PresenterAbstraction","PageTypeProvider","CreatePageFormModifier","PagePath","CreatePagePresenterImpl","selectedPageType","folderId","loading","constructor","factory","pageTypeProvider","modifiers","createPage","pageTypes","getPageTypes","form","buildForm","vm","autoBind","init","staticPage","find","p","name","changePageType","pageType","previousData","getData","setData","submit","data","input","location","String","properties","title","path","metadata","documentType","elements","root","type","id","component","pt","mapFromForm","modifier","execute","create","fields","text","label","required","onBlur","value","currentPath","field","as","getValue","isEmpty","newPath","fromTitle","toString","setValue","beforeChange","slugify","hidden","defaultValue","layout","row","modifyForm","createImplementation","implementation","dependencies","multiple"],"sources":["CreatePagePresenter.ts"],"sourcesContent":["import { makeAutoObservable, computed, runInAction } from \"mobx\";\nimport type { IFormModel, IFormModelFactory } from \"@webiny/app-admin\";\nimport { FormModelFactory } from \"@webiny/app-admin\";\nimport { CreatePageUseCase } from \"~/features/pages/createPage/abstractions.js\";\nimport type { CreatePageParams } from \"~/features/pages/createPage/abstractions.js\";\nimport {\n CreatePagePresenter as PresenterAbstraction,\n PageTypeProvider,\n CreatePageFormModifier\n} from \"./abstractions.js\";\nimport { PagePath } from \"~/shared/PagePath.js\";\n\nclass CreatePagePresenterImpl implements PresenterAbstraction.Interface {\n private readonly pageTypes;\n private form: IFormModel;\n private selectedPageType = \"\";\n private folderId = \"\";\n private loading = false;\n\n constructor(\n private factory: IFormModelFactory,\n pageTypeProvider: PageTypeProvider.Interface,\n private modifiers: CreatePageFormModifier.Interface[],\n private createPage: CreatePageUseCase.Interface\n ) {\n this.pageTypes = pageTypeProvider.getPageTypes();\n this.form = this.buildForm();\n\n makeAutoObservable(this, { vm: computed }, { autoBind: true });\n }\n\n get vm(): PresenterAbstraction.ViewModel {\n return {\n form: this.form.vm,\n pageTypes: this.pageTypes,\n selectedPageType: this.selectedPageType,\n loading: this.loading\n };\n }\n\n init(folderId: string): void {\n this.folderId = folderId;\n const staticPage = this.pageTypes.find(p => p.name === \"static\");\n this.selectedPageType = staticPage ? \"static\" : this.pageTypes[0]?.name;\n this.form = this.buildForm();\n }\n\n changePageType(pageType: string): void {\n const previousData = this.form.getData();\n this.selectedPageType = pageType;\n this.form = this.buildForm();\n this.form.setData(previousData);\n }\n\n async submit() {\n const data = await this.form.submit();\n if (!data) {\n return null;\n }\n\n const input: CreatePageParams = {\n location: {\n folderId: String(data.folderId)\n },\n properties: {\n title: data.title,\n path: data.path\n },\n metadata: {\n documentType: \"page\",\n pageType: data.pageType\n },\n elements: {\n root: {\n type: \"Webiny/Element\",\n id: \"root\",\n component: {\n name: \"Webiny/Root\"\n }\n }\n }\n };\n\n // Let the active page type map its form data.\n const pageType = this.pageTypes.find(pt => pt.name === this.selectedPageType);\n if (pageType?.mapFromForm) {\n pageType.mapFromForm(data, input);\n }\n\n // Let cross-cutting modifiers map their form data.\n for (const modifier of this.modifiers) {\n if (modifier.mapFromForm) {\n modifier.mapFromForm(data, input);\n }\n }\n\n runInAction(() => {\n this.loading = true;\n });\n try {\n return await this.createPage.execute(input);\n } finally {\n runInAction(() => {\n this.loading = false;\n });\n }\n }\n\n private buildForm(): IFormModel {\n // Layer 1: Base form — always present regardless of page type\n const form = this.factory.create({\n fields: fields => ({\n title: fields\n .text()\n .label(\"Title\")\n .required(\"Title is required\")\n .onBlur((value, form) => {\n const currentPath = form.field(\"path\").as(\"text\").getValue() ?? \"\";\n if (!PagePath.create(currentPath).isEmpty()) {\n return;\n }\n const newPath = PagePath.fromTitle(String(value)).toString();\n form.field(\"path\").setValue(newPath);\n }),\n path: fields\n .text()\n .label(\"Path\")\n .required(\"Path is required\")\n .beforeChange(value => {\n return PagePath.create(String(value)).slugify().toString();\n }),\n pageType: fields\n .text()\n .hidden()\n .defaultValue(this.selectedPageType || \"static\"),\n folderId: fields.text().hidden().defaultValue(this.folderId)\n }),\n layout: layout => [layout.row(\"title\"), layout.row(\"path\")]\n });\n\n // Layer 2: Apply the selected page type's modifications\n const pageType = this.pageTypes.find(pt => pt.name === this.selectedPageType);\n if (pageType && typeof pageType.modifyForm === \"function\") {\n pageType.modifyForm(form);\n }\n\n // Layer 3: Apply cross-cutting modifiers (Language, etc.)\n for (const modifier of this.modifiers) {\n modifier.modifyForm(form);\n }\n\n return form;\n }\n}\n\nexport const CreatePagePresenter = PresenterAbstraction.createImplementation({\n implementation: CreatePagePresenterImpl,\n dependencies: [\n FormModelFactory,\n PageTypeProvider,\n [CreatePageFormModifier, { multiple: true }],\n CreatePageUseCase\n ]\n});\n"],"mappings":"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","ignoreList":[]}
|
package/shared/PagePath.js
CHANGED
package/shared/PagePath.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["slugify","PagePath","constructor","path","create","fromTitle","title","slug","replacement","lower","remove","trim","str","replace","toLowerCase","setLanguageCode","code","supportedCodes","normalized","ensureLeadingSlash","segments","split","filter","Boolean","firstSegment","includes","join","stripLanguageCode","rest","slice","length","hasContent","stripped","toString","isEmpty","startsWith"],"sources":["PagePath.ts"],"sourcesContent":["import slugify from \"slugify\";\n\n/**\n * Value object for page path manipulation.\n * Handles slugification and language code prefixing.\n * Mirrors the API-side PagePath but tailored for admin form logic.\n */\nexport class PagePath {\n private readonly path: string;\n\n private constructor(path: string) {\n this.path = path;\n }\n\n static create(path: string): PagePath {\n return new PagePath(path);\n }\n\n static fromTitle(title: string): PagePath {\n const slug = slugify(title, {\n replacement: \"-\",\n lower: true,\n remove: /[*#?<>_{}
|
|
1
|
+
{"version":3,"names":["slugify","PagePath","constructor","path","create","fromTitle","title","slug","replacement","lower","remove","trim","str","replace","toLowerCase","setLanguageCode","code","supportedCodes","normalized","ensureLeadingSlash","segments","split","filter","Boolean","firstSegment","includes","join","stripLanguageCode","rest","slice","length","hasContent","stripped","toString","isEmpty","startsWith"],"sources":["PagePath.ts"],"sourcesContent":["import slugify from \"slugify\";\n\n/**\n * Value object for page path manipulation.\n * Handles slugification and language code prefixing.\n * Mirrors the API-side PagePath but tailored for admin form logic.\n */\nexport class PagePath {\n private readonly path: string;\n\n private constructor(path: string) {\n this.path = path;\n }\n\n static create(path: string): PagePath {\n return new PagePath(path);\n }\n\n static fromTitle(title: string): PagePath {\n const slug = slugify(title, {\n replacement: \"-\",\n lower: true,\n remove: /[*#?<>_{}[\\]+~.()'\"!:;@]/g,\n trim: false\n });\n return new PagePath(\"/\" + slug);\n }\n\n /**\n * Normalizes the path: ensures leading slash, lowercases, removes invalid characters.\n */\n slugify(): PagePath {\n if (this.path === \"\") {\n return new PagePath(\"\");\n }\n\n const str = this.path\n .replace(/^\\//, \"\")\n .toLowerCase()\n .replace(/[^a-z0-9/-]+/g, \"-\")\n .replace(/^-|-$/g, \"\");\n return new PagePath(\"/\" + str);\n }\n\n /**\n * Replaces or prepends a language code segment.\n * If the first path segment is a known language code, it gets replaced.\n * Otherwise the new code is prepended.\n */\n setLanguageCode(code: string, supportedCodes: string[]): PagePath {\n const normalized = this.ensureLeadingSlash();\n\n if (normalized === \"/\") {\n return new PagePath(\"/\" + code);\n }\n\n const segments = normalized.split(\"/\").filter(Boolean);\n const firstSegment = segments[0];\n\n if (supportedCodes.includes(firstSegment)) {\n segments[0] = code;\n return new PagePath(\"/\" + segments.join(\"/\"));\n }\n\n return new PagePath(\"/\" + code + normalized);\n }\n\n /**\n * Strips the language code prefix if the first segment is a known code.\n */\n stripLanguageCode(supportedCodes: string[]): PagePath {\n const normalized = this.ensureLeadingSlash();\n const segments = normalized.split(\"/\").filter(Boolean);\n const firstSegment = segments[0];\n\n if (firstSegment && supportedCodes.includes(firstSegment)) {\n const rest = segments.slice(1);\n return new PagePath(rest.length > 0 ? \"/\" + rest.join(\"/\") : \"/\");\n }\n\n return new PagePath(normalized);\n }\n\n /**\n * Returns true if this path has meaningful content beyond just \"/\" or a language prefix.\n */\n hasContent(supportedCodes: string[] = []): boolean {\n const stripped = this.stripLanguageCode(supportedCodes);\n return stripped.toString() !== \"/\" && stripped.toString() !== \"\";\n }\n\n isEmpty(): boolean {\n return !this.path || this.path === \"/\";\n }\n\n toString(): string {\n return this.path;\n }\n\n private ensureLeadingSlash(): string {\n return this.path.startsWith(\"/\") ? this.path : \"/\" + this.path;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["slugify","pagePathFromTitle","title","replacement","lower","remove","trim"],"sources":["pagePathFromTitle.ts"],"sourcesContent":["import slugify from \"slugify\";\n\nexport const pagePathFromTitle = (title: string = \"\") => {\n return slugify(title, {\n replacement: \"-\",\n lower: true,\n remove: /[
|
|
1
|
+
{"version":3,"names":["slugify","pagePathFromTitle","title","replacement","lower","remove","trim"],"sources":["pagePathFromTitle.ts"],"sourcesContent":["import slugify from \"slugify\";\n\nexport const pagePathFromTitle = (title: string = \"\") => {\n return slugify(title, {\n replacement: \"-\",\n lower: true,\n remove: /[*#?<>_{}[\\]+~.()'\"!:;@]/g,\n trim: false\n });\n};\n"],"mappings":"AAAA,OAAOA,OAAO,MAAM,SAAS;AAE7B,OAAO,MAAMC,iBAAiB,GAAGA,CAACC,KAAa,GAAG,EAAE,KAAK;EACrD,OAAOF,OAAO,CAACE,KAAK,EAAE;IAClBC,WAAW,EAAE,GAAG;IAChBC,KAAK,EAAE,IAAI;IACXC,MAAM,EAAE,2BAA2B;IACnCC,IAAI,EAAE;EACV,CAAC,CAAC;AACN,CAAC","ignoreList":[]}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
export interface GroupProps {
|
|
3
|
-
name: string;
|
|
4
|
-
title?: string;
|
|
5
|
-
description?: string;
|
|
6
|
-
icon?: React.ReactNode;
|
|
7
|
-
children?: React.ReactNode;
|
|
8
|
-
remove?: boolean;
|
|
9
|
-
replace?: string;
|
|
10
|
-
}
|
|
11
|
-
export declare const Dialog: () => React.JSX.Element;
|
|
12
|
-
export declare const Drawer: () => React.JSX.Element;
|
|
13
|
-
export declare const Group: ({ children, replace, remove, ...rest }: GroupProps) => React.JSX.Element;
|
|
14
|
-
export interface ElementProps {
|
|
15
|
-
name: string;
|
|
16
|
-
element?: JSX.Element;
|
|
17
|
-
after?: string;
|
|
18
|
-
before?: string;
|
|
19
|
-
remove?: boolean;
|
|
20
|
-
replace?: string;
|
|
21
|
-
}
|
|
22
|
-
export declare const Element: React.FC<ElementProps>;
|
|
23
|
-
export declare const PageSettings: {
|
|
24
|
-
Group: ({ children, replace, remove, ...rest }: GroupProps) => React.JSX.Element;
|
|
25
|
-
Element: React.FC<ElementProps>;
|
|
26
|
-
ViewMode: {
|
|
27
|
-
Dialog: () => React.JSX.Element;
|
|
28
|
-
Drawer: () => React.JSX.Element;
|
|
29
|
-
};
|
|
30
|
-
};
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { Property, useIdGenerator } from "@webiny/react-properties";
|
|
3
|
-
export const Dialog = () => {
|
|
4
|
-
return /*#__PURE__*/React.createElement(Property, {
|
|
5
|
-
id: "pageSettings",
|
|
6
|
-
name: "pageSettings"
|
|
7
|
-
}, /*#__PURE__*/React.createElement(Property, {
|
|
8
|
-
id: "pageSettings.viewMode",
|
|
9
|
-
name: "viewMode",
|
|
10
|
-
value: "dialog"
|
|
11
|
-
}));
|
|
12
|
-
};
|
|
13
|
-
export const Drawer = () => {
|
|
14
|
-
return /*#__PURE__*/React.createElement(Property, {
|
|
15
|
-
id: "pageSettings",
|
|
16
|
-
name: "pageSettings"
|
|
17
|
-
}, /*#__PURE__*/React.createElement(Property, {
|
|
18
|
-
id: "pageSettings.viewMode",
|
|
19
|
-
name: "viewMode",
|
|
20
|
-
value: "drawer"
|
|
21
|
-
}));
|
|
22
|
-
};
|
|
23
|
-
export const Group = ({
|
|
24
|
-
children,
|
|
25
|
-
replace,
|
|
26
|
-
remove = false,
|
|
27
|
-
...rest
|
|
28
|
-
}) => {
|
|
29
|
-
const props = rest;
|
|
30
|
-
const id = `group:${props.name}`;
|
|
31
|
-
const toReplace = replace !== undefined ? `group:${replace}` : undefined;
|
|
32
|
-
return /*#__PURE__*/React.createElement(Property, {
|
|
33
|
-
id: "pageSettings",
|
|
34
|
-
name: "pageSettings"
|
|
35
|
-
}, /*#__PURE__*/React.createElement(Property, {
|
|
36
|
-
id: id,
|
|
37
|
-
name: "groups",
|
|
38
|
-
array: true,
|
|
39
|
-
remove: remove,
|
|
40
|
-
replace: toReplace
|
|
41
|
-
}, Object.keys(props).map(name => /*#__PURE__*/React.createElement(Property, {
|
|
42
|
-
key: name,
|
|
43
|
-
id: `group:${props.name}:${name}`,
|
|
44
|
-
name: name,
|
|
45
|
-
value: props[name]
|
|
46
|
-
})), children));
|
|
47
|
-
};
|
|
48
|
-
export const Element = ({
|
|
49
|
-
after,
|
|
50
|
-
before,
|
|
51
|
-
replace,
|
|
52
|
-
remove = false,
|
|
53
|
-
...rest
|
|
54
|
-
}) => {
|
|
55
|
-
const getId = useIdGenerator("element");
|
|
56
|
-
const props = rest;
|
|
57
|
-
const toReplace = replace !== undefined ? getId(replace) : undefined;
|
|
58
|
-
const placeAfter = after !== undefined ? getId(after) : undefined;
|
|
59
|
-
const placeBefore = before !== undefined ? getId(before) : undefined;
|
|
60
|
-
return /*#__PURE__*/React.createElement(Property, {
|
|
61
|
-
id: getId(props.name),
|
|
62
|
-
name: "elements",
|
|
63
|
-
array: true,
|
|
64
|
-
replace: toReplace,
|
|
65
|
-
remove: remove,
|
|
66
|
-
after: placeAfter,
|
|
67
|
-
before: placeBefore
|
|
68
|
-
}, Object.keys(props).map(name => /*#__PURE__*/React.createElement(Property, {
|
|
69
|
-
key: name,
|
|
70
|
-
id: getId(props.name, name),
|
|
71
|
-
name: name,
|
|
72
|
-
value: props[name]
|
|
73
|
-
})));
|
|
74
|
-
};
|
|
75
|
-
export const PageSettings = {
|
|
76
|
-
Group,
|
|
77
|
-
Element,
|
|
78
|
-
ViewMode: {
|
|
79
|
-
Dialog,
|
|
80
|
-
Drawer
|
|
81
|
-
}
|
|
82
|
-
};
|
|
83
|
-
|
|
84
|
-
//# sourceMappingURL=PageSettings.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["React","Property","useIdGenerator","Dialog","createElement","id","name","value","Drawer","Group","children","replace","remove","rest","props","toReplace","undefined","array","Object","keys","map","key","Element","after","before","getId","placeAfter","placeBefore","PageSettings","ViewMode"],"sources":["PageSettings.tsx"],"sourcesContent":["import React from \"react\";\nimport { Property, useIdGenerator } from \"@webiny/react-properties\";\n\nexport interface GroupProps {\n name: string;\n title?: string;\n description?: string;\n icon?: React.ReactNode;\n children?: React.ReactNode;\n remove?: boolean;\n replace?: string;\n}\n\ntype DynamicProps<T> = T & {\n [key: string]: any;\n};\n\nexport const Dialog = () => {\n return (\n <Property id=\"pageSettings\" name={\"pageSettings\"}>\n <Property id=\"pageSettings.viewMode\" name={\"viewMode\"} value={\"dialog\"} />\n </Property>\n );\n};\n\nexport const Drawer = () => {\n return (\n <Property id=\"pageSettings\" name={\"pageSettings\"}>\n <Property id=\"pageSettings.viewMode\" name={\"viewMode\"} value={\"drawer\"} />\n </Property>\n );\n};\n\nexport const Group = ({ children, replace, remove = false, ...rest }: GroupProps) => {\n const props: DynamicProps<typeof rest> = rest;\n const id = `group:${props.name}`;\n const toReplace = replace !== undefined ? `group:${replace}` : undefined;\n\n return (\n <Property id=\"pageSettings\" name={\"pageSettings\"}>\n <Property id={id} name={\"groups\"} array remove={remove} replace={toReplace}>\n {Object.keys(props).map(name => (\n <Property\n key={name}\n id={`group:${props.name}:${name}`}\n name={name}\n value={props[name]}\n />\n ))}\n {children}\n </Property>\n </Property>\n );\n};\n\nexport interface ElementProps {\n name: string;\n element?: JSX.Element;\n after?: string;\n before?: string;\n remove?: boolean;\n replace?: string;\n}\n\nexport const Element: React.FC<ElementProps> = ({\n after,\n before,\n replace,\n remove = false,\n ...rest\n}) => {\n const getId = useIdGenerator(\"element\");\n const props: DynamicProps<typeof rest> = rest;\n const toReplace = replace !== undefined ? getId(replace) : undefined;\n const placeAfter = after !== undefined ? getId(after) : undefined;\n const placeBefore = before !== undefined ? getId(before) : undefined;\n\n return (\n <Property\n id={getId(props.name)}\n name={\"elements\"}\n array\n replace={toReplace}\n remove={remove}\n after={placeAfter}\n before={placeBefore}\n >\n {Object.keys(props).map(name => (\n <Property key={name} id={getId(props.name, name)} name={name} value={props[name]} />\n ))}\n </Property>\n );\n};\n\nexport const PageSettings = {\n Group,\n Element,\n ViewMode: {\n Dialog,\n Drawer\n }\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { ReactComponent as SettingsIcon } from "@webiny/icons/settings.svg";
|
|
3
|
-
import { ReactComponent as SeoIcon } from "@webiny/icons/search.svg";
|
|
4
|
-
import { ReactComponent as SocialIcon } from "@webiny/icons/thumb_up.svg";
|
|
5
|
-
import { ReactComponent as SchemaIcon } from "@webiny/icons/schema.svg";
|
|
6
|
-
import { InternalPageEditorConfig } from "../PageEditorConfig.js";
|
|
7
|
-
import { GeneralTitle } from "./elements/GeneralTitle.js";
|
|
8
|
-
import { GeneralPath } from "./elements/GeneralPath.js";
|
|
9
|
-
import { GeneralSnippet } from "./elements/GeneralSnippet.js";
|
|
10
|
-
import { GeneralImage } from "./elements/GeneralImage.js";
|
|
11
|
-
import { GeneralTags } from "./elements/GeneralTags.js";
|
|
12
|
-
import { SeoTitle } from "./elements/SeoTitle.js";
|
|
13
|
-
import { SeoDescription } from "./elements/SeoDescription.js";
|
|
14
|
-
import { SeoMetaTags } from "./elements/SeoMetaTags.js";
|
|
15
|
-
import { SeoCanonicalUrl } from "./elements/SeoCanonicalUrl.js";
|
|
16
|
-
import { SeoNoIndex } from "./elements/SeoNoIndex.js";
|
|
17
|
-
import { SeoNoFollow } from "./elements/SeoNoFollow.js";
|
|
18
|
-
import { SocialTitle } from "./elements/SocialTitle.js";
|
|
19
|
-
import { SocialDescription } from "./elements/SocialDescription.js";
|
|
20
|
-
import { SocialImage } from "./elements/SocialImage.js";
|
|
21
|
-
import { SocialMetaTags } from "./elements/SocialMetaTags.js";
|
|
22
|
-
import { SchemaEditor } from "./elements/SchemaEditor.js";
|
|
23
|
-
const {
|
|
24
|
-
PageSettings
|
|
25
|
-
} = InternalPageEditorConfig;
|
|
26
|
-
export const PageSettingsConfig = () => {
|
|
27
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(PageSettings.Group, {
|
|
28
|
-
name: "general",
|
|
29
|
-
title: "General",
|
|
30
|
-
description: "Configure the page's core details like title, path, snippet, and image.",
|
|
31
|
-
icon: /*#__PURE__*/React.createElement(SettingsIcon, null)
|
|
32
|
-
}, /*#__PURE__*/React.createElement(PageSettings.Element, {
|
|
33
|
-
name: "title",
|
|
34
|
-
element: /*#__PURE__*/React.createElement(GeneralTitle, null)
|
|
35
|
-
}), /*#__PURE__*/React.createElement(PageSettings.Element, {
|
|
36
|
-
name: "path",
|
|
37
|
-
element: /*#__PURE__*/React.createElement(GeneralPath, null)
|
|
38
|
-
}), /*#__PURE__*/React.createElement(PageSettings.Element, {
|
|
39
|
-
name: "snippet",
|
|
40
|
-
element: /*#__PURE__*/React.createElement(GeneralSnippet, null)
|
|
41
|
-
}), /*#__PURE__*/React.createElement(PageSettings.Element, {
|
|
42
|
-
name: "image",
|
|
43
|
-
element: /*#__PURE__*/React.createElement(GeneralImage, null)
|
|
44
|
-
}), /*#__PURE__*/React.createElement(PageSettings.Element, {
|
|
45
|
-
name: "tags",
|
|
46
|
-
element: /*#__PURE__*/React.createElement(GeneralTags, null)
|
|
47
|
-
})), /*#__PURE__*/React.createElement(PageSettings.Group, {
|
|
48
|
-
name: "seo",
|
|
49
|
-
title: "SEO",
|
|
50
|
-
description: "Optimize how this page appears in search engine results.",
|
|
51
|
-
icon: /*#__PURE__*/React.createElement(SeoIcon, null)
|
|
52
|
-
}, /*#__PURE__*/React.createElement(PageSettings.Element, {
|
|
53
|
-
name: "title",
|
|
54
|
-
element: /*#__PURE__*/React.createElement(SeoTitle, null)
|
|
55
|
-
}), /*#__PURE__*/React.createElement(PageSettings.Element, {
|
|
56
|
-
name: "description",
|
|
57
|
-
element: /*#__PURE__*/React.createElement(SeoDescription, null)
|
|
58
|
-
}), /*#__PURE__*/React.createElement(PageSettings.Element, {
|
|
59
|
-
name: "metaTags",
|
|
60
|
-
element: /*#__PURE__*/React.createElement(SeoMetaTags, null)
|
|
61
|
-
}), /*#__PURE__*/React.createElement(PageSettings.Element, {
|
|
62
|
-
name: "canonicalUrl",
|
|
63
|
-
element: /*#__PURE__*/React.createElement(SeoCanonicalUrl, null)
|
|
64
|
-
}), /*#__PURE__*/React.createElement(PageSettings.Element, {
|
|
65
|
-
name: "noIndex",
|
|
66
|
-
element: /*#__PURE__*/React.createElement(SeoNoIndex, null)
|
|
67
|
-
}), /*#__PURE__*/React.createElement(PageSettings.Element, {
|
|
68
|
-
name: "noFollow",
|
|
69
|
-
element: /*#__PURE__*/React.createElement(SeoNoFollow, null)
|
|
70
|
-
})), /*#__PURE__*/React.createElement(PageSettings.Group, {
|
|
71
|
-
name: "social",
|
|
72
|
-
title: "Social",
|
|
73
|
-
description: "Control how this page is previewed when shared on social media.",
|
|
74
|
-
icon: /*#__PURE__*/React.createElement(SocialIcon, null)
|
|
75
|
-
}, /*#__PURE__*/React.createElement(PageSettings.Element, {
|
|
76
|
-
name: "title",
|
|
77
|
-
element: /*#__PURE__*/React.createElement(SocialTitle, null)
|
|
78
|
-
}), /*#__PURE__*/React.createElement(PageSettings.Element, {
|
|
79
|
-
name: "description",
|
|
80
|
-
element: /*#__PURE__*/React.createElement(SocialDescription, null)
|
|
81
|
-
}), /*#__PURE__*/React.createElement(PageSettings.Element, {
|
|
82
|
-
name: "image",
|
|
83
|
-
element: /*#__PURE__*/React.createElement(SocialImage, null)
|
|
84
|
-
}), /*#__PURE__*/React.createElement(PageSettings.Element, {
|
|
85
|
-
name: "metaTags",
|
|
86
|
-
element: /*#__PURE__*/React.createElement(SocialMetaTags, null)
|
|
87
|
-
})), /*#__PURE__*/React.createElement(PageSettings.Group, {
|
|
88
|
-
name: "schema",
|
|
89
|
-
title: "Schema",
|
|
90
|
-
description: "Add structured data markup to enhance search result appearance.",
|
|
91
|
-
icon: /*#__PURE__*/React.createElement(SchemaIcon, null)
|
|
92
|
-
}, /*#__PURE__*/React.createElement(PageSettings.Element, {
|
|
93
|
-
name: "editor",
|
|
94
|
-
element: /*#__PURE__*/React.createElement(SchemaEditor, null)
|
|
95
|
-
})));
|
|
96
|
-
};
|
|
97
|
-
|
|
98
|
-
//# sourceMappingURL=PageSettingsConfig.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["React","ReactComponent","SettingsIcon","SeoIcon","SocialIcon","SchemaIcon","InternalPageEditorConfig","GeneralTitle","GeneralPath","GeneralSnippet","GeneralImage","GeneralTags","SeoTitle","SeoDescription","SeoMetaTags","SeoCanonicalUrl","SeoNoIndex","SeoNoFollow","SocialTitle","SocialDescription","SocialImage","SocialMetaTags","SchemaEditor","PageSettings","PageSettingsConfig","createElement","Fragment","Group","name","title","description","icon","Element","element"],"sources":["PageSettingsConfig.tsx"],"sourcesContent":["import React from \"react\";\nimport { ReactComponent as SettingsIcon } from \"@webiny/icons/settings.svg\";\nimport { ReactComponent as SeoIcon } from \"@webiny/icons/search.svg\";\nimport { ReactComponent as SocialIcon } from \"@webiny/icons/thumb_up.svg\";\nimport { ReactComponent as SchemaIcon } from \"@webiny/icons/schema.svg\";\nimport { InternalPageEditorConfig } from \"~/modules/pages/PageEditor/PageEditorConfig.js\";\nimport { GeneralTitle } from \"./elements/GeneralTitle.js\";\nimport { GeneralPath } from \"./elements/GeneralPath.js\";\nimport { GeneralSnippet } from \"./elements/GeneralSnippet.js\";\nimport { GeneralImage } from \"./elements/GeneralImage.js\";\nimport { GeneralTags } from \"./elements/GeneralTags.js\";\nimport { SeoTitle } from \"./elements/SeoTitle.js\";\nimport { SeoDescription } from \"./elements/SeoDescription.js\";\nimport { SeoMetaTags } from \"./elements/SeoMetaTags.js\";\nimport { SeoCanonicalUrl } from \"./elements/SeoCanonicalUrl.js\";\nimport { SeoNoIndex } from \"./elements/SeoNoIndex.js\";\nimport { SeoNoFollow } from \"./elements/SeoNoFollow.js\";\nimport { SocialTitle } from \"./elements/SocialTitle.js\";\nimport { SocialDescription } from \"./elements/SocialDescription.js\";\nimport { SocialImage } from \"./elements/SocialImage.js\";\nimport { SocialMetaTags } from \"./elements/SocialMetaTags.js\";\nimport { SchemaEditor } from \"./elements/SchemaEditor.js\";\n\nconst { PageSettings } = InternalPageEditorConfig;\n\nexport const PageSettingsConfig = () => {\n return (\n <>\n <PageSettings.Group\n name={\"general\"}\n title={\"General\"}\n description={\n \"Configure the page's core details like title, path, snippet, and image.\"\n }\n icon={<SettingsIcon />}\n >\n <PageSettings.Element name={\"title\"} element={<GeneralTitle />} />\n <PageSettings.Element name={\"path\"} element={<GeneralPath />} />\n <PageSettings.Element name={\"snippet\"} element={<GeneralSnippet />} />\n <PageSettings.Element name={\"image\"} element={<GeneralImage />} />\n <PageSettings.Element name={\"tags\"} element={<GeneralTags />} />\n </PageSettings.Group>\n <PageSettings.Group\n name={\"seo\"}\n title={\"SEO\"}\n description={\"Optimize how this page appears in search engine results.\"}\n icon={<SeoIcon />}\n >\n <PageSettings.Element name={\"title\"} element={<SeoTitle />} />\n <PageSettings.Element name={\"description\"} element={<SeoDescription />} />\n <PageSettings.Element name={\"metaTags\"} element={<SeoMetaTags />} />\n <PageSettings.Element name={\"canonicalUrl\"} element={<SeoCanonicalUrl />} />\n <PageSettings.Element name={\"noIndex\"} element={<SeoNoIndex />} />\n <PageSettings.Element name={\"noFollow\"} element={<SeoNoFollow />} />\n </PageSettings.Group>\n <PageSettings.Group\n name={\"social\"}\n title={\"Social\"}\n description={\"Control how this page is previewed when shared on social media.\"}\n icon={<SocialIcon />}\n >\n <PageSettings.Element name={\"title\"} element={<SocialTitle />} />\n <PageSettings.Element name={\"description\"} element={<SocialDescription />} />\n <PageSettings.Element name={\"image\"} element={<SocialImage />} />\n <PageSettings.Element name={\"metaTags\"} element={<SocialMetaTags />} />\n </PageSettings.Group>\n <PageSettings.Group\n name={\"schema\"}\n title={\"Schema\"}\n description={\"Add structured data markup to enhance search result appearance.\"}\n icon={<SchemaIcon />}\n >\n <PageSettings.Element name={\"editor\"} element={<SchemaEditor />} />\n </PageSettings.Group>\n </>\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { FileManager } from "@webiny/app-admin";
|
|
3
|
-
import { Grid, FilePicker } from "@webiny/admin-ui";
|
|
4
|
-
import { Bind } from "@webiny/form";
|
|
5
|
-
import { fileManagerItemToValue } from "../../../../../shared/fileManagerItemToValue.js";
|
|
6
|
-
export const GeneralImage = () => {
|
|
7
|
-
return /*#__PURE__*/React.createElement(Grid.Column, {
|
|
8
|
-
span: 12
|
|
9
|
-
}, /*#__PURE__*/React.createElement(Bind, {
|
|
10
|
-
name: "properties.image"
|
|
11
|
-
}, ({
|
|
12
|
-
value,
|
|
13
|
-
onChange
|
|
14
|
-
}) => /*#__PURE__*/React.createElement(FileManager, {
|
|
15
|
-
images: true,
|
|
16
|
-
render: ({
|
|
17
|
-
showFileManager
|
|
18
|
-
}) => /*#__PURE__*/React.createElement(FilePicker, {
|
|
19
|
-
label: "Image",
|
|
20
|
-
description: "Select an image to represent this page",
|
|
21
|
-
type: "compact",
|
|
22
|
-
value: value,
|
|
23
|
-
onSelectItem: () => showFileManager(file => {
|
|
24
|
-
onChange(fileManagerItemToValue(file));
|
|
25
|
-
}),
|
|
26
|
-
onRemoveItem: () => onChange(undefined)
|
|
27
|
-
})
|
|
28
|
-
})));
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
//# sourceMappingURL=GeneralImage.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["React","FileManager","Grid","FilePicker","Bind","fileManagerItemToValue","GeneralImage","createElement","Column","span","name","value","onChange","images","render","showFileManager","label","description","type","onSelectItem","file","onRemoveItem","undefined"],"sources":["GeneralImage.tsx"],"sourcesContent":["import React from \"react\";\nimport { FileManager } from \"@webiny/app-admin\";\nimport { Grid, FilePicker } from \"@webiny/admin-ui\";\nimport { Bind } from \"@webiny/form\";\nimport { fileManagerItemToValue } from \"~/shared/fileManagerItemToValue.js\";\n\nexport const GeneralImage = () => {\n return (\n <Grid.Column span={12}>\n <Bind name={\"properties.image\"}>\n {({ value, onChange }) => (\n <FileManager\n images={true}\n render={({ showFileManager }) => (\n <FilePicker\n label={\"Image\"}\n description=\"Select an image to represent this page\"\n type=\"compact\"\n value={value}\n onSelectItem={() =>\n showFileManager(file => {\n onChange(fileManagerItemToValue(file));\n })\n }\n onRemoveItem={() => onChange(undefined)}\n />\n )}\n />\n )}\n </Bind>\n </Grid.Column>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,WAAW,QAAQ,mBAAmB;AAC/C,SAASC,IAAI,EAAEC,UAAU,QAAQ,kBAAkB;AACnD,SAASC,IAAI,QAAQ,cAAc;AACnC,SAASC,sBAAsB;AAE/B,OAAO,MAAMC,YAAY,GAAGA,CAAA,KAAM;EAC9B,oBACIN,KAAA,CAAAO,aAAA,CAACL,IAAI,CAACM,MAAM;IAACC,IAAI,EAAE;EAAG,gBAClBT,KAAA,CAAAO,aAAA,CAACH,IAAI;IAACM,IAAI,EAAE;EAAmB,GAC1B,CAAC;IAAEC,KAAK;IAAEC;EAAS,CAAC,kBACjBZ,KAAA,CAAAO,aAAA,CAACN,WAAW;IACRY,MAAM,EAAE,IAAK;IACbC,MAAM,EAAEA,CAAC;MAAEC;IAAgB,CAAC,kBACxBf,KAAA,CAAAO,aAAA,CAACJ,UAAU;MACPa,KAAK,EAAE,OAAQ;MACfC,WAAW,EAAC,wCAAwC;MACpDC,IAAI,EAAC,SAAS;MACdP,KAAK,EAAEA,KAAM;MACbQ,YAAY,EAAEA,CAAA,KACVJ,eAAe,CAACK,IAAI,IAAI;QACpBR,QAAQ,CAACP,sBAAsB,CAACe,IAAI,CAAC,CAAC;MAC1C,CAAC,CACJ;MACDC,YAAY,EAAEA,CAAA,KAAMT,QAAQ,CAACU,SAAS;IAAE,CAC3C;EACH,CACL,CAEH,CACG,CAAC;AAEtB,CAAC","ignoreList":[]}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { Grid, Input } from "@webiny/admin-ui";
|
|
3
|
-
import { Bind } from "@webiny/form";
|
|
4
|
-
import { validation } from "@webiny/validation";
|
|
5
|
-
export const GeneralPath = () => {
|
|
6
|
-
return /*#__PURE__*/React.createElement(Grid.Column, {
|
|
7
|
-
span: 12
|
|
8
|
-
}, /*#__PURE__*/React.createElement(Bind, {
|
|
9
|
-
name: "properties.path",
|
|
10
|
-
validators: [validation.create("required")]
|
|
11
|
-
}, /*#__PURE__*/React.createElement(Input, {
|
|
12
|
-
label: "Path"
|
|
13
|
-
})));
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
//# sourceMappingURL=GeneralPath.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["React","Grid","Input","Bind","validation","GeneralPath","createElement","Column","span","name","validators","create","label"],"sources":["GeneralPath.tsx"],"sourcesContent":["import React from \"react\";\nimport { Grid, Input } from \"@webiny/admin-ui\";\nimport { Bind } from \"@webiny/form\";\nimport { validation } from \"@webiny/validation\";\n\nexport const GeneralPath = () => {\n return (\n <Grid.Column span={12}>\n <Bind name={\"properties.path\"} validators={[validation.create(\"required\")]}>\n <Input label={\"Path\"} />\n </Bind>\n </Grid.Column>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,EAAEC,KAAK,QAAQ,kBAAkB;AAC9C,SAASC,IAAI,QAAQ,cAAc;AACnC,SAASC,UAAU,QAAQ,oBAAoB;AAE/C,OAAO,MAAMC,WAAW,GAAGA,CAAA,KAAM;EAC7B,oBACIL,KAAA,CAAAM,aAAA,CAACL,IAAI,CAACM,MAAM;IAACC,IAAI,EAAE;EAAG,gBAClBR,KAAA,CAAAM,aAAA,CAACH,IAAI;IAACM,IAAI,EAAE,iBAAkB;IAACC,UAAU,EAAE,CAACN,UAAU,CAACO,MAAM,CAAC,UAAU,CAAC;EAAE,gBACvEX,KAAA,CAAAM,aAAA,CAACJ,KAAK;IAACU,KAAK,EAAE;EAAO,CAAE,CACrB,CACG,CAAC;AAEtB,CAAC","ignoreList":[]}
|