@griddo/ax 11.10.23 → 11.10.24

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.
Files changed (58) hide show
  1. package/config/griddo-config/index.js +1 -0
  2. package/package.json +2 -2
  3. package/src/Style/index.tsx +10 -8
  4. package/src/__tests__/components/ConfigPanel/ConfigPanel.test.tsx +10 -8
  5. package/src/__tests__/components/ConfigPanel/Form/ConnectedField/PageConnectedField/PageConnectedField.test.tsx +86 -8
  6. package/src/__tests__/components/SideModal/SideModal.test.tsx +64 -0
  7. package/src/__tests__/hooks/useSchemas.test.tsx +224 -0
  8. package/src/__tests__/services/SchemasService.test.ts +135 -0
  9. package/src/api/schemas.tsx +11 -1
  10. package/src/components/ConfigPanel/GlobalPageForm/index.tsx +11 -17
  11. package/src/components/Fields/Wysiwyg/helpers.tsx +14 -4
  12. package/src/components/Loader/components/Dots.js +4 -5
  13. package/src/components/PageFinder/index.tsx +15 -9
  14. package/src/components/ResizePanel/index.tsx +13 -3
  15. package/src/components/ResizePanel/style.tsx +2 -9
  16. package/src/containers/App/actions.tsx +96 -24
  17. package/src/containers/App/constants.tsx +7 -0
  18. package/src/containers/App/interfaces.tsx +26 -8
  19. package/src/containers/App/reducer.tsx +24 -9
  20. package/src/containers/Sites/actions.tsx +49 -49
  21. package/src/forms/editor.tsx +4 -3
  22. package/src/helpers/index.tsx +76 -94
  23. package/src/helpers/schemas.tsx +144 -36
  24. package/src/helpers/structuredData.tsx +36 -7
  25. package/src/helpers/themes.tsx +26 -8
  26. package/src/hooks/index.tsx +5 -0
  27. package/src/hooks/useSchemas.ts +151 -0
  28. package/src/locales/en-US.ts +1 -0
  29. package/src/locales/es-ES.ts +1 -0
  30. package/src/modules/Analytics/GroupPanel/index.tsx +9 -6
  31. package/src/modules/Analytics/GroupPanel/utils.tsx +12 -28
  32. package/src/modules/Content/PageItem/index.tsx +33 -36
  33. package/src/modules/Content/index.tsx +34 -30
  34. package/src/modules/Content/utils.tsx +16 -12
  35. package/src/modules/Forms/FormEditor/index.tsx +13 -14
  36. package/src/modules/FramePreview/index.tsx +8 -8
  37. package/src/modules/GlobalEditor/index.tsx +57 -42
  38. package/src/modules/MediaGallery/ImageModal/index.tsx +15 -9
  39. package/src/modules/MediaGallery/ImageModal/style.tsx +16 -1
  40. package/src/modules/PublicPreview/index.tsx +4 -3
  41. package/src/modules/Settings/ContentTypes/DataPacks/Config/Form/TemplateConfig/TemplateEditor/Editor/index.tsx +4 -5
  42. package/src/modules/Settings/Globals/index.tsx +10 -11
  43. package/src/modules/Sites/index.tsx +13 -5
  44. package/src/modules/StructuredData/Form/index.tsx +25 -29
  45. package/src/modules/StructuredData/StructuredDataList/OptionTable/index.tsx +15 -6
  46. package/src/modules/StructuredData/StructuredDataList/index.tsx +22 -14
  47. package/src/modules/StructuredData/StructuredDataList/utils.tsx +12 -11
  48. package/src/schemas/index.tsx +5 -4
  49. package/src/schemas/pages/Page.ts +308 -0
  50. package/src/schemas/pages/index.ts +9 -0
  51. package/src/services/SchemasService.ts +240 -0
  52. package/src/services/index.ts +9 -0
  53. package/src/types/index.tsx +48 -39
  54. package/tsconfig.paths.json +1 -0
  55. package/src/schemas/pages/Page.tsx +0 -301
  56. package/src/schemas/pages/index.tsx +0 -5
  57. /package/src/schemas/pages/{FormPage.tsx → FormPage.ts} +0 -0
  58. /package/src/schemas/pages/{GlobalPage.tsx → GlobalPage.ts} +0 -0
@@ -0,0 +1,240 @@
1
+ import type { IRichTextConfig } from "@ax/components/Fields/Wysiwyg/helpers";
2
+ import type { IGriddoTheme, ISchema, ModuleCategoryInfo } from "@ax/types";
3
+
4
+ /**
5
+ * Error thrown when schemas are accessed before being loaded
6
+ */
7
+ class SchemasNotLoadedError extends Error {
8
+ constructor() {
9
+ super("Schemas have not been loaded yet. Call loadSchemas() first.");
10
+ this.name = "SchemasNotLoadedError";
11
+ }
12
+ }
13
+
14
+ /**
15
+ * Singleton service for managing schemas loaded from API.
16
+ *
17
+ * This service acts as a central store for schemas that can be accessed
18
+ * from both React components (via hooks) and non-React code (thunks, helpers).
19
+ *
20
+ * @example
21
+ * // In a thunk or helper
22
+ * import { schemasService } from "@ax/services";
23
+ * const schemas = schemasService.getSchemas();
24
+ * const module = schemas.ui.modules["ModuleName"];
25
+ *
26
+ * @example
27
+ * // In a React component via a hook
28
+ * import { useMemo } from "react";
29
+ * import { schemasService } from "@ax/services";
30
+ *
31
+ * const MyComponent = () => {
32
+ * // Optionally, wrap access in useMemo to avoid unnecessary re-renders
33
+ * const schemas = useMemo(() => {
34
+ * if (schemasService.isLoaded()) {
35
+ * return schemasService.getSchemas();
36
+ * }
37
+ * return null;
38
+ * }, []);
39
+ *
40
+ * if (!schemas) {
41
+ * return <div>Loading...</div>;
42
+ * }
43
+ * const module = schemas.ui.modules["ModuleName"];
44
+ * return <div>{module.label}</div>;
45
+ * };
46
+ *
47
+ * @example
48
+ * // Check if loaded before accessing
49
+ * if (schemasService.isLoaded()) {
50
+ * const schemas = schemasService.getSchemas();
51
+ * }
52
+ */
53
+ class SchemasService {
54
+ private schemas: ISchemas | null = null;
55
+ private instanceId: string;
56
+
57
+ constructor(instanceId?: string) {
58
+ this.instanceId = instanceId || `instance-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
59
+ }
60
+
61
+ /**
62
+ * Store schemas data in the service.
63
+ * Should be called after successfully fetching schemas from the API.
64
+ */
65
+ setSchemas(schemas: ISchemas): void {
66
+ this.schemas = schemas;
67
+ }
68
+
69
+ /**
70
+ * Get the stored schemas.
71
+ * @throws {SchemasNotLoadedError} if schemas have not been loaded yet
72
+ */
73
+ getSchemas(): ISchemas {
74
+ if (this.schemas === null) {
75
+ throw new SchemasNotLoadedError();
76
+ }
77
+ return this.schemas;
78
+ }
79
+
80
+ /**
81
+ * Check if schemas have been loaded.
82
+ */
83
+ isLoaded(): boolean {
84
+ return this.schemas !== null;
85
+ }
86
+
87
+ /**
88
+ * Clear the stored schemas.
89
+ * Useful when changing sites or logging out.
90
+ */
91
+ clear(): void {
92
+ this.schemas = null;
93
+ }
94
+
95
+ getInstanceId(): string {
96
+ return this.instanceId;
97
+ }
98
+ }
99
+
100
+ /**
101
+ * Singleton pattern that survives module re-evaluation.
102
+ *
103
+ * This ensures that even if the module is re-evaluated (e.g., during HMR),
104
+ * we reuse the same instance stored in the global object.
105
+ */
106
+ const getSchemasService = (): SchemasService => {
107
+ const globalKey = "__GRIDDO_SCHEMAS_SERVICE__";
108
+ const debugKey = "__GRIDDO_SCHEMAS_SERVICE_DEBUG__";
109
+
110
+ // In browser environment, use window
111
+ if (typeof window !== "undefined") {
112
+ const existingInstance = (window as any)[globalKey];
113
+
114
+ if (existingInstance) {
115
+ // Track access for debugging
116
+ if (!(window as any)[debugKey]) {
117
+ (window as any)[debugKey] = {
118
+ createdAt: new Date().toISOString(),
119
+ accessCount: 0,
120
+ lastAccess: null,
121
+ };
122
+ }
123
+ const debug = (window as any)[debugKey];
124
+ debug.accessCount = (debug.accessCount || 0) + 1;
125
+ debug.lastAccess = new Date().toISOString();
126
+
127
+ return existingInstance;
128
+ }
129
+
130
+ const newInstance = new SchemasService();
131
+ (window as any)[globalKey] = newInstance;
132
+
133
+ // Initialize debug info
134
+ (window as any)[debugKey] = {
135
+ createdAt: new Date().toISOString(),
136
+ accessCount: 1,
137
+ lastAccess: new Date().toISOString(),
138
+ };
139
+
140
+ return newInstance;
141
+ }
142
+
143
+ // Fallback for non-browser environments (SSR, tests)
144
+ if (typeof global !== "undefined") {
145
+ const existingInstance = (global as any)[globalKey];
146
+
147
+ if (existingInstance) {
148
+ return existingInstance;
149
+ }
150
+
151
+ const newInstance = new SchemasService();
152
+ (global as any)[globalKey] = newInstance;
153
+ return newInstance;
154
+ }
155
+
156
+ // Last resort: module-level instance (will be lost on re-evaluation)
157
+ console.warn(
158
+ `[SchemasService Factory] [${new Date().toISOString()}] ` +
159
+ `WARNING: No global object available, creating module-level instance. ` +
160
+ `This instance will be lost if the module is re-evaluated.`,
161
+ );
162
+
163
+ return new SchemasService();
164
+ };
165
+
166
+ const schemasService = getSchemasService();
167
+
168
+ // Expose debug info helper for console inspection
169
+ // if (typeof window !== "undefined") {
170
+ // (window as any).__getSchemasServiceDebugInfo = () => {
171
+ // const debugKey = "__GRIDDO_SCHEMAS_SERVICE_DEBUG__";
172
+ // const debug = (window as any)[debugKey];
173
+ // const instance = (window as any).__GRIDDO_SCHEMAS_SERVICE__;
174
+
175
+ // return {
176
+ // debugInfo: debug || null,
177
+ // instanceId: instance?.getInstanceId?.() || "not found",
178
+ // isLoaded: instance?.isLoaded?.() || false,
179
+ // hasSchemas: instance?.isLoaded?.() || false,
180
+ // };
181
+ // };
182
+ // }
183
+
184
+ interface IUISchemas {
185
+ modules: Record<string, ISchema>;
186
+ components: Record<string, ISchema>;
187
+ templates: Record<string, ISchema>;
188
+ }
189
+
190
+ interface IFormSchemas {
191
+ fields?: Record<string, ISchema>;
192
+ templates?: Record<string, ISchema>;
193
+ categories?: { label: string; value: string; featured?: boolean }[];
194
+ templateCategories?: { label: string; value: string }[];
195
+ }
196
+
197
+ interface IContentTypesSchemas {
198
+ dataPacks: Record<string, ISchema>;
199
+ }
200
+
201
+ /**
202
+ * Configuration schemas structure
203
+ */
204
+ interface ISchemasConfig {
205
+ themes: IGriddoTheme[];
206
+ moduleCategories: ModuleCategoryInfo[];
207
+ menuItems: Record<string, { fields: unknown[] }>;
208
+ richTextConfig?: IRichTextConfig;
209
+ [key: string]: unknown;
210
+ }
211
+
212
+ interface ILanguage {
213
+ id: number;
214
+ locale: string;
215
+ language: string;
216
+ label: string;
217
+ isDefault: boolean;
218
+ }
219
+
220
+ interface ISchemas {
221
+ ui: IUISchemas;
222
+ config: ISchemasConfig;
223
+ forms?: IFormSchemas;
224
+ contentTypes: IContentTypesSchemas;
225
+ languagesDefinition: Record<string, { name: string; label: string }>;
226
+ version: string;
227
+ languages: ILanguage[];
228
+ defaultLanguage: ILanguage;
229
+ }
230
+
231
+ export {
232
+ type ISchemas,
233
+ type ISchemasConfig,
234
+ type IUISchemas,
235
+ type IFormSchemas,
236
+ type IContentTypesSchemas,
237
+ type ILanguage,
238
+ SchemasNotLoadedError,
239
+ schemasService,
240
+ };
@@ -0,0 +1,9 @@
1
+ export {
2
+ type IContentTypesSchemas,
3
+ type IFormSchemas,
4
+ type ISchemas,
5
+ type ISchemasConfig,
6
+ type IUISchemas,
7
+ SchemasNotLoadedError,
8
+ schemasService,
9
+ } from "./SchemasService";
@@ -1,47 +1,45 @@
1
- import { IAppState } from "@ax/containers/App/reducer";
2
- import { ISitesState } from "@ax/containers/Sites/reducer";
3
- import { IPageEditorState } from "@ax/containers/PageEditor/reducer";
4
- import { IMenuState } from "@ax/containers/Navigation/Menu/reducer";
5
- import { INavigationState } from "@ax/containers/Navigation/Defaults/reducer";
6
- import { IStructuredDataState } from "@ax/containers/StructuredData/reducer";
7
- import { ILanguageState } from "@ax/containers/Settings/Languages/reducer";
8
- import { IDataPacksState } from "@ax/containers/Settings/DataPacks/reducer";
9
- import { IUsersState } from "@ax/containers/Users/reducer";
10
- import { IGalleryState } from "@ax/containers/Gallery/reducer";
11
- import { IDomainsState } from "@ax/containers/Domains/reducer";
12
- import { IRedirectsState } from "@ax/containers/Redirects/reducer";
13
- import { IAnalyticsState } from "@ax/containers/Analytics/reducer";
14
- import { IIntegrationsState } from "@ax/containers/Integrations/reducer";
15
- import { IFileDriveState } from "@ax/containers/FileDrive/reducer";
16
- import { IFormsState } from "@ax/containers/Forms/reducer";
17
- import { IActivityLogState } from "@ax/containers/ActivityLog/reducer";
18
-
19
- import {
20
- GetFormsParams,
21
- FormContent,
22
- ListForm,
23
- FormCategory,
24
- FormCategoriesList,
25
- PostFormCategoryParams,
26
- PutFormCategoryParams,
27
- FormCategoriesOrderParams,
28
- FormState,
29
- FormLanguage,
30
- } from "./forms";
31
-
32
- import {
33
- IFilesFolder,
1
+ import type { IActivityLogState } from "@ax/containers/ActivityLog/reducer";
2
+ import type { IAnalyticsState } from "@ax/containers/Analytics/reducer";
3
+ import type { IAppState } from "@ax/containers/App/reducer";
4
+ import type { IDomainsState } from "@ax/containers/Domains/reducer";
5
+ import type { IFileDriveState } from "@ax/containers/FileDrive/reducer";
6
+ import type { IFormsState } from "@ax/containers/Forms/reducer";
7
+ import type { IGalleryState } from "@ax/containers/Gallery/reducer";
8
+ import type { IIntegrationsState } from "@ax/containers/Integrations/reducer";
9
+ import type { INavigationState } from "@ax/containers/Navigation/Defaults/reducer";
10
+ import type { IMenuState } from "@ax/containers/Navigation/Menu/reducer";
11
+ import type { IPageEditorState } from "@ax/containers/PageEditor/reducer";
12
+ import type { IRedirectsState } from "@ax/containers/Redirects/reducer";
13
+ import type { IDataPacksState } from "@ax/containers/Settings/DataPacks/reducer";
14
+ import type { ILanguageState } from "@ax/containers/Settings/Languages/reducer";
15
+ import type { ISitesState } from "@ax/containers/Sites/reducer";
16
+ import type { IStructuredDataState } from "@ax/containers/StructuredData/reducer";
17
+ import type { IUsersState } from "@ax/containers/Users/reducer";
18
+
19
+ import type {
34
20
  IFile,
35
- IFileUsePages,
21
+ IFilesFolder,
36
22
  IFileUseItem,
23
+ IFileUsePages,
37
24
  IFolder,
38
25
  IFolderTree,
39
26
  IGetFolderParams,
40
27
  IImage,
41
28
  IImageFolder,
42
29
  } from "./files";
43
-
44
- import { ILogItemsByDay, ILogItemsByUser, ILogContent } from "./logs";
30
+ import type {
31
+ FormCategoriesList,
32
+ FormCategoriesOrderParams,
33
+ FormCategory,
34
+ FormContent,
35
+ FormLanguage,
36
+ FormState,
37
+ GetFormsParams,
38
+ ListForm,
39
+ PostFormCategoryParams,
40
+ PutFormCategoryParams,
41
+ } from "./forms";
42
+ import type { ILogContent, ILogItemsByDay, ILogItemsByUser } from "./logs";
45
43
 
46
44
  export interface IBreadcrumbItem {
47
45
  editorID: number;
@@ -184,10 +182,22 @@ export interface ISiteListConfig {
184
182
  sortedByTitle: boolean;
185
183
  };
186
184
  }
185
+
187
186
  export interface ISchema {
188
187
  title: string;
189
188
  component: string;
190
- type?: string;
189
+ type: any;
190
+ // Este type está en any porque puede ser string | object
191
+ // Si ponemos el type de abajo da errores de tipado y hay que refactorizar.
192
+ // Esto pasa porque en los templates type es un objeto y en los modulos un string.
193
+ // type:
194
+ // | string
195
+ // | {
196
+ // label: string;
197
+ // value: string;
198
+ // mode?: "list" | "detail" | "paginated-data" | "virtual-list";
199
+ // special?: "404" | "sitemap";
200
+ // };
191
201
  configTabs: ISchemaTab[];
192
202
  schemaType: string;
193
203
  displayName?: string;
@@ -196,6 +206,7 @@ export interface ISchema {
196
206
  styles?: Record<string, string>;
197
207
  maxModulesPerPage?: number;
198
208
  content?: ISchemaField[];
209
+ singleInstance?: boolean;
199
210
  [key: string]: any;
200
211
  default?: {
201
212
  title?: string | { content: string };
@@ -1132,7 +1143,6 @@ export type {
1132
1143
  FormState,
1133
1144
  FormLanguage,
1134
1145
  };
1135
-
1136
1146
  export type {
1137
1147
  IFilesFolder,
1138
1148
  IFile,
@@ -1144,5 +1154,4 @@ export type {
1144
1154
  IImage,
1145
1155
  IImageFolder,
1146
1156
  };
1147
-
1148
1157
  export type { ILogItemsByDay, ILogItemsByUser, ILogContent };
@@ -17,6 +17,7 @@
17
17
  "@ax/routes/*": ["src/routes/*"],
18
18
  "@ax/types": ["src/types"],
19
19
  "@ax/schemas": ["src/schemas"],
20
+ "@ax/services": ["src/services"],
20
21
  "@ax/themes/*": ["src/themes/*"]
21
22
  }
22
23
  }
@@ -1,301 +0,0 @@
1
- import { config } from "components";
2
-
3
- const themes = config.schemas.config.themes;
4
-
5
- export default {
6
- schemaType: "page",
7
- displayName: "Page",
8
- component: "Page",
9
- dataPacks: null,
10
- configTabs: [
11
- {
12
- title: "content",
13
- fields: [
14
- {
15
- title: "",
16
- type: "TranslateButton",
17
- key: "translate",
18
- contentType: "page",
19
- },
20
- {
21
- title: "Title",
22
- type: "TextField",
23
- key: "title",
24
- autoComplete: "false",
25
- },
26
- {
27
- title: "Template",
28
- key: "template",
29
- type: "template",
30
- },
31
- ],
32
- },
33
- {
34
- title: "config",
35
- fields: [
36
- {
37
- type: "UniqueCheck",
38
- key: "isHome",
39
- options: [
40
- {
41
- title: "Set as home",
42
- },
43
- ],
44
- },
45
- {
46
- title: "Parent",
47
- type: "AsyncSelect",
48
- entity: "pages",
49
- key: "parent",
50
- options: { excludeDetailPages: true },
51
- },
52
- {
53
- title: "Slug",
54
- type: "TextField",
55
- key: "slug",
56
- },
57
- {
58
- title: "Template",
59
- key: "template",
60
- type: "template",
61
- },
62
- {
63
- title: "Page Options",
64
- type: "FieldGroup",
65
- key: "pageOptions",
66
- collapsed: false,
67
- fields: [
68
- {
69
- title: "Theme",
70
- type: "Select",
71
- key: "theme",
72
- options: themes,
73
- helptext: "It affects the whole page: Header, Content, and footer.",
74
- },
75
- {
76
- title: "Customize header and footer themes",
77
- type: "ConditionalField",
78
- key: "customizeThemes",
79
- mandatory: true,
80
- defaultValue: false,
81
- options: [
82
- {
83
- value: true,
84
- title: "Yes",
85
- name: "Yes",
86
- },
87
- {
88
- value: false,
89
- title: "No",
90
- name: "No",
91
- },
92
- ],
93
- fields: [
94
- {
95
- title: "Header Theme",
96
- type: "Select",
97
- key: "headerTheme",
98
- options: themes,
99
- condition: true,
100
- },
101
- {
102
- title: "Footer Theme",
103
- type: "Select",
104
- key: "footerTheme",
105
- options: themes,
106
- condition: true,
107
- },
108
- ],
109
- },
110
- ],
111
- },
112
- {
113
- type: "IntegrationsField",
114
- key: "integrations",
115
- },
116
- ],
117
- },
118
- {
119
- title: "SEO & Analytics",
120
- fields: [
121
- {
122
- title: "SEO Data",
123
- type: "FieldGroup",
124
- key: "seoData",
125
- collapsed: true,
126
- fields: [
127
- {
128
- title: "",
129
- type: "SummaryButton",
130
- key: "summary",
131
- },
132
- {
133
- title: "Meta title",
134
- type: "TextField",
135
- key: "metaTitle",
136
- },
137
- {
138
- title: "Meta description",
139
- type: "TextArea",
140
- key: "metaDescription",
141
- },
142
- {
143
- title: "Keywords",
144
- type: "TagsField",
145
- key: "metaKeywords",
146
- },
147
- {
148
- title: "Canonical URL",
149
- type: "TextField",
150
- key: "canonicalURL",
151
- },
152
- {
153
- title: "Meta robots index",
154
- type: "RadioGroup",
155
- key: "isIndexed",
156
- options: [
157
- {
158
- value: true,
159
- title: "Index",
160
- name: "index",
161
- },
162
- {
163
- value: false,
164
- title: "No index",
165
- name: "noindex",
166
- },
167
- ],
168
- },
169
- {
170
- title: "Meta robots follow",
171
- type: "RadioGroup",
172
- key: "follow",
173
- options: [
174
- {
175
- value: true,
176
- title: "Follow",
177
- name: "follow",
178
- },
179
- {
180
- value: false,
181
- title: "No follow",
182
- name: "nofollow",
183
- },
184
- ],
185
- },
186
- {
187
- title: "Meta robots advanced",
188
- type: "CheckGroup",
189
- key: "metasAdvanced",
190
- options: [
191
- {
192
- value: "noimageindex",
193
- title: "No image index",
194
- name: "noimage",
195
- },
196
- {
197
- value: "nosnippet",
198
- title: "No snippet",
199
- name: "nosnippet",
200
- },
201
- {
202
- value: "noodp",
203
- title: "No ODP",
204
- name: "noodp",
205
- },
206
- {
207
- value: "noarchive",
208
- title: "No archive",
209
- name: "noarchive",
210
- },
211
- {
212
- value: "noTranslate",
213
- title: "No translate",
214
- name: "noTranslate",
215
- },
216
- ],
217
- },
218
- ],
219
- },
220
- {
221
- title: "GEO (LLMS)",
222
- type: "FieldGroup",
223
- key: "geo",
224
- collapsed: true,
225
- fields: [
226
- {
227
- type: "UniqueCheck",
228
- key: "isLlmsEnabled",
229
- options: [
230
- { "title": "Include this page in LLMs.txt" }
231
- ],
232
- description: "If enabled, this page will be listed in LLMs.txt for language models."
233
- },
234
- ],
235
- },
236
- {
237
- title: "Analytics Data Layer",
238
- type: "FieldGroup",
239
- key: "analytics",
240
- collapsed: true,
241
- fields: [
242
- {
243
- type: "AnalyticsField",
244
- key: "dimensions",
245
- collapsed: true,
246
- },
247
- ],
248
- },
249
- {
250
- title: "Social Media",
251
- type: "FieldGroup",
252
- key: "socialShare",
253
- collapsed: true,
254
- fields: [
255
- {
256
- title: "Title",
257
- type: "TextField",
258
- key: "socialTitle",
259
- },
260
- {
261
- title: "Description",
262
- type: "TextField",
263
- key: "socialDescription",
264
- },
265
- {
266
- title: "Image",
267
- type: "ImageField",
268
- key: "socialImage",
269
- },
270
- ],
271
- },
272
- ],
273
- },
274
- ],
275
- default: {
276
- component: "Page",
277
- isHome: false,
278
- slug: "new-page",
279
- title: "New Page",
280
- headerConfig: "{}",
281
- footerConfig: "{}",
282
- liveStatus: { id: 1 },
283
- template: {},
284
- metaTitle: "",
285
- metaDescription: "",
286
- canonicalURL: "",
287
- isIndexed: true,
288
- follow: true,
289
- metasAdvanced: "",
290
- socialTitle: "",
291
- socialDescription: "",
292
- socialImage: {},
293
- dimensions: {},
294
- integrations: null,
295
- theme: null,
296
- customizeThemes: false,
297
- headerTheme: null,
298
- footerTheme: null,
299
- isLlmsEnabled: true,
300
- },
301
- };
@@ -1,5 +0,0 @@
1
- import Page from "./Page";
2
- import GlobalPage from "./GlobalPage";
3
- import FormPage from "./FormPage";
4
-
5
- export default { Page, GlobalPage, FormPage };
File without changes