nextjs-cms 0.5.9 → 0.5.10
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/dist/api/axios/axiosInstance.d.ts +1 -1
- package/dist/api/axios/axiosInstance.js +8 -8
- package/dist/api/index.d.ts +855 -855
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +12 -12
- package/dist/api/lib/serverActions.d.ts +239 -239
- package/dist/api/lib/serverActions.d.ts.map +1 -1
- package/dist/api/lib/serverActions.js +834 -834
- package/dist/api/root.d.ts +828 -828
- package/dist/api/root.js +30 -30
- package/dist/api/routers/accountSettings.d.ts +60 -60
- package/dist/api/routers/accountSettings.js +108 -108
- package/dist/api/routers/admins.d.ts +105 -105
- package/dist/api/routers/admins.js +219 -219
- package/dist/api/routers/auth.d.ts +47 -47
- package/dist/api/routers/auth.js +25 -25
- package/dist/api/routers/categorySection.d.ts +103 -103
- package/dist/api/routers/categorySection.js +38 -38
- package/dist/api/routers/cmsSettings.d.ts +48 -48
- package/dist/api/routers/cmsSettings.js +51 -51
- package/dist/api/routers/cpanel.d.ts +83 -83
- package/dist/api/routers/cpanel.js +216 -216
- package/dist/api/routers/files.d.ts +47 -47
- package/dist/api/routers/files.js +23 -23
- package/dist/api/routers/gallery.d.ts +35 -35
- package/dist/api/routers/gallery.js +62 -62
- package/dist/api/routers/googleAnalytics.d.ts +30 -30
- package/dist/api/routers/googleAnalytics.js +7 -7
- package/dist/api/routers/hasItemsSection.d.ts +139 -139
- package/dist/api/routers/hasItemsSection.js +34 -34
- package/dist/api/routers/navigation.d.ts +51 -51
- package/dist/api/routers/navigation.js +11 -11
- package/dist/api/routers/simpleSection.d.ts +57 -57
- package/dist/api/routers/simpleSection.js +12 -12
- package/dist/api/trpc.d.ts +106 -106
- package/dist/api/trpc.js +72 -72
- package/dist/auth/axios/axiosInstance.d.ts +1 -1
- package/dist/auth/axios/axiosInstance.js +8 -8
- package/dist/auth/csrf.d.ts +29 -29
- package/dist/auth/csrf.js +76 -76
- package/dist/auth/hooks/index.d.ts +3 -3
- package/dist/auth/hooks/index.d.ts.map +1 -1
- package/dist/auth/hooks/index.js +3 -3
- package/dist/auth/hooks/useAxiosPrivate.d.ts +4 -4
- package/dist/auth/hooks/useAxiosPrivate.js +74 -74
- package/dist/auth/hooks/useRefreshToken.d.ts +6 -6
- package/dist/auth/hooks/useRefreshToken.js +79 -79
- package/dist/auth/index.d.ts +22 -22
- package/dist/auth/index.js +44 -44
- package/dist/auth/jwt.d.ts +5 -5
- package/dist/auth/jwt.js +25 -25
- package/dist/auth/lib/actions.d.ts +32 -32
- package/dist/auth/lib/actions.d.ts.map +1 -1
- package/dist/auth/lib/actions.js +209 -209
- package/dist/auth/lib/client.d.ts +3 -3
- package/dist/auth/lib/client.js +46 -46
- package/dist/auth/lib/index.d.ts +2 -2
- package/dist/auth/lib/index.d.ts.map +1 -1
- package/dist/auth/lib/index.js +2 -2
- package/dist/auth/react.d.ts +105 -105
- package/dist/auth/react.d.ts.map +1 -1
- package/dist/auth/react.js +347 -347
- package/dist/auth/trpc.d.ts +5 -5
- package/dist/auth/trpc.d.ts.map +1 -1
- package/dist/auth/trpc.js +81 -81
- package/dist/core/config/config-loader.d.ts +91 -91
- package/dist/core/config/config-loader.js +230 -230
- package/dist/core/config/index.d.ts +2 -2
- package/dist/core/config/index.d.ts.map +1 -1
- package/dist/core/config/index.js +1 -1
- package/dist/core/config/loader.d.ts +1 -1
- package/dist/core/config/loader.js +42 -42
- package/dist/core/db/index.d.ts +1 -1
- package/dist/core/db/index.d.ts.map +1 -1
- package/dist/core/db/index.js +1 -1
- package/dist/core/db/table-checker/DbTable.d.ts +5 -5
- package/dist/core/db/table-checker/DbTable.js +5 -5
- package/dist/core/db/table-checker/MysqlTable.d.ts +33 -33
- package/dist/core/db/table-checker/MysqlTable.d.ts.map +1 -1
- package/dist/core/db/table-checker/MysqlTable.js +94 -94
- package/dist/core/db/table-checker/index.d.ts +1 -1
- package/dist/core/db/table-checker/index.d.ts.map +1 -1
- package/dist/core/db/table-checker/index.js +1 -1
- package/dist/core/factories/FieldFactory.d.ts +123 -123
- package/dist/core/factories/FieldFactory.d.ts.map +1 -1
- package/dist/core/factories/FieldFactory.js +411 -411
- package/dist/core/factories/SectionFactory.d.ts +109 -109
- package/dist/core/factories/SectionFactory.d.ts.map +1 -1
- package/dist/core/factories/SectionFactory.js +415 -415
- package/dist/core/factories/index.d.ts +2 -2
- package/dist/core/factories/index.d.ts.map +1 -1
- package/dist/core/factories/index.js +2 -2
- package/dist/core/fields/checkbox.d.ts +62 -62
- package/dist/core/fields/checkbox.d.ts.map +1 -1
- package/dist/core/fields/checkbox.js +62 -62
- package/dist/core/fields/color.d.ts +83 -83
- package/dist/core/fields/color.d.ts.map +1 -1
- package/dist/core/fields/color.js +91 -91
- package/dist/core/fields/date.d.ts +99 -99
- package/dist/core/fields/date.d.ts.map +1 -1
- package/dist/core/fields/date.js +108 -108
- package/dist/core/fields/document.d.ts +179 -179
- package/dist/core/fields/document.d.ts.map +1 -1
- package/dist/core/fields/document.js +277 -277
- package/dist/core/fields/field-group.d.ts +17 -17
- package/dist/core/fields/field-group.d.ts.map +1 -1
- package/dist/core/fields/field-group.js +6 -6
- package/dist/core/fields/field.d.ts +125 -125
- package/dist/core/fields/field.d.ts.map +1 -1
- package/dist/core/fields/field.js +148 -148
- package/dist/core/fields/fileField.d.ts +14 -14
- package/dist/core/fields/fileField.d.ts.map +1 -1
- package/dist/core/fields/fileField.js +5 -5
- package/dist/core/fields/index.d.ts +64 -64
- package/dist/core/fields/index.d.ts.map +1 -1
- package/dist/core/fields/index.js +18 -18
- package/dist/core/fields/map.d.ts +166 -166
- package/dist/core/fields/map.d.ts.map +1 -1
- package/dist/core/fields/map.js +152 -152
- package/dist/core/fields/number.d.ts +185 -185
- package/dist/core/fields/number.d.ts.map +1 -1
- package/dist/core/fields/number.js +241 -241
- package/dist/core/fields/password.d.ts +108 -108
- package/dist/core/fields/password.d.ts.map +1 -1
- package/dist/core/fields/password.js +133 -133
- package/dist/core/fields/photo.d.ts +288 -288
- package/dist/core/fields/photo.d.ts.map +1 -1
- package/dist/core/fields/photo.js +410 -410
- package/dist/core/fields/richText.d.ts +294 -294
- package/dist/core/fields/richText.d.ts.map +1 -1
- package/dist/core/fields/richText.js +338 -338
- package/dist/core/fields/select.d.ts +365 -365
- package/dist/core/fields/select.d.ts.map +1 -1
- package/dist/core/fields/select.js +499 -499
- package/dist/core/fields/selectMultiple.d.ts +235 -235
- package/dist/core/fields/selectMultiple.d.ts.map +1 -1
- package/dist/core/fields/selectMultiple.js +417 -417
- package/dist/core/fields/tags.d.ts +130 -130
- package/dist/core/fields/tags.d.ts.map +1 -1
- package/dist/core/fields/tags.js +105 -105
- package/dist/core/fields/text.d.ts +135 -135
- package/dist/core/fields/text.d.ts.map +1 -1
- package/dist/core/fields/text.js +157 -157
- package/dist/core/fields/textArea.d.ts +106 -106
- package/dist/core/fields/textArea.d.ts.map +1 -1
- package/dist/core/fields/textArea.js +126 -126
- package/dist/core/fields/video.d.ts +147 -147
- package/dist/core/fields/video.d.ts.map +1 -1
- package/dist/core/fields/video.js +248 -248
- package/dist/core/helpers/entity.d.ts +7 -7
- package/dist/core/helpers/entity.js +27 -27
- package/dist/core/helpers/index.d.ts +4 -4
- package/dist/core/helpers/index.d.ts.map +1 -1
- package/dist/core/helpers/index.js +3 -3
- package/dist/core/index.d.ts +7 -7
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +7 -7
- package/dist/core/sections/category.d.ts +282 -282
- package/dist/core/sections/category.d.ts.map +1 -1
- package/dist/core/sections/category.js +147 -147
- package/dist/core/sections/hasItems.d.ts +631 -631
- package/dist/core/sections/hasItems.d.ts.map +1 -1
- package/dist/core/sections/hasItems.js +144 -144
- package/dist/core/sections/index.d.ts +4 -4
- package/dist/core/sections/index.d.ts.map +1 -1
- package/dist/core/sections/index.js +4 -4
- package/dist/core/sections/section.d.ts +225 -225
- package/dist/core/sections/section.d.ts.map +1 -1
- package/dist/core/sections/section.js +341 -341
- package/dist/core/sections/simple.d.ts +98 -98
- package/dist/core/sections/simple.d.ts.map +1 -1
- package/dist/core/sections/simple.js +95 -95
- package/dist/core/security/dom.d.ts +10 -10
- package/dist/core/security/dom.js +92 -92
- package/dist/core/submit/ItemEditSubmit.d.ts +75 -75
- package/dist/core/submit/ItemEditSubmit.js +186 -186
- package/dist/core/submit/NewItemSubmit.d.ts +13 -13
- package/dist/core/submit/NewItemSubmit.js +93 -93
- package/dist/core/submit/SimpleSectionSubmit.d.ts +12 -12
- package/dist/core/submit/SimpleSectionSubmit.js +93 -93
- package/dist/core/submit/index.d.ts +4 -4
- package/dist/core/submit/index.js +4 -4
- package/dist/core/submit/submit.d.ts +115 -115
- package/dist/core/submit/submit.js +479 -479
- package/dist/core/types/index.d.ts +279 -279
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/core/types/index.js +1 -1
- package/dist/db/client.d.ts +8 -8
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +19 -19
- package/dist/db/config.d.ts +5 -5
- package/dist/db/config.js +22 -22
- package/dist/db/drizzle.config.d.ts +5 -5
- package/dist/db/drizzle.config.js +18 -18
- package/dist/db/index.d.ts +2 -2
- package/dist/db/index.js +3 -3
- package/dist/db/schema.d.ts +638 -638
- package/dist/db/schema.js +73 -73
- package/dist/index.d.ts +7 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -7
- package/dist/translations/index.d.ts +2 -2
- package/dist/translations/index.js +15 -15
- package/dist/utils/CpanelApi.d.ts +24 -24
- package/dist/utils/CpanelApi.js +64 -64
- package/dist/utils/constants.d.ts +13 -13
- package/dist/utils/constants.js +61 -61
- package/dist/utils/index.d.ts +4 -4
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +4 -4
- package/dist/utils/utils.d.ts +59 -59
- package/dist/utils/utils.js +132 -132
- package/dist/validators/checkbox.d.ts +3 -3
- package/dist/validators/checkbox.d.ts.map +1 -1
- package/dist/validators/checkbox.js +12 -12
- package/dist/validators/color.d.ts +3 -3
- package/dist/validators/color.d.ts.map +1 -1
- package/dist/validators/color.js +7 -7
- package/dist/validators/date.d.ts +3 -3
- package/dist/validators/date.d.ts.map +1 -1
- package/dist/validators/date.js +5 -5
- package/dist/validators/document.d.ts +3 -3
- package/dist/validators/document.d.ts.map +1 -1
- package/dist/validators/document.js +57 -57
- package/dist/validators/index.d.ts +14 -14
- package/dist/validators/index.d.ts.map +1 -1
- package/dist/validators/index.js +14 -14
- package/dist/validators/map.d.ts +3 -3
- package/dist/validators/map.d.ts.map +1 -1
- package/dist/validators/map.js +5 -5
- package/dist/validators/number.d.ts +3 -3
- package/dist/validators/number.d.ts.map +1 -1
- package/dist/validators/number.js +20 -20
- package/dist/validators/password.d.ts +3 -3
- package/dist/validators/password.d.ts.map +1 -1
- package/dist/validators/password.js +11 -11
- package/dist/validators/photo.d.ts +3 -3
- package/dist/validators/photo.d.ts.map +1 -1
- package/dist/validators/photo.js +100 -100
- package/dist/validators/richText.d.ts +3 -3
- package/dist/validators/richText.d.ts.map +1 -1
- package/dist/validators/richText.js +8 -8
- package/dist/validators/select-multiple.d.ts +9 -9
- package/dist/validators/select-multiple.d.ts.map +1 -1
- package/dist/validators/select-multiple.js +20 -20
- package/dist/validators/select.d.ts +3 -3
- package/dist/validators/select.d.ts.map +1 -1
- package/dist/validators/select.js +5 -5
- package/dist/validators/text.d.ts +3 -3
- package/dist/validators/text.d.ts.map +1 -1
- package/dist/validators/text.js +7 -7
- package/dist/validators/textarea.d.ts +3 -3
- package/dist/validators/textarea.d.ts.map +1 -1
- package/dist/validators/textarea.js +7 -7
- package/dist/validators/video.d.ts +3 -3
- package/dist/validators/video.d.ts.map +1 -1
- package/dist/validators/video.js +57 -57
- package/package.json +2 -3
|
@@ -1,147 +1,147 @@
|
|
|
1
|
-
import { Section, baseHelperFunctionOptionsSchema, FieldGroupConfigSchema, fieldConfigSchema } from
|
|
2
|
-
import { entityKind } from
|
|
3
|
-
import { numberField, textField } from
|
|
4
|
-
import * as z from 'zod';
|
|
5
|
-
const configSchema = z.strictObject({
|
|
6
|
-
headingField: z
|
|
7
|
-
.custom()
|
|
8
|
-
.describe('Heading field must be a config - will be resolved during instantiation'),
|
|
9
|
-
title: z
|
|
10
|
-
.strictObject({
|
|
11
|
-
section: z.string().describe('The section title'),
|
|
12
|
-
singular: z.string().describe('The singular form of the title'),
|
|
13
|
-
plural: z.string().describe('The plural form of the title'),
|
|
14
|
-
})
|
|
15
|
-
.describe('The title configuration for the category section'),
|
|
16
|
-
/**
|
|
17
|
-
* The depth of the category section is the number of nested levels of categories that can be created.
|
|
18
|
-
* For example, if the depth is 2, each category can have one subcategory.
|
|
19
|
-
* Default value is 1. (No subcategories)
|
|
20
|
-
*/
|
|
21
|
-
depth: z.number().positive().optional().describe('The depth of the category section'),
|
|
22
|
-
/**
|
|
23
|
-
* Allow recursive delete of categories children (depth > 1) when deleting the parent category.
|
|
24
|
-
* If true, all children categories will be deleted when the parent category is deleted.
|
|
25
|
-
* For this to take effect, `allowRecursiveDelete` in lz.config.ts must also be set to true.
|
|
26
|
-
* @default false
|
|
27
|
-
*/
|
|
28
|
-
allowRecursiveDelete: z.boolean().optional().describe('Allow recursive delete of categories children'),
|
|
29
|
-
// requirePublishPermission?: boolean
|
|
30
|
-
});
|
|
31
|
-
export class CategorySection extends Section {
|
|
32
|
-
static [entityKind] = 'CategorySection';
|
|
33
|
-
type = 'category';
|
|
34
|
-
title;
|
|
35
|
-
headingField;
|
|
36
|
-
depth = 1;
|
|
37
|
-
allowRecursiveDelete;
|
|
38
|
-
// private requirePublishPermission: boolean
|
|
39
|
-
constructor(config) {
|
|
40
|
-
super(config);
|
|
41
|
-
this.title = config.title;
|
|
42
|
-
this.depth = config.depth ?? 1;
|
|
43
|
-
this.headingField = config.headingField;
|
|
44
|
-
this.allowRecursiveDelete = config.allowRecursiveDelete ?? false;
|
|
45
|
-
// this.requirePublishPermission = config.requirePublishPermission
|
|
46
|
-
/**
|
|
47
|
-
* Add the parentId and level fields to the fields if the depth is greater than 1
|
|
48
|
-
* Make sure to match the identifier field type
|
|
49
|
-
*/
|
|
50
|
-
if (this.depth > 1) {
|
|
51
|
-
const levelConfig = numberField({
|
|
52
|
-
name: 'level',
|
|
53
|
-
label: 'Level',
|
|
54
|
-
required: false,
|
|
55
|
-
order: 0,
|
|
56
|
-
});
|
|
57
|
-
if (this.db.identifier.type === 'number') {
|
|
58
|
-
this._fieldConfigs?.push(numberField({
|
|
59
|
-
name: 'parent_id',
|
|
60
|
-
label: 'Parent ID',
|
|
61
|
-
required: false,
|
|
62
|
-
order: 0,
|
|
63
|
-
}), levelConfig);
|
|
64
|
-
}
|
|
65
|
-
else if (this.db.identifier.type === 'text') {
|
|
66
|
-
this._fieldConfigs?.push(textField({
|
|
67
|
-
name: 'parent_id',
|
|
68
|
-
label: 'Parent ID',
|
|
69
|
-
required: false,
|
|
70
|
-
order: 0,
|
|
71
|
-
}), levelConfig);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
const optionsSchema = z.strictObject({
|
|
77
|
-
...baseHelperFunctionOptionsSchema.shape,
|
|
78
|
-
...configSchema.shape,
|
|
79
|
-
});
|
|
80
|
-
const compiledOptionsSchema = z.strictObject({
|
|
81
|
-
...optionsSchema.shape,
|
|
82
|
-
fieldGroups: z.array(FieldGroupConfigSchema).optional().describe('The field groups of the section if provided'),
|
|
83
|
-
});
|
|
84
|
-
export const categorySectionConfigSchema = z.strictObject({
|
|
85
|
-
...compiledOptionsSchema.shape,
|
|
86
|
-
type: z.literal('category').describe('The type of the section'),
|
|
87
|
-
fields: z.array(fieldConfigSchema).describe('The fields of the section'),
|
|
88
|
-
build: z
|
|
89
|
-
.function()
|
|
90
|
-
.output(z.instanceof(CategorySection))
|
|
91
|
-
.describe('Build a CategorySection instance from this config'),
|
|
92
|
-
});
|
|
93
|
-
/**
|
|
94
|
-
* Helper function to create a category section configuration
|
|
95
|
-
* Returns a config object with a build() method that can be serialized and used anywhere
|
|
96
|
-
*
|
|
97
|
-
* @example
|
|
98
|
-
* ```typescript
|
|
99
|
-
* const sectionConfig = categorySection({ name: 'categories', ... })
|
|
100
|
-
* const sectionInstance = sectionConfig.build()
|
|
101
|
-
* ```
|
|
102
|
-
*
|
|
103
|
-
* @param section
|
|
104
|
-
*/
|
|
105
|
-
export function categorySection(section) {
|
|
106
|
-
/**
|
|
107
|
-
* Validate the section config
|
|
108
|
-
*/
|
|
109
|
-
const result = optionsSchema.safeParse(section);
|
|
110
|
-
if (!result.success) {
|
|
111
|
-
throw new Error(`[Section: ${section.name}]: ${z.prettifyError(result.error)}`);
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Resolve fields and fieldGroups
|
|
115
|
-
*/
|
|
116
|
-
let fields = [];
|
|
117
|
-
let fieldGroups = [];
|
|
118
|
-
if (section.fields && section.fields.length > 0) {
|
|
119
|
-
const firstInput = section.fields[0];
|
|
120
|
-
/**
|
|
121
|
-
* Check if the first item is a field group.
|
|
122
|
-
* We don't need to check every item,
|
|
123
|
-
* because zod already validated the fields array.
|
|
124
|
-
*/
|
|
125
|
-
if (firstInput && 'fields' in firstInput) {
|
|
126
|
-
fieldGroups = section.fields;
|
|
127
|
-
fields = fieldGroups.flatMap((group) => group.fields);
|
|
128
|
-
}
|
|
129
|
-
else {
|
|
130
|
-
fields = section.fields;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
const config = {
|
|
134
|
-
...section,
|
|
135
|
-
fields,
|
|
136
|
-
fieldGroups: fieldGroups.length > 0 ? fieldGroups : undefined,
|
|
137
|
-
type: 'category',
|
|
138
|
-
build() {
|
|
139
|
-
return new CategorySection({
|
|
140
|
-
...section,
|
|
141
|
-
fields,
|
|
142
|
-
fieldGroups: fieldGroups.length > 0 ? fieldGroups : undefined,
|
|
143
|
-
});
|
|
144
|
-
},
|
|
145
|
-
};
|
|
146
|
-
return config;
|
|
147
|
-
}
|
|
1
|
+
import { Section, baseHelperFunctionOptionsSchema, FieldGroupConfigSchema, fieldConfigSchema } from './section.js';
|
|
2
|
+
import { entityKind } from '../helpers/index.js';
|
|
3
|
+
import { numberField, textField } from '../fields/index.js';
|
|
4
|
+
import * as z from 'zod';
|
|
5
|
+
const configSchema = z.strictObject({
|
|
6
|
+
headingField: z
|
|
7
|
+
.custom()
|
|
8
|
+
.describe('Heading field must be a config - will be resolved during instantiation'),
|
|
9
|
+
title: z
|
|
10
|
+
.strictObject({
|
|
11
|
+
section: z.string().describe('The section title'),
|
|
12
|
+
singular: z.string().describe('The singular form of the title'),
|
|
13
|
+
plural: z.string().describe('The plural form of the title'),
|
|
14
|
+
})
|
|
15
|
+
.describe('The title configuration for the category section'),
|
|
16
|
+
/**
|
|
17
|
+
* The depth of the category section is the number of nested levels of categories that can be created.
|
|
18
|
+
* For example, if the depth is 2, each category can have one subcategory.
|
|
19
|
+
* Default value is 1. (No subcategories)
|
|
20
|
+
*/
|
|
21
|
+
depth: z.number().positive().optional().describe('The depth of the category section'),
|
|
22
|
+
/**
|
|
23
|
+
* Allow recursive delete of categories children (depth > 1) when deleting the parent category.
|
|
24
|
+
* If true, all children categories will be deleted when the parent category is deleted.
|
|
25
|
+
* For this to take effect, `allowRecursiveDelete` in lz.config.ts must also be set to true.
|
|
26
|
+
* @default false
|
|
27
|
+
*/
|
|
28
|
+
allowRecursiveDelete: z.boolean().optional().describe('Allow recursive delete of categories children'),
|
|
29
|
+
// requirePublishPermission?: boolean
|
|
30
|
+
});
|
|
31
|
+
export class CategorySection extends Section {
|
|
32
|
+
static [entityKind] = 'CategorySection';
|
|
33
|
+
type = 'category';
|
|
34
|
+
title;
|
|
35
|
+
headingField;
|
|
36
|
+
depth = 1;
|
|
37
|
+
allowRecursiveDelete;
|
|
38
|
+
// private requirePublishPermission: boolean
|
|
39
|
+
constructor(config) {
|
|
40
|
+
super(config);
|
|
41
|
+
this.title = config.title;
|
|
42
|
+
this.depth = config.depth ?? 1;
|
|
43
|
+
this.headingField = config.headingField;
|
|
44
|
+
this.allowRecursiveDelete = config.allowRecursiveDelete ?? false;
|
|
45
|
+
// this.requirePublishPermission = config.requirePublishPermission
|
|
46
|
+
/**
|
|
47
|
+
* Add the parentId and level fields to the fields if the depth is greater than 1
|
|
48
|
+
* Make sure to match the identifier field type
|
|
49
|
+
*/
|
|
50
|
+
if (this.depth > 1) {
|
|
51
|
+
const levelConfig = numberField({
|
|
52
|
+
name: 'level',
|
|
53
|
+
label: 'Level',
|
|
54
|
+
required: false,
|
|
55
|
+
order: 0,
|
|
56
|
+
});
|
|
57
|
+
if (this.db.identifier.type === 'number') {
|
|
58
|
+
this._fieldConfigs?.push(numberField({
|
|
59
|
+
name: 'parent_id',
|
|
60
|
+
label: 'Parent ID',
|
|
61
|
+
required: false,
|
|
62
|
+
order: 0,
|
|
63
|
+
}), levelConfig);
|
|
64
|
+
}
|
|
65
|
+
else if (this.db.identifier.type === 'text') {
|
|
66
|
+
this._fieldConfigs?.push(textField({
|
|
67
|
+
name: 'parent_id',
|
|
68
|
+
label: 'Parent ID',
|
|
69
|
+
required: false,
|
|
70
|
+
order: 0,
|
|
71
|
+
}), levelConfig);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const optionsSchema = z.strictObject({
|
|
77
|
+
...baseHelperFunctionOptionsSchema.shape,
|
|
78
|
+
...configSchema.shape,
|
|
79
|
+
});
|
|
80
|
+
const compiledOptionsSchema = z.strictObject({
|
|
81
|
+
...optionsSchema.shape,
|
|
82
|
+
fieldGroups: z.array(FieldGroupConfigSchema).optional().describe('The field groups of the section if provided'),
|
|
83
|
+
});
|
|
84
|
+
export const categorySectionConfigSchema = z.strictObject({
|
|
85
|
+
...compiledOptionsSchema.shape,
|
|
86
|
+
type: z.literal('category').describe('The type of the section'),
|
|
87
|
+
fields: z.array(fieldConfigSchema).describe('The fields of the section'),
|
|
88
|
+
build: z
|
|
89
|
+
.function()
|
|
90
|
+
.output(z.instanceof(CategorySection))
|
|
91
|
+
.describe('Build a CategorySection instance from this config'),
|
|
92
|
+
});
|
|
93
|
+
/**
|
|
94
|
+
* Helper function to create a category section configuration
|
|
95
|
+
* Returns a config object with a build() method that can be serialized and used anywhere
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* ```typescript
|
|
99
|
+
* const sectionConfig = categorySection({ name: 'categories', ... })
|
|
100
|
+
* const sectionInstance = sectionConfig.build()
|
|
101
|
+
* ```
|
|
102
|
+
*
|
|
103
|
+
* @param section
|
|
104
|
+
*/
|
|
105
|
+
export function categorySection(section) {
|
|
106
|
+
/**
|
|
107
|
+
* Validate the section config
|
|
108
|
+
*/
|
|
109
|
+
const result = optionsSchema.safeParse(section);
|
|
110
|
+
if (!result.success) {
|
|
111
|
+
throw new Error(`[Section: ${section.name}]: ${z.prettifyError(result.error)}`);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Resolve fields and fieldGroups
|
|
115
|
+
*/
|
|
116
|
+
let fields = [];
|
|
117
|
+
let fieldGroups = [];
|
|
118
|
+
if (section.fields && section.fields.length > 0) {
|
|
119
|
+
const firstInput = section.fields[0];
|
|
120
|
+
/**
|
|
121
|
+
* Check if the first item is a field group.
|
|
122
|
+
* We don't need to check every item,
|
|
123
|
+
* because zod already validated the fields array.
|
|
124
|
+
*/
|
|
125
|
+
if (firstInput && 'fields' in firstInput) {
|
|
126
|
+
fieldGroups = section.fields;
|
|
127
|
+
fields = fieldGroups.flatMap((group) => group.fields);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
fields = section.fields;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
const config = {
|
|
134
|
+
...section,
|
|
135
|
+
fields,
|
|
136
|
+
fieldGroups: fieldGroups.length > 0 ? fieldGroups : undefined,
|
|
137
|
+
type: 'category',
|
|
138
|
+
build() {
|
|
139
|
+
return new CategorySection({
|
|
140
|
+
...section,
|
|
141
|
+
fields,
|
|
142
|
+
fieldGroups: fieldGroups.length > 0 ? fieldGroups : undefined,
|
|
143
|
+
});
|
|
144
|
+
},
|
|
145
|
+
};
|
|
146
|
+
return config;
|
|
147
|
+
}
|