nextjs-cms 0.5.9 → 0.5.11
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 +4 -5
package/dist/core/fields/map.js
CHANGED
|
@@ -1,152 +1,152 @@
|
|
|
1
|
-
import { Field, baseFieldConfigSchema } from
|
|
2
|
-
import { entityKind } from
|
|
3
|
-
import * as z from 'zod';
|
|
4
|
-
const configSchema = z.strictObject({
|
|
5
|
-
center: z
|
|
6
|
-
.strictObject({
|
|
7
|
-
lat: z.number().describe('The latitude'),
|
|
8
|
-
lng: z.number().describe('The longitude'),
|
|
9
|
-
})
|
|
10
|
-
.optional()
|
|
11
|
-
.describe('The center coordinates of the map'),
|
|
12
|
-
/**
|
|
13
|
-
* The default value of the field.
|
|
14
|
-
* If set, the field will be pre-populated with this value when the form is loaded.
|
|
15
|
-
* If `adminGenerated` is not true, the field will be included when submitting the form with this value.
|
|
16
|
-
*/
|
|
17
|
-
defaultValue: z
|
|
18
|
-
.strictObject({
|
|
19
|
-
lat: z.number().describe('The default latitude'),
|
|
20
|
-
lng: z.number().describe('The default longitude'),
|
|
21
|
-
})
|
|
22
|
-
.optional()
|
|
23
|
-
.describe('The default value of the field'),
|
|
24
|
-
zoom: z.number().optional().describe('The zoom level of the map'),
|
|
25
|
-
minZoom: z.number().optional().describe('The minimum zoom level of the map'),
|
|
26
|
-
latLngBounds: z
|
|
27
|
-
.strictObject({
|
|
28
|
-
north: z.number().describe('The northern boundary'),
|
|
29
|
-
south: z.number().describe('The southern boundary'),
|
|
30
|
-
west: z.number().describe('The western boundary'),
|
|
31
|
-
east: z.number().describe('The eastern boundary'),
|
|
32
|
-
})
|
|
33
|
-
.optional()
|
|
34
|
-
.describe('The latitude/longitude bounds of the map'),
|
|
35
|
-
});
|
|
36
|
-
export class MapField extends Field {
|
|
37
|
-
static [entityKind] = 'MapField';
|
|
38
|
-
/**
|
|
39
|
-
* The value of the map field is an object with `lat` and `lng` properties
|
|
40
|
-
*/
|
|
41
|
-
value;
|
|
42
|
-
_defaultValue;
|
|
43
|
-
zoom;
|
|
44
|
-
minZoom;
|
|
45
|
-
latLngBounds;
|
|
46
|
-
center;
|
|
47
|
-
constructor(config) {
|
|
48
|
-
super(config, 'map');
|
|
49
|
-
this.zoom = config.zoom || 3;
|
|
50
|
-
this.minZoom = config.minZoom || 1;
|
|
51
|
-
this.center = config.center || {
|
|
52
|
-
// Defaults to center of the world
|
|
53
|
-
lat: 39.8283,
|
|
54
|
-
lng: 34.2716,
|
|
55
|
-
};
|
|
56
|
-
this.latLngBounds = config.latLngBounds || {
|
|
57
|
-
// Defaults to the whole world bounds
|
|
58
|
-
north: 85,
|
|
59
|
-
south: -85,
|
|
60
|
-
west: -180,
|
|
61
|
-
east: 180,
|
|
62
|
-
};
|
|
63
|
-
this.value = config.defaultValue;
|
|
64
|
-
this._defaultValue = config.defaultValue;
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Get the value of the field as a string
|
|
68
|
-
*/
|
|
69
|
-
getValue() {
|
|
70
|
-
return `${this.value?.lat},${this.value?.lng}`;
|
|
71
|
-
}
|
|
72
|
-
exportForClient() {
|
|
73
|
-
return {
|
|
74
|
-
...super.exportForClient(),
|
|
75
|
-
zoom: this.zoom,
|
|
76
|
-
minZoom: this.minZoom,
|
|
77
|
-
center: this.center,
|
|
78
|
-
latLngBounds: this.latLngBounds,
|
|
79
|
-
value: this.value,
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Set the value of the field from a string
|
|
84
|
-
* @param value
|
|
85
|
-
*/
|
|
86
|
-
setValue(value) {
|
|
87
|
-
if (value) {
|
|
88
|
-
value = value.replace(/\s+/g, '');
|
|
89
|
-
const [lat, lng] = value.split(',').map(Number);
|
|
90
|
-
this.value = lat && lng ? { lat, lng } : undefined;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
checkRequired() {
|
|
94
|
-
/**
|
|
95
|
-
* Check if the field is required
|
|
96
|
-
*/
|
|
97
|
-
if (this.required) {
|
|
98
|
-
if (!this.value) {
|
|
99
|
-
throw new Error(`${this.label}: field is required`);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
hasSqlNameAndValue() {
|
|
104
|
-
/**
|
|
105
|
-
* Include the field in the SQL if it is admin-generated, or not admin-generated but has a default value
|
|
106
|
-
*/
|
|
107
|
-
return this.adminGenerated === true || this._defaultValue !== undefined;
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Prepare the field for submission
|
|
111
|
-
*/
|
|
112
|
-
async prepareForSubmission() {
|
|
113
|
-
/**
|
|
114
|
-
* Check if the value if well formatted as `lat,lng` string
|
|
115
|
-
*/
|
|
116
|
-
if (!/^-?\d+(\.\d+)?,-?\d+(\.\d+)?$/.test(`${this.value?.lat},${this.value?.lng}`)) {
|
|
117
|
-
throw new Error(`${this.label}: value is not well formatted, it should be of format: "number,number"`);
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
const optionsSchema = z.strictObject({
|
|
122
|
-
...baseFieldConfigSchema.shape,
|
|
123
|
-
...configSchema.shape,
|
|
124
|
-
});
|
|
125
|
-
const mapFieldConfigSchema = z.strictObject({
|
|
126
|
-
...optionsSchema.shape,
|
|
127
|
-
type: z.literal('map').describe('The type of the field'),
|
|
128
|
-
build: z.function().output(z.instanceof(MapField)).describe('Build a MapField instance from this config'),
|
|
129
|
-
});
|
|
130
|
-
/**
|
|
131
|
-
* Helper function to create a map field configuration
|
|
132
|
-
* Returns a config object with a build() method that can be serialized and used anywhere
|
|
133
|
-
* @param field
|
|
134
|
-
*/
|
|
135
|
-
export function mapField(field) {
|
|
136
|
-
/**
|
|
137
|
-
* Validate the field config
|
|
138
|
-
*/
|
|
139
|
-
const result = optionsSchema.safeParse(field);
|
|
140
|
-
if (!result.success) {
|
|
141
|
-
throw new Error(`[Field: ${field.name}]: ${z.prettifyError(result.error)}`);
|
|
142
|
-
}
|
|
143
|
-
const config = {
|
|
144
|
-
...field,
|
|
145
|
-
type: 'map',
|
|
146
|
-
build() {
|
|
147
|
-
// Use the original field config directly (it doesn't have build() method)
|
|
148
|
-
return new MapField(field);
|
|
149
|
-
},
|
|
150
|
-
};
|
|
151
|
-
return config;
|
|
152
|
-
}
|
|
1
|
+
import { Field, baseFieldConfigSchema } from './field.js';
|
|
2
|
+
import { entityKind } from '../helpers/index.js';
|
|
3
|
+
import * as z from 'zod';
|
|
4
|
+
const configSchema = z.strictObject({
|
|
5
|
+
center: z
|
|
6
|
+
.strictObject({
|
|
7
|
+
lat: z.number().describe('The latitude'),
|
|
8
|
+
lng: z.number().describe('The longitude'),
|
|
9
|
+
})
|
|
10
|
+
.optional()
|
|
11
|
+
.describe('The center coordinates of the map'),
|
|
12
|
+
/**
|
|
13
|
+
* The default value of the field.
|
|
14
|
+
* If set, the field will be pre-populated with this value when the form is loaded.
|
|
15
|
+
* If `adminGenerated` is not true, the field will be included when submitting the form with this value.
|
|
16
|
+
*/
|
|
17
|
+
defaultValue: z
|
|
18
|
+
.strictObject({
|
|
19
|
+
lat: z.number().describe('The default latitude'),
|
|
20
|
+
lng: z.number().describe('The default longitude'),
|
|
21
|
+
})
|
|
22
|
+
.optional()
|
|
23
|
+
.describe('The default value of the field'),
|
|
24
|
+
zoom: z.number().optional().describe('The zoom level of the map'),
|
|
25
|
+
minZoom: z.number().optional().describe('The minimum zoom level of the map'),
|
|
26
|
+
latLngBounds: z
|
|
27
|
+
.strictObject({
|
|
28
|
+
north: z.number().describe('The northern boundary'),
|
|
29
|
+
south: z.number().describe('The southern boundary'),
|
|
30
|
+
west: z.number().describe('The western boundary'),
|
|
31
|
+
east: z.number().describe('The eastern boundary'),
|
|
32
|
+
})
|
|
33
|
+
.optional()
|
|
34
|
+
.describe('The latitude/longitude bounds of the map'),
|
|
35
|
+
});
|
|
36
|
+
export class MapField extends Field {
|
|
37
|
+
static [entityKind] = 'MapField';
|
|
38
|
+
/**
|
|
39
|
+
* The value of the map field is an object with `lat` and `lng` properties
|
|
40
|
+
*/
|
|
41
|
+
value;
|
|
42
|
+
_defaultValue;
|
|
43
|
+
zoom;
|
|
44
|
+
minZoom;
|
|
45
|
+
latLngBounds;
|
|
46
|
+
center;
|
|
47
|
+
constructor(config) {
|
|
48
|
+
super(config, 'map');
|
|
49
|
+
this.zoom = config.zoom || 3;
|
|
50
|
+
this.minZoom = config.minZoom || 1;
|
|
51
|
+
this.center = config.center || {
|
|
52
|
+
// Defaults to center of the world
|
|
53
|
+
lat: 39.8283,
|
|
54
|
+
lng: 34.2716,
|
|
55
|
+
};
|
|
56
|
+
this.latLngBounds = config.latLngBounds || {
|
|
57
|
+
// Defaults to the whole world bounds
|
|
58
|
+
north: 85,
|
|
59
|
+
south: -85,
|
|
60
|
+
west: -180,
|
|
61
|
+
east: 180,
|
|
62
|
+
};
|
|
63
|
+
this.value = config.defaultValue;
|
|
64
|
+
this._defaultValue = config.defaultValue;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Get the value of the field as a string
|
|
68
|
+
*/
|
|
69
|
+
getValue() {
|
|
70
|
+
return `${this.value?.lat},${this.value?.lng}`;
|
|
71
|
+
}
|
|
72
|
+
exportForClient() {
|
|
73
|
+
return {
|
|
74
|
+
...super.exportForClient(),
|
|
75
|
+
zoom: this.zoom,
|
|
76
|
+
minZoom: this.minZoom,
|
|
77
|
+
center: this.center,
|
|
78
|
+
latLngBounds: this.latLngBounds,
|
|
79
|
+
value: this.value,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Set the value of the field from a string
|
|
84
|
+
* @param value
|
|
85
|
+
*/
|
|
86
|
+
setValue(value) {
|
|
87
|
+
if (value) {
|
|
88
|
+
value = value.replace(/\s+/g, '');
|
|
89
|
+
const [lat, lng] = value.split(',').map(Number);
|
|
90
|
+
this.value = lat && lng ? { lat, lng } : undefined;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
checkRequired() {
|
|
94
|
+
/**
|
|
95
|
+
* Check if the field is required
|
|
96
|
+
*/
|
|
97
|
+
if (this.required) {
|
|
98
|
+
if (!this.value) {
|
|
99
|
+
throw new Error(`${this.label}: field is required`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
hasSqlNameAndValue() {
|
|
104
|
+
/**
|
|
105
|
+
* Include the field in the SQL if it is admin-generated, or not admin-generated but has a default value
|
|
106
|
+
*/
|
|
107
|
+
return this.adminGenerated === true || this._defaultValue !== undefined;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Prepare the field for submission
|
|
111
|
+
*/
|
|
112
|
+
async prepareForSubmission() {
|
|
113
|
+
/**
|
|
114
|
+
* Check if the value if well formatted as `lat,lng` string
|
|
115
|
+
*/
|
|
116
|
+
if (!/^-?\d+(\.\d+)?,-?\d+(\.\d+)?$/.test(`${this.value?.lat},${this.value?.lng}`)) {
|
|
117
|
+
throw new Error(`${this.label}: value is not well formatted, it should be of format: "number,number"`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
const optionsSchema = z.strictObject({
|
|
122
|
+
...baseFieldConfigSchema.shape,
|
|
123
|
+
...configSchema.shape,
|
|
124
|
+
});
|
|
125
|
+
const mapFieldConfigSchema = z.strictObject({
|
|
126
|
+
...optionsSchema.shape,
|
|
127
|
+
type: z.literal('map').describe('The type of the field'),
|
|
128
|
+
build: z.function().output(z.instanceof(MapField)).describe('Build a MapField instance from this config'),
|
|
129
|
+
});
|
|
130
|
+
/**
|
|
131
|
+
* Helper function to create a map field configuration
|
|
132
|
+
* Returns a config object with a build() method that can be serialized and used anywhere
|
|
133
|
+
* @param field
|
|
134
|
+
*/
|
|
135
|
+
export function mapField(field) {
|
|
136
|
+
/**
|
|
137
|
+
* Validate the field config
|
|
138
|
+
*/
|
|
139
|
+
const result = optionsSchema.safeParse(field);
|
|
140
|
+
if (!result.success) {
|
|
141
|
+
throw new Error(`[Field: ${field.name}]: ${z.prettifyError(result.error)}`);
|
|
142
|
+
}
|
|
143
|
+
const config = {
|
|
144
|
+
...field,
|
|
145
|
+
type: 'map',
|
|
146
|
+
build() {
|
|
147
|
+
// Use the original field config directly (it doesn't have build() method)
|
|
148
|
+
return new MapField(field);
|
|
149
|
+
},
|
|
150
|
+
};
|
|
151
|
+
return config;
|
|
152
|
+
}
|