@webiny/api-headless-cms 0.0.0-unstable.df7a8bb475 → 0.0.0-unstable.e2758ee1cf
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/constants.d.ts +2 -1
- package/constants.js +4 -0
- package/constants.js.map +1 -1
- package/crud/contentEntry/entryDataFactories/createEntryData.js +4 -3
- package/crud/contentEntry/entryDataFactories/createEntryData.js.map +1 -1
- package/crud/contentEntry/entryDataFactories/createEntryRevisionFromData.js +4 -3
- package/crud/contentEntry/entryDataFactories/createEntryRevisionFromData.js.map +1 -1
- package/crud/contentEntry/entryDataFactories/createPublishEntryData.js +4 -1
- package/crud/contentEntry/entryDataFactories/createPublishEntryData.js.map +1 -1
- package/crud/contentEntry/entryDataFactories/createRepublishEntryData.js +4 -1
- package/crud/contentEntry/entryDataFactories/createRepublishEntryData.js.map +1 -1
- package/crud/contentEntry/entryDataFactories/createUnpublishEntryData.js +2 -1
- package/crud/contentEntry/entryDataFactories/createUnpublishEntryData.js.map +1 -1
- package/crud/contentEntry/entryDataFactories/createUpdateEntryData.js +4 -3
- package/crud/contentEntry/entryDataFactories/createUpdateEntryData.js.map +1 -1
- package/crud/contentEntry/entryDataFactories/system.d.ts +10 -0
- package/crud/contentEntry/entryDataFactories/system.js +14 -0
- package/crud/contentEntry/entryDataFactories/system.js.map +1 -0
- package/crud/contentEntry/searchableFields.js +6 -2
- package/crud/contentEntry/searchableFields.js.map +1 -1
- package/crud/contentModel/validation.d.ts +9 -9
- package/crud/contentModel/validation.js +3 -3
- package/crud/contentModel/validation.js.map +1 -1
- package/domain/contentModel/errors.d.ts +1 -1
- package/domain/contentModel/errors.js.map +1 -1
- package/domain/contentModel/schemas.d.ts +126 -8
- package/domain/contentModel/schemas.js +12 -13
- package/domain/contentModel/schemas.js.map +1 -1
- package/export/graphql/index.js +1 -1
- package/export/graphql/index.js.map +1 -1
- package/exports/api/cms/model.d.ts +1 -0
- package/exports/api/cms/model.js.map +1 -1
- package/features/contentEntry/GetUniqueFieldValues/GetUniqueFieldValuesUseCase.d.ts +2 -2
- package/features/contentEntry/GetUniqueFieldValues/GetUniqueFieldValuesUseCase.js +3 -4
- package/features/contentEntry/GetUniqueFieldValues/GetUniqueFieldValuesUseCase.js.map +1 -1
- package/features/contentModel/CreateModel/CreateModelRepository.js +4 -1
- package/features/contentModel/CreateModel/CreateModelRepository.js.map +1 -1
- package/features/contentModel/CreateModelFrom/CreateModelFromRepository.js +12 -3
- package/features/contentModel/CreateModelFrom/CreateModelFromRepository.js.map +1 -1
- package/features/contentModel/UpdateModel/UpdateModelRepository.js +8 -2
- package/features/contentModel/UpdateModel/UpdateModelRepository.js.map +1 -1
- package/features/contentModel/UpdateModel/UpdateModelUseCase.js +4 -1
- package/features/contentModel/UpdateModel/UpdateModelUseCase.js.map +1 -1
- package/features/modelBuilder/feature.js +6 -0
- package/features/modelBuilder/feature.js.map +1 -1
- package/features/modelBuilder/fields/BaseFieldBuilder.d.ts +36 -0
- package/features/modelBuilder/fields/BaseFieldBuilder.js +41 -0
- package/features/modelBuilder/fields/BaseFieldBuilder.js.map +1 -0
- package/features/modelBuilder/fields/DataFieldBuilder.d.ts +228 -0
- package/features/modelBuilder/fields/DataFieldBuilder.js +219 -0
- package/features/modelBuilder/fields/DataFieldBuilder.js.map +1 -0
- package/features/modelBuilder/fields/DynamicZoneFieldType.d.ts +2 -2
- package/features/modelBuilder/fields/DynamicZoneFieldType.js +10 -3
- package/features/modelBuilder/fields/DynamicZoneFieldType.js.map +1 -1
- package/features/modelBuilder/fields/FieldBuilder.d.ts +5 -50
- package/features/modelBuilder/fields/FieldBuilder.js +3 -165
- package/features/modelBuilder/fields/FieldBuilder.js.map +1 -1
- package/features/modelBuilder/fields/FieldBuilderRegistry.js +11 -1
- package/features/modelBuilder/fields/FieldBuilderRegistry.js.map +1 -1
- package/features/modelBuilder/fields/LayoutFieldBuilder.d.ts +7 -0
- package/features/modelBuilder/fields/LayoutFieldBuilder.js +9 -0
- package/features/modelBuilder/fields/LayoutFieldBuilder.js.map +1 -0
- package/features/modelBuilder/fields/ObjectFieldType.d.ts +4 -3
- package/features/modelBuilder/fields/ObjectFieldType.js +19 -4
- package/features/modelBuilder/fields/ObjectFieldType.js.map +1 -1
- package/features/modelBuilder/fields/UiAlertFieldType.d.ts +19 -0
- package/features/modelBuilder/fields/UiAlertFieldType.js +36 -0
- package/features/modelBuilder/fields/UiAlertFieldType.js.map +1 -0
- package/features/modelBuilder/fields/UiSeparatorFieldType.d.ts +17 -0
- package/features/modelBuilder/fields/UiSeparatorFieldType.js +31 -0
- package/features/modelBuilder/fields/UiSeparatorFieldType.js.map +1 -0
- package/features/modelBuilder/fields/UiTabsFieldType.d.ts +28 -0
- package/features/modelBuilder/fields/UiTabsFieldType.js +75 -0
- package/features/modelBuilder/fields/UiTabsFieldType.js.map +1 -0
- package/features/modelBuilder/fields/abstractions.d.ts +2 -2
- package/features/modelBuilder/fields/abstractions.js.map +1 -1
- package/features/modelBuilder/index.d.ts +3 -0
- package/features/modelBuilder/index.js +3 -0
- package/features/modelBuilder/index.js.map +1 -1
- package/features/modelBuilder/models/BaseModelBuilder.d.ts +9 -4
- package/features/modelBuilder/models/BaseModelBuilder.js +19 -0
- package/features/modelBuilder/models/BaseModelBuilder.js.map +1 -1
- package/features/modelBuilder/models/PrivateModelBuilder.js +4 -2
- package/features/modelBuilder/models/PrivateModelBuilder.js.map +1 -1
- package/features/modelBuilder/models/PublicModelBuilder.js +16 -4
- package/features/modelBuilder/models/PublicModelBuilder.js.map +1 -1
- package/graphql/index.js +2 -1
- package/graphql/index.js.map +1 -1
- package/graphql/schema/baseSchema.js +17 -15
- package/graphql/schema/baseSchema.js.map +1 -1
- package/graphql/schema/cms/createEntryResolver.d.ts +10 -0
- package/graphql/schema/cms/createEntryResolver.js +56 -0
- package/graphql/schema/cms/createEntryResolver.js.map +1 -0
- package/graphql/schema/cms/deleteEntryResolver.d.ts +10 -0
- package/graphql/schema/cms/deleteEntryResolver.js +56 -0
- package/graphql/schema/cms/deleteEntryResolver.js.map +1 -0
- package/graphql/schema/cms/getEntryResolver.d.ts +11 -0
- package/graphql/schema/cms/getEntryResolver.js +58 -0
- package/graphql/schema/cms/getEntryResolver.js.map +1 -0
- package/graphql/schema/cms/helpers/buildFieldsSelection.d.ts +23 -0
- package/graphql/schema/cms/helpers/buildFieldsSelection.js +79 -0
- package/graphql/schema/cms/helpers/buildFieldsSelection.js.map +1 -0
- package/graphql/schema/cms/helpers/getErrorMessage.d.ts +4 -0
- package/graphql/schema/cms/helpers/getErrorMessage.js +14 -0
- package/graphql/schema/cms/helpers/getErrorMessage.js.map +1 -0
- package/graphql/schema/cms/helpers/getModel.d.ts +6 -0
- package/graphql/schema/cms/helpers/getModel.js +12 -0
- package/graphql/schema/cms/helpers/getModel.js.map +1 -0
- package/graphql/schema/cms/helpers/index.d.ts +5 -0
- package/graphql/schema/cms/helpers/index.js +7 -0
- package/graphql/schema/cms/helpers/index.js.map +1 -0
- package/graphql/schema/cms/helpers/transformSortToArray.d.ts +18 -0
- package/graphql/schema/cms/helpers/transformSortToArray.js +38 -0
- package/graphql/schema/cms/helpers/transformSortToArray.js.map +1 -0
- package/graphql/schema/cms/helpers/transformWhereToNested.d.ts +17 -0
- package/graphql/schema/cms/helpers/transformWhereToNested.js +54 -0
- package/graphql/schema/cms/helpers/transformWhereToNested.js.map +1 -0
- package/graphql/schema/cms/helpers.d.ts +5 -0
- package/graphql/schema/cms/helpers.js +7 -0
- package/graphql/schema/cms/helpers.js.map +1 -0
- package/graphql/schema/cms/index.d.ts +2 -0
- package/graphql/schema/cms/index.js +26 -0
- package/graphql/schema/cms/index.js.map +1 -0
- package/graphql/schema/cms/listEntriesResolver.d.ts +14 -0
- package/graphql/schema/cms/listEntriesResolver.js +97 -0
- package/graphql/schema/cms/listEntriesResolver.js.map +1 -0
- package/graphql/schema/cms/publishEntryResolver.d.ts +10 -0
- package/graphql/schema/cms/publishEntryResolver.js +56 -0
- package/graphql/schema/cms/publishEntryResolver.js.map +1 -0
- package/graphql/schema/cms/resolvers/createEntry.d.ts +8 -0
- package/graphql/schema/cms/resolvers/createEntry.js +17 -0
- package/graphql/schema/cms/resolvers/createEntry.js.map +1 -0
- package/graphql/schema/cms/resolvers/deleteEntryRevision.d.ts +8 -0
- package/graphql/schema/cms/resolvers/deleteEntryRevision.js +17 -0
- package/graphql/schema/cms/resolvers/deleteEntryRevision.js.map +1 -0
- package/graphql/schema/cms/resolvers/getEntry.d.ts +8 -0
- package/graphql/schema/cms/resolvers/getEntry.js +17 -0
- package/graphql/schema/cms/resolvers/getEntry.js.map +1 -0
- package/graphql/schema/cms/resolvers/index.d.ts +9 -0
- package/graphql/schema/cms/resolvers/index.js +11 -0
- package/graphql/schema/cms/resolvers/index.js.map +1 -0
- package/graphql/schema/cms/resolvers/listEntries.d.ts +8 -0
- package/graphql/schema/cms/resolvers/listEntries.js +17 -0
- package/graphql/schema/cms/resolvers/listEntries.js.map +1 -0
- package/graphql/schema/cms/resolvers/mutationCms.d.ts +8 -0
- package/graphql/schema/cms/resolvers/mutationCms.js +24 -0
- package/graphql/schema/cms/resolvers/mutationCms.js.map +1 -0
- package/graphql/schema/cms/resolvers/publishEntryRevision.d.ts +8 -0
- package/graphql/schema/cms/resolvers/publishEntryRevision.js +17 -0
- package/graphql/schema/cms/resolvers/publishEntryRevision.js.map +1 -0
- package/graphql/schema/cms/resolvers/queryCms.d.ts +8 -0
- package/graphql/schema/cms/resolvers/queryCms.js +23 -0
- package/graphql/schema/cms/resolvers/queryCms.js.map +1 -0
- package/graphql/schema/cms/resolvers/unpublishEntryRevision.d.ts +8 -0
- package/graphql/schema/cms/resolvers/unpublishEntryRevision.js +17 -0
- package/graphql/schema/cms/resolvers/unpublishEntryRevision.js.map +1 -0
- package/graphql/schema/cms/resolvers/updateEntryRevision.d.ts +8 -0
- package/graphql/schema/cms/resolvers/updateEntryRevision.js +17 -0
- package/graphql/schema/cms/resolvers/updateEntryRevision.js.map +1 -0
- package/graphql/schema/cms/typeDefs/index.d.ts +3 -0
- package/graphql/schema/cms/typeDefs/index.js +5 -0
- package/graphql/schema/cms/typeDefs/index.js.map +1 -0
- package/graphql/schema/cms/typeDefs/mutation.d.ts +8 -0
- package/graphql/schema/cms/typeDefs/mutation.js +42 -0
- package/graphql/schema/cms/typeDefs/mutation.js.map +1 -0
- package/graphql/schema/cms/typeDefs/query.d.ts +8 -0
- package/graphql/schema/cms/typeDefs/query.js +35 -0
- package/graphql/schema/cms/typeDefs/query.js.map +1 -0
- package/graphql/schema/cms/typeDefs/responses.d.ts +8 -0
- package/graphql/schema/cms/typeDefs/responses.js +35 -0
- package/graphql/schema/cms/typeDefs/responses.js.map +1 -0
- package/graphql/schema/cms/unpublishEntryResolver.d.ts +10 -0
- package/graphql/schema/cms/unpublishEntryResolver.js +56 -0
- package/graphql/schema/cms/unpublishEntryResolver.js.map +1 -0
- package/graphql/schema/cms/updateEntryResolver.d.ts +11 -0
- package/graphql/schema/cms/updateEntryResolver.js +58 -0
- package/graphql/schema/cms/updateEntryResolver.js.map +1 -0
- package/graphql/schema/contentModels.js +21 -3
- package/graphql/schema/contentModels.js.map +1 -1
- package/graphql/schema/createManageSDL.js +4 -2
- package/graphql/schema/createManageSDL.js.map +1 -1
- package/graphqlFields/index.js.map +1 -1
- package/package.json +24 -23
- package/plugins/CmsModelPlugin.js +19 -4
- package/plugins/CmsModelPlugin.js.map +1 -1
- package/types/fields/objectField.d.ts +2 -0
- package/types/fields/objectField.js.map +1 -1
- package/types/model.d.ts +32 -3
- package/types/model.js.map +1 -1
- package/types/modelField.d.ts +19 -3
- package/types/modelField.js.map +1 -1
- package/types/types.d.ts +12 -9
- package/types/types.js.map +1 -1
- package/utils/createModelField.js +4 -2
- package/utils/createModelField.js.map +1 -1
- package/crud/contentEntry/entryDataFactories/state.d.ts +0 -10
- package/crud/contentEntry/entryDataFactories/state.js +0 -16
- package/crud/contentEntry/entryDataFactories/state.js.map +0 -1
- package/crud/contentModel/validateModel.d.ts +0 -9
- package/crud/contentModel/validateModel.js +0 -21
- package/crud/contentModel/validateModel.js.map +0 -1
- package/crud/contentModel/validateModelFields.d.ts +0 -9
- package/crud/contentModel/validateModelFields.js +0 -267
- package/crud/contentModel/validateModelFields.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["FieldType","FieldBuilder","DynamicZoneFieldBuilder","templates","constructor","registry","required","message","validation","name","settings","template","id","config","fieldBuilders","fields","key","fieldBuilder","Object","entries","fieldId","
|
|
1
|
+
{"version":3,"names":["FieldType","FieldBuilder","DynamicZoneFieldBuilder","templates","constructor","registry","required","message","validation","name","settings","template","id","config","fieldBuilders","fields","key","fieldBuilder","Object","entries","fieldId","result","build","type","push","field","gqlTypeName","icon","description","layout","listValidation","DynamicZoneFieldTypeFactory","create","DynamicZoneFieldType","createImplementation","implementation","dependencies"],"sources":["DynamicZoneFieldType.ts"],"sourcesContent":["import { FieldType, type IFieldTypeFactory } from \"./abstractions.js\";\nimport { type FieldBuildResult } from \"./BaseFieldBuilder.js\";\nimport { FieldBuilder, type BaseFieldBuilder } from \"./FieldBuilder.js\";\nimport { type IFieldBuilderRegistry } from \"../abstractions.js\";\nimport type { CmsIcon, CmsModelField, CmsModelFieldValidation } from \"~/types/index.js\";\n\ninterface IDynamicZoneTemplate {\n id: string;\n name: string;\n gqlTypeName: string;\n icon: CmsIcon | undefined;\n description: string;\n fields: any[];\n layout: string[][];\n validation: CmsModelFieldValidation[];\n}\n\nexport interface IDynamicZoneFieldBuilder extends FieldBuilder<\"dynamicZone\"> {\n required(message?: string): this;\n template(\n id: string,\n config: {\n name: string;\n gqlTypeName: string;\n icon?: CmsIcon;\n description?: string;\n fields: (registry: IFieldBuilderRegistry) => Record<string, BaseFieldBuilder<any>>;\n layout?: string[][];\n }\n ): this;\n}\n\ninterface IDynamicZoneFieldBuilderTemplateConfig {\n name: string;\n gqlTypeName: string;\n icon?: CmsIcon;\n description?: string;\n fields: (registry: IFieldBuilderRegistry) => Record<string, BaseFieldBuilder<any>>;\n layout?: string[][];\n}\n\nclass DynamicZoneFieldBuilder\n extends FieldBuilder<\"dynamicZone\">\n implements IDynamicZoneFieldBuilder\n{\n private readonly templates: IDynamicZoneTemplate[] = [];\n\n public constructor(private registry: IFieldBuilderRegistry) {\n super(\"dynamicZone\");\n }\n\n public required(message?: string): this {\n return this.validation({\n name: \"required\",\n message: message || \"Field is required\",\n settings: {}\n });\n }\n\n public template(id: string, config: IDynamicZoneFieldBuilderTemplateConfig): this {\n const fieldBuilders = config.fields(this.registry);\n const fields: CmsModelField[] = [];\n\n for (const [key, fieldBuilder] of Object.entries(fieldBuilders)) {\n fieldBuilder.fieldId(key);\n const result: FieldBuildResult = (fieldBuilder as any).build();\n if (result.type === \"data\") {\n fields.push(result.field);\n } else if (result.fields) {\n fields.push(...result.fields);\n }\n }\n\n this.templates.push({\n id,\n name: config.name,\n gqlTypeName: config.gqlTypeName,\n icon: config.icon,\n description: config.description || \"\",\n fields,\n layout: config.layout || [],\n validation: []\n });\n\n return this;\n }\n\n public override build() {\n // Set templates in settings before building\n this.config.settings = this.config.settings || {};\n this.config.settings.templates = this.templates;\n this.config.listValidation = [{ name: \"dynamicZone\", message: \"\" }];\n return super.build();\n }\n}\n\nclass DynamicZoneFieldTypeFactory implements IFieldTypeFactory {\n public readonly type = \"dynamicZone\";\n\n public create(registry: IFieldBuilderRegistry): IDynamicZoneFieldBuilder {\n return new DynamicZoneFieldBuilder(registry);\n }\n}\n\nexport const DynamicZoneFieldType = FieldType.createImplementation({\n implementation: DynamicZoneFieldTypeFactory,\n dependencies: []\n});\n\n// Module augmentation for TypeScript autocomplete\ndeclare module \"../abstractions.js\" {\n interface IFieldBuilderRegistry {\n dynamicZone(): IDynamicZoneFieldBuilder;\n }\n}\n"],"mappings":"AAAA,SAASA,SAAS;AAElB,SAASC,YAAY;AAuCrB,MAAMC,uBAAuB,SACjBD,YAAY,CAExB;EACqBE,SAAS,GAA2B,EAAE;EAEhDC,WAAWA,CAASC,QAA+B,EAAE;IACxD,KAAK,CAAC,aAAa,CAAC;IAAC,KADEA,QAA+B,GAA/BA,QAA+B;EAE1D;EAEOC,QAAQA,CAACC,OAAgB,EAAQ;IACpC,OAAO,IAAI,CAACC,UAAU,CAAC;MACnBC,IAAI,EAAE,UAAU;MAChBF,OAAO,EAAEA,OAAO,IAAI,mBAAmB;MACvCG,QAAQ,EAAE,CAAC;IACf,CAAC,CAAC;EACN;EAEOC,QAAQA,CAACC,EAAU,EAAEC,MAA8C,EAAQ;IAC9E,MAAMC,aAAa,GAAGD,MAAM,CAACE,MAAM,CAAC,IAAI,CAACV,QAAQ,CAAC;IAClD,MAAMU,MAAuB,GAAG,EAAE;IAElC,KAAK,MAAM,CAACC,GAAG,EAAEC,YAAY,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACL,aAAa,CAAC,EAAE;MAC7DG,YAAY,CAACG,OAAO,CAACJ,GAAG,CAAC;MACzB,MAAMK,MAAwB,GAAIJ,YAAY,CAASK,KAAK,CAAC,CAAC;MAC9D,IAAID,MAAM,CAACE,IAAI,KAAK,MAAM,EAAE;QACxBR,MAAM,CAACS,IAAI,CAACH,MAAM,CAACI,KAAK,CAAC;MAC7B,CAAC,MAAM,IAAIJ,MAAM,CAACN,MAAM,EAAE;QACtBA,MAAM,CAACS,IAAI,CAAC,GAAGH,MAAM,CAACN,MAAM,CAAC;MACjC;IACJ;IAEA,IAAI,CAACZ,SAAS,CAACqB,IAAI,CAAC;MAChBZ,EAAE;MACFH,IAAI,EAAEI,MAAM,CAACJ,IAAI;MACjBiB,WAAW,EAAEb,MAAM,CAACa,WAAW;MAC/BC,IAAI,EAAEd,MAAM,CAACc,IAAI;MACjBC,WAAW,EAAEf,MAAM,CAACe,WAAW,IAAI,EAAE;MACrCb,MAAM;MACNc,MAAM,EAAEhB,MAAM,CAACgB,MAAM,IAAI,EAAE;MAC3BrB,UAAU,EAAE;IAChB,CAAC,CAAC;IAEF,OAAO,IAAI;EACf;EAEgBc,KAAKA,CAAA,EAAG;IACpB;IACA,IAAI,CAACT,MAAM,CAACH,QAAQ,GAAG,IAAI,CAACG,MAAM,CAACH,QAAQ,IAAI,CAAC,CAAC;IACjD,IAAI,CAACG,MAAM,CAACH,QAAQ,CAACP,SAAS,GAAG,IAAI,CAACA,SAAS;IAC/C,IAAI,CAACU,MAAM,CAACiB,cAAc,GAAG,CAAC;MAAErB,IAAI,EAAE,aAAa;MAAEF,OAAO,EAAE;IAAG,CAAC,CAAC;IACnE,OAAO,KAAK,CAACe,KAAK,CAAC,CAAC;EACxB;AACJ;AAEA,MAAMS,2BAA2B,CAA8B;EAC3CR,IAAI,GAAG,aAAa;EAE7BS,MAAMA,CAAC3B,QAA+B,EAA4B;IACrE,OAAO,IAAIH,uBAAuB,CAACG,QAAQ,CAAC;EAChD;AACJ;AAEA,OAAO,MAAM4B,oBAAoB,GAAGjC,SAAS,CAACkC,oBAAoB,CAAC;EAC/DC,cAAc,EAAEJ,2BAA2B;EAC3CK,YAAY,EAAE;AAClB,CAAC,CAAC;;AAEF","ignoreList":[]}
|
|
@@ -1,50 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
note?: string | null;
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* Base FieldBuilder class providing common field configuration methods
|
|
10
|
-
*/
|
|
11
|
-
export declare class FieldBuilder<TType extends string = string> {
|
|
12
|
-
readonly type: TType;
|
|
13
|
-
protected config: FieldBuilderConfig;
|
|
14
|
-
constructor(type: TType, label?: string);
|
|
15
|
-
label(text: string): this;
|
|
16
|
-
help(text: string): this;
|
|
17
|
-
description(text: string): this;
|
|
18
|
-
note(text: string): this;
|
|
19
|
-
placeholder(text: string): this;
|
|
20
|
-
storageId(id: string): this;
|
|
21
|
-
fieldId(id: string): this;
|
|
22
|
-
defaultValue(value: any): this;
|
|
23
|
-
list(): this;
|
|
24
|
-
tags(tags: string[]): this;
|
|
25
|
-
/**
|
|
26
|
-
* List validators - these methods are available after calling list()
|
|
27
|
-
*/
|
|
28
|
-
listMinLength(value: number, message?: string): this;
|
|
29
|
-
listMaxLength(value: number, message?: string): this;
|
|
30
|
-
/**
|
|
31
|
-
* Add a validation rule to this field.
|
|
32
|
-
* This method is protected and should only be used by field-specific validator methods.
|
|
33
|
-
* @internal
|
|
34
|
-
*/
|
|
35
|
-
protected validation(validation: CmsModelFieldValidation): this;
|
|
36
|
-
/**
|
|
37
|
-
* Add a list validation rule to this field (for list fields).
|
|
38
|
-
* This method is protected and should only be used by field-specific validator methods.
|
|
39
|
-
* @internal
|
|
40
|
-
*/
|
|
41
|
-
protected listValidation(validation: CmsModelFieldValidation): this;
|
|
42
|
-
predefinedValues(values: CmsModelFieldPredefinedValues["values"]): this;
|
|
43
|
-
renderer(name: string, settings?: Record<string, any>): this;
|
|
44
|
-
settings(settings: Record<string, any>): this;
|
|
45
|
-
/**
|
|
46
|
-
* Build the final CmsModelField
|
|
47
|
-
* @internal
|
|
48
|
-
*/
|
|
49
|
-
build(): CmsModelField;
|
|
50
|
-
}
|
|
1
|
+
export { DataFieldBuilder, DataFieldBuilder as FieldBuilder } from "./DataFieldBuilder.js";
|
|
2
|
+
export { LayoutFieldBuilder } from "./LayoutFieldBuilder.js";
|
|
3
|
+
export { BaseFieldBuilder } from "./BaseFieldBuilder.js";
|
|
4
|
+
export type { FieldBuildResult, DataFieldBuildResult, LayoutFieldBuildResult } from "./BaseFieldBuilder.js";
|
|
5
|
+
export type { FieldRendererRegistry, FieldRendererName, FieldRendererSettings, FieldBuilderConfig } from "./DataFieldBuilder.js";
|
|
@@ -1,167 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
*/
|
|
5
|
-
export class FieldBuilder {
|
|
6
|
-
constructor(type, label) {
|
|
7
|
-
this.type = type;
|
|
8
|
-
this.config = {
|
|
9
|
-
label: label || "",
|
|
10
|
-
validation: [],
|
|
11
|
-
listValidation: [],
|
|
12
|
-
list: false,
|
|
13
|
-
predefinedValues: {
|
|
14
|
-
enabled: false,
|
|
15
|
-
values: []
|
|
16
|
-
},
|
|
17
|
-
help: null,
|
|
18
|
-
placeholder: null,
|
|
19
|
-
description: null,
|
|
20
|
-
note: null,
|
|
21
|
-
renderer: null,
|
|
22
|
-
settings: {},
|
|
23
|
-
tags: []
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
label(text) {
|
|
27
|
-
this.config.label = text;
|
|
28
|
-
return this;
|
|
29
|
-
}
|
|
30
|
-
help(text) {
|
|
31
|
-
this.config.help = text;
|
|
32
|
-
return this;
|
|
33
|
-
}
|
|
34
|
-
description(text) {
|
|
35
|
-
this.config.description = text;
|
|
36
|
-
return this;
|
|
37
|
-
}
|
|
38
|
-
note(text) {
|
|
39
|
-
this.config.note = text;
|
|
40
|
-
return this;
|
|
41
|
-
}
|
|
42
|
-
placeholder(text) {
|
|
43
|
-
this.config.placeholder = text;
|
|
44
|
-
return this;
|
|
45
|
-
}
|
|
46
|
-
storageId(id) {
|
|
47
|
-
// We do not allow developers to specify the field type!
|
|
48
|
-
this.config._storageId = id.split("@").pop();
|
|
49
|
-
return this;
|
|
50
|
-
}
|
|
51
|
-
fieldId(id) {
|
|
52
|
-
this.config._fieldId = id;
|
|
53
|
-
return this;
|
|
54
|
-
}
|
|
55
|
-
defaultValue(value) {
|
|
56
|
-
this.config.settings = {
|
|
57
|
-
...this.config.settings,
|
|
58
|
-
defaultValue: value
|
|
59
|
-
};
|
|
60
|
-
return this;
|
|
61
|
-
}
|
|
62
|
-
list() {
|
|
63
|
-
this.config.list = true;
|
|
64
|
-
return this;
|
|
65
|
-
}
|
|
66
|
-
tags(tags) {
|
|
67
|
-
this.config.tags = tags;
|
|
68
|
-
return this;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* List validators - these methods are available after calling list()
|
|
73
|
-
*/
|
|
74
|
-
listMinLength(value, message) {
|
|
75
|
-
return this.listValidation({
|
|
76
|
-
name: "minLength",
|
|
77
|
-
message: message || `At least ${value} item(s) required.`,
|
|
78
|
-
settings: {
|
|
79
|
-
value
|
|
80
|
-
}
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
listMaxLength(value, message) {
|
|
84
|
-
return this.listValidation({
|
|
85
|
-
name: "maxLength",
|
|
86
|
-
message: message || `At most ${value} item(s) allowed.`,
|
|
87
|
-
settings: {
|
|
88
|
-
value
|
|
89
|
-
}
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* Add a validation rule to this field.
|
|
95
|
-
* This method is protected and should only be used by field-specific validator methods.
|
|
96
|
-
* @internal
|
|
97
|
-
*/
|
|
98
|
-
validation(validation) {
|
|
99
|
-
this.config.validation = this.config.validation || [];
|
|
100
|
-
this.config.validation.push(validation);
|
|
101
|
-
return this;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* Add a list validation rule to this field (for list fields).
|
|
106
|
-
* This method is protected and should only be used by field-specific validator methods.
|
|
107
|
-
* @internal
|
|
108
|
-
*/
|
|
109
|
-
listValidation(validation) {
|
|
110
|
-
this.config.listValidation = this.config.listValidation || [];
|
|
111
|
-
this.config.listValidation.push(validation);
|
|
112
|
-
return this;
|
|
113
|
-
}
|
|
114
|
-
predefinedValues(values) {
|
|
115
|
-
this.config.predefinedValues = {
|
|
116
|
-
enabled: true,
|
|
117
|
-
values
|
|
118
|
-
};
|
|
119
|
-
return this;
|
|
120
|
-
}
|
|
121
|
-
renderer(name, settings) {
|
|
122
|
-
this.config.renderer = {
|
|
123
|
-
name,
|
|
124
|
-
settings: settings || null
|
|
125
|
-
};
|
|
126
|
-
return this;
|
|
127
|
-
}
|
|
128
|
-
settings(settings) {
|
|
129
|
-
this.config.settings = {
|
|
130
|
-
...this.config.settings,
|
|
131
|
-
...settings
|
|
132
|
-
};
|
|
133
|
-
return this;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
* Build the final CmsModelField
|
|
138
|
-
* @internal
|
|
139
|
-
*/
|
|
140
|
-
build() {
|
|
141
|
-
const fieldId = this.config._fieldId || camelCase(this.config.label);
|
|
142
|
-
const storageId = `${this.type}@${this.config._storageId ?? fieldId}`;
|
|
143
|
-
return {
|
|
144
|
-
id: fieldId,
|
|
145
|
-
fieldId,
|
|
146
|
-
storageId,
|
|
147
|
-
type: this.type,
|
|
148
|
-
label: this.config.label,
|
|
149
|
-
validation: this.config.validation || [],
|
|
150
|
-
listValidation: this.config.listValidation || [],
|
|
151
|
-
list: this.config.list || false,
|
|
152
|
-
predefinedValues: this.config.predefinedValues || {
|
|
153
|
-
enabled: false,
|
|
154
|
-
values: []
|
|
155
|
-
},
|
|
156
|
-
help: this.config.help || null,
|
|
157
|
-
placeholder: this.config.placeholder || null,
|
|
158
|
-
description: this.config.description || null,
|
|
159
|
-
note: this.config.note || null,
|
|
160
|
-
renderer: this.config.renderer || null,
|
|
161
|
-
settings: this.config.settings || {},
|
|
162
|
-
tags: this.config.tags || []
|
|
163
|
-
};
|
|
164
|
-
}
|
|
165
|
-
}
|
|
1
|
+
export { DataFieldBuilder, DataFieldBuilder as FieldBuilder } from "./DataFieldBuilder.js";
|
|
2
|
+
export { LayoutFieldBuilder } from "./LayoutFieldBuilder.js";
|
|
3
|
+
export { BaseFieldBuilder } from "./BaseFieldBuilder.js";
|
|
166
4
|
|
|
167
5
|
//# sourceMappingURL=FieldBuilder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["DataFieldBuilder","FieldBuilder","LayoutFieldBuilder","BaseFieldBuilder"],"sources":["FieldBuilder.ts"],"sourcesContent":["export { DataFieldBuilder, DataFieldBuilder as FieldBuilder } from \"./DataFieldBuilder.js\";\nexport { LayoutFieldBuilder } from \"./LayoutFieldBuilder.js\";\nexport { BaseFieldBuilder } from \"./BaseFieldBuilder.js\";\nexport type {\n FieldBuildResult,\n DataFieldBuildResult,\n LayoutFieldBuildResult\n} from \"./BaseFieldBuilder.js\";\nexport type {\n FieldRendererRegistry,\n FieldRendererName,\n FieldRendererSettings,\n FieldBuilderConfig\n} from \"./DataFieldBuilder.js\";\n"],"mappings":"AAAA,SAASA,gBAAgB,EAAEA,gBAAgB,IAAIC,YAAY;AAC3D,SAASC,kBAAkB;AAC3B,SAASC,gBAAgB","ignoreList":[]}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* This file has multiple @ts-expect-error comments because the dynamic nature of the registry makes it difficult to type correctly.
|
|
3
|
+
* The registry is designed to allow dynamic method access for field types, which is not easily expressed in TypeScript.
|
|
4
|
+
* The @ts-expect-error comments are used to suppress type errors in places where we know the code is correct but TypeScript cannot verify it.
|
|
5
|
+
*/
|
|
2
6
|
import camelCase from "lodash/camelCase.js";
|
|
3
7
|
import { FieldBuilderRegistry as RegistryAbstraction } from "../abstractions.js";
|
|
4
8
|
import { FieldType } from "./abstractions.js";
|
|
@@ -15,6 +19,10 @@ class FieldBuilderRegistryImpl {
|
|
|
15
19
|
if (factory.type.includes("-")) {
|
|
16
20
|
this.fieldTypes.set(camelCase(factory.type), factory);
|
|
17
21
|
}
|
|
22
|
+
// also register camelCase aliases for subtypes.
|
|
23
|
+
if (factory.type.includes(":")) {
|
|
24
|
+
this.fieldTypes.set(camelCase(factory.type), factory);
|
|
25
|
+
}
|
|
18
26
|
}
|
|
19
27
|
|
|
20
28
|
// Return Proxy for dynamic method access
|
|
@@ -52,7 +60,9 @@ class FieldBuilderRegistryImpl {
|
|
|
52
60
|
}
|
|
53
61
|
}
|
|
54
62
|
export const FieldBuilderRegistry = RegistryAbstraction.createImplementation({
|
|
63
|
+
// @ts-expect-error
|
|
55
64
|
implementation: FieldBuilderRegistryImpl,
|
|
65
|
+
// @ts-expect-error
|
|
56
66
|
dependencies: [[FieldType, {
|
|
57
67
|
multiple: true
|
|
58
68
|
}]]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["camelCase","FieldBuilderRegistry","RegistryAbstraction","FieldType","FieldBuilderRegistryImpl","fieldTypes","Map","extendMode","constructor","fieldTypeFactories","factory","set","type","includes","proxy","Proxy","get","target","prop","builder","create","_extendMode","createImplementation","implementation","dependencies","multiple"],"sources":["FieldBuilderRegistry.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"names":["camelCase","FieldBuilderRegistry","RegistryAbstraction","FieldType","FieldBuilderRegistryImpl","fieldTypes","Map","extendMode","constructor","fieldTypeFactories","factory","set","type","includes","proxy","Proxy","get","target","prop","builder","create","_extendMode","createImplementation","implementation","dependencies","multiple"],"sources":["FieldBuilderRegistry.ts"],"sourcesContent":["/**\n * This file has multiple @ts-expect-error comments because the dynamic nature of the registry makes it difficult to type correctly.\n * The registry is designed to allow dynamic method access for field types, which is not easily expressed in TypeScript.\n * The @ts-expect-error comments are used to suppress type errors in places where we know the code is correct but TypeScript cannot verify it.\n */\nimport camelCase from \"lodash/camelCase.js\";\nimport {\n FieldBuilderRegistry as RegistryAbstraction,\n type IFieldBuilderRegistry\n} from \"../abstractions.js\";\nimport { FieldType, type IFieldTypeFactory } from \"./abstractions.js\";\n\n// @ts-expect-error\nclass FieldBuilderRegistryImpl implements IFieldBuilderRegistry {\n private fieldTypes = new Map<string, IFieldTypeFactory>();\n private extendMode = false;\n public existingFields?: Map<string, any>;\n\n public constructor(fieldTypeFactories: IFieldTypeFactory[]) {\n // Register all field types by their type name\n for (const factory of fieldTypeFactories) {\n this.fieldTypes.set(factory.type, factory);\n // Also register camelCase aliases for hyphenated types\n if (factory.type.includes(\"-\")) {\n this.fieldTypes.set(camelCase(factory.type), factory);\n }\n // also register camelCase aliases for subtypes.\n if (factory.type.includes(\":\")) {\n this.fieldTypes.set(camelCase(factory.type), factory);\n }\n }\n\n // Return Proxy for dynamic method access\n const proxy = new Proxy(this, {\n get(target, prop: string) {\n // Handle extend() method\n if (prop === \"extend\") {\n return () => {\n target.extendMode = true;\n return proxy;\n };\n }\n\n // Check if it's a registered field type\n const factory = target.fieldTypes.get(prop);\n if (factory) {\n return () => {\n const builder = factory.create(proxy as IFieldBuilderRegistry);\n\n // If in extend mode, mark the builder with extend flag\n // BaseModelBuilder will handle merging operations by field ID\n if (target.extendMode) {\n (builder as any)._extendMode = true;\n target.extendMode = false; // Reset for next field\n }\n\n return builder;\n };\n }\n\n // Otherwise return the actual property\n return target[prop as keyof typeof target];\n }\n }) as any;\n\n return proxy;\n }\n}\n\nexport const FieldBuilderRegistry = RegistryAbstraction.createImplementation({\n // @ts-expect-error\n implementation: FieldBuilderRegistryImpl,\n // @ts-expect-error\n dependencies: [[FieldType, { multiple: true }]]\n});\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA,OAAOA,SAAS,MAAM,qBAAqB;AAC3C,SACIC,oBAAoB,IAAIC,mBAAmB;AAG/C,SAASC,SAAS;;AAElB;AACA,MAAMC,wBAAwB,CAAkC;EACpDC,UAAU,GAAG,IAAIC,GAAG,CAA4B,CAAC;EACjDC,UAAU,GAAG,KAAK;EAGnBC,WAAWA,CAACC,kBAAuC,EAAE;IACxD;IACA,KAAK,MAAMC,OAAO,IAAID,kBAAkB,EAAE;MACtC,IAAI,CAACJ,UAAU,CAACM,GAAG,CAACD,OAAO,CAACE,IAAI,EAAEF,OAAO,CAAC;MAC1C;MACA,IAAIA,OAAO,CAACE,IAAI,CAACC,QAAQ,CAAC,GAAG,CAAC,EAAE;QAC5B,IAAI,CAACR,UAAU,CAACM,GAAG,CAACX,SAAS,CAACU,OAAO,CAACE,IAAI,CAAC,EAAEF,OAAO,CAAC;MACzD;MACA;MACA,IAAIA,OAAO,CAACE,IAAI,CAACC,QAAQ,CAAC,GAAG,CAAC,EAAE;QAC5B,IAAI,CAACR,UAAU,CAACM,GAAG,CAACX,SAAS,CAACU,OAAO,CAACE,IAAI,CAAC,EAAEF,OAAO,CAAC;MACzD;IACJ;;IAEA;IACA,MAAMI,KAAK,GAAG,IAAIC,KAAK,CAAC,IAAI,EAAE;MAC1BC,GAAGA,CAACC,MAAM,EAAEC,IAAY,EAAE;QACtB;QACA,IAAIA,IAAI,KAAK,QAAQ,EAAE;UACnB,OAAO,MAAM;YACTD,MAAM,CAACV,UAAU,GAAG,IAAI;YACxB,OAAOO,KAAK;UAChB,CAAC;QACL;;QAEA;QACA,MAAMJ,OAAO,GAAGO,MAAM,CAACZ,UAAU,CAACW,GAAG,CAACE,IAAI,CAAC;QAC3C,IAAIR,OAAO,EAAE;UACT,OAAO,MAAM;YACT,MAAMS,OAAO,GAAGT,OAAO,CAACU,MAAM,CAACN,KAA8B,CAAC;;YAE9D;YACA;YACA,IAAIG,MAAM,CAACV,UAAU,EAAE;cAClBY,OAAO,CAASE,WAAW,GAAG,IAAI;cACnCJ,MAAM,CAACV,UAAU,GAAG,KAAK,CAAC,CAAC;YAC/B;YAEA,OAAOY,OAAO;UAClB,CAAC;QACL;;QAEA;QACA,OAAOF,MAAM,CAACC,IAAI,CAAwB;MAC9C;IACJ,CAAC,CAAQ;IAET,OAAOJ,KAAK;EAChB;AACJ;AAEA,OAAO,MAAMb,oBAAoB,GAAGC,mBAAmB,CAACoB,oBAAoB,CAAC;EACzE;EACAC,cAAc,EAAEnB,wBAAwB;EACxC;EACAoB,YAAY,EAAE,CAAC,CAACrB,SAAS,EAAE;IAAEsB,QAAQ,EAAE;EAAK,CAAC,CAAC;AAClD,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { BaseFieldBuilder } from "./BaseFieldBuilder.js";
|
|
2
|
+
/**
|
|
3
|
+
* Slim base class for layout fields (separators, alerts, tabs, etc.).
|
|
4
|
+
* Layout fields only support label, description, help, and note — no list(), storageId(), etc.
|
|
5
|
+
*/
|
|
6
|
+
export declare abstract class LayoutFieldBuilder<TType extends string = string> extends BaseFieldBuilder<TType> {
|
|
7
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { BaseFieldBuilder } from "./BaseFieldBuilder.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Slim base class for layout fields (separators, alerts, tabs, etc.).
|
|
5
|
+
* Layout fields only support label, description, help, and note — no list(), storageId(), etc.
|
|
6
|
+
*/
|
|
7
|
+
export class LayoutFieldBuilder extends BaseFieldBuilder {}
|
|
8
|
+
|
|
9
|
+
//# sourceMappingURL=LayoutFieldBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["BaseFieldBuilder","LayoutFieldBuilder"],"sources":["LayoutFieldBuilder.ts"],"sourcesContent":["import { BaseFieldBuilder } from \"./BaseFieldBuilder.js\";\n\n/**\n * Slim base class for layout fields (separators, alerts, tabs, etc.).\n * Layout fields only support label, description, help, and note — no list(), storageId(), etc.\n */\nexport abstract class LayoutFieldBuilder<\n TType extends string = string\n> extends BaseFieldBuilder<TType> {}\n"],"mappings":"AAAA,SAASA,gBAAgB;;AAEzB;AACA;AACA;AACA;AACA,OAAO,MAAeC,kBAAkB,SAE9BD,gBAAgB,CAAQ","ignoreList":[]}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { type IFieldTypeFactory } from "./abstractions.js";
|
|
2
|
+
import { BaseFieldBuilder } from "./BaseFieldBuilder.js";
|
|
2
3
|
import { FieldBuilder } from "./FieldBuilder.js";
|
|
3
4
|
import { FieldBuilderRegistry } from "../abstractions.js";
|
|
4
5
|
import { LayoutBuilder } from "../LayoutBuilder.js";
|
|
5
6
|
export interface IObjectFieldBuilder extends FieldBuilder<"object"> {
|
|
6
7
|
required(message?: string): this;
|
|
7
|
-
fields(builder: (registry: FieldBuilderRegistry.Interface) => Record<string,
|
|
8
|
+
fields(builder: (registry: FieldBuilderRegistry.Interface) => Record<string, BaseFieldBuilder<any>>): this;
|
|
8
9
|
layout(layoutOrBuilder: string[][] | ((builder: LayoutBuilder) => void)): this;
|
|
9
10
|
}
|
|
10
11
|
export declare class ObjectFieldBuilder extends FieldBuilder<"object"> implements IObjectFieldBuilder {
|
|
@@ -13,9 +14,9 @@ export declare class ObjectFieldBuilder extends FieldBuilder<"object"> implement
|
|
|
13
14
|
private fieldBuildersMap;
|
|
14
15
|
constructor(registry: FieldBuilderRegistry.Interface);
|
|
15
16
|
required(message?: string): this;
|
|
16
|
-
fields(builder: (registry: FieldBuilderRegistry.Interface) => Record<string,
|
|
17
|
+
fields(builder: (registry: FieldBuilderRegistry.Interface) => Record<string, BaseFieldBuilder<any>>): this;
|
|
17
18
|
layout(layoutOrBuilder: string[][] | ((builder: LayoutBuilder) => void)): this;
|
|
18
|
-
build(): import("
|
|
19
|
+
build(): import("./BaseFieldBuilder.js").DataFieldBuildResult;
|
|
19
20
|
}
|
|
20
21
|
declare class ObjectFieldTypeFactory implements IFieldTypeFactory {
|
|
21
22
|
readonly type = "object";
|
|
@@ -40,12 +40,27 @@ export class ObjectFieldBuilder extends FieldBuilder {
|
|
|
40
40
|
return this;
|
|
41
41
|
}
|
|
42
42
|
build() {
|
|
43
|
-
// Build all nested fields from field builders
|
|
44
43
|
this.config.settings = this.config.settings || {};
|
|
45
|
-
this.config.settings.fields = Array.from(this.fieldBuildersMap.values()).map(builder => builder.build());
|
|
46
44
|
|
|
47
|
-
// Build layout
|
|
48
|
-
|
|
45
|
+
// Build nested fields, separating data fields from layout fields
|
|
46
|
+
const fields = [];
|
|
47
|
+
const layoutReplacements = new Map();
|
|
48
|
+
for (const [fieldId, builder] of this.fieldBuildersMap) {
|
|
49
|
+
const result = builder.build();
|
|
50
|
+
if (result.type === "layout") {
|
|
51
|
+
layoutReplacements.set(fieldId, result.layoutCell);
|
|
52
|
+
if (result.fields) {
|
|
53
|
+
fields.push(...result.fields);
|
|
54
|
+
}
|
|
55
|
+
} else {
|
|
56
|
+
fields.push(result.field);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
this.config.settings.fields = fields;
|
|
60
|
+
|
|
61
|
+
// Build layout and apply replacements
|
|
62
|
+
const rawLayout = this.layoutBuilder.build();
|
|
63
|
+
this.config.settings.layout = rawLayout.map(row => row.map(cell => layoutReplacements.get(cell) ?? cell));
|
|
49
64
|
return super.build();
|
|
50
65
|
}
|
|
51
66
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["FieldType","FieldBuilder","LayoutBuilder","ObjectFieldBuilder","fieldBuildersMap","Map","constructor","registry","layoutBuilder","required","message","validation","name","config","push","fields","builder","existingFields","fieldBuilders","key","fieldBuilder","Object","entries","fieldId","set","layout","layoutOrBuilder","Array","isArray","setLayout","addModifier","build","settings","
|
|
1
|
+
{"version":3,"names":["FieldType","FieldBuilder","LayoutBuilder","ObjectFieldBuilder","fieldBuildersMap","Map","constructor","registry","layoutBuilder","required","message","validation","name","config","push","fields","builder","existingFields","fieldBuilders","key","fieldBuilder","Object","entries","fieldId","set","layout","layoutOrBuilder","Array","isArray","setLayout","addModifier","build","settings","layoutReplacements","result","type","layoutCell","field","rawLayout","map","row","cell","get","ObjectFieldTypeFactory","create","ObjectFieldType","createImplementation","implementation","dependencies"],"sources":["ObjectFieldType.ts"],"sourcesContent":["import { FieldType, type IFieldTypeFactory } from \"./abstractions.js\";\nimport { BaseFieldBuilder } from \"./BaseFieldBuilder.js\";\nimport { FieldBuilder } from \"./FieldBuilder.js\";\nimport { FieldBuilderRegistry } from \"../abstractions.js\";\nimport { LayoutBuilder } from \"../LayoutBuilder.js\";\nimport type { CmsModelField, CmsModelLayoutCell } from \"~/types/index.js\";\n\nexport interface IObjectFieldBuilder extends FieldBuilder<\"object\"> {\n required(message?: string): this;\n fields(\n builder: (registry: FieldBuilderRegistry.Interface) => Record<string, BaseFieldBuilder<any>>\n ): this;\n layout(layoutOrBuilder: string[][] | ((builder: LayoutBuilder) => void)): this;\n}\n\nexport class ObjectFieldBuilder extends FieldBuilder<\"object\"> implements IObjectFieldBuilder {\n private layoutBuilder: LayoutBuilder;\n private fieldBuildersMap = new Map<string, BaseFieldBuilder<any>>();\n\n public constructor(private registry: FieldBuilderRegistry.Interface) {\n super(\"object\");\n this.layoutBuilder = new LayoutBuilder();\n }\n\n required(message?: string): this {\n const validation = {\n name: \"required\",\n message: message || \"Value is required.\"\n };\n this.config.validation = this.config.validation || [];\n this.config.validation.push(validation);\n return this;\n }\n\n fields(\n builder: (registry: FieldBuilderRegistry.Interface) => Record<string, BaseFieldBuilder<any>>\n ): this {\n // Pass existing fields to registry so it can return them when extending\n (this.registry as any).existingFields = this.fieldBuildersMap;\n\n const fieldBuilders = builder(this.registry);\n for (const [key, fieldBuilder] of Object.entries(fieldBuilders)) {\n // Automatically set the fieldId from the object key\n fieldBuilder.fieldId(key);\n // Store builder (not built field)\n this.fieldBuildersMap.set(key, fieldBuilder);\n }\n\n return this;\n }\n\n layout(layoutOrBuilder: string[][] | ((builder: LayoutBuilder) => void)): this {\n if (Array.isArray(layoutOrBuilder)) {\n // Set base layout and clear modifiers\n this.layoutBuilder.setLayout(layoutOrBuilder);\n } else {\n // Queue the modifier callback\n this.layoutBuilder.addModifier(layoutOrBuilder);\n }\n\n return this;\n }\n\n override build() {\n this.config.settings = this.config.settings || {};\n\n // Build nested fields, separating data fields from layout fields\n const fields: CmsModelField[] = [];\n const layoutReplacements = new Map<string, CmsModelLayoutCell>();\n\n for (const [fieldId, builder] of this.fieldBuildersMap) {\n const result = builder.build();\n if (result.type === \"layout\") {\n layoutReplacements.set(fieldId, result.layoutCell);\n if (result.fields) {\n fields.push(...result.fields);\n }\n } else {\n fields.push(result.field);\n }\n }\n\n this.config.settings.fields = fields;\n\n // Build layout and apply replacements\n const rawLayout = this.layoutBuilder.build();\n this.config.settings.layout = rawLayout.map(row =>\n row.map(cell => layoutReplacements.get(cell) ?? cell)\n );\n\n return super.build();\n }\n}\n\nclass ObjectFieldTypeFactory implements IFieldTypeFactory {\n readonly type = \"object\";\n\n create(registry: FieldBuilderRegistry.Interface): IObjectFieldBuilder {\n return new ObjectFieldBuilder(registry);\n }\n}\n\nexport const ObjectFieldType = FieldType.createImplementation({\n implementation: ObjectFieldTypeFactory,\n dependencies: []\n});\n\n// Module augmentation for TypeScript autocomplete\ndeclare module \"../abstractions.js\" {\n interface IFieldBuilderRegistry {\n object(): IObjectFieldBuilder;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type IFieldTypeFactory } from "./abstractions.js";
|
|
2
|
+
import { LayoutFieldBuilder } from "./LayoutFieldBuilder.js";
|
|
3
|
+
type AlertType = "info" | "success" | "warning" | "danger";
|
|
4
|
+
export interface IUiAlertFieldBuilder extends LayoutFieldBuilder<"uiAlert"> {
|
|
5
|
+
alertType(type: AlertType): this;
|
|
6
|
+
}
|
|
7
|
+
declare class UiAlertFieldTypeFactory implements IFieldTypeFactory {
|
|
8
|
+
readonly type = "uiAlert";
|
|
9
|
+
create(): IUiAlertFieldBuilder;
|
|
10
|
+
}
|
|
11
|
+
export declare const UiAlertFieldType: typeof UiAlertFieldTypeFactory & {
|
|
12
|
+
__abstraction: import("@webiny/di").Abstraction<IFieldTypeFactory>;
|
|
13
|
+
};
|
|
14
|
+
declare module "../abstractions.js" {
|
|
15
|
+
interface IFieldBuilderRegistry {
|
|
16
|
+
uiAlert(): IUiAlertFieldBuilder;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { FieldType } from "./abstractions.js";
|
|
2
|
+
import { LayoutFieldBuilder } from "./LayoutFieldBuilder.js";
|
|
3
|
+
class AlertFieldBuilder extends LayoutFieldBuilder {
|
|
4
|
+
_alertType = "warning";
|
|
5
|
+
constructor() {
|
|
6
|
+
super("uiAlert");
|
|
7
|
+
}
|
|
8
|
+
alertType(type) {
|
|
9
|
+
this._alertType = type;
|
|
10
|
+
return this;
|
|
11
|
+
}
|
|
12
|
+
build() {
|
|
13
|
+
return {
|
|
14
|
+
type: "layout",
|
|
15
|
+
layoutCell: {
|
|
16
|
+
type: "alert",
|
|
17
|
+
label: this.config.label,
|
|
18
|
+
alertType: this._alertType
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
class UiAlertFieldTypeFactory {
|
|
24
|
+
type = "uiAlert";
|
|
25
|
+
create() {
|
|
26
|
+
return new AlertFieldBuilder();
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export const UiAlertFieldType = FieldType.createImplementation({
|
|
30
|
+
implementation: UiAlertFieldTypeFactory,
|
|
31
|
+
dependencies: []
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
// Module augmentation for TypeScript autocomplete
|
|
35
|
+
|
|
36
|
+
//# sourceMappingURL=UiAlertFieldType.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["FieldType","LayoutFieldBuilder","AlertFieldBuilder","_alertType","constructor","alertType","type","build","layoutCell","label","config","UiAlertFieldTypeFactory","create","UiAlertFieldType","createImplementation","implementation","dependencies"],"sources":["UiAlertFieldType.ts"],"sourcesContent":["import { FieldType, type IFieldTypeFactory } from \"./abstractions.js\";\nimport { type LayoutFieldBuildResult } from \"./BaseFieldBuilder.js\";\nimport { LayoutFieldBuilder } from \"./LayoutFieldBuilder.js\";\n\ntype AlertType = \"info\" | \"success\" | \"warning\" | \"danger\";\n\nexport interface IUiAlertFieldBuilder extends LayoutFieldBuilder<\"uiAlert\"> {\n alertType(type: AlertType): this;\n}\n\nclass AlertFieldBuilder extends LayoutFieldBuilder<\"uiAlert\"> implements IUiAlertFieldBuilder {\n private _alertType: AlertType = \"warning\";\n\n public constructor() {\n super(\"uiAlert\");\n }\n\n public alertType(type: AlertType): this {\n this._alertType = type;\n return this;\n }\n\n public override build(): LayoutFieldBuildResult {\n return {\n type: \"layout\",\n layoutCell: {\n type: \"alert\",\n label: this.config.label,\n alertType: this._alertType\n }\n };\n }\n}\n\nclass UiAlertFieldTypeFactory implements IFieldTypeFactory {\n public readonly type = \"uiAlert\";\n\n public create(): IUiAlertFieldBuilder {\n return new AlertFieldBuilder();\n }\n}\n\nexport const UiAlertFieldType = FieldType.createImplementation({\n implementation: UiAlertFieldTypeFactory,\n dependencies: []\n});\n\n// Module augmentation for TypeScript autocomplete\ndeclare module \"../abstractions.js\" {\n interface IFieldBuilderRegistry {\n uiAlert(): IUiAlertFieldBuilder;\n }\n}\n"],"mappings":"AAAA,SAASA,SAAS;AAElB,SAASC,kBAAkB;AAQ3B,MAAMC,iBAAiB,SAASD,kBAAkB,CAA4C;EAClFE,UAAU,GAAc,SAAS;EAElCC,WAAWA,CAAA,EAAG;IACjB,KAAK,CAAC,SAAS,CAAC;EACpB;EAEOC,SAASA,CAACC,IAAe,EAAQ;IACpC,IAAI,CAACH,UAAU,GAAGG,IAAI;IACtB,OAAO,IAAI;EACf;EAEgBC,KAAKA,CAAA,EAA2B;IAC5C,OAAO;MACHD,IAAI,EAAE,QAAQ;MACdE,UAAU,EAAE;QACRF,IAAI,EAAE,OAAO;QACbG,KAAK,EAAE,IAAI,CAACC,MAAM,CAACD,KAAK;QACxBJ,SAAS,EAAE,IAAI,CAACF;MACpB;IACJ,CAAC;EACL;AACJ;AAEA,MAAMQ,uBAAuB,CAA8B;EACvCL,IAAI,GAAG,SAAS;EAEzBM,MAAMA,CAAA,EAAyB;IAClC,OAAO,IAAIV,iBAAiB,CAAC,CAAC;EAClC;AACJ;AAEA,OAAO,MAAMW,gBAAgB,GAAGb,SAAS,CAACc,oBAAoB,CAAC;EAC3DC,cAAc,EAAEJ,uBAAuB;EACvCK,YAAY,EAAE;AAClB,CAAC,CAAC;;AAEF","ignoreList":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type IFieldTypeFactory } from "./abstractions.js";
|
|
2
|
+
import { LayoutFieldBuilder } from "./LayoutFieldBuilder.js";
|
|
3
|
+
export interface IUiSeparatorFieldBuilder extends LayoutFieldBuilder<"uiSeparator"> {
|
|
4
|
+
}
|
|
5
|
+
declare class UiSeparatorFieldTypeFactory implements IFieldTypeFactory {
|
|
6
|
+
readonly type = "uiSeparator";
|
|
7
|
+
create(): IUiSeparatorFieldBuilder;
|
|
8
|
+
}
|
|
9
|
+
export declare const UiSeparatorFieldType: typeof UiSeparatorFieldTypeFactory & {
|
|
10
|
+
__abstraction: import("@webiny/di").Abstraction<IFieldTypeFactory>;
|
|
11
|
+
};
|
|
12
|
+
declare module "../abstractions.js" {
|
|
13
|
+
interface IFieldBuilderRegistry {
|
|
14
|
+
uiSeparator(): IUiSeparatorFieldBuilder;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { FieldType } from "./abstractions.js";
|
|
2
|
+
import { LayoutFieldBuilder } from "./LayoutFieldBuilder.js";
|
|
3
|
+
class SeparatorFieldBuilder extends LayoutFieldBuilder {
|
|
4
|
+
constructor() {
|
|
5
|
+
super("uiSeparator");
|
|
6
|
+
}
|
|
7
|
+
build() {
|
|
8
|
+
return {
|
|
9
|
+
type: "layout",
|
|
10
|
+
layoutCell: {
|
|
11
|
+
type: "separator",
|
|
12
|
+
label: this.config.label,
|
|
13
|
+
description: this.config.description
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
class UiSeparatorFieldTypeFactory {
|
|
19
|
+
type = "uiSeparator";
|
|
20
|
+
create() {
|
|
21
|
+
return new SeparatorFieldBuilder();
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export const UiSeparatorFieldType = FieldType.createImplementation({
|
|
25
|
+
implementation: UiSeparatorFieldTypeFactory,
|
|
26
|
+
dependencies: []
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
// Module augmentation for TypeScript autocomplete
|
|
30
|
+
|
|
31
|
+
//# sourceMappingURL=UiSeparatorFieldType.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["FieldType","LayoutFieldBuilder","SeparatorFieldBuilder","constructor","build","type","layoutCell","label","config","description","UiSeparatorFieldTypeFactory","create","UiSeparatorFieldType","createImplementation","implementation","dependencies"],"sources":["UiSeparatorFieldType.ts"],"sourcesContent":["import { FieldType, type IFieldTypeFactory } from \"./abstractions.js\";\nimport { type LayoutFieldBuildResult } from \"./BaseFieldBuilder.js\";\nimport { LayoutFieldBuilder } from \"./LayoutFieldBuilder.js\";\n\nexport interface IUiSeparatorFieldBuilder extends LayoutFieldBuilder<\"uiSeparator\"> {}\n\nclass SeparatorFieldBuilder\n extends LayoutFieldBuilder<\"uiSeparator\">\n implements IUiSeparatorFieldBuilder\n{\n public constructor() {\n super(\"uiSeparator\");\n }\n\n public override build(): LayoutFieldBuildResult {\n return {\n type: \"layout\",\n layoutCell: {\n type: \"separator\",\n label: this.config.label,\n description: this.config.description\n }\n };\n }\n}\n\nclass UiSeparatorFieldTypeFactory implements IFieldTypeFactory {\n public readonly type = \"uiSeparator\";\n\n public create(): IUiSeparatorFieldBuilder {\n return new SeparatorFieldBuilder();\n }\n}\n\nexport const UiSeparatorFieldType = FieldType.createImplementation({\n implementation: UiSeparatorFieldTypeFactory,\n dependencies: []\n});\n\n// Module augmentation for TypeScript autocomplete\ndeclare module \"../abstractions.js\" {\n interface IFieldBuilderRegistry {\n uiSeparator(): IUiSeparatorFieldBuilder;\n }\n}\n"],"mappings":"AAAA,SAASA,SAAS;AAElB,SAASC,kBAAkB;AAI3B,MAAMC,qBAAqB,SACfD,kBAAkB,CAE9B;EACWE,WAAWA,CAAA,EAAG;IACjB,KAAK,CAAC,aAAa,CAAC;EACxB;EAEgBC,KAAKA,CAAA,EAA2B;IAC5C,OAAO;MACHC,IAAI,EAAE,QAAQ;MACdC,UAAU,EAAE;QACRD,IAAI,EAAE,WAAW;QACjBE,KAAK,EAAE,IAAI,CAACC,MAAM,CAACD,KAAK;QACxBE,WAAW,EAAE,IAAI,CAACD,MAAM,CAACC;MAC7B;IACJ,CAAC;EACL;AACJ;AAEA,MAAMC,2BAA2B,CAA8B;EAC3CL,IAAI,GAAG,aAAa;EAE7BM,MAAMA,CAAA,EAA6B;IACtC,OAAO,IAAIT,qBAAqB,CAAC,CAAC;EACtC;AACJ;AAEA,OAAO,MAAMU,oBAAoB,GAAGZ,SAAS,CAACa,oBAAoB,CAAC;EAC/DC,cAAc,EAAEJ,2BAA2B;EAC3CK,YAAY,EAAE;AAClB,CAAC,CAAC;;AAEF","ignoreList":[]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type IFieldTypeFactory } from "./abstractions.js";
|
|
2
|
+
import { BaseFieldBuilder } from "./BaseFieldBuilder.js";
|
|
3
|
+
import { LayoutFieldBuilder } from "./LayoutFieldBuilder.js";
|
|
4
|
+
import { type IFieldBuilderRegistry } from "../abstractions.js";
|
|
5
|
+
import type { CmsIcon } from "../../../types/index.js";
|
|
6
|
+
interface ITabConfig {
|
|
7
|
+
label: string;
|
|
8
|
+
icon?: CmsIcon;
|
|
9
|
+
description?: string;
|
|
10
|
+
fields: (registry: IFieldBuilderRegistry) => Record<string, BaseFieldBuilder<any>>;
|
|
11
|
+
layout?: string[][];
|
|
12
|
+
}
|
|
13
|
+
export interface IUiTabsFieldBuilder extends LayoutFieldBuilder<"uiTabs"> {
|
|
14
|
+
tab(id: string, config: ITabConfig): this;
|
|
15
|
+
}
|
|
16
|
+
declare class TabsFieldTypeFactory implements IFieldTypeFactory {
|
|
17
|
+
readonly type = "uiTabs";
|
|
18
|
+
create(registry: IFieldBuilderRegistry): IUiTabsFieldBuilder;
|
|
19
|
+
}
|
|
20
|
+
export declare const UiTabsFieldType: typeof TabsFieldTypeFactory & {
|
|
21
|
+
__abstraction: import("@webiny/di").Abstraction<IFieldTypeFactory>;
|
|
22
|
+
};
|
|
23
|
+
declare module "../abstractions.js" {
|
|
24
|
+
interface IFieldBuilderRegistry {
|
|
25
|
+
uiTabs(): IUiTabsFieldBuilder;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export {};
|