@plusscommunities/pluss-feature-builder-app-c 1.0.1-beta.3
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/module/actions/featureBuilderActions.js +106 -0
- package/dist/module/actions/featureBuilderActions.js.map +1 -0
- package/dist/module/actions/featureBuilderStringsActions.js +106 -0
- package/dist/module/actions/featureBuilderStringsActions.js.map +1 -0
- package/dist/module/actions/index.js +12 -0
- package/dist/module/actions/index.js.map +1 -0
- package/dist/module/actions/types.js +7 -0
- package/dist/module/actions/types.js.map +1 -0
- package/dist/module/components/FeatureDetailScreen.js +725 -0
- package/dist/module/components/FeatureDetailScreen.js.map +1 -0
- package/dist/module/components/FeatureListItem.js +174 -0
- package/dist/module/components/FeatureListItem.js.map +1 -0
- package/dist/module/components/FeatureListScreen.js +159 -0
- package/dist/module/components/FeatureListScreen.js.map +1 -0
- package/dist/module/components/FieldRenderer.js +218 -0
- package/dist/module/components/FieldRenderer.js.map +1 -0
- package/dist/module/components/FileDownload.js +74 -0
- package/dist/module/components/FileDownload.js.map +1 -0
- package/dist/module/components/WidgetGrid.js +158 -0
- package/dist/module/components/WidgetGrid.js.map +1 -0
- package/dist/module/components/WidgetLarge.js +274 -0
- package/dist/module/components/WidgetLarge.js.map +1 -0
- package/dist/module/components/WidgetSmall.js +315 -0
- package/dist/module/components/WidgetSmall.js.map +1 -0
- package/dist/module/components/common/index.js +25 -0
- package/dist/module/components/common/index.js.map +1 -0
- package/dist/module/components/layouts/CondensedList.js +195 -0
- package/dist/module/components/layouts/CondensedList.js.map +1 -0
- package/dist/module/components/layouts/FeatureImageList.js +172 -0
- package/dist/module/components/layouts/FeatureImageList.js.map +1 -0
- package/dist/module/components/layouts/RoundImageList.js +198 -0
- package/dist/module/components/layouts/RoundImageList.js.map +1 -0
- package/dist/module/components/layouts/SquareImageList.js +185 -0
- package/dist/module/components/layouts/SquareImageList.js.map +1 -0
- package/dist/module/config/index.js +10 -0
- package/dist/module/config/index.js.map +1 -0
- package/dist/module/core.config.js +17 -0
- package/dist/module/core.config.js.map +1 -0
- package/dist/module/feature.config.js +113 -0
- package/dist/module/feature.config.js.map +1 -0
- package/dist/module/index.js +24 -0
- package/dist/module/index.js.map +1 -0
- package/dist/module/js/Colors.js +25 -0
- package/dist/module/js/Colors.js.map +1 -0
- package/dist/module/js/FieldTypes.js +123 -0
- package/dist/module/js/FieldTypes.js.map +1 -0
- package/dist/module/js/NavigationService.js +10 -0
- package/dist/module/js/NavigationService.js.map +1 -0
- package/dist/module/js/Styles.js +3 -0
- package/dist/module/js/Styles.js.map +1 -0
- package/dist/module/js/helpers.js +29 -0
- package/dist/module/js/helpers.js.map +1 -0
- package/dist/module/js/index.js +24 -0
- package/dist/module/js/index.js.map +1 -0
- package/dist/module/js/spacing.js +29 -0
- package/dist/module/js/spacing.js.map +1 -0
- package/dist/module/js/types.js +254 -0
- package/dist/module/js/types.js.map +1 -0
- package/dist/module/reducers/featureBuilderReducer.js +75 -0
- package/dist/module/reducers/featureBuilderReducer.js.map +1 -0
- package/dist/module/utils/featureSelectors.js +9 -0
- package/dist/module/utils/featureSelectors.js.map +1 -0
- package/dist/module/values.config.a.js +96 -0
- package/dist/module/values.config.a.js.map +1 -0
- package/dist/module/values.config.b.js +96 -0
- package/dist/module/values.config.b.js.map +1 -0
- package/dist/module/values.config.c.js +96 -0
- package/dist/module/values.config.c.js.map +1 -0
- package/dist/module/values.config.d.js +96 -0
- package/dist/module/values.config.d.js.map +1 -0
- package/dist/module/values.config.js +96 -0
- package/dist/module/values.config.js.map +1 -0
- package/dist/module/webapi/featureBuilderAPI.js +59 -0
- package/dist/module/webapi/featureBuilderAPI.js.map +1 -0
- package/dist/module/webapi/helper.js +4 -0
- package/dist/module/webapi/helper.js.map +1 -0
- package/dist/module/webapi/index.js +8 -0
- package/dist/module/webapi/index.js.map +1 -0
- package/package.json +62 -0
- package/src/actions/featureBuilderActions.js +112 -0
- package/src/actions/featureBuilderStringsActions.js +114 -0
- package/src/actions/index.js +12 -0
- package/src/actions/types.js +7 -0
- package/src/components/FeatureDetailScreen.js +817 -0
- package/src/components/FeatureListItem.js +198 -0
- package/src/components/FeatureListScreen.js +160 -0
- package/src/components/FieldRenderer.js +272 -0
- package/src/components/FileDownload.js +79 -0
- package/src/components/WidgetGrid.js +181 -0
- package/src/components/WidgetLarge.js +305 -0
- package/src/components/WidgetSmall.js +344 -0
- package/src/components/common/index.js +25 -0
- package/src/components/layouts/CondensedList.js +230 -0
- package/src/components/layouts/FeatureImageList.js +193 -0
- package/src/components/layouts/RoundImageList.js +219 -0
- package/src/components/layouts/SquareImageList.js +205 -0
- package/src/config/index.js +10 -0
- package/src/core.config.js +29 -0
- package/src/feature.config.js +127 -0
- package/src/index.js +27 -0
- package/src/js/Colors.js +30 -0
- package/src/js/FieldTypes.js +131 -0
- package/src/js/NavigationService.js +12 -0
- package/src/js/Styles.js +3 -0
- package/src/js/helpers.js +30 -0
- package/src/js/index.js +24 -0
- package/src/js/spacing.js +30 -0
- package/src/js/types.js +253 -0
- package/src/reducers/featureBuilderReducer.js +64 -0
- package/src/utils/featureSelectors.js +8 -0
- package/src/values.config.a.js +104 -0
- package/src/values.config.b.js +104 -0
- package/src/values.config.c.js +104 -0
- package/src/values.config.d.js +104 -0
- package/src/values.config.js +104 -0
- package/src/webapi/featureBuilderAPI.js +65 -0
- package/src/webapi/helper.js +4 -0
- package/src/webapi/index.js +8 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Colours } from "../core.config";
|
|
2
|
+
import { values } from "../values.config";
|
|
3
|
+
export const getMainBrandingColourFromState = typeof (Colours === null || Colours === void 0 ? void 0 : Colours.getMainBrandingColourFromState) === "function" ? Colours.getMainBrandingColourFromState : state => {
|
|
4
|
+
var _state$user;
|
|
5
|
+
return (state === null || state === void 0 || (_state$user = state.user) === null || _state$user === void 0 || (_state$user = _state$user.siteBranding) === null || _state$user === void 0 ? void 0 : _state$user.MainBrandingColour) || values.colors.defaultBrandMain;
|
|
6
|
+
};
|
|
7
|
+
export const getLightBrandingColourFromState = typeof (Colours === null || Colours === void 0 ? void 0 : Colours.getLightBrandingColourFromState) === "function" ? Colours.getLightBrandingColourFromState : state => {
|
|
8
|
+
var _state$user2;
|
|
9
|
+
return (state === null || state === void 0 || (_state$user2 = state.user) === null || _state$user2 === void 0 || (_state$user2 = _state$user2.siteBranding) === null || _state$user2 === void 0 ? void 0 : _state$user2.LightBrandingColour) || values.colors.defaultBrandLight;
|
|
10
|
+
};
|
|
11
|
+
export const LINEGREY = Colours.LINEGREY;
|
|
12
|
+
export const TEXT_DARKEST = Colours.TEXT_DARKEST;
|
|
13
|
+
export const TEXT_DARK = Colours.TEXT_DARK;
|
|
14
|
+
export const TEXT_MID = Colours.TEXT_MID;
|
|
15
|
+
export const TEXT_LIGHT = Colours.TEXT_LIGHT;
|
|
16
|
+
export const TEXT_LIGHTER = Colours.TEXT_LIGHTER;
|
|
17
|
+
export const TEXT_BLUEGREY = Colours.TEXT_BLUEGREY;
|
|
18
|
+
export const COLOUR_GREEN = Colours.COLOUR_GREEN;
|
|
19
|
+
export const COLOUR_TRANSPARENT = Colours.COLOUR_TRANSPARENT;
|
|
20
|
+
export const COLOUR_TEAL = Colours.COLOUR_TEAL;
|
|
21
|
+
export const COLOUR_PURPLE = Colours.COLOUR_PURPLE;
|
|
22
|
+
export const COLOUR_TANGERINE = Colours.COLOUR_TANGERINE;
|
|
23
|
+
|
|
24
|
+
// TODO: Add required references
|
|
25
|
+
//# sourceMappingURL=Colors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Colours","values","getMainBrandingColourFromState","state","_state$user","user","siteBranding","MainBrandingColour","colors","defaultBrandMain","getLightBrandingColourFromState","_state$user2","LightBrandingColour","defaultBrandLight","LINEGREY","TEXT_DARKEST","TEXT_DARK","TEXT_MID","TEXT_LIGHT","TEXT_LIGHTER","TEXT_BLUEGREY","COLOUR_GREEN","COLOUR_TRANSPARENT","COLOUR_TEAL","COLOUR_PURPLE","COLOUR_TANGERINE"],"sources":["Colors.js"],"sourcesContent":["import { Colours } from \"../core.config\";\nimport { values } from \"../values.config\";\n\nexport const getMainBrandingColourFromState =\n\ttypeof Colours?.getMainBrandingColourFromState === \"function\"\n\t\t? Colours.getMainBrandingColourFromState\n\t\t: (state) =>\n\t\t\t\tstate?.user?.siteBranding?.MainBrandingColour ||\n\t\t\t\tvalues.colors.defaultBrandMain;\n\nexport const getLightBrandingColourFromState =\n\ttypeof Colours?.getLightBrandingColourFromState === \"function\"\n\t\t? Colours.getLightBrandingColourFromState\n\t\t: (state) =>\n\t\t\t\tstate?.user?.siteBranding?.LightBrandingColour ||\n\t\t\t\tvalues.colors.defaultBrandLight;\nexport const LINEGREY = Colours.LINEGREY;\nexport const TEXT_DARKEST = Colours.TEXT_DARKEST;\nexport const TEXT_DARK = Colours.TEXT_DARK;\nexport const TEXT_MID = Colours.TEXT_MID;\nexport const TEXT_LIGHT = Colours.TEXT_LIGHT;\nexport const TEXT_LIGHTER = Colours.TEXT_LIGHTER;\nexport const TEXT_BLUEGREY = Colours.TEXT_BLUEGREY;\nexport const COLOUR_GREEN = Colours.COLOUR_GREEN;\nexport const COLOUR_TRANSPARENT = Colours.COLOUR_TRANSPARENT;\nexport const COLOUR_TEAL = Colours.COLOUR_TEAL;\nexport const COLOUR_PURPLE = Colours.COLOUR_PURPLE;\nexport const COLOUR_TANGERINE = Colours.COLOUR_TANGERINE;\n\n// TODO: Add required references\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,gBAAgB;AACxC,SAASC,MAAM,QAAQ,kBAAkB;AAEzC,OAAO,MAAMC,8BAA8B,GAC1C,QAAOF,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEE,8BAA8B,MAAK,UAAU,GAC1DF,OAAO,CAACE,8BAA8B,GACrCC,KAAK;EAAA,IAAAC,WAAA;EAAA,OACN,CAAAD,KAAK,aAALA,KAAK,gBAAAC,WAAA,GAALD,KAAK,CAAEE,IAAI,cAAAD,WAAA,gBAAAA,WAAA,GAAXA,WAAA,CAAaE,YAAY,cAAAF,WAAA,uBAAzBA,WAAA,CAA2BG,kBAAkB,KAC7CN,MAAM,CAACO,MAAM,CAACC,gBAAgB;AAAA;AAElC,OAAO,MAAMC,+BAA+B,GAC3C,QAAOV,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEU,+BAA+B,MAAK,UAAU,GAC3DV,OAAO,CAACU,+BAA+B,GACtCP,KAAK;EAAA,IAAAQ,YAAA;EAAA,OACN,CAAAR,KAAK,aAALA,KAAK,gBAAAQ,YAAA,GAALR,KAAK,CAAEE,IAAI,cAAAM,YAAA,gBAAAA,YAAA,GAAXA,YAAA,CAAaL,YAAY,cAAAK,YAAA,uBAAzBA,YAAA,CAA2BC,mBAAmB,KAC9CX,MAAM,CAACO,MAAM,CAACK,iBAAiB;AAAA;AACnC,OAAO,MAAMC,QAAQ,GAAGd,OAAO,CAACc,QAAQ;AACxC,OAAO,MAAMC,YAAY,GAAGf,OAAO,CAACe,YAAY;AAChD,OAAO,MAAMC,SAAS,GAAGhB,OAAO,CAACgB,SAAS;AAC1C,OAAO,MAAMC,QAAQ,GAAGjB,OAAO,CAACiB,QAAQ;AACxC,OAAO,MAAMC,UAAU,GAAGlB,OAAO,CAACkB,UAAU;AAC5C,OAAO,MAAMC,YAAY,GAAGnB,OAAO,CAACmB,YAAY;AAChD,OAAO,MAAMC,aAAa,GAAGpB,OAAO,CAACoB,aAAa;AAClD,OAAO,MAAMC,YAAY,GAAGrB,OAAO,CAACqB,YAAY;AAChD,OAAO,MAAMC,kBAAkB,GAAGtB,OAAO,CAACsB,kBAAkB;AAC5D,OAAO,MAAMC,WAAW,GAAGvB,OAAO,CAACuB,WAAW;AAC9C,OAAO,MAAMC,aAAa,GAAGxB,OAAO,CAACwB,aAAa;AAClD,OAAO,MAAMC,gBAAgB,GAAGzB,OAAO,CAACyB,gBAAgB;;AAExD","ignoreList":[]}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Field Types Constants for Feature Builder
|
|
3
|
+
* Defines all supported field types and their properties
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
export const FIELD_TYPES = {
|
|
7
|
+
TITLE: "title",
|
|
8
|
+
TEXT: "text",
|
|
9
|
+
DESCRIPTION: "description",
|
|
10
|
+
IMAGE: "image",
|
|
11
|
+
GALLERY: "gallery",
|
|
12
|
+
FEATURE_IMAGE: "feature-image",
|
|
13
|
+
EMAIL: "email",
|
|
14
|
+
NUMBER: "number",
|
|
15
|
+
DATE: "date",
|
|
16
|
+
CTA: "cta",
|
|
17
|
+
FILE: "file"
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Field type display labels for UI
|
|
22
|
+
*/
|
|
23
|
+
export const FIELD_TYPE_LABELS = {
|
|
24
|
+
[FIELD_TYPES.TITLE]: "Title",
|
|
25
|
+
[FIELD_TYPES.TEXT]: "Text",
|
|
26
|
+
[FIELD_TYPES.DESCRIPTION]: "Description",
|
|
27
|
+
[FIELD_TYPES.IMAGE]: "Image",
|
|
28
|
+
[FIELD_TYPES.GALLERY]: "Gallery",
|
|
29
|
+
[FIELD_TYPES.FEATURE_IMAGE]: "Feature Image",
|
|
30
|
+
[FIELD_TYPES.EMAIL]: "Email",
|
|
31
|
+
[FIELD_TYPES.NUMBER]: "Number",
|
|
32
|
+
[FIELD_TYPES.DATE]: "Date",
|
|
33
|
+
[FIELD_TYPES.CTA]: "CTA Button",
|
|
34
|
+
[FIELD_TYPES.FILE]: "File"
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Field type validation rules
|
|
39
|
+
*/
|
|
40
|
+
export const FIELD_VALIDATION = {
|
|
41
|
+
[FIELD_TYPES.TITLE]: {
|
|
42
|
+
required: true,
|
|
43
|
+
minLength: 1
|
|
44
|
+
},
|
|
45
|
+
[FIELD_TYPES.TEXT]: {
|
|
46
|
+
required: true,
|
|
47
|
+
minLength: 1
|
|
48
|
+
},
|
|
49
|
+
[FIELD_TYPES.DESCRIPTION]: {
|
|
50
|
+
required: false,
|
|
51
|
+
minLength: 0
|
|
52
|
+
},
|
|
53
|
+
[FIELD_TYPES.IMAGE]: {
|
|
54
|
+
required: false,
|
|
55
|
+
allowedTypes: ["image/jpeg", "image/png", "image/gif"]
|
|
56
|
+
},
|
|
57
|
+
[FIELD_TYPES.GALLERY]: {
|
|
58
|
+
required: false,
|
|
59
|
+
allowedTypes: ["image/jpeg", "image/png", "image/gif"],
|
|
60
|
+
allowMultiple: true
|
|
61
|
+
},
|
|
62
|
+
[FIELD_TYPES.FEATURE_IMAGE]: {
|
|
63
|
+
required: true,
|
|
64
|
+
allowedTypes: ["image/jpeg", "image/png", "image/gif"]
|
|
65
|
+
},
|
|
66
|
+
[FIELD_TYPES.EMAIL]: {
|
|
67
|
+
required: false,
|
|
68
|
+
pattern: /^[^\s@]+@[^\s@]+\.[^\s@]+$/
|
|
69
|
+
},
|
|
70
|
+
[FIELD_TYPES.NUMBER]: {
|
|
71
|
+
required: false,
|
|
72
|
+
pattern: /^\d+\.?\d*$/
|
|
73
|
+
},
|
|
74
|
+
[FIELD_TYPES.DATE]: {
|
|
75
|
+
required: false
|
|
76
|
+
},
|
|
77
|
+
[FIELD_TYPES.CTA]: {
|
|
78
|
+
required: false,
|
|
79
|
+
fields: ["label", "url"]
|
|
80
|
+
},
|
|
81
|
+
[FIELD_TYPES.FILE]: {
|
|
82
|
+
required: false,
|
|
83
|
+
allowMultiple: true
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Get display label for field type
|
|
89
|
+
*/
|
|
90
|
+
export const getFieldTypeLabel = fieldType => {
|
|
91
|
+
return FIELD_TYPE_LABELS[fieldType] || fieldType;
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Check if field type is a CTA (has label and url structure)
|
|
96
|
+
*/
|
|
97
|
+
export const isCTAField = fieldValue => {
|
|
98
|
+
return fieldValue && typeof fieldValue === "object" && fieldValue.label && fieldValue.url;
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Check if field value represents an image
|
|
103
|
+
*/
|
|
104
|
+
export const isImageField = fieldValue => {
|
|
105
|
+
if (typeof fieldValue === "string") {
|
|
106
|
+
return fieldValue.startsWith("http://") || fieldValue.startsWith("https://");
|
|
107
|
+
}
|
|
108
|
+
if (typeof fieldValue === "object" && (fieldValue.uri || fieldValue.url)) {
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
return false;
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Check if field value represents a link/URL
|
|
116
|
+
*/
|
|
117
|
+
export const isLinkField = fieldValue => {
|
|
118
|
+
if (typeof fieldValue === "string") {
|
|
119
|
+
return fieldValue.startsWith("http://") || fieldValue.startsWith("https://");
|
|
120
|
+
}
|
|
121
|
+
return false;
|
|
122
|
+
};
|
|
123
|
+
//# sourceMappingURL=FieldTypes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["FIELD_TYPES","TITLE","TEXT","DESCRIPTION","IMAGE","GALLERY","FEATURE_IMAGE","EMAIL","NUMBER","DATE","CTA","FILE","FIELD_TYPE_LABELS","FIELD_VALIDATION","required","minLength","allowedTypes","allowMultiple","pattern","fields","getFieldTypeLabel","fieldType","isCTAField","fieldValue","label","url","isImageField","startsWith","uri","isLinkField"],"sources":["FieldTypes.js"],"sourcesContent":["/**\n * Field Types Constants for Feature Builder\n * Defines all supported field types and their properties\n */\n\nexport const FIELD_TYPES = {\n\tTITLE: \"title\",\n\tTEXT: \"text\",\n\tDESCRIPTION: \"description\",\n\tIMAGE: \"image\",\n\tGALLERY: \"gallery\",\n\tFEATURE_IMAGE: \"feature-image\",\n\tEMAIL: \"email\",\n\tNUMBER: \"number\",\n\tDATE: \"date\",\n\tCTA: \"cta\",\n\tFILE: \"file\",\n};\n\n/**\n * Field type display labels for UI\n */\nexport const FIELD_TYPE_LABELS = {\n\t[FIELD_TYPES.TITLE]: \"Title\",\n\t[FIELD_TYPES.TEXT]: \"Text\",\n\t[FIELD_TYPES.DESCRIPTION]: \"Description\",\n\t[FIELD_TYPES.IMAGE]: \"Image\",\n\t[FIELD_TYPES.GALLERY]: \"Gallery\",\n\t[FIELD_TYPES.FEATURE_IMAGE]: \"Feature Image\",\n\t[FIELD_TYPES.EMAIL]: \"Email\",\n\t[FIELD_TYPES.NUMBER]: \"Number\",\n\t[FIELD_TYPES.DATE]: \"Date\",\n\t[FIELD_TYPES.CTA]: \"CTA Button\",\n\t[FIELD_TYPES.FILE]: \"File\",\n};\n\n/**\n * Field type validation rules\n */\nexport const FIELD_VALIDATION = {\n\t[FIELD_TYPES.TITLE]: {\n\t\trequired: true,\n\t\tminLength: 1,\n\t},\n\t[FIELD_TYPES.TEXT]: {\n\t\trequired: true,\n\t\tminLength: 1,\n\t},\n\t[FIELD_TYPES.DESCRIPTION]: {\n\t\trequired: false,\n\t\tminLength: 0,\n\t},\n\t[FIELD_TYPES.IMAGE]: {\n\t\trequired: false,\n\t\tallowedTypes: [\"image/jpeg\", \"image/png\", \"image/gif\"],\n\t},\n\t[FIELD_TYPES.GALLERY]: {\n\t\trequired: false,\n\t\tallowedTypes: [\"image/jpeg\", \"image/png\", \"image/gif\"],\n\t\tallowMultiple: true,\n\t},\n\t[FIELD_TYPES.FEATURE_IMAGE]: {\n\t\trequired: true,\n\t\tallowedTypes: [\"image/jpeg\", \"image/png\", \"image/gif\"],\n\t},\n\t[FIELD_TYPES.EMAIL]: {\n\t\trequired: false,\n\t\tpattern: /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/,\n\t},\n\t[FIELD_TYPES.NUMBER]: {\n\t\trequired: false,\n\t\tpattern: /^\\d+\\.?\\d*$/,\n\t},\n\t[FIELD_TYPES.DATE]: {\n\t\trequired: false,\n\t},\n\t[FIELD_TYPES.CTA]: {\n\t\trequired: false,\n\t\tfields: [\"label\", \"url\"],\n\t},\n\t[FIELD_TYPES.FILE]: {\n\t\trequired: false,\n\t\tallowMultiple: true,\n\t},\n};\n\n/**\n * Get display label for field type\n */\nexport const getFieldTypeLabel = (fieldType) => {\n\treturn FIELD_TYPE_LABELS[fieldType] || fieldType;\n};\n\n/**\n * Check if field type is a CTA (has label and url structure)\n */\nexport const isCTAField = (fieldValue) => {\n\treturn (\n\t\tfieldValue &&\n\t\ttypeof fieldValue === \"object\" &&\n\t\tfieldValue.label &&\n\t\tfieldValue.url\n\t);\n};\n\n/**\n * Check if field value represents an image\n */\nexport const isImageField = (fieldValue) => {\n\tif (typeof fieldValue === \"string\") {\n\t\treturn (\n\t\t\tfieldValue.startsWith(\"http://\") || fieldValue.startsWith(\"https://\")\n\t\t);\n\t}\n\tif (typeof fieldValue === \"object\" && (fieldValue.uri || fieldValue.url)) {\n\t\treturn true;\n\t}\n\treturn false;\n};\n\n/**\n * Check if field value represents a link/URL\n */\nexport const isLinkField = (fieldValue) => {\n\tif (typeof fieldValue === \"string\") {\n\t\treturn (\n\t\t\tfieldValue.startsWith(\"http://\") || fieldValue.startsWith(\"https://\")\n\t\t);\n\t}\n\treturn false;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Services } from "../feature.config";
|
|
2
|
+
const navService = {
|
|
3
|
+
navigate: (routeName, params) => Services.navigation.navigate(routeName, params),
|
|
4
|
+
goBack: routeName => Services.navigation.goBack(routeName),
|
|
5
|
+
getParentRoute: () => Services.navigation.getParentRoute()
|
|
6
|
+
};
|
|
7
|
+
export default navService;
|
|
8
|
+
|
|
9
|
+
// TODO: Add required references
|
|
10
|
+
//# sourceMappingURL=NavigationService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Services","navService","navigate","routeName","params","navigation","goBack","getParentRoute"],"sources":["NavigationService.js"],"sourcesContent":["import { Services } from \"../feature.config\";\n\nconst navService = {\n\tnavigate: (routeName, params) =>\n\t\tServices.navigation.navigate(routeName, params),\n\tgoBack: (routeName) => Services.navigation.goBack(routeName),\n\tgetParentRoute: () => Services.navigation.getParentRoute(),\n};\n\nexport default navService;\n\n// TODO: Add required references\n"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,mBAAmB;AAE5C,MAAMC,UAAU,GAAG;EAClBC,QAAQ,EAAEA,CAACC,SAAS,EAAEC,MAAM,KAC3BJ,QAAQ,CAACK,UAAU,CAACH,QAAQ,CAACC,SAAS,EAAEC,MAAM,CAAC;EAChDE,MAAM,EAAGH,SAAS,IAAKH,QAAQ,CAACK,UAAU,CAACC,MAAM,CAACH,SAAS,CAAC;EAC5DI,cAAc,EAAEA,CAAA,KAAMP,QAAQ,CAACK,UAAU,CAACE,cAAc,CAAC;AAC1D,CAAC;AAED,eAAeN,UAAU;;AAEzB","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Styles"],"sources":["Styles.js"],"sourcesContent":["import { Styles } from \"../core.config\";\n\nexport default Styles;\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,gBAAgB;AAEvC,eAAeA,MAAM","ignoreList":[]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helper functions for Feature Builder
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Get the summary field value from a listing based on feature definition
|
|
7
|
+
* Looks for a field marked with useAsSummary: true, then falls back to first description field
|
|
8
|
+
* @param {Object} listing - The listing object containing fields
|
|
9
|
+
* @param {Object} featureDefinition - The feature definition containing field definitions
|
|
10
|
+
* @returns {string} The summary field value or empty string
|
|
11
|
+
*/
|
|
12
|
+
export const getSummaryFieldValue = (listing, featureDefinition) => {
|
|
13
|
+
var _featureDefinition$fi, _featureDefinition$fi2;
|
|
14
|
+
// First, look for field marked with useAsSummary: true
|
|
15
|
+
const summaryField = featureDefinition === null || featureDefinition === void 0 || (_featureDefinition$fi = featureDefinition.fields) === null || _featureDefinition$fi === void 0 ? void 0 : _featureDefinition$fi.find(field => field.useAsSummary === true);
|
|
16
|
+
if (summaryField) {
|
|
17
|
+
var _listing$fields;
|
|
18
|
+
return ((_listing$fields = listing.fields) === null || _listing$fields === void 0 ? void 0 : _listing$fields[summaryField.id]) || "";
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// Fall back to first description-type field
|
|
22
|
+
const descriptionField = featureDefinition === null || featureDefinition === void 0 || (_featureDefinition$fi2 = featureDefinition.fields) === null || _featureDefinition$fi2 === void 0 ? void 0 : _featureDefinition$fi2.find(field => field.type === "description");
|
|
23
|
+
if (descriptionField) {
|
|
24
|
+
var _listing$fields2;
|
|
25
|
+
return ((_listing$fields2 = listing.fields) === null || _listing$fields2 === void 0 ? void 0 : _listing$fields2[descriptionField.id]) || "";
|
|
26
|
+
}
|
|
27
|
+
return "";
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["getSummaryFieldValue","listing","featureDefinition","_featureDefinition$fi","_featureDefinition$fi2","summaryField","fields","find","field","useAsSummary","_listing$fields","id","descriptionField","type","_listing$fields2"],"sources":["helpers.js"],"sourcesContent":["/**\n * Helper functions for Feature Builder\n */\n\n/**\n * Get the summary field value from a listing based on feature definition\n * Looks for a field marked with useAsSummary: true, then falls back to first description field\n * @param {Object} listing - The listing object containing fields\n * @param {Object} featureDefinition - The feature definition containing field definitions\n * @returns {string} The summary field value or empty string\n */\nexport const getSummaryFieldValue = (listing, featureDefinition) => {\n\t// First, look for field marked with useAsSummary: true\n\tconst summaryField = featureDefinition?.fields?.find(\n\t\t(field) => field.useAsSummary === true,\n\t);\n\tif (summaryField) {\n\t\treturn listing.fields?.[summaryField.id] || \"\";\n\t}\n\n\t// Fall back to first description-type field\n\tconst descriptionField = featureDefinition?.fields?.find(\n\t\t(field) => field.type === \"description\",\n\t);\n\tif (descriptionField) {\n\t\treturn listing.fields?.[descriptionField.id] || \"\";\n\t}\n\n\treturn \"\";\n};\n"],"mappings":"AAAA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,oBAAoB,GAAGA,CAACC,OAAO,EAAEC,iBAAiB,KAAK;EAAA,IAAAC,qBAAA,EAAAC,sBAAA;EACnE;EACA,MAAMC,YAAY,GAAGH,iBAAiB,aAAjBA,iBAAiB,gBAAAC,qBAAA,GAAjBD,iBAAiB,CAAEI,MAAM,cAAAH,qBAAA,uBAAzBA,qBAAA,CAA2BI,IAAI,CAClDC,KAAK,IAAKA,KAAK,CAACC,YAAY,KAAK,IACnC,CAAC;EACD,IAAIJ,YAAY,EAAE;IAAA,IAAAK,eAAA;IACjB,OAAO,EAAAA,eAAA,GAAAT,OAAO,CAACK,MAAM,cAAAI,eAAA,uBAAdA,eAAA,CAAiBL,YAAY,CAACM,EAAE,CAAC,KAAI,EAAE;EAC/C;;EAEA;EACA,MAAMC,gBAAgB,GAAGV,iBAAiB,aAAjBA,iBAAiB,gBAAAE,sBAAA,GAAjBF,iBAAiB,CAAEI,MAAM,cAAAF,sBAAA,uBAAzBA,sBAAA,CAA2BG,IAAI,CACtDC,KAAK,IAAKA,KAAK,CAACK,IAAI,KAAK,aAC3B,CAAC;EACD,IAAID,gBAAgB,EAAE;IAAA,IAAAE,gBAAA;IACrB,OAAO,EAAAA,gBAAA,GAAAb,OAAO,CAACK,MAAM,cAAAQ,gBAAA,uBAAdA,gBAAA,CAAiBF,gBAAgB,CAACD,EAAE,CAAC,KAAI,EAAE;EACnD;EAEA,OAAO,EAAE;AACV,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Session, Helper } from "../core.config";
|
|
2
|
+
|
|
3
|
+
// Session
|
|
4
|
+
export const authedFunction = async request => {
|
|
5
|
+
const result = await Session.authedFunction(request);
|
|
6
|
+
return result;
|
|
7
|
+
};
|
|
8
|
+
export const getSessionTokenAWS = Session.getSessionTokenAWS;
|
|
9
|
+
export const getSessionUidAWS = Session.getSessionUidAWS;
|
|
10
|
+
|
|
11
|
+
// Helper
|
|
12
|
+
export const getFirstName = Helper.getFirstName;
|
|
13
|
+
export const getImageSource = Helper.getImageSource;
|
|
14
|
+
export const StatusBarHeight = Helper.StatusBarHeight;
|
|
15
|
+
export const getPluralS = Helper.getPluralS;
|
|
16
|
+
export const getShadowStyle = Helper.getShadowStyle;
|
|
17
|
+
export const getSite = Helper.getSite;
|
|
18
|
+
export const getValueOrDefault = Helper.getValueOrDefault;
|
|
19
|
+
export const usersToSearchResult = Helper.usersToSearchResult;
|
|
20
|
+
export const searchUsers = Helper.searchUsers;
|
|
21
|
+
export * from "./Colors";
|
|
22
|
+
|
|
23
|
+
// TODO: Add required references
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Session","Helper","authedFunction","request","result","getSessionTokenAWS","getSessionUidAWS","getFirstName","getImageSource","StatusBarHeight","getPluralS","getShadowStyle","getSite","getValueOrDefault","usersToSearchResult","searchUsers"],"sources":["index.js"],"sourcesContent":["import { Session, Helper } from \"../core.config\";\n\n// Session\nexport const authedFunction = async (request) => {\n\tconst result = await Session.authedFunction(request);\n\treturn result;\n};\nexport const getSessionTokenAWS = Session.getSessionTokenAWS;\nexport const getSessionUidAWS = Session.getSessionUidAWS;\n\n// Helper\nexport const getFirstName = Helper.getFirstName;\nexport const getImageSource = Helper.getImageSource;\nexport const StatusBarHeight = Helper.StatusBarHeight;\nexport const getPluralS = Helper.getPluralS;\nexport const getShadowStyle = Helper.getShadowStyle;\nexport const getSite = Helper.getSite;\nexport const getValueOrDefault = Helper.getValueOrDefault;\nexport const usersToSearchResult = Helper.usersToSearchResult;\nexport const searchUsers = Helper.searchUsers;\n\nexport * from \"./Colors\";\n\n// TODO: Add required references\n"],"mappings":"AAAA,SAASA,OAAO,EAAEC,MAAM,QAAQ,gBAAgB;;AAEhD;AACA,OAAO,MAAMC,cAAc,GAAG,MAAOC,OAAO,IAAK;EAChD,MAAMC,MAAM,GAAG,MAAMJ,OAAO,CAACE,cAAc,CAACC,OAAO,CAAC;EACpD,OAAOC,MAAM;AACd,CAAC;AACD,OAAO,MAAMC,kBAAkB,GAAGL,OAAO,CAACK,kBAAkB;AAC5D,OAAO,MAAMC,gBAAgB,GAAGN,OAAO,CAACM,gBAAgB;;AAExD;AACA,OAAO,MAAMC,YAAY,GAAGN,MAAM,CAACM,YAAY;AAC/C,OAAO,MAAMC,cAAc,GAAGP,MAAM,CAACO,cAAc;AACnD,OAAO,MAAMC,eAAe,GAAGR,MAAM,CAACQ,eAAe;AACrD,OAAO,MAAMC,UAAU,GAAGT,MAAM,CAACS,UAAU;AAC3C,OAAO,MAAMC,cAAc,GAAGV,MAAM,CAACU,cAAc;AACnD,OAAO,MAAMC,OAAO,GAAGX,MAAM,CAACW,OAAO;AACrC,OAAO,MAAMC,iBAAiB,GAAGZ,MAAM,CAACY,iBAAiB;AACzD,OAAO,MAAMC,mBAAmB,GAAGb,MAAM,CAACa,mBAAmB;AAC7D,OAAO,MAAMC,WAAW,GAAGd,MAAM,CAACc,WAAW;AAE7C,cAAc,UAAU;;AAExB","ignoreList":[]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export const SPACING = {
|
|
2
|
+
// Base spacing unit (4px)
|
|
3
|
+
XS: 4,
|
|
4
|
+
// Small spacing (8px)
|
|
5
|
+
SM: 8,
|
|
6
|
+
// Medium spacing (16px)
|
|
7
|
+
MD: 16,
|
|
8
|
+
// Large spacing (24px)
|
|
9
|
+
LG: 24,
|
|
10
|
+
// Extra large spacing (32px)
|
|
11
|
+
XL: 32,
|
|
12
|
+
// Double large spacing (48px)
|
|
13
|
+
XXL: 48
|
|
14
|
+
};
|
|
15
|
+
export const commonSpacing = {
|
|
16
|
+
marginTiny: SPACING.XS,
|
|
17
|
+
marginSmall: SPACING.SM,
|
|
18
|
+
marginMedium: SPACING.MD,
|
|
19
|
+
marginLarge: SPACING.LG,
|
|
20
|
+
marginXLarge: SPACING.XL,
|
|
21
|
+
marginXXLarge: SPACING.XXL,
|
|
22
|
+
paddingTiny: SPACING.XS,
|
|
23
|
+
paddingSmall: SPACING.SM,
|
|
24
|
+
paddingMedium: SPACING.MD,
|
|
25
|
+
paddingLarge: SPACING.LG,
|
|
26
|
+
paddingXLarge: SPACING.XL,
|
|
27
|
+
paddingXXLarge: SPACING.XXL
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=spacing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["SPACING","XS","SM","MD","LG","XL","XXL","commonSpacing","marginTiny","marginSmall","marginMedium","marginLarge","marginXLarge","marginXXLarge","paddingTiny","paddingSmall","paddingMedium","paddingLarge","paddingXLarge","paddingXXLarge"],"sources":["spacing.js"],"sourcesContent":["export const SPACING = {\n\t// Base spacing unit (4px)\n\tXS: 4,\n\t// Small spacing (8px)\n\tSM: 8,\n\t// Medium spacing (16px)\n\tMD: 16,\n\t// Large spacing (24px)\n\tLG: 24,\n\t// Extra large spacing (32px)\n\tXL: 32,\n\t// Double large spacing (48px)\n\tXXL: 48,\n};\n\nexport const commonSpacing = {\n\tmarginTiny: SPACING.XS,\n\tmarginSmall: SPACING.SM,\n\tmarginMedium: SPACING.MD,\n\tmarginLarge: SPACING.LG,\n\tmarginXLarge: SPACING.XL,\n\tmarginXXLarge: SPACING.XXL,\n\n\tpaddingTiny: SPACING.XS,\n\tpaddingSmall: SPACING.SM,\n\tpaddingMedium: SPACING.MD,\n\tpaddingLarge: SPACING.LG,\n\tpaddingXLarge: SPACING.XL,\n\tpaddingXXLarge: SPACING.XXL,\n};\n"],"mappings":"AAAA,OAAO,MAAMA,OAAO,GAAG;EACtB;EACAC,EAAE,EAAE,CAAC;EACL;EACAC,EAAE,EAAE,CAAC;EACL;EACAC,EAAE,EAAE,EAAE;EACN;EACAC,EAAE,EAAE,EAAE;EACN;EACAC,EAAE,EAAE,EAAE;EACN;EACAC,GAAG,EAAE;AACN,CAAC;AAED,OAAO,MAAMC,aAAa,GAAG;EAC5BC,UAAU,EAAER,OAAO,CAACC,EAAE;EACtBQ,WAAW,EAAET,OAAO,CAACE,EAAE;EACvBQ,YAAY,EAAEV,OAAO,CAACG,EAAE;EACxBQ,WAAW,EAAEX,OAAO,CAACI,EAAE;EACvBQ,YAAY,EAAEZ,OAAO,CAACK,EAAE;EACxBQ,aAAa,EAAEb,OAAO,CAACM,GAAG;EAE1BQ,WAAW,EAAEd,OAAO,CAACC,EAAE;EACvBc,YAAY,EAAEf,OAAO,CAACE,EAAE;EACxBc,aAAa,EAAEhB,OAAO,CAACG,EAAE;EACzBc,YAAY,EAAEjB,OAAO,CAACI,EAAE;EACxBc,aAAa,EAAElB,OAAO,CAACK,EAAE;EACzBc,cAAc,EAAEnB,OAAO,CAACM;AACzB,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core type definitions for Feature Builder Mobile Extension
|
|
3
|
+
* This file contains JSDoc type definitions for all major entities used throughout the feature builder
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @typedef {Object} FieldDefinition
|
|
8
|
+
* @property {string} id - Unique identifier for the field (e.g., 'mandatory-title', 'mandatory-feature-image')
|
|
9
|
+
* @property {string} type - Field data type ('string', 'number', 'boolean', 'image', 'pdf', 'link')
|
|
10
|
+
* @property {string} label - Human-readable label for the field
|
|
11
|
+
* @property {boolean} isMandatory - Whether this field is required for all feature definitions
|
|
12
|
+
* @property {Object} [validation] - Validation rules for the field
|
|
13
|
+
* @property {string} [validation.required] - Required validation message
|
|
14
|
+
* @property {string} [validation.min] - Minimum length/value validation
|
|
15
|
+
* @property {string} [validation.max] - Maximum length/value validation
|
|
16
|
+
* @property {string} [validation.pattern] - Regex pattern for validation
|
|
17
|
+
* @property {Object} [options] - Additional options specific to field type
|
|
18
|
+
* @property {string} [options.placeholder] - Placeholder text for input fields
|
|
19
|
+
* @property {string} [options.helpText] - Help text displayed below field
|
|
20
|
+
* @property {string[]} [options.allowedTypes] - Allowed file types for file fields
|
|
21
|
+
* @property {number} [options.maxSize] - Maximum file size in bytes
|
|
22
|
+
* @property {number} order - Display order of the field in forms
|
|
23
|
+
* @example
|
|
24
|
+
* const titleField = {
|
|
25
|
+
* id: 'mandatory-title',
|
|
26
|
+
* type: 'string',
|
|
27
|
+
* label: 'Title',
|
|
28
|
+
* isMandatory: true,
|
|
29
|
+
* validation: { required: 'Title is required' },
|
|
30
|
+
* options: { placeholder: 'Enter feature title' },
|
|
31
|
+
* order: 1
|
|
32
|
+
* };
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* @typedef {Object} FeatureDefinition
|
|
37
|
+
* @property {string} id - Unique identifier for the feature definition
|
|
38
|
+
* @property {string} site - Site identifier this feature belongs to
|
|
39
|
+
* @property {string} title - Human-readable title for the feature
|
|
40
|
+
* @property {string} displayName - Display name shown in UI
|
|
41
|
+
* @property {string} icon - Icon identifier for the feature
|
|
42
|
+
* @property {FieldDefinition[]} fields - Array of field definitions that make up this feature
|
|
43
|
+
* @property {LayoutConfig} layout - Layout configuration for displaying listings
|
|
44
|
+
* @property {string} createdAt - ISO timestamp when feature was created
|
|
45
|
+
* @property {string} editedAt - ISO timestamp when feature was last edited
|
|
46
|
+
* @property {string|null} deletedAt - ISO timestamp when feature was deleted (null if active)
|
|
47
|
+
* @example
|
|
48
|
+
* const featureDefinition = {
|
|
49
|
+
* id: 'restaurant-menu',
|
|
50
|
+
* site: 'pluss60-demo',
|
|
51
|
+
* title: 'Restaurant Menu',
|
|
52
|
+
* displayName: 'Menu Items',
|
|
53
|
+
* icon: 'restaurant',
|
|
54
|
+
* fields: [titleField, imageField, descriptionField],
|
|
55
|
+
* layout: { type: 'round', iconGrid: false },
|
|
56
|
+
* createdAt: '2023-12-01T10:00:00Z',
|
|
57
|
+
* editedAt: '2023-12-01T10:00:00Z',
|
|
58
|
+
* deletedAt: null
|
|
59
|
+
* };
|
|
60
|
+
*/
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* @typedef {Object} LayoutConfig
|
|
64
|
+
* @property {string} type - Layout type ('round', 'square', 'condensed', 'feature')
|
|
65
|
+
* @property {boolean} [iconGrid] - Whether to use icon grid layout (for round/square types)
|
|
66
|
+
* @property {Object} [options] - Additional layout-specific options
|
|
67
|
+
* @property {number} [options.columns] - Number of columns for grid layouts
|
|
68
|
+
* @property {number} [options.itemSpacing] - Spacing between items
|
|
69
|
+
* @property {Object} [options.textStyling] - Text styling options
|
|
70
|
+
* @example
|
|
71
|
+
* const layoutConfig = {
|
|
72
|
+
* type: 'round',
|
|
73
|
+
* iconGrid: true,
|
|
74
|
+
* options: {
|
|
75
|
+
* columns: 2,
|
|
76
|
+
* itemSpacing: 16,
|
|
77
|
+
* textStyling: { showTitle: true, showDescription: false }
|
|
78
|
+
* }
|
|
79
|
+
* };
|
|
80
|
+
*/
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* @typedef {Object} Listing
|
|
84
|
+
* @property {string} id - Unique identifier for the listing (UUID)
|
|
85
|
+
* @property {string} featureDefinitionId - ID of the feature definition this listing belongs to
|
|
86
|
+
* @property {Object} fields - Key-value pairs of field data
|
|
87
|
+
* @property {string} [fields.mandatory-title] - Title field value
|
|
88
|
+
* @property {string} [fields.mandatory-feature-image] - Feature image URL
|
|
89
|
+
* @property {*} [fields.*] - Additional field values based on feature definition
|
|
90
|
+
* @property {string} createdAt - ISO timestamp when listing was created
|
|
91
|
+
* @property {string} editedAt - ISO timestamp when listing was last edited
|
|
92
|
+
* @property {string|null} deletedAt - ISO timestamp when listing was deleted (null if active)
|
|
93
|
+
* @property {Object} [metadata] - Additional metadata about the listing
|
|
94
|
+
* @property {string} [metadata.createdBy] - User ID who created the listing
|
|
95
|
+
* @property {string} [metadata.updatedBy] - User ID who last updated the listing
|
|
96
|
+
* @example
|
|
97
|
+
* const listing = {
|
|
98
|
+
* id: '123e4567-e89b-12d3-a456-426614174000',
|
|
99
|
+
* featureDefinitionId: 'restaurant-menu',
|
|
100
|
+
* fields: {
|
|
101
|
+
* 'mandatory-title': 'Margherita Pizza',
|
|
102
|
+
* 'mandatory-feature-image': 'https://example.com/pizza.jpg',
|
|
103
|
+
* 'description': 'Classic margherita with fresh basil',
|
|
104
|
+
* 'price': 12.99
|
|
105
|
+
* },
|
|
106
|
+
* createdAt: '2023-12-01T10:00:00Z',
|
|
107
|
+
* editedAt: '2023-12-01T10:00:00Z',
|
|
108
|
+
* deletedAt: null
|
|
109
|
+
* };
|
|
110
|
+
*/
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* @typedef {Object} ListingItem
|
|
114
|
+
* @property {string} id - Listing ID
|
|
115
|
+
* @property {string} title - Listing title (extracted from mandatory-title field)
|
|
116
|
+
* @property {string} [image] - Listing image URL (extracted from mandatory-feature-image field)
|
|
117
|
+
* @property {Object} fields - All field values for the listing
|
|
118
|
+
* @property {string} featureDefinitionId - ID of parent feature definition
|
|
119
|
+
* @property {FeatureDefinition} [featureDefinition] - Parent feature definition (if loaded)
|
|
120
|
+
* @property {boolean} isActive - Whether listing is active (not deleted)
|
|
121
|
+
* @property {string} createdAt - Creation timestamp
|
|
122
|
+
* @property {string} editedAt - Last edit timestamp
|
|
123
|
+
* @example
|
|
124
|
+
* const listItem = {
|
|
125
|
+
* id: '123e4567-e89b-12d3-a456-426614174000',
|
|
126
|
+
* title: 'Margherita Pizza',
|
|
127
|
+
* image: 'https://example.com/pizza.jpg',
|
|
128
|
+
* fields: { 'mandatory-title': 'Margherita Pizza', ... },
|
|
129
|
+
* featureDefinitionId: 'restaurant-menu',
|
|
130
|
+
* featureDefinition: restaurantMenuDefinition,
|
|
131
|
+
* isActive: true,
|
|
132
|
+
* createdAt: '2023-12-01T10:00:00Z',
|
|
133
|
+
* editedAt: '2023-12-01T10:00:00Z'
|
|
134
|
+
* };
|
|
135
|
+
*/
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* @typedef {Object} FeatureBuilderState
|
|
139
|
+
* @property {FeatureDefinition|null} feature - Currently loaded feature definition
|
|
140
|
+
* @property {Listing[]} listings - Listings for the current feature
|
|
141
|
+
* @property {boolean} loading - Global loading state
|
|
142
|
+
* @property {string|null} error - Global error message
|
|
143
|
+
* @example
|
|
144
|
+
* const featureBuilderState = {
|
|
145
|
+
* feature: restaurantMenuDefinition,
|
|
146
|
+
* listings: [pizzaListing, pastaListing],
|
|
147
|
+
* loading: false,
|
|
148
|
+
* error: null
|
|
149
|
+
* };
|
|
150
|
+
*/
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* @typedef {Object} NavigationParams
|
|
154
|
+
* @property {Object} [listing] - Listing data for detail view
|
|
155
|
+
* @property {FeatureDefinition} [featureDefinition] - Feature definition object
|
|
156
|
+
* @property {string} [featureTitle] - Feature title for header display
|
|
157
|
+
* @property {string} [mode] - Navigation mode ('view', 'edit', 'create')
|
|
158
|
+
* @property {Object} [metadata] - Additional navigation metadata
|
|
159
|
+
* @example
|
|
160
|
+
* const navParams = {
|
|
161
|
+
* listing: pizzaListing,
|
|
162
|
+
* featureDefinition: restaurantMenuDefinition,
|
|
163
|
+
* featureTitle: 'Restaurant Menu',
|
|
164
|
+
* mode: 'view',
|
|
165
|
+
* metadata: { source: 'widget' }
|
|
166
|
+
* };
|
|
167
|
+
*/
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* @typedef {Object} WidgetProps
|
|
171
|
+
* @property {Listing[]} items - Listings to display in widget
|
|
172
|
+
* @property {FeatureDefinition} featureDefinition - Feature definition for styling
|
|
173
|
+
* @property {string} colourBrandingMain - Main branding color
|
|
174
|
+
* @property {Function} onItemPress - Callback when item is pressed
|
|
175
|
+
* @property {Function} [onRefresh] - Callback for pull-to-refresh
|
|
176
|
+
* @property {boolean} refreshing - Whether widget is currently refreshing
|
|
177
|
+
* @property {Object} [style] - Additional styles for widget
|
|
178
|
+
* @property {number} [maxItems] - Maximum number of items to display
|
|
179
|
+
* @example
|
|
180
|
+
* const widgetProps = {
|
|
181
|
+
* items: [pizzaListing, pastaListing],
|
|
182
|
+
* featureDefinition: restaurantMenuDefinition,
|
|
183
|
+
* colourBrandingMain: '#FF6363',
|
|
184
|
+
* onItemPress: (item) => navigation.navigate('Detail', { listing: item }),
|
|
185
|
+
* refreshing: false,
|
|
186
|
+
* onRefresh: handleRefresh,
|
|
187
|
+
* maxItems: 2
|
|
188
|
+
* };
|
|
189
|
+
*/
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* @typedef {Object} ApiResponse
|
|
193
|
+
* @property {boolean} success - Whether the API call was successful
|
|
194
|
+
* @property {*} data - Response data payload
|
|
195
|
+
* @property {string} [message] - Optional message from the server
|
|
196
|
+
* @property {string} [error] - Error message if the call failed
|
|
197
|
+
* @property {number} [status] - HTTP status code
|
|
198
|
+
* @property {Object} [metadata] - Additional response metadata
|
|
199
|
+
* @example
|
|
200
|
+
* const apiResponse = {
|
|
201
|
+
* success: true,
|
|
202
|
+
* data: { listings: [pizzaListing, pastaListing] },
|
|
203
|
+
* message: 'Listings fetched successfully',
|
|
204
|
+
* status: 200,
|
|
205
|
+
* metadata: { count: 2, hasMore: false }
|
|
206
|
+
* };
|
|
207
|
+
*/
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* @typedef {Object} FieldComponentProps
|
|
211
|
+
* @property {FieldDefinition} fieldDefinition - Field definition configuration
|
|
212
|
+
* @property {*} value - Current field value
|
|
213
|
+
* @property {Function} onChange - Callback when field value changes
|
|
214
|
+
* @property {string} [error] - Validation error message
|
|
215
|
+
* @property {boolean} [disabled] - Whether field is disabled
|
|
216
|
+
* @property {Object} [style] - Additional styles for field component
|
|
217
|
+
* @property {Object} [theme] - Theme configuration
|
|
218
|
+
* @example
|
|
219
|
+
* const fieldProps = {
|
|
220
|
+
* fieldDefinition: titleField,
|
|
221
|
+
* value: 'Margherita Pizza',
|
|
222
|
+
* onChange: (newValue) => setFieldValue('title', newValue),
|
|
223
|
+
* error: null,
|
|
224
|
+
* disabled: false,
|
|
225
|
+
* style: { marginBottom: 16 },
|
|
226
|
+
* theme: { primaryColor: '#FF6363' }
|
|
227
|
+
* };
|
|
228
|
+
*/
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* @typedef {Object} LayoutComponentProps
|
|
232
|
+
* @property {Listing[]} listings - Array of listings to display
|
|
233
|
+
* @property {FeatureDefinition} featureDefinition - Feature definition for layout configuration
|
|
234
|
+
* @property {string} colourBrandingMain - Main branding color
|
|
235
|
+
* @property {Function} onItemPress - Callback when listing item is pressed
|
|
236
|
+
* @property {Function} [onRefresh] - Callback for pull-to-refresh
|
|
237
|
+
* @property {boolean} [refreshing] - Whether layout is currently refreshing
|
|
238
|
+
* @property {Object} [style] - Additional styles for layout component
|
|
239
|
+
* @property {Object} [layoutOptions] - Layout-specific options
|
|
240
|
+
* @example
|
|
241
|
+
* const layoutProps = {
|
|
242
|
+
* listings: [pizzaListing, pastaListing],
|
|
243
|
+
* featureDefinition: restaurantMenuDefinition,
|
|
244
|
+
* colourBrandingMain: '#FF6363',
|
|
245
|
+
* onItemPress: handleItemPress,
|
|
246
|
+
* refreshing: false,
|
|
247
|
+
* onRefresh: handleRefresh,
|
|
248
|
+
* layoutOptions: { showImages: true, columns: 2 }
|
|
249
|
+
* };
|
|
250
|
+
*/
|
|
251
|
+
|
|
252
|
+
// Export empty object to make this a module
|
|
253
|
+
module.exports = {};
|
|
254
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["module","exports"],"sources":["types.js"],"sourcesContent":["/**\n * Core type definitions for Feature Builder Mobile Extension\n * This file contains JSDoc type definitions for all major entities used throughout the feature builder\n */\n\n/**\n * @typedef {Object} FieldDefinition\n * @property {string} id - Unique identifier for the field (e.g., 'mandatory-title', 'mandatory-feature-image')\n * @property {string} type - Field data type ('string', 'number', 'boolean', 'image', 'pdf', 'link')\n * @property {string} label - Human-readable label for the field\n * @property {boolean} isMandatory - Whether this field is required for all feature definitions\n * @property {Object} [validation] - Validation rules for the field\n * @property {string} [validation.required] - Required validation message\n * @property {string} [validation.min] - Minimum length/value validation\n * @property {string} [validation.max] - Maximum length/value validation\n * @property {string} [validation.pattern] - Regex pattern for validation\n * @property {Object} [options] - Additional options specific to field type\n * @property {string} [options.placeholder] - Placeholder text for input fields\n * @property {string} [options.helpText] - Help text displayed below field\n * @property {string[]} [options.allowedTypes] - Allowed file types for file fields\n * @property {number} [options.maxSize] - Maximum file size in bytes\n * @property {number} order - Display order of the field in forms\n * @example\n * const titleField = {\n * id: 'mandatory-title',\n * type: 'string',\n * label: 'Title',\n * isMandatory: true,\n * validation: { required: 'Title is required' },\n * options: { placeholder: 'Enter feature title' },\n * order: 1\n * };\n */\n\n/**\n * @typedef {Object} FeatureDefinition\n * @property {string} id - Unique identifier for the feature definition\n * @property {string} site - Site identifier this feature belongs to\n * @property {string} title - Human-readable title for the feature\n * @property {string} displayName - Display name shown in UI\n * @property {string} icon - Icon identifier for the feature\n * @property {FieldDefinition[]} fields - Array of field definitions that make up this feature\n * @property {LayoutConfig} layout - Layout configuration for displaying listings\n * @property {string} createdAt - ISO timestamp when feature was created\n * @property {string} editedAt - ISO timestamp when feature was last edited\n * @property {string|null} deletedAt - ISO timestamp when feature was deleted (null if active)\n * @example\n * const featureDefinition = {\n * id: 'restaurant-menu',\n * site: 'pluss60-demo',\n * title: 'Restaurant Menu',\n * displayName: 'Menu Items',\n * icon: 'restaurant',\n * fields: [titleField, imageField, descriptionField],\n * layout: { type: 'round', iconGrid: false },\n * createdAt: '2023-12-01T10:00:00Z',\n * editedAt: '2023-12-01T10:00:00Z',\n * deletedAt: null\n * };\n */\n\n/**\n * @typedef {Object} LayoutConfig\n * @property {string} type - Layout type ('round', 'square', 'condensed', 'feature')\n * @property {boolean} [iconGrid] - Whether to use icon grid layout (for round/square types)\n * @property {Object} [options] - Additional layout-specific options\n * @property {number} [options.columns] - Number of columns for grid layouts\n * @property {number} [options.itemSpacing] - Spacing between items\n * @property {Object} [options.textStyling] - Text styling options\n * @example\n * const layoutConfig = {\n * type: 'round',\n * iconGrid: true,\n * options: {\n * columns: 2,\n * itemSpacing: 16,\n * textStyling: { showTitle: true, showDescription: false }\n * }\n * };\n */\n\n/**\n * @typedef {Object} Listing\n * @property {string} id - Unique identifier for the listing (UUID)\n * @property {string} featureDefinitionId - ID of the feature definition this listing belongs to\n * @property {Object} fields - Key-value pairs of field data\n * @property {string} [fields.mandatory-title] - Title field value\n * @property {string} [fields.mandatory-feature-image] - Feature image URL\n * @property {*} [fields.*] - Additional field values based on feature definition\n * @property {string} createdAt - ISO timestamp when listing was created\n * @property {string} editedAt - ISO timestamp when listing was last edited\n * @property {string|null} deletedAt - ISO timestamp when listing was deleted (null if active)\n * @property {Object} [metadata] - Additional metadata about the listing\n * @property {string} [metadata.createdBy] - User ID who created the listing\n * @property {string} [metadata.updatedBy] - User ID who last updated the listing\n * @example\n * const listing = {\n * id: '123e4567-e89b-12d3-a456-426614174000',\n * featureDefinitionId: 'restaurant-menu',\n * fields: {\n * 'mandatory-title': 'Margherita Pizza',\n * 'mandatory-feature-image': 'https://example.com/pizza.jpg',\n * 'description': 'Classic margherita with fresh basil',\n * 'price': 12.99\n * },\n * createdAt: '2023-12-01T10:00:00Z',\n * editedAt: '2023-12-01T10:00:00Z',\n * deletedAt: null\n * };\n */\n\n/**\n * @typedef {Object} ListingItem\n * @property {string} id - Listing ID\n * @property {string} title - Listing title (extracted from mandatory-title field)\n * @property {string} [image] - Listing image URL (extracted from mandatory-feature-image field)\n * @property {Object} fields - All field values for the listing\n * @property {string} featureDefinitionId - ID of parent feature definition\n * @property {FeatureDefinition} [featureDefinition] - Parent feature definition (if loaded)\n * @property {boolean} isActive - Whether listing is active (not deleted)\n * @property {string} createdAt - Creation timestamp\n * @property {string} editedAt - Last edit timestamp\n * @example\n * const listItem = {\n * id: '123e4567-e89b-12d3-a456-426614174000',\n * title: 'Margherita Pizza',\n * image: 'https://example.com/pizza.jpg',\n * fields: { 'mandatory-title': 'Margherita Pizza', ... },\n * featureDefinitionId: 'restaurant-menu',\n * featureDefinition: restaurantMenuDefinition,\n * isActive: true,\n * createdAt: '2023-12-01T10:00:00Z',\n * editedAt: '2023-12-01T10:00:00Z'\n * };\n */\n\n/**\n * @typedef {Object} FeatureBuilderState\n * @property {FeatureDefinition|null} feature - Currently loaded feature definition\n * @property {Listing[]} listings - Listings for the current feature\n * @property {boolean} loading - Global loading state\n * @property {string|null} error - Global error message\n * @example\n * const featureBuilderState = {\n * feature: restaurantMenuDefinition,\n * listings: [pizzaListing, pastaListing],\n * loading: false,\n * error: null\n * };\n */\n\n/**\n * @typedef {Object} NavigationParams\n * @property {Object} [listing] - Listing data for detail view\n * @property {FeatureDefinition} [featureDefinition] - Feature definition object\n * @property {string} [featureTitle] - Feature title for header display\n * @property {string} [mode] - Navigation mode ('view', 'edit', 'create')\n * @property {Object} [metadata] - Additional navigation metadata\n * @example\n * const navParams = {\n * listing: pizzaListing,\n * featureDefinition: restaurantMenuDefinition,\n * featureTitle: 'Restaurant Menu',\n * mode: 'view',\n * metadata: { source: 'widget' }\n * };\n */\n\n/**\n * @typedef {Object} WidgetProps\n * @property {Listing[]} items - Listings to display in widget\n * @property {FeatureDefinition} featureDefinition - Feature definition for styling\n * @property {string} colourBrandingMain - Main branding color\n * @property {Function} onItemPress - Callback when item is pressed\n * @property {Function} [onRefresh] - Callback for pull-to-refresh\n * @property {boolean} refreshing - Whether widget is currently refreshing\n * @property {Object} [style] - Additional styles for widget\n * @property {number} [maxItems] - Maximum number of items to display\n * @example\n * const widgetProps = {\n * items: [pizzaListing, pastaListing],\n * featureDefinition: restaurantMenuDefinition,\n * colourBrandingMain: '#FF6363',\n * onItemPress: (item) => navigation.navigate('Detail', { listing: item }),\n * refreshing: false,\n * onRefresh: handleRefresh,\n * maxItems: 2\n * };\n */\n\n/**\n * @typedef {Object} ApiResponse\n * @property {boolean} success - Whether the API call was successful\n * @property {*} data - Response data payload\n * @property {string} [message] - Optional message from the server\n * @property {string} [error] - Error message if the call failed\n * @property {number} [status] - HTTP status code\n * @property {Object} [metadata] - Additional response metadata\n * @example\n * const apiResponse = {\n * success: true,\n * data: { listings: [pizzaListing, pastaListing] },\n * message: 'Listings fetched successfully',\n * status: 200,\n * metadata: { count: 2, hasMore: false }\n * };\n */\n\n/**\n * @typedef {Object} FieldComponentProps\n * @property {FieldDefinition} fieldDefinition - Field definition configuration\n * @property {*} value - Current field value\n * @property {Function} onChange - Callback when field value changes\n * @property {string} [error] - Validation error message\n * @property {boolean} [disabled] - Whether field is disabled\n * @property {Object} [style] - Additional styles for field component\n * @property {Object} [theme] - Theme configuration\n * @example\n * const fieldProps = {\n * fieldDefinition: titleField,\n * value: 'Margherita Pizza',\n * onChange: (newValue) => setFieldValue('title', newValue),\n * error: null,\n * disabled: false,\n * style: { marginBottom: 16 },\n * theme: { primaryColor: '#FF6363' }\n * };\n */\n\n/**\n * @typedef {Object} LayoutComponentProps\n * @property {Listing[]} listings - Array of listings to display\n * @property {FeatureDefinition} featureDefinition - Feature definition for layout configuration\n * @property {string} colourBrandingMain - Main branding color\n * @property {Function} onItemPress - Callback when listing item is pressed\n * @property {Function} [onRefresh] - Callback for pull-to-refresh\n * @property {boolean} [refreshing] - Whether layout is currently refreshing\n * @property {Object} [style] - Additional styles for layout component\n * @property {Object} [layoutOptions] - Layout-specific options\n * @example\n * const layoutProps = {\n * listings: [pizzaListing, pastaListing],\n * featureDefinition: restaurantMenuDefinition,\n * colourBrandingMain: '#FF6363',\n * onItemPress: handleItemPress,\n * refreshing: false,\n * onRefresh: handleRefresh,\n * layoutOptions: { showImages: true, columns: 2 }\n * };\n */\n\n// Export empty object to make this a module\nmodule.exports = {};\n"],"mappings":"AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACAA,MAAM,CAACC,OAAO,GAAG,CAAC,CAAC","ignoreList":[]}
|