@plusscommunities/pluss-feature-builder-app-d 1.0.1-beta.3 → 1.0.1-beta.5
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 +6 -4
- package/dist/module/actions/featureBuilderActions.js.map +1 -1
- package/dist/module/actions/featureBuilderStringsActions.js +19 -34
- package/dist/module/actions/featureBuilderStringsActions.js.map +1 -1
- package/dist/module/components/FeatureDetailScreen.js +1 -1
- package/dist/module/components/FeatureDetailScreen.js.map +1 -1
- package/dist/module/components/WidgetGrid.js +5 -2
- package/dist/module/components/WidgetGrid.js.map +1 -1
- package/dist/module/components/WidgetLarge.js +1 -1
- package/dist/module/components/WidgetLarge.js.map +1 -1
- package/dist/module/components/WidgetSmall.js +1 -1
- package/dist/module/components/WidgetSmall.js.map +1 -1
- package/dist/module/components/common/index.js +1 -1
- package/dist/module/components/common/index.js.map +1 -1
- package/dist/module/feature.config.js +33 -24
- package/dist/module/feature.config.js.map +1 -1
- package/dist/module/index.js +11 -17
- package/dist/module/index.js.map +1 -1
- package/dist/module/reducers/featureBuilderReducer.js +0 -37
- package/dist/module/reducers/featureBuilderReducer.js.map +1 -1
- package/dist/module/utils/featureSelectors.js +1 -1
- package/dist/module/utils/featureSelectors.js.map +1 -1
- package/dist/module/utils/selectors.js +38 -0
- package/dist/module/utils/selectors.js.map +1 -0
- package/dist/module/values.config.a.js +2 -24
- package/dist/module/values.config.a.js.map +1 -1
- package/dist/module/values.config.b.js +2 -24
- package/dist/module/values.config.b.js.map +1 -1
- package/dist/module/values.config.c.js +2 -24
- package/dist/module/values.config.c.js.map +1 -1
- package/dist/module/values.config.d.js +2 -24
- package/dist/module/values.config.d.js.map +1 -1
- package/dist/module/values.config.js +16 -38
- package/dist/module/values.config.js.map +1 -1
- package/dist/module/webapi/featureBuilderAPI.js +3 -11
- package/dist/module/webapi/featureBuilderAPI.js.map +1 -1
- package/package.json +2 -2
- package/src/actions/featureBuilderActions.js +7 -4
- package/src/actions/featureBuilderStringsActions.js +13 -35
- package/src/components/FeatureDetailScreen.js +1 -1
- package/src/components/WidgetGrid.js +6 -2
- package/src/components/WidgetLarge.js +6 -8
- package/src/components/WidgetSmall.js +7 -11
- package/src/components/common/index.js +1 -1
- package/src/feature.config.js +35 -29
- package/src/index.js +11 -17
- package/src/reducers/featureBuilderReducer.js +0 -32
- package/src/utils/featureSelectors.js +1 -1
- package/src/utils/selectors.js +34 -0
- package/src/values.config.a.js +4 -35
- package/src/values.config.b.js +4 -35
- package/src/values.config.c.js +4 -35
- package/src/values.config.d.js +4 -35
- package/src/values.config.js +4 -35
- package/src/webapi/featureBuilderAPI.js +3 -11
|
@@ -62,17 +62,19 @@ export const loadTargetFeature = () => {
|
|
|
62
62
|
|
|
63
63
|
// Filter out soft-deleted items at the Redux level
|
|
64
64
|
const listings = rawListings.filter(listing => !listing.deletedAt);
|
|
65
|
+
const payload = {
|
|
66
|
+
feature: flattenedFeature,
|
|
67
|
+
listings: listings
|
|
68
|
+
};
|
|
65
69
|
dispatch({
|
|
66
70
|
type: FeatureBuilderActionTypes.LOAD_SUCCESS,
|
|
67
|
-
payload
|
|
68
|
-
feature: flattenedFeature,
|
|
69
|
-
listings: listings
|
|
70
|
-
}
|
|
71
|
+
payload
|
|
71
72
|
});
|
|
72
73
|
|
|
73
74
|
// Update strings store with feature definition title and icon
|
|
74
75
|
dispatch(updateFeatureBuilderStringAndIconFromDefinition());
|
|
75
76
|
} catch (error) {
|
|
77
|
+
console.error('FeatureBuilder Actions - Error in loadTargetFeature:', error);
|
|
76
78
|
dispatch({
|
|
77
79
|
type: FeatureBuilderActionTypes.FAILURE,
|
|
78
80
|
payload: error.message || "Failed to load feature."
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["values","featureBuilderAPI","updateFeatureBuilderStringAndIconFromDefinition","FeatureBuilderActionTypes","LOADING","actions","LOAD_SUCCESS","FAILURE","loadTargetFeature","dispatch","getState","type","_state$user","state","site","user","targetId","targetFeatureDefinitionId","defResponse","getFeatureDefinitions","allDefinitions","data","featureDefinitions","rawTarget","find","d","id","Error","flattenedFeature","definition","listResponse","getFeatureListings","rawListings","listings","filter","listing","deletedAt","payload","feature","error","message","initializeFeatureBuilder","refreshFeature","fetchTargetFeatureListings"],"sources":["featureBuilderActions.js"],"sourcesContent":["import { values } from \"../values.config\";\nimport { featureBuilderAPI } from \"../webapi/featureBuilderAPI\";\nimport { updateFeatureBuilderStringAndIconFromDefinition } from \"./featureBuilderStringsActions\";\n\n/**\n * Action types for feature builder Redux actions\n * These are pulled from values.config.actions to ensure unique action types per instance\n * @readonly\n * @enum {string}\n */\nexport const FeatureBuilderActionTypes = {\n\t/** Indicates loading state for feature data fetch */\n\tLOADING: values.actions.LOADING,\n\t/** Indicates successful fetch of feature definition and listings */\n\tLOAD_SUCCESS: values.actions.LOAD_SUCCESS,\n\t/** Indicates failure in fetching feature data */\n\tFAILURE: values.actions.FAILURE,\n};\n\n/**\n * Loads the target feature definition and its listings from the API\n * This function fetches the feature definition configured in values.config\n * and loads all associated listings for display\n *\n * @function\n * @returns {Function} Redux thunk function that handles the async loading\n * @throws {Error} When no feature definitions are found or API calls fail\n *\n * @example\n * // In component\n * useEffect(() => {\n * props.loadTargetFeature();\n * }, []);\n *\n * // Dispatch directly\n * dispatch(loadTargetFeature());\n */\nexport const loadTargetFeature = () => {\n\treturn async (dispatch, getState) => {\n\t\tdispatch({ type: FeatureBuilderActionTypes.LOADING });\n\n\t\ttry {\n\t\t\tconst state = getState();\n\t\t\tconst site = state.user?.site;\n\t\t\tconst targetId = values.targetFeatureDefinitionId;\n\t\t\tconst defResponse = await featureBuilderAPI.getFeatureDefinitions(site);\n\t\t\tconst allDefinitions = defResponse.data.featureDefinitions || [];\n\n\t\t\t// Find the specific target definition - throw if not found\n\t\t\tconst rawTarget = allDefinitions.find((d) => d.id === targetId);\n\n\t\t\tif (!rawTarget) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Target feature definition with ID '${targetId}' not found.`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst flattenedFeature = {\n\t\t\t\tid: rawTarget.id,\n\t\t\t\t...rawTarget.definition,\n\t\t\t};\n\n\t\t\tconst listResponse = await featureBuilderAPI.getFeatureListings(\n\t\t\t\tsite,\n\t\t\t\trawTarget.id,\n\t\t\t);\n\t\t\tconst rawListings = listResponse.data.listings || [];\n\n\t\t\t// Filter out soft-deleted items at the Redux level\n\t\t\tconst listings = rawListings.filter((listing) => !listing.deletedAt);\n\n\t\t\
|
|
1
|
+
{"version":3,"names":["values","featureBuilderAPI","updateFeatureBuilderStringAndIconFromDefinition","FeatureBuilderActionTypes","LOADING","actions","LOAD_SUCCESS","FAILURE","loadTargetFeature","dispatch","getState","type","_state$user","state","site","user","targetId","targetFeatureDefinitionId","defResponse","getFeatureDefinitions","allDefinitions","data","featureDefinitions","rawTarget","find","d","id","Error","flattenedFeature","definition","listResponse","getFeatureListings","rawListings","listings","filter","listing","deletedAt","payload","feature","error","console","message","initializeFeatureBuilder","refreshFeature","fetchTargetFeatureListings"],"sources":["featureBuilderActions.js"],"sourcesContent":["import { values } from \"../values.config\";\nimport { featureBuilderAPI } from \"../webapi/featureBuilderAPI\";\nimport { updateFeatureBuilderStringAndIconFromDefinition } from \"./featureBuilderStringsActions\";\n\n/**\n * Action types for feature builder Redux actions\n * These are pulled from values.config.actions to ensure unique action types per instance\n * @readonly\n * @enum {string}\n */\nexport const FeatureBuilderActionTypes = {\n\t/** Indicates loading state for feature data fetch */\n\tLOADING: values.actions.LOADING,\n\t/** Indicates successful fetch of feature definition and listings */\n\tLOAD_SUCCESS: values.actions.LOAD_SUCCESS,\n\t/** Indicates failure in fetching feature data */\n\tFAILURE: values.actions.FAILURE,\n};\n\n/**\n * Loads the target feature definition and its listings from the API\n * This function fetches the feature definition configured in values.config\n * and loads all associated listings for display\n *\n * @function\n * @returns {Function} Redux thunk function that handles the async loading\n * @throws {Error} When no feature definitions are found or API calls fail\n *\n * @example\n * // In component\n * useEffect(() => {\n * props.loadTargetFeature();\n * }, []);\n *\n * // Dispatch directly\n * dispatch(loadTargetFeature());\n */\nexport const loadTargetFeature = () => {\n\treturn async (dispatch, getState) => {\n\t\tdispatch({ type: FeatureBuilderActionTypes.LOADING });\n\n\t\ttry {\n\t\t\tconst state = getState();\n\t\t\tconst site = state.user?.site;\n\t\t\tconst targetId = values.targetFeatureDefinitionId;\n\n\t\t\tconst defResponse = await featureBuilderAPI.getFeatureDefinitions(site);\n\t\t\tconst allDefinitions = defResponse.data.featureDefinitions || [];\n\n\t\t\t// Find the specific target definition - throw if not found\n\t\t\tconst rawTarget = allDefinitions.find((d) => d.id === targetId);\n\n\t\t\tif (!rawTarget) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Target feature definition with ID '${targetId}' not found.`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst flattenedFeature = {\n\t\t\t\tid: rawTarget.id,\n\t\t\t\t...rawTarget.definition,\n\t\t\t};\n\n\t\t\tconst listResponse = await featureBuilderAPI.getFeatureListings(\n\t\t\t\tsite,\n\t\t\t\trawTarget.id,\n\t\t\t);\n\t\t\tconst rawListings = listResponse.data.listings || [];\n\n\t\t\t// Filter out soft-deleted items at the Redux level\n\t\t\tconst listings = rawListings.filter((listing) => !listing.deletedAt);\n\n\t\t\tconst payload = {\n\t\t\t\tfeature: flattenedFeature,\n\t\t\t\tlistings: listings,\n\t\t\t};\n\t\t\tdispatch({\n\t\t\t\ttype: FeatureBuilderActionTypes.LOAD_SUCCESS,\n\t\t\t\tpayload,\n\t\t\t});\n\n\t\t\t// Update strings store with feature definition title and icon\n\t\t\tdispatch(updateFeatureBuilderStringAndIconFromDefinition());\n\t\t} catch (error) {\n\t\t\tconsole.error('FeatureBuilder Actions - Error in loadTargetFeature:', error);\n\t\t\tdispatch({\n\t\t\t\ttype: FeatureBuilderActionTypes.FAILURE,\n\t\t\t\tpayload: error.message || \"Failed to load feature.\",\n\t\t\t});\n\t\t}\n\t};\n};\n\n// Aliases for compatibility with any lingering imports\n\n/**\n * Alias for loadTargetFeature - initializes feature builder with target feature\n * @function\n * @see loadTargetFeature\n */\nexport const initializeFeatureBuilder = loadTargetFeature;\n\n/**\n * Alias for loadTargetFeature - refreshes current feature data\n * @function\n * @see loadTargetFeature\n */\nexport const refreshFeature = loadTargetFeature;\n\n/**\n * Alias for loadTargetFeature - fetches listings for target feature\n * @function\n * @see loadTargetFeature\n */\nexport const fetchTargetFeatureListings = loadTargetFeature;\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,kBAAkB;AACzC,SAASC,iBAAiB,QAAQ,6BAA6B;AAC/D,SAASC,+CAA+C,QAAQ,gCAAgC;;AAEhG;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,yBAAyB,GAAG;EACxC;EACAC,OAAO,EAAEJ,MAAM,CAACK,OAAO,CAACD,OAAO;EAC/B;EACAE,YAAY,EAAEN,MAAM,CAACK,OAAO,CAACC,YAAY;EACzC;EACAC,OAAO,EAAEP,MAAM,CAACK,OAAO,CAACE;AACzB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,iBAAiB,GAAGA,CAAA,KAAM;EACtC,OAAO,OAAOC,QAAQ,EAAEC,QAAQ,KAAK;IACpCD,QAAQ,CAAC;MAAEE,IAAI,EAAER,yBAAyB,CAACC;IAAQ,CAAC,CAAC;IAErD,IAAI;MAAA,IAAAQ,WAAA;MACH,MAAMC,KAAK,GAAGH,QAAQ,CAAC,CAAC;MACxB,MAAMI,IAAI,IAAAF,WAAA,GAAGC,KAAK,CAACE,IAAI,cAAAH,WAAA,uBAAVA,WAAA,CAAYE,IAAI;MAC7B,MAAME,QAAQ,GAAGhB,MAAM,CAACiB,yBAAyB;MAEjD,MAAMC,WAAW,GAAG,MAAMjB,iBAAiB,CAACkB,qBAAqB,CAACL,IAAI,CAAC;MACvE,MAAMM,cAAc,GAAGF,WAAW,CAACG,IAAI,CAACC,kBAAkB,IAAI,EAAE;;MAEhE;MACA,MAAMC,SAAS,GAAGH,cAAc,CAACI,IAAI,CAAEC,CAAC,IAAKA,CAAC,CAACC,EAAE,KAAKV,QAAQ,CAAC;MAE/D,IAAI,CAACO,SAAS,EAAE;QACf,MAAM,IAAII,KAAK,CACd,sCAAsCX,QAAQ,cAC/C,CAAC;MACF;MAEA,MAAMY,gBAAgB,GAAG;QACxBF,EAAE,EAAEH,SAAS,CAACG,EAAE;QAChB,GAAGH,SAAS,CAACM;MACd,CAAC;MAED,MAAMC,YAAY,GAAG,MAAM7B,iBAAiB,CAAC8B,kBAAkB,CAC9DjB,IAAI,EACJS,SAAS,CAACG,EACX,CAAC;MACD,MAAMM,WAAW,GAAGF,YAAY,CAACT,IAAI,CAACY,QAAQ,IAAI,EAAE;;MAEpD;MACA,MAAMA,QAAQ,GAAGD,WAAW,CAACE,MAAM,CAAEC,OAAO,IAAK,CAACA,OAAO,CAACC,SAAS,CAAC;MAEpE,MAAMC,OAAO,GAAG;QACfC,OAAO,EAAEV,gBAAgB;QACzBK,QAAQ,EAAEA;MACX,CAAC;MACDxB,QAAQ,CAAC;QACRE,IAAI,EAAER,yBAAyB,CAACG,YAAY;QAC5C+B;MACD,CAAC,CAAC;;MAEF;MACA5B,QAAQ,CAACP,+CAA+C,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC,OAAOqC,KAAK,EAAE;MACfC,OAAO,CAACD,KAAK,CAAC,sDAAsD,EAAEA,KAAK,CAAC;MAC5E9B,QAAQ,CAAC;QACRE,IAAI,EAAER,yBAAyB,CAACI,OAAO;QACvC8B,OAAO,EAAEE,KAAK,CAACE,OAAO,IAAI;MAC3B,CAAC,CAAC;IACH;EACD,CAAC;AACF,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,wBAAwB,GAAGlC,iBAAiB;;AAEzD;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMmC,cAAc,GAAGnC,iBAAiB;;AAE/C;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMoC,0BAA0B,GAAGpC,iBAAiB","ignoreList":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { selectFeatureDefinition } from "../
|
|
1
|
+
import { selectFeatureDefinition } from "../utils/selectors";
|
|
2
2
|
import { values } from "../values.config";
|
|
3
3
|
|
|
4
4
|
// IMPORTANT: Using local UPDATE_STRINGS action type to make extension self-contained
|
|
@@ -9,19 +9,14 @@ export const UPDATE_STRINGS = "UPDATE_STRINGS";
|
|
|
9
9
|
* Updates the feature builder's menu text in the global strings store
|
|
10
10
|
* This ensures UI components use the dynamic title from feature definition
|
|
11
11
|
*/
|
|
12
|
-
export const updateFeatureBuilderString = title =>
|
|
13
|
-
var _getState$strings;
|
|
14
|
-
const currentStrings = ((_getState$strings = getState().strings) === null || _getState$strings === void 0 ? void 0 : _getState$strings.config) || {};
|
|
15
|
-
const updatedStrings = {
|
|
16
|
-
...currentStrings,
|
|
17
|
-
featureTitles: {
|
|
18
|
-
...currentStrings.featureTitles,
|
|
19
|
-
[values.featureKey]: title || values.featureName
|
|
20
|
-
}
|
|
21
|
-
};
|
|
12
|
+
export const updateFeatureBuilderString = title => dispatch => {
|
|
22
13
|
dispatch({
|
|
23
14
|
type: UPDATE_STRINGS,
|
|
24
|
-
payload:
|
|
15
|
+
payload: {
|
|
16
|
+
featureTitles: {
|
|
17
|
+
[values.featureKey]: title || values.featureName
|
|
18
|
+
}
|
|
19
|
+
}
|
|
25
20
|
});
|
|
26
21
|
};
|
|
27
22
|
|
|
@@ -41,19 +36,14 @@ export const updateFeatureBuilderStringFromDefinition = () => (dispatch, getStat
|
|
|
41
36
|
* Updates the feature builder icon in the global strings store
|
|
42
37
|
* This ensures UI components use the dynamic icon from the feature definition
|
|
43
38
|
*/
|
|
44
|
-
export const updateFeatureBuilderIcon = icon =>
|
|
45
|
-
var _getState$strings2;
|
|
46
|
-
const currentStrings = ((_getState$strings2 = getState().strings) === null || _getState$strings2 === void 0 ? void 0 : _getState$strings2.config) || {};
|
|
47
|
-
const updatedStrings = {
|
|
48
|
-
...currentStrings,
|
|
49
|
-
featureIcons: {
|
|
50
|
-
...currentStrings.featureIcons,
|
|
51
|
-
[values.featureKey]: icon
|
|
52
|
-
}
|
|
53
|
-
};
|
|
39
|
+
export const updateFeatureBuilderIcon = icon => dispatch => {
|
|
54
40
|
dispatch({
|
|
55
41
|
type: UPDATE_STRINGS,
|
|
56
|
-
payload:
|
|
42
|
+
payload: {
|
|
43
|
+
featureIcons: {
|
|
44
|
+
[values.featureKey]: icon
|
|
45
|
+
}
|
|
46
|
+
}
|
|
57
47
|
});
|
|
58
48
|
};
|
|
59
49
|
|
|
@@ -71,19 +61,14 @@ export const updateFeatureBuilderIconFromDefinition = () => (dispatch, getState)
|
|
|
71
61
|
* Updates the feature builder grid icon in the global strings store
|
|
72
62
|
* This ensures UI components use the dynamic grid icon from the feature definition
|
|
73
63
|
*/
|
|
74
|
-
export const updateFeatureBuilderGridIcon = gridIcon =>
|
|
75
|
-
var _getState$strings3;
|
|
76
|
-
const currentStrings = ((_getState$strings3 = getState().strings) === null || _getState$strings3 === void 0 ? void 0 : _getState$strings3.config) || {};
|
|
77
|
-
const updatedStrings = {
|
|
78
|
-
...currentStrings,
|
|
79
|
-
featureIcons: {
|
|
80
|
-
...currentStrings.featureIcons,
|
|
81
|
-
[values.featureKey]: gridIcon
|
|
82
|
-
}
|
|
83
|
-
};
|
|
64
|
+
export const updateFeatureBuilderGridIcon = gridIcon => dispatch => {
|
|
84
65
|
dispatch({
|
|
85
66
|
type: UPDATE_STRINGS,
|
|
86
|
-
payload:
|
|
67
|
+
payload: {
|
|
68
|
+
featureIcons: {
|
|
69
|
+
[values.featureKey]: gridIcon
|
|
70
|
+
}
|
|
71
|
+
}
|
|
87
72
|
});
|
|
88
73
|
};
|
|
89
74
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["selectFeatureDefinition","values","UPDATE_STRINGS","updateFeatureBuilderString","title","dispatch","
|
|
1
|
+
{"version":3,"names":["selectFeatureDefinition","values","UPDATE_STRINGS","updateFeatureBuilderString","title","dispatch","type","payload","featureTitles","featureKey","featureName","updateFeatureBuilderStringFromDefinition","getState","definition","capitalizedTitle","charAt","toUpperCase","slice","updateFeatureBuilderIcon","icon","featureIcons","updateFeatureBuilderIconFromDefinition","navigation","gridMenu","updateFeatureBuilderGridIcon","gridIcon","updateFeatureBuilderStringAndIconFromDefinition"],"sources":["featureBuilderStringsActions.js"],"sourcesContent":["import { selectFeatureDefinition } from \"../utils/selectors\";\nimport { values } from \"../values.config\";\n\n// IMPORTANT: Using local UPDATE_STRINGS action type to make extension self-contained\n// The main app's StringsReducer will handle this action type the same way\nexport const UPDATE_STRINGS = \"UPDATE_STRINGS\";\n\n/**\n * Updates the feature builder's menu text in the global strings store\n * This ensures UI components use the dynamic title from feature definition\n */\nexport const updateFeatureBuilderString = (title) => (dispatch) => {\n\tdispatch({\n\t\ttype: UPDATE_STRINGS,\n\t\tpayload: {\n\t\t\tfeatureTitles: { [values.featureKey]: title || values.featureName }\n\t\t},\n\t});\n};\n\n/**\n * Updates the feature builder string using the current title from feature definition\n * This is useful when the feature definition has been updated\n */\nexport const updateFeatureBuilderStringFromDefinition =\n\t() => (dispatch, getState) => {\n\t\tconst definition = selectFeatureDefinition(getState());\n\t\tconst title = definition?.title || values.featureName;\n\t\t// Capitalize first letter of title\n\t\tconst capitalizedTitle = title\n\t\t\t? title.charAt(0).toUpperCase() + title.slice(1)\n\t\t\t: values.featureName;\n\t\tdispatch(updateFeatureBuilderString(capitalizedTitle));\n\t};\n\n/**\n * Updates the feature builder icon in the global strings store\n * This ensures UI components use the dynamic icon from the feature definition\n */\nexport const updateFeatureBuilderIcon = (icon) => (dispatch) => {\n\tdispatch({\n\t\ttype: UPDATE_STRINGS,\n\t\tpayload: {\n\t\t\tfeatureIcons: { [values.featureKey]: icon }\n\t\t},\n\t});\n};\n\n/**\n * Updates the feature builder icon using the current icon from feature definition\n * This is useful when the feature definition has been updated\n */\nexport const updateFeatureBuilderIconFromDefinition =\n\t() => (dispatch, getState) => {\n\t\tconst definition = selectFeatureDefinition(getState());\n\t\tconst icon = definition?.icon || values.navigation.gridMenu.icon;\n\t\tdispatch(updateFeatureBuilderIcon(icon));\n\t};\n\n/**\n * Updates the feature builder grid icon in the global strings store\n * This ensures UI components use the dynamic grid icon from the feature definition\n */\nexport const updateFeatureBuilderGridIcon =\n\t(gridIcon) => (dispatch) => {\n\t\tdispatch({\n\t\t\ttype: UPDATE_STRINGS,\n\t\t\tpayload: {\n\t\t\t\tfeatureIcons: { [values.featureKey]: gridIcon }\n\t\t\t},\n\t\t});\n\t};\n\n/**\n * Updates both the title and icon from the current feature definition\n * This is useful when both have been updated in the definition\n */\nexport const updateFeatureBuilderStringAndIconFromDefinition =\n\t() => (dispatch, getState) => {\n\t\tconst definition = selectFeatureDefinition(getState());\n\t\tconst title = definition?.title || values.featureName;\n\t\tconst icon = definition?.icon || values.navigation.gridMenu.icon;\n\n\t\t// Update title\n\t\tconst capitalizedTitle = title\n\t\t\t? title.charAt(0).toUpperCase() + title.slice(1)\n\t\t\t: values.featureName;\n\t\tdispatch(updateFeatureBuilderString(capitalizedTitle));\n\n\t\t// Update icon\n\t\tdispatch(updateFeatureBuilderIcon(icon));\n\t};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -13,7 +13,7 @@ import { Components, Colours, COLOUR_TRANSPARENT, TEXT_DARK } from "../core.conf
|
|
|
13
13
|
import { TEXT_MID, LINEGREY } from "../js/Colors";
|
|
14
14
|
import FileDownload from "./FileDownload";
|
|
15
15
|
import { values } from "../values.config";
|
|
16
|
-
import { selectFeatureDefinition } from "../
|
|
16
|
+
import { selectFeatureDefinition } from "../utils/selectors";
|
|
17
17
|
import Constants from "expo-constants";
|
|
18
18
|
import { InlineButton } from "./common";
|
|
19
19
|
import { FIELD_TYPES } from "../js/FieldTypes";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Component","SPACING","Platform","View","ScrollView","Animated","Dimensions","StatusBar","Text","TouchableOpacity","Linking","StyleSheet","KeyboardAvoidingView","Image","Icon","connect","_","LinearGradient","Services","Components","Colours","COLOUR_TRANSPARENT","TEXT_DARK","TEXT_MID","LINEGREY","FileDownload","values","selectFeatureDefinition","Constants","InlineButton","FIELD_TYPES","SCREEN_HEIGHT","get","height","CARD_IMAGE_HEIGHT","SCREEN_WIDTH","width","StatusBarHeight","size","getStatusBarHeight","OS","statusBarHeight","currentHeight","FeatureDetailScreen","constructor","props","_defineProperty","navigation","goBack","listing","featureDefinition","fields","allImages","fieldDefinitions","primaryImage","mandatoryFields","featureImage","imageObj","normalizeImageField","push","fieldId","fieldLabel","labels","forEach","fieldDef","type","IMAGE","GALLERY","id","fieldValue","Array","isArray","item","label","imageField","uri","url","imageIndex","state","length","setState","showImagePopup","selectedImageIndex","openURL","catch","err","file","isHomeTab","componentDidMount","getParentRoute","collectAllImages","componentDidUpdate","prevProps","componentWillUnmount","setBarStyle","processFields","excludedFieldIds","Set","title","filteredFields","Object","keys","filter","has","hasDefinition","some","f","map","fieldDefinition","find","fieldType","TEXT","sortBy","field","_field$fieldDefinitio","order","renderField","colourBrandingMain","safeFieldDef","CTA","btnLabel","btnUrl","createElement","style","styles","ctaContainer","large","color","onPress","handleLinkPress","EMAIL","linkContainer","name","fieldIcon","linkText","DATE","dateContainer","bodyText","FILE","files","filesContainer","sectionTitle","attachments","index","key","handleFilePress","DESCRIPTION","descriptionText","imgUri","findIndex","img","caption","openImagePopup","activeOpacity","source","inlineImage","resizeMode","imageCaption","marginVertical","flexDirection","flexWrap","marginHorizontal","imgItem","globalIndex","padding","TITLE","titleText","NUMBER","numberText","JSON","stringify","renderFields","processedFields","_index","_field$fieldDefinitio2","_field$fieldDefinitio3","fieldContainer","getImageSource","getTitle","defaultTitle","render","imageSource","centerContainer","errorText","behavior","position","flex","backgroundColor","BACKGROUND_WHITE","backButton","headerContent","BackButton","onPressBack","marginLeft","keyboardShouldPersistTaps","ref","scrollView","mainHeader","AutoOffsetImage","grayPlaceholder","gradientOverlay","colors","start","x","y","end","locations","paddingHorizontal","titleContainer","eventTitle","minHeight","ImagePopup","visible","images","onClose","closeImagePopup","create","left","top","zIndex","elevation","alignSelf","paddingTop","image","undefined","fontFamily","fontSize","marginBottom","textTransform","letterSpacing","textAlign","paddingVertical","borderRadius","maxWidth","lineHeight","fontWeight","alignItems","textDecorationLine","fontStyle","marginTop","justifyContent","SM","marginRight","section","divider","facilityDetailTitle","facilityDetailContent","facilityDetailsContainer","facilityDetailsTextContainer","facilityDetailContainer","facilityDetailTitleContainer","textLink","mapStateToProps","ownProps","getMainBrandingColourFromState","colourBrandingHeader","user","forwardRef"],"sources":["FeatureDetailScreen.js"],"sourcesContent":["import React, { Component } from \"react\";\nimport { SPACING } from \"../js/spacing\";\nimport {\n\tPlatform,\n\tView,\n\tScrollView,\n\tAnimated,\n\tDimensions,\n\tStatusBar,\n\tText,\n\tTouchableOpacity,\n\tLinking,\n\tStyleSheet,\n\tKeyboardAvoidingView,\n\tImage,\n} from \"react-native\";\nimport { Icon } from \"react-native-elements\";\nimport { connect } from \"react-redux\";\nimport _ from \"lodash\";\nimport { LinearGradient } from \"expo-linear-gradient\";\nimport { Services } from \"../feature.config\";\nimport {\n\tComponents,\n\tColours,\n\tCOLOUR_TRANSPARENT,\n\tTEXT_DARK,\n} from \"../core.config\";\nimport { TEXT_MID, LINEGREY } from \"../js/Colors\";\nimport FileDownload from \"./FileDownload\";\nimport { values } from \"../values.config\";\nimport { selectFeatureDefinition } from \"../reducers/featureBuilderReducer\";\n\nimport Constants from \"expo-constants\";\nimport { InlineButton } from \"./common\";\nimport { FIELD_TYPES } from \"../js/FieldTypes\";\n\nconst SCREEN_HEIGHT = Dimensions.get(\"window\").height;\nconst CARD_IMAGE_HEIGHT = SCREEN_HEIGHT * 0.3;\nconst SCREEN_WIDTH = Dimensions.get(\"window\").width;\n\n// StatusBarHeight function copied to avoid import from outside extension\nconst StatusBarHeight = (size) => {\n\treturn getStatusBarHeight() + size;\n};\n\nconst getStatusBarHeight = () => {\n\treturn Platform.OS === \"ios\"\n\t\t? Constants.statusBarHeight\n\t\t: StatusBar.currentHeight;\n};\n\nclass FeatureDetailScreen extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = {\n\t\t\tisHomeTab: false,\n\t\t\tshowImagePopup: false,\n\t\t\tselectedImageIndex: 0,\n\t\t\tallImages: [],\n\t\t};\n\t}\n\n\tcomponentDidMount() {\n\t\tthis.setState({\n\t\t\tisHomeTab: !Services.navigation.getParentRoute(),\n\t\t\tallImages: this.collectAllImages(),\n\t\t});\n\t}\n\n\tcomponentDidUpdate(prevProps) {\n\t\t// Recalculate allImages when listing or featureDefinition changes\n\t\tif (\n\t\t\tprevProps.listing !== this.props.listing ||\n\t\t\tprevProps.featureDefinition !== this.props.featureDefinition\n\t\t) {\n\t\t\tthis.setState({ allImages: this.collectAllImages() });\n\t\t}\n\t}\n\n\tcomponentWillUnmount() {\n\t\tif (Platform.OS === \"ios\") StatusBar.setBarStyle(\"dark-content\");\n\t}\n\n\tonPressBack = () => {\n\t\tServices.navigation.goBack();\n\t};\n\n\t/**\n\t * Collect all images from listing fields\n\t */\n\tcollectAllImages = () => {\n\t\tconst { listing, featureDefinition } = this.props;\n\t\tif (!listing || !listing.fields || !featureDefinition) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst allImages = [];\n\t\tconst fieldDefinitions = featureDefinition.fields || [];\n\n\t\t// Add primary feature image first\n\t\tconst primaryImage = listing.fields[values.mandatoryFields.featureImage];\n\t\tif (primaryImage) {\n\t\t\tconst imageObj = this.normalizeImageField(primaryImage);\n\t\t\tif (imageObj) {\n\t\t\t\tallImages.push({\n\t\t\t\t\t...imageObj,\n\t\t\t\t\tfieldId: values.mandatoryFields.featureImage,\n\t\t\t\t\tfieldLabel: values.labels.featureImage,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// Add additional image fields\n\t\tfieldDefinitions.forEach((fieldDef) => {\n\t\t\tif (\n\t\t\t\t(fieldDef.type === FIELD_TYPES.IMAGE ||\n\t\t\t\t\tfieldDef.type === FIELD_TYPES.GALLERY) &&\n\t\t\t\tfieldDef.id !== values.mandatoryFields.featureImage\n\t\t\t) {\n\t\t\t\tconst fieldValue = listing.fields[fieldDef.id];\n\n\t\t\t\tif (fieldValue) {\n\t\t\t\t\tif (fieldDef.type === FIELD_TYPES.GALLERY) {\n\t\t\t\t\t\t// Handle Gallery (Array of images)\n\t\t\t\t\t\tif (Array.isArray(fieldValue)) {\n\t\t\t\t\t\t\tfieldValue.forEach((item) => {\n\t\t\t\t\t\t\t\tconst imageObj = this.normalizeImageField(item);\n\t\t\t\t\t\t\t\tif (imageObj) {\n\t\t\t\t\t\t\t\t\tallImages.push({\n\t\t\t\t\t\t\t\t\t\t...imageObj,\n\t\t\t\t\t\t\t\t\t\tfieldId: fieldDef.id,\n\t\t\t\t\t\t\t\t\t\tfieldLabel: fieldDef.label || fieldDef.id,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Handle Single Image\n\t\t\t\t\t\tconst imageObj = this.normalizeImageField(fieldValue);\n\t\t\t\t\t\tif (imageObj) {\n\t\t\t\t\t\t\tallImages.push({\n\t\t\t\t\t\t\t\t...imageObj,\n\t\t\t\t\t\t\t\tfieldId: fieldDef.id,\n\t\t\t\t\t\t\t\tfieldLabel: fieldDef.label || fieldDef.id,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn allImages;\n\t};\n\n\t/**\n\t * Normalize image field to object format\n\t */\n\tnormalizeImageField = (imageField) => {\n\t\tif (!imageField) return null;\n\n\t\tif (typeof imageField === \"string\") {\n\t\t\treturn { uri: imageField, url: imageField };\n\t\t}\n\n\t\tif (typeof imageField === \"object\") {\n\t\t\tif (imageField.uri) {\n\t\t\t\treturn { uri: imageField.uri, url: imageField.uri, ...imageField };\n\t\t\t}\n\t\t\tif (imageField.url) {\n\t\t\t\treturn { uri: imageField.url, url: imageField.url, ...imageField };\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t};\n\n\t/**\n\t * Open image popup with all images\n\t */\n\topenImagePopup = (imageIndex = 0) => {\n\t\tconst { allImages } = this.state;\n\t\tif (allImages.length > 0) {\n\t\t\tthis.setState({\n\t\t\t\tshowImagePopup: true,\n\t\t\t\tselectedImageIndex: imageIndex,\n\t\t\t});\n\t\t}\n\t};\n\n\t/**\n\t * Close image popup\n\t */\n\tcloseImagePopup = () => {\n\t\tthis.setState({\n\t\t\tshowImagePopup: false,\n\t\t\tselectedImageIndex: 0,\n\t\t});\n\t};\n\n\t/**\n\t * Process fields: filter out mandatory fields and sort by order\n\t */\n\tprocessFields() {\n\t\tconst { listing, featureDefinition } = this.props;\n\t\tif (!listing || !listing.fields || !featureDefinition) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst fieldDefinitions = featureDefinition.fields || [];\n\t\tconst excludedFieldIds = new Set([\n\t\t\tvalues.mandatoryFields.title,\n\t\t\tvalues.mandatoryFields.featureImage,\n\t\t]);\n\n\t\t// Filter and map fields with their definitions\n\t\tconst filteredFields = Object.keys(listing.fields)\n\t\t\t.filter((fieldId) => {\n\t\t\t\tif (!fieldId || excludedFieldIds.has(fieldId)) return false;\n\t\t\t\tif (listing.fields[fieldId] == null) return false;\n\n\t\t\t\t// Only include fields that have definitions\n\t\t\t\tconst hasDefinition = fieldDefinitions.some((f) => f.id === fieldId);\n\t\t\t\tif (!hasDefinition) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t})\n\t\t\t.map((fieldId) => {\n\t\t\t\tconst fieldDefinition = fieldDefinitions.find(\n\t\t\t\t\t(fieldDef) => fieldDef.id === fieldId,\n\t\t\t\t);\n\t\t\t\treturn {\n\t\t\t\t\tfieldId,\n\t\t\t\t\tfieldValue: listing.fields[fieldId],\n\t\t\t\t\tfieldDefinition,\n\t\t\t\t\tfieldType: fieldDefinition?.type || FIELD_TYPES.TEXT,\n\t\t\t\t};\n\t\t\t});\n\n\t\t// Sort by order property if available\n\t\treturn _.sortBy(\n\t\t\tfilteredFields,\n\t\t\t(field) => field.fieldDefinition?.order || 999,\n\t\t);\n\t}\n\n\t/**\n\t * Handle link opening for various field types\n\t */\n\thandleLinkPress = (url) => {\n\t\tif (url) {\n\t\t\tLinking.openURL(url).catch((err) => {\n\t\t\t\t// Silently handle URL open errors\n\t\t\t});\n\t\t}\n\t};\n\n\thandleFilePress = (file) => {\n\t\tif (file?.url) {\n\t\t\tLinking.openURL(file.url).catch((err) => {\n\t\t\t\t// Silently handle URL open errors\n\t\t\t});\n\t\t}\n\t};\n\n\t/**\n\t * Render individual field based on its type\n\t */\n\trenderField(fieldDef, fieldValue) {\n\t\tconst { colourBrandingMain } = this.props;\n\n\t\t// Defensive: ensure fieldDef is always an object\n\t\tconst safeFieldDef = fieldDef || {};\n\t\tconst type = safeFieldDef.type || FIELD_TYPES.TEXT;\n\t\tconst label = safeFieldDef.label || safeFieldDef.id || \"Unknown Field\";\n\n\t\tswitch (type) {\n\t\t\tcase FIELD_TYPES.CTA: {\n\t\t\t\tconst btnLabel = fieldValue?.label || label;\n\t\t\t\tconst btnUrl = fieldValue?.url;\n\t\t\t\treturn (\n\t\t\t\t\t<View style={styles.ctaContainer}>\n\t\t\t\t\t\t<InlineButton\n\t\t\t\t\t\t\tlarge\n\t\t\t\t\t\t\tcolor={colourBrandingMain}\n\t\t\t\t\t\t\tonPress={() => this.handleLinkPress(btnUrl)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{btnLabel}\n\t\t\t\t\t\t</InlineButton>\n\t\t\t\t\t</View>\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tcase FIELD_TYPES.EMAIL:\n\t\t\t\treturn (\n\t\t\t\t\t<TouchableOpacity\n\t\t\t\t\t\tstyle={styles.linkContainer}\n\t\t\t\t\t\tonPress={() => this.handleLinkPress(`mailto:${fieldValue}`)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\ttype=\"font-awesome\"\n\t\t\t\t\t\t\tname=\"envelope\"\n\t\t\t\t\t\t\tsize={16}\n\t\t\t\t\t\t\tcolor={colourBrandingMain}\n\t\t\t\t\t\t\tstyle={styles.fieldIcon}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Text style={[styles.linkText, { color: colourBrandingMain }]}>\n\t\t\t\t\t\t\t{fieldValue}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</TouchableOpacity>\n\t\t\t\t);\n\n\t\t\tcase FIELD_TYPES.DATE:\n\t\t\t\treturn (\n\t\t\t\t\t<View style={styles.dateContainer}>\n\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\ttype=\"font-awesome\"\n\t\t\t\t\t\t\tname=\"calendar\"\n\t\t\t\t\t\t\tsize={16}\n\t\t\t\t\t\t\tcolor={TEXT_DARK}\n\t\t\t\t\t\t\tstyle={styles.fieldIcon}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Text style={styles.bodyText}>{fieldValue}</Text>\n\t\t\t\t\t</View>\n\t\t\t\t);\n\n\t\t\tcase FIELD_TYPES.FILE: {\n\t\t\t\t// Handle both single file and multiple files (array)\n\t\t\t\tconst files = Array.isArray(fieldValue) ? fieldValue : [fieldValue];\n\t\t\t\treturn (\n\t\t\t\t\t<View style={styles.filesContainer}>\n\t\t\t\t\t\t<Text style={styles.sectionTitle}>{values.labels.attachments}</Text>\n\t\t\t\t\t\t{files.map((file, index) => {\n\t\t\t\t\t\t\t// Skip null/undefined files\n\t\t\t\t\t\t\tif (!file) return null;\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<FileDownload\n\t\t\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\t\t\tfile={file}\n\t\t\t\t\t\t\t\t\tonPress={this.handleFilePress}\n\t\t\t\t\t\t\t\t\tcolor={this.props.colourBrandingMain}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</View>\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tcase FIELD_TYPES.DESCRIPTION:\n\t\t\t\treturn <Text style={styles.descriptionText}>{fieldValue}</Text>;\n\n\t\t\tcase FIELD_TYPES.IMAGE: {\n\t\t\t\t// Render secondary images inline with click handler\n\t\t\t\tconst imgUri =\n\t\t\t\t\tfieldValue?.url ||\n\t\t\t\t\tfieldValue?.uri ||\n\t\t\t\t\t(typeof fieldValue === \"string\" ? fieldValue : null);\n\t\t\t\tif (!imgUri) return null;\n\n\t\t\t\t// Find this image's index for popup\n\t\t\t\tconst { allImages } = this.state;\n\t\t\t\tconst imageIndex = allImages.findIndex(\n\t\t\t\t\t(img) => img.uri === imgUri || img.url === imgUri,\n\t\t\t\t);\n\n\t\t\t\tconst caption = fieldValue?.caption;\n\n\t\t\t\treturn (\n\t\t\t\t\t<TouchableOpacity\n\t\t\t\t\t\tonPress={() => this.openImagePopup(imageIndex)}\n\t\t\t\t\t\tactiveOpacity={0.8}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Image\n\t\t\t\t\t\t\tsource={{ uri: imgUri }}\n\t\t\t\t\t\t\tstyle={styles.inlineImage}\n\t\t\t\t\t\t\tresizeMode=\"cover\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{caption && <Text style={styles.imageCaption}>{caption}</Text>}\n\t\t\t\t\t</TouchableOpacity>\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tcase FIELD_TYPES.GALLERY: {\n\t\t\t\t// Handle Gallery Fields (arrays of images)\n\t\t\t\tif (!Array.isArray(fieldValue)) return null;\n\n\t\t\t\treturn (\n\t\t\t\t\t<View style={{ marginVertical: 16 }}>\n\t\t\t\t\t\t<View\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tflexDirection: \"row\",\n\t\t\t\t\t\t\t\tflexWrap: \"wrap\",\n\t\t\t\t\t\t\t\tmarginHorizontal: -4,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{fieldValue.map((imgItem, index) => {\n\t\t\t\t\t\t\t\tconst imgUri =\n\t\t\t\t\t\t\t\t\timgItem?.url ||\n\t\t\t\t\t\t\t\t\timgItem?.uri ||\n\t\t\t\t\t\t\t\t\t(typeof imgItem === \"string\" ? imgItem : null);\n\t\t\t\t\t\t\t\tif (!imgUri) return null;\n\n\t\t\t\t\t\t\t\t// Find global index for the popup\n\t\t\t\t\t\t\t\tconst { allImages } = this.state;\n\t\t\t\t\t\t\t\tconst globalIndex = allImages.findIndex(\n\t\t\t\t\t\t\t\t\t(img) => img.uri === imgUri || img.url === imgUri,\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<TouchableOpacity\n\t\t\t\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\t\t\t\tonPress={() =>\n\t\t\t\t\t\t\t\t\t\t\tthis.openImagePopup(globalIndex !== -1 ? globalIndex : 0)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tactiveOpacity={0.8}\n\t\t\t\t\t\t\t\t\t\tstyle={{ width: \"50%\", padding: 4 }} // 2 column grid\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Image\n\t\t\t\t\t\t\t\t\t\t\tsource={{ uri: imgUri }}\n\t\t\t\t\t\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\t\t\t\t\t\tstyles.inlineImage,\n\t\t\t\t\t\t\t\t\t\t\t\t{ height: 150, marginVertical: 0 },\n\t\t\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t\t\t\tresizeMode=\"cover\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</TouchableOpacity>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</View>\n\t\t\t\t\t</View>\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tcase FIELD_TYPES.TITLE:\n\t\t\t\treturn <Text style={styles.titleText}>{fieldValue}</Text>;\n\n\t\t\tcase FIELD_TYPES.NUMBER:\n\t\t\t\treturn <Text style={styles.numberText}>{fieldValue}</Text>;\n\n\t\t\tdefault:\n\t\t\t\t// Default text fallback\n\t\t\t\treturn (\n\t\t\t\t\t<Text style={styles.bodyText}>\n\t\t\t\t\t\t{typeof fieldValue === \"object\"\n\t\t\t\t\t\t\t? JSON.stringify(fieldValue)\n\t\t\t\t\t\t\t: fieldValue}\n\t\t\t\t\t</Text>\n\t\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Render all fields with proper spacing and structure\n\t */\n\trenderFields() {\n\t\tconst processedFields = this.processFields();\n\n\t\treturn processedFields.map((field, _index) => {\n\t\t\treturn (\n\t\t\t\t<View key={field.fieldId} style={styles.fieldContainer}>\n\t\t\t\t\t{field.fieldType !== FIELD_TYPES.CTA &&\n\t\t\t\t\t\tfield.fieldType !== FIELD_TYPES.IMAGE &&\n\t\t\t\t\t\tfield.fieldDefinition?.label && (\n\t\t\t\t\t\t\t<Text style={styles.fieldLabel}>\n\t\t\t\t\t\t\t\t{field.fieldDefinition?.label}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t{this.renderField(field.fieldDefinition, field.fieldValue)}\n\t\t\t\t</View>\n\t\t\t);\n\t\t});\n\t}\n\n\tgetImageSource() {\n\t\tconst { listing } = this.props;\n\t\tif (!listing || !listing.fields) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst imageField = listing.fields[values.mandatoryFields.featureImage];\n\t\tif (!imageField) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Parse the image field value\n\t\tif (typeof imageField === \"string\") {\n\t\t\treturn imageField;\n\t\t}\n\n\t\treturn imageField?.uri || imageField?.url || null;\n\t}\n\n\tgetTitle() {\n\t\tconst { listing } = this.props;\n\t\tif (!listing || !listing.fields) {\n\t\t\treturn values.labels.defaultTitle;\n\t\t}\n\n\t\treturn (\n\t\t\tlisting.fields[values.mandatoryFields.title] || values.labels.defaultTitle\n\t\t);\n\t}\n\n\trender() {\n\t\tconst { listing } = this.props;\n\t\tconst imageSource = this.getImageSource();\n\t\tconst title = this.getTitle();\n\n\t\tif (!listing || !listing.fields) {\n\t\t\treturn (\n\t\t\t\t<View style={styles.centerContainer}>\n\t\t\t\t\t<Text style={styles.errorText}>Item not found</Text>\n\t\t\t\t</View>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<KeyboardAvoidingView\n\t\t\t\tbehavior={Platform.OS === \"ios\" && \"padding\"}\n\t\t\t\tstyle={{\n\t\t\t\t\tposition: \"relative\",\n\t\t\t\t\tflex: 1,\n\t\t\t\t\tbackgroundColor: Colours.BACKGROUND_WHITE || \"#fff\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<View style={styles.backButton}>\n\t\t\t\t\t<View style={styles.headerContent}>\n\t\t\t\t\t\t<Components.BackButton\n\t\t\t\t\t\t\tonPress={this.onPressBack}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tmarginLeft: 16,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</View>\n\t\t\t\t</View>\n\n\t\t\t\t<ScrollView\n\t\t\t\t\tstyle={{ backgroundColor: Colours.BACKGROUND_WHITE || \"#fff\" }}\n\t\t\t\t\tkeyboardShouldPersistTaps=\"always\"\n\t\t\t\t\tref={(ref) => {\n\t\t\t\t\t\tthis.scrollView = ref;\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<View style={[styles.mainHeader]}>\n\t\t\t\t\t\t{imageSource ? (\n\t\t\t\t\t\t\t<TouchableOpacity\n\t\t\t\t\t\t\t\tonPress={() => this.openImagePopup(0)}\n\t\t\t\t\t\t\t\tactiveOpacity={0.9}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Components.AutoOffsetImage\n\t\t\t\t\t\t\t\t\turi={imageSource}\n\t\t\t\t\t\t\t\t\theight={CARD_IMAGE_HEIGHT}\n\t\t\t\t\t\t\t\t\twidth={SCREEN_WIDTH}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</TouchableOpacity>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<View\n\t\t\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\t\t\tstyles.grayPlaceholder,\n\t\t\t\t\t\t\t\t\t{ height: CARD_IMAGE_HEIGHT, width: SCREEN_WIDTH },\n\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<LinearGradient\n\t\t\t\t\t\t\tstyle={styles.gradientOverlay}\n\t\t\t\t\t\t\tcolors={[\"rgba(0,0,0,0.7)\", COLOUR_TRANSPARENT]}\n\t\t\t\t\t\t\tstart={{ x: 0, y: 0 }}\n\t\t\t\t\t\t\tend={{ x: 0, y: 1 }}\n\t\t\t\t\t\t\tlocations={[0, 0.5]}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</View>\n\t\t\t\t\t<View style={{ paddingHorizontal: 16 }}>\n\t\t\t\t\t\t<View style={styles.titleContainer}>\n\t\t\t\t\t\t\t<Text style={styles.eventTitle}>{title}</Text>\n\t\t\t\t\t\t</View>\n\t\t\t\t\t</View>\n\t\t\t\t\t<View style={{ minHeight: SCREEN_HEIGHT - CARD_IMAGE_HEIGHT - 56 }}>\n\t\t\t\t\t\t{this.renderFields()}\n\t\t\t\t\t</View>\n\t\t\t\t</ScrollView>\n\n\t\t\t\t{/* Image Popup */}\n\t\t\t\t{this.state.showImagePopup && (\n\t\t\t\t\t<Components.ImagePopup\n\t\t\t\t\t\tvisible={this.state.showImagePopup}\n\t\t\t\t\t\timages={this.state.allImages}\n\t\t\t\t\t\tindex={this.state.selectedImageIndex}\n\t\t\t\t\t\tonClose={this.closeImagePopup}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</KeyboardAvoidingView>\n\t\t);\n\t}\n}\n\nconst styles = StyleSheet.create({\n\tbackButton: {\n\t\tposition: \"absolute\",\n\t\tleft: 0,\n\t\ttop: 0,\n\t\tzIndex: 10,\n\t\televation: 10,\n\t\theight: StatusBarHeight(70),\n\t},\n\theaderContent: {\n\t\talignSelf: \"stretch\",\n\t\tflexDirection: \"row\",\n\t\tflex: 1,\n\t\tpaddingTop: StatusBarHeight(12),\n\t},\n\timage: {\n\t\tbackgroundColor: Colours.BACKGROUND_WHITE || \"#fff\",\n\t\tposition: \"relative\",\n\t\twidth: undefined,\n\t\theight: undefined,\n\t\tflex: 1,\n\t},\n\tmainHeader: {\n\t\tposition: \"relative\",\n\t\theight: CARD_IMAGE_HEIGHT,\n\t\twidth: SCREEN_WIDTH,\n\t},\n\n\tgradientOverlay: {\n\t\tflex: 1,\n\t},\n\n\t// Field container and spacing\n\tfieldContainer: {\n\t\tpaddingHorizontal: 16,\n\t\tmarginVertical: 12,\n\t},\n\n\t// Field labels/captions\n\tfieldLabel: {\n\t\tfontFamily: \"sf-regular\",\n\t\tfontSize: 11,\n\t\tcolor: TEXT_MID,\n\t\tmarginBottom: 6,\n\t\ttextTransform: \"uppercase\",\n\t\tletterSpacing: 1.2,\n\t\talignSelf: \"center\",\n\t\ttextAlign: \"center\",\n\t\tpaddingHorizontal: 8,\n\t\tpaddingVertical: 4,\n\t\tbackgroundColor: \"rgba(0,0,0,0.03)\",\n\t\tborderRadius: 12,\n\t\tmaxWidth: \"80%\",\n\t},\n\n\t// Field type styles\n\tbodyText: {\n\t\tfontFamily: \"sf-regular\",\n\t\tfontSize: 16,\n\t\tcolor: TEXT_DARK,\n\t\tlineHeight: 22,\n\t},\n\ttitleText: {\n\t\tfontFamily: \"sf-semibold\",\n\t\tfontSize: 16,\n\t\tfontWeight: \"600\",\n\t\tcolor: TEXT_DARK,\n\t},\n\tdescriptionText: {\n\t\tfontFamily: \"sf-regular\",\n\t\tfontSize: 16,\n\t\tcolor: TEXT_DARK,\n\t\tlineHeight: 24,\n\t},\n\tnumberText: {\n\t\tfontFamily: \"sf-medium\",\n\t\tfontSize: 16,\n\t\tfontWeight: \"500\",\n\t\tcolor: TEXT_DARK,\n\t},\n\n\t// Link styles\n\tlinkContainer: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tpaddingVertical: 4,\n\t},\n\tlinkText: {\n\t\tfontFamily: \"sf-medium\",\n\t\tfontSize: 16,\n\t\ttextDecorationLine: \"underline\",\n\t},\n\n\t// Date styles\n\tdateContainer: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tpaddingVertical: 4,\n\t},\n\n\t// Image styles\n\tinlineImage: {\n\t\twidth: \"100%\",\n\t\theight: 200,\n\t\tborderRadius: 8,\n\t\tmarginVertical: 8,\n\t},\n\timageCaption: {\n\t\tfontFamily: \"sf-italic\",\n\t\tfontSize: 14,\n\t\tfontStyle: \"italic\",\n\t\tcolor: TEXT_MID,\n\t\tmarginTop: 4,\n\t\ttextAlign: \"center\",\n\t},\n\n\t// CTA styles\n\tctaContainer: {\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tpaddingVertical: 8,\n\t},\n\n\t// Section title styles\n\tsectionTitle: {\n\t\tfontFamily: \"sf-bold\",\n\t\tfontSize: 14,\n\t\tfontWeight: \"700\",\n\t\tcolor: TEXT_DARK,\n\t\tmarginBottom: SPACING.SM,\n\t},\n\n\t// Icon styles\n\tfieldIcon: {\n\t\tmarginRight: 8,\n\t},\n\n\t// Legacy styles (kept for compatibility)\n\tsection: {\n\t\tpaddingVertical: 16,\n\t},\n\tdivider: {\n\t\theight: 1,\n\t\tbackgroundColor: LINEGREY,\n\t\tmarginVertical: 8,\n\t\tmarginHorizontal: 16,\n\t},\n\tfacilityDetailTitle: {\n\t\tfontFamily: \"sf-bold\",\n\t\tcolor: TEXT_DARK,\n\t\tfontSize: 14,\n\t},\n\tfacilityDetailContent: {\n\t\tfontFamily: \"sf-regular\",\n\t\tcolor: TEXT_DARK,\n\t\tfontSize: 16,\n\t\tlineHeight: 22,\n\t},\n\tfacilityDetailsContainer: {\n\t\tflex: 1,\n\t},\n\tfacilityDetailsTextContainer: {\n\t\tflex: 1,\n\t\tjustifyContent: \"center\",\n\t},\n\tfacilityDetailContainer: {\n\t\tmarginTop: 16,\n\t\tflexDirection: \"row\",\n\t},\n\tfacilityDetailTitleContainer: {\n\t\twidth: 100,\n\t\tmarginRight: 10,\n\t},\n\ttitleContainer: {\n\t\tpaddingVertical: 16,\n\t\tpaddingTop: 20,\n\t},\n\teventTitle: {\n\t\tfontFamily: \"sf-bold\",\n\t\tfontSize: 24,\n\t\tlineHeight: 32,\n\t\tcolor: TEXT_DARK,\n\t\tbackgroundColor: \"transparent\",\n\t\tflex: 1,\n\t},\n\ttextLink: {\n\t\tfontFamily: \"sf-medium\",\n\t\tfontSize: 16,\n\t\tlineHeight: 22,\n\t},\n\tgrayPlaceholder: {\n\t\tbackgroundColor: LINEGREY,\n\t},\n\tcenterContainer: {\n\t\tflex: 1,\n\t\tjustifyContent: \"center\",\n\t\talignItems: \"center\",\n\t\tpaddingHorizontal: 20,\n\t},\n\terrorText: {\n\t\tfontSize: 16,\n\t\tcolor: TEXT_MID,\n\t\ttextAlign: \"center\",\n\t},\n\tfilesContainer: {\n\t\tmarginVertical: 8,\n\t},\n});\n\nconst mapStateToProps = (state, ownProps) => {\n\treturn {\n\t\tcolourBrandingMain: Colours.getMainBrandingColourFromState(state),\n\t\tcolourBrandingHeader: Colours.getMainBrandingColourFromState(state),\n\t\tfeatureDefinition: selectFeatureDefinition(state),\n\t\tuser: state.user,\n\t};\n};\n\nexport default connect(mapStateToProps, null, null, { forwardRef: true })(\n\tFeatureDetailScreen,\n);\n"],"mappings":";;;AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAQ,OAAO;AACxC,SAASC,OAAO,QAAQ,eAAe;AACvC,SACCC,QAAQ,EACRC,IAAI,EACJC,UAAU,EACVC,QAAQ,EACRC,UAAU,EACVC,SAAS,EACTC,IAAI,EACJC,gBAAgB,EAChBC,OAAO,EACPC,UAAU,EACVC,oBAAoB,EACpBC,KAAK,QACC,cAAc;AACrB,SAASC,IAAI,QAAQ,uBAAuB;AAC5C,SAASC,OAAO,QAAQ,aAAa;AACrC,OAAOC,CAAC,MAAM,QAAQ;AACtB,SAASC,cAAc,QAAQ,sBAAsB;AACrD,SAASC,QAAQ,QAAQ,mBAAmB;AAC5C,SACCC,UAAU,EACVC,OAAO,EACPC,kBAAkB,EAClBC,SAAS,QACH,gBAAgB;AACvB,SAASC,QAAQ,EAAEC,QAAQ,QAAQ,cAAc;AACjD,OAAOC,YAAY,MAAM,gBAAgB;AACzC,SAASC,MAAM,QAAQ,kBAAkB;AACzC,SAASC,uBAAuB,QAAQ,mCAAmC;AAE3E,OAAOC,SAAS,MAAM,gBAAgB;AACtC,SAASC,YAAY,QAAQ,UAAU;AACvC,SAASC,WAAW,QAAQ,kBAAkB;AAE9C,MAAMC,aAAa,GAAGzB,UAAU,CAAC0B,GAAG,CAAC,QAAQ,CAAC,CAACC,MAAM;AACrD,MAAMC,iBAAiB,GAAGH,aAAa,GAAG,GAAG;AAC7C,MAAMI,YAAY,GAAG7B,UAAU,CAAC0B,GAAG,CAAC,QAAQ,CAAC,CAACI,KAAK;;AAEnD;AACA,MAAMC,eAAe,GAAIC,IAAI,IAAK;EACjC,OAAOC,kBAAkB,CAAC,CAAC,GAAGD,IAAI;AACnC,CAAC;AAED,MAAMC,kBAAkB,GAAGA,CAAA,KAAM;EAChC,OAAOrC,QAAQ,CAACsC,EAAE,KAAK,KAAK,GACzBZ,SAAS,CAACa,eAAe,GACzBlC,SAAS,CAACmC,aAAa;AAC3B,CAAC;AAED,MAAMC,mBAAmB,SAAS3C,SAAS,CAAC;EAC3C4C,WAAWA,CAACC,KAAK,EAAE;IAClB,KAAK,CAACA,KAAK,CAAC;IAACC,eAAA,sBA8BA,MAAM;MACnB5B,QAAQ,CAAC6B,UAAU,CAACC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED;AACD;AACA;IAFCF,eAAA,2BAGmB,MAAM;MACxB,MAAM;QAAEG,OAAO;QAAEC;MAAkB,CAAC,GAAG,IAAI,CAACL,KAAK;MACjD,IAAI,CAACI,OAAO,IAAI,CAACA,OAAO,CAACE,MAAM,IAAI,CAACD,iBAAiB,EAAE;QACtD,OAAO,EAAE;MACV;MAEA,MAAME,SAAS,GAAG,EAAE;MACpB,MAAMC,gBAAgB,GAAGH,iBAAiB,CAACC,MAAM,IAAI,EAAE;;MAEvD;MACA,MAAMG,YAAY,GAAGL,OAAO,CAACE,MAAM,CAACzB,MAAM,CAAC6B,eAAe,CAACC,YAAY,CAAC;MACxE,IAAIF,YAAY,EAAE;QACjB,MAAMG,QAAQ,GAAG,IAAI,CAACC,mBAAmB,CAACJ,YAAY,CAAC;QACvD,IAAIG,QAAQ,EAAE;UACbL,SAAS,CAACO,IAAI,CAAC;YACd,GAAGF,QAAQ;YACXG,OAAO,EAAElC,MAAM,CAAC6B,eAAe,CAACC,YAAY;YAC5CK,UAAU,EAAEnC,MAAM,CAACoC,MAAM,CAACN;UAC3B,CAAC,CAAC;QACH;MACD;;MAEA;MACAH,gBAAgB,CAACU,OAAO,CAAEC,QAAQ,IAAK;QACtC,IACC,CAACA,QAAQ,CAACC,IAAI,KAAKnC,WAAW,CAACoC,KAAK,IACnCF,QAAQ,CAACC,IAAI,KAAKnC,WAAW,CAACqC,OAAO,KACtCH,QAAQ,CAACI,EAAE,KAAK1C,MAAM,CAAC6B,eAAe,CAACC,YAAY,EAClD;UACD,MAAMa,UAAU,GAAGpB,OAAO,CAACE,MAAM,CAACa,QAAQ,CAACI,EAAE,CAAC;UAE9C,IAAIC,UAAU,EAAE;YACf,IAAIL,QAAQ,CAACC,IAAI,KAAKnC,WAAW,CAACqC,OAAO,EAAE;cAC1C;cACA,IAAIG,KAAK,CAACC,OAAO,CAACF,UAAU,CAAC,EAAE;gBAC9BA,UAAU,CAACN,OAAO,CAAES,IAAI,IAAK;kBAC5B,MAAMf,QAAQ,GAAG,IAAI,CAACC,mBAAmB,CAACc,IAAI,CAAC;kBAC/C,IAAIf,QAAQ,EAAE;oBACbL,SAAS,CAACO,IAAI,CAAC;sBACd,GAAGF,QAAQ;sBACXG,OAAO,EAAEI,QAAQ,CAACI,EAAE;sBACpBP,UAAU,EAAEG,QAAQ,CAACS,KAAK,IAAIT,QAAQ,CAACI;oBACxC,CAAC,CAAC;kBACH;gBACD,CAAC,CAAC;cACH;YACD,CAAC,MAAM;cACN;cACA,MAAMX,QAAQ,GAAG,IAAI,CAACC,mBAAmB,CAACW,UAAU,CAAC;cACrD,IAAIZ,QAAQ,EAAE;gBACbL,SAAS,CAACO,IAAI,CAAC;kBACd,GAAGF,QAAQ;kBACXG,OAAO,EAAEI,QAAQ,CAACI,EAAE;kBACpBP,UAAU,EAAEG,QAAQ,CAACS,KAAK,IAAIT,QAAQ,CAACI;gBACxC,CAAC,CAAC;cACH;YACD;UACD;QACD;MACD,CAAC,CAAC;MAEF,OAAOhB,SAAS;IACjB,CAAC;IAED;AACD;AACA;IAFCN,eAAA,8BAGuB4B,UAAU,IAAK;MACrC,IAAI,CAACA,UAAU,EAAE,OAAO,IAAI;MAE5B,IAAI,OAAOA,UAAU,KAAK,QAAQ,EAAE;QACnC,OAAO;UAAEC,GAAG,EAAED,UAAU;UAAEE,GAAG,EAAEF;QAAW,CAAC;MAC5C;MAEA,IAAI,OAAOA,UAAU,KAAK,QAAQ,EAAE;QACnC,IAAIA,UAAU,CAACC,GAAG,EAAE;UACnB,OAAO;YAAEA,GAAG,EAAED,UAAU,CAACC,GAAG;YAAEC,GAAG,EAAEF,UAAU,CAACC,GAAG;YAAE,GAAGD;UAAW,CAAC;QACnE;QACA,IAAIA,UAAU,CAACE,GAAG,EAAE;UACnB,OAAO;YAAED,GAAG,EAAED,UAAU,CAACE,GAAG;YAAEA,GAAG,EAAEF,UAAU,CAACE,GAAG;YAAE,GAAGF;UAAW,CAAC;QACnE;MACD;MAEA,OAAO,IAAI;IACZ,CAAC;IAED;AACD;AACA;IAFC5B,eAAA,yBAGiB,CAAC+B,UAAU,GAAG,CAAC,KAAK;MACpC,MAAM;QAAEzB;MAAU,CAAC,GAAG,IAAI,CAAC0B,KAAK;MAChC,IAAI1B,SAAS,CAAC2B,MAAM,GAAG,CAAC,EAAE;QACzB,IAAI,CAACC,QAAQ,CAAC;UACbC,cAAc,EAAE,IAAI;UACpBC,kBAAkB,EAAEL;QACrB,CAAC,CAAC;MACH;IACD,CAAC;IAED;AACD;AACA;IAFC/B,eAAA,0BAGkB,MAAM;MACvB,IAAI,CAACkC,QAAQ,CAAC;QACbC,cAAc,EAAE,KAAK;QACrBC,kBAAkB,EAAE;MACrB,CAAC,CAAC;IACH,CAAC;IAiDD;AACD;AACA;IAFCpC,eAAA,0BAGmB8B,GAAG,IAAK;MAC1B,IAAIA,GAAG,EAAE;QACRlE,OAAO,CAACyE,OAAO,CAACP,GAAG,CAAC,CAACQ,KAAK,CAAEC,GAAG,IAAK;UACnC;QAAA,CACA,CAAC;MACH;IACD,CAAC;IAAAvC,eAAA,0BAEkBwC,IAAI,IAAK;MAC3B,IAAIA,IAAI,aAAJA,IAAI,eAAJA,IAAI,CAAEV,GAAG,EAAE;QACdlE,OAAO,CAACyE,OAAO,CAACG,IAAI,CAACV,GAAG,CAAC,CAACQ,KAAK,CAAEC,GAAG,IAAK;UACxC;QAAA,CACA,CAAC;MACH;IACD,CAAC;IAjNA,IAAI,CAACP,KAAK,GAAG;MACZS,SAAS,EAAE,KAAK;MAChBN,cAAc,EAAE,KAAK;MACrBC,kBAAkB,EAAE,CAAC;MACrB9B,SAAS,EAAE;IACZ,CAAC;EACF;EAEAoC,iBAAiBA,CAAA,EAAG;IACnB,IAAI,CAACR,QAAQ,CAAC;MACbO,SAAS,EAAE,CAACrE,QAAQ,CAAC6B,UAAU,CAAC0C,cAAc,CAAC,CAAC;MAChDrC,SAAS,EAAE,IAAI,CAACsC,gBAAgB,CAAC;IAClC,CAAC,CAAC;EACH;EAEAC,kBAAkBA,CAACC,SAAS,EAAE;IAC7B;IACA,IACCA,SAAS,CAAC3C,OAAO,KAAK,IAAI,CAACJ,KAAK,CAACI,OAAO,IACxC2C,SAAS,CAAC1C,iBAAiB,KAAK,IAAI,CAACL,KAAK,CAACK,iBAAiB,EAC3D;MACD,IAAI,CAAC8B,QAAQ,CAAC;QAAE5B,SAAS,EAAE,IAAI,CAACsC,gBAAgB,CAAC;MAAE,CAAC,CAAC;IACtD;EACD;EAEAG,oBAAoBA,CAAA,EAAG;IACtB,IAAI3F,QAAQ,CAACsC,EAAE,KAAK,KAAK,EAAEjC,SAAS,CAACuF,WAAW,CAAC,cAAc,CAAC;EACjE;EAsHA;AACD;AACA;EACCC,aAAaA,CAAA,EAAG;IACf,MAAM;MAAE9C,OAAO;MAAEC;IAAkB,CAAC,GAAG,IAAI,CAACL,KAAK;IACjD,IAAI,CAACI,OAAO,IAAI,CAACA,OAAO,CAACE,MAAM,IAAI,CAACD,iBAAiB,EAAE;MACtD,OAAO,EAAE;IACV;IAEA,MAAMG,gBAAgB,GAAGH,iBAAiB,CAACC,MAAM,IAAI,EAAE;IACvD,MAAM6C,gBAAgB,GAAG,IAAIC,GAAG,CAAC,CAChCvE,MAAM,CAAC6B,eAAe,CAAC2C,KAAK,EAC5BxE,MAAM,CAAC6B,eAAe,CAACC,YAAY,CACnC,CAAC;;IAEF;IACA,MAAM2C,cAAc,GAAGC,MAAM,CAACC,IAAI,CAACpD,OAAO,CAACE,MAAM,CAAC,CAChDmD,MAAM,CAAE1C,OAAO,IAAK;MACpB,IAAI,CAACA,OAAO,IAAIoC,gBAAgB,CAACO,GAAG,CAAC3C,OAAO,CAAC,EAAE,OAAO,KAAK;MAC3D,IAAIX,OAAO,CAACE,MAAM,CAACS,OAAO,CAAC,IAAI,IAAI,EAAE,OAAO,KAAK;;MAEjD;MACA,MAAM4C,aAAa,GAAGnD,gBAAgB,CAACoD,IAAI,CAAEC,CAAC,IAAKA,CAAC,CAACtC,EAAE,KAAKR,OAAO,CAAC;MACpE,IAAI,CAAC4C,aAAa,EAAE;QACnB,OAAO,KAAK;MACb;MACA,OAAO,IAAI;IACZ,CAAC,CAAC,CACDG,GAAG,CAAE/C,OAAO,IAAK;MACjB,MAAMgD,eAAe,GAAGvD,gBAAgB,CAACwD,IAAI,CAC3C7C,QAAQ,IAAKA,QAAQ,CAACI,EAAE,KAAKR,OAC/B,CAAC;MACD,OAAO;QACNA,OAAO;QACPS,UAAU,EAAEpB,OAAO,CAACE,MAAM,CAACS,OAAO,CAAC;QACnCgD,eAAe;QACfE,SAAS,EAAE,CAAAF,eAAe,aAAfA,eAAe,uBAAfA,eAAe,CAAE3C,IAAI,KAAInC,WAAW,CAACiF;MACjD,CAAC;IACF,CAAC,CAAC;;IAEH;IACA,OAAO/F,CAAC,CAACgG,MAAM,CACdb,cAAc,EACbc,KAAK;MAAA,IAAAC,qBAAA;MAAA,OAAK,EAAAA,qBAAA,GAAAD,KAAK,CAACL,eAAe,cAAAM,qBAAA,uBAArBA,qBAAA,CAAuBC,KAAK,KAAI,GAAG;IAAA,CAC/C,CAAC;EACF;EAqBA;AACD;AACA;EACCC,WAAWA,CAACpD,QAAQ,EAAEK,UAAU,EAAE;IACjC,MAAM;MAAEgD;IAAmB,CAAC,GAAG,IAAI,CAACxE,KAAK;;IAEzC;IACA,MAAMyE,YAAY,GAAGtD,QAAQ,IAAI,CAAC,CAAC;IACnC,MAAMC,IAAI,GAAGqD,YAAY,CAACrD,IAAI,IAAInC,WAAW,CAACiF,IAAI;IAClD,MAAMtC,KAAK,GAAG6C,YAAY,CAAC7C,KAAK,IAAI6C,YAAY,CAAClD,EAAE,IAAI,eAAe;IAEtE,QAAQH,IAAI;MACX,KAAKnC,WAAW,CAACyF,GAAG;QAAE;UACrB,MAAMC,QAAQ,GAAG,CAAAnD,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEI,KAAK,KAAIA,KAAK;UAC3C,MAAMgD,MAAM,GAAGpD,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEO,GAAG;UAC9B,oBACC7E,KAAA,CAAA2H,aAAA,CAACvH,IAAI;YAACwH,KAAK,EAAEC,MAAM,CAACC;UAAa,gBAChC9H,KAAA,CAAA2H,aAAA,CAAC7F,YAAY;YACZiG,KAAK;YACLC,KAAK,EAAEV,kBAAmB;YAC1BW,OAAO,EAAEA,CAAA,KAAM,IAAI,CAACC,eAAe,CAACR,MAAM;UAAE,GAE3CD,QACY,CACT,CAAC;QAET;MAEA,KAAK1F,WAAW,CAACoG,KAAK;QACrB,oBACCnI,KAAA,CAAA2H,aAAA,CAACjH,gBAAgB;UAChBkH,KAAK,EAAEC,MAAM,CAACO,aAAc;UAC5BH,OAAO,EAAEA,CAAA,KAAM,IAAI,CAACC,eAAe,CAAC,UAAU5D,UAAU,EAAE;QAAE,gBAE5DtE,KAAA,CAAA2H,aAAA,CAAC5G,IAAI;UACJmD,IAAI,EAAC,cAAc;UACnBmE,IAAI,EAAC,UAAU;UACf9F,IAAI,EAAE,EAAG;UACTyF,KAAK,EAAEV,kBAAmB;UAC1BM,KAAK,EAAEC,MAAM,CAACS;QAAU,CACxB,CAAC,eACFtI,KAAA,CAAA2H,aAAA,CAAClH,IAAI;UAACmH,KAAK,EAAE,CAACC,MAAM,CAACU,QAAQ,EAAE;YAAEP,KAAK,EAAEV;UAAmB,CAAC;QAAE,GAC5DhD,UACI,CACW,CAAC;MAGrB,KAAKvC,WAAW,CAACyG,IAAI;QACpB,oBACCxI,KAAA,CAAA2H,aAAA,CAACvH,IAAI;UAACwH,KAAK,EAAEC,MAAM,CAACY;QAAc,gBACjCzI,KAAA,CAAA2H,aAAA,CAAC5G,IAAI;UACJmD,IAAI,EAAC,cAAc;UACnBmE,IAAI,EAAC,UAAU;UACf9F,IAAI,EAAE,EAAG;UACTyF,KAAK,EAAEzG,SAAU;UACjBqG,KAAK,EAAEC,MAAM,CAACS;QAAU,CACxB,CAAC,eACFtI,KAAA,CAAA2H,aAAA,CAAClH,IAAI;UAACmH,KAAK,EAAEC,MAAM,CAACa;QAAS,GAAEpE,UAAiB,CAC3C,CAAC;MAGT,KAAKvC,WAAW,CAAC4G,IAAI;QAAE;UACtB;UACA,MAAMC,KAAK,GAAGrE,KAAK,CAACC,OAAO,CAACF,UAAU,CAAC,GAAGA,UAAU,GAAG,CAACA,UAAU,CAAC;UACnE,oBACCtE,KAAA,CAAA2H,aAAA,CAACvH,IAAI;YAACwH,KAAK,EAAEC,MAAM,CAACgB;UAAe,gBAClC7I,KAAA,CAAA2H,aAAA,CAAClH,IAAI;YAACmH,KAAK,EAAEC,MAAM,CAACiB;UAAa,GAAEnH,MAAM,CAACoC,MAAM,CAACgF,WAAkB,CAAC,EACnEH,KAAK,CAAChC,GAAG,CAAC,CAACrB,IAAI,EAAEyD,KAAK,KAAK;YAC3B;YACA,IAAI,CAACzD,IAAI,EAAE,OAAO,IAAI;YAEtB,oBACCvF,KAAA,CAAA2H,aAAA,CAACjG,YAAY;cACZuH,GAAG,EAAED,KAAM;cACXzD,IAAI,EAAEA,IAAK;cACX0C,OAAO,EAAE,IAAI,CAACiB,eAAgB;cAC9BlB,KAAK,EAAE,IAAI,CAAClF,KAAK,CAACwE;YAAmB,CACrC,CAAC;UAEJ,CAAC,CACI,CAAC;QAET;MAEA,KAAKvF,WAAW,CAACoH,WAAW;QAC3B,oBAAOnJ,KAAA,CAAA2H,aAAA,CAAClH,IAAI;UAACmH,KAAK,EAAEC,MAAM,CAACuB;QAAgB,GAAE9E,UAAiB,CAAC;MAEhE,KAAKvC,WAAW,CAACoC,KAAK;QAAE;UACvB;UACA,MAAMkF,MAAM,GACX,CAAA/E,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEO,GAAG,MACfP,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEM,GAAG,MACd,OAAON,UAAU,KAAK,QAAQ,GAAGA,UAAU,GAAG,IAAI,CAAC;UACrD,IAAI,CAAC+E,MAAM,EAAE,OAAO,IAAI;;UAExB;UACA,MAAM;YAAEhG;UAAU,CAAC,GAAG,IAAI,CAAC0B,KAAK;UAChC,MAAMD,UAAU,GAAGzB,SAAS,CAACiG,SAAS,CACpCC,GAAG,IAAKA,GAAG,CAAC3E,GAAG,KAAKyE,MAAM,IAAIE,GAAG,CAAC1E,GAAG,KAAKwE,MAC5C,CAAC;UAED,MAAMG,OAAO,GAAGlF,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEkF,OAAO;UAEnC,oBACCxJ,KAAA,CAAA2H,aAAA,CAACjH,gBAAgB;YAChBuH,OAAO,EAAEA,CAAA,KAAM,IAAI,CAACwB,cAAc,CAAC3E,UAAU,CAAE;YAC/C4E,aAAa,EAAE;UAAI,gBAEnB1J,KAAA,CAAA2H,aAAA,CAAC7G,KAAK;YACL6I,MAAM,EAAE;cAAE/E,GAAG,EAAEyE;YAAO,CAAE;YACxBzB,KAAK,EAAEC,MAAM,CAAC+B,WAAY;YAC1BC,UAAU,EAAC;UAAO,CAClB,CAAC,EACDL,OAAO,iBAAIxJ,KAAA,CAAA2H,aAAA,CAAClH,IAAI;YAACmH,KAAK,EAAEC,MAAM,CAACiC;UAAa,GAAEN,OAAc,CAC5C,CAAC;QAErB;MAEA,KAAKzH,WAAW,CAACqC,OAAO;QAAE;UACzB;UACA,IAAI,CAACG,KAAK,CAACC,OAAO,CAACF,UAAU,CAAC,EAAE,OAAO,IAAI;UAE3C,oBACCtE,KAAA,CAAA2H,aAAA,CAACvH,IAAI;YAACwH,KAAK,EAAE;cAAEmC,cAAc,EAAE;YAAG;UAAE,gBACnC/J,KAAA,CAAA2H,aAAA,CAACvH,IAAI;YACJwH,KAAK,EAAE;cACNoC,aAAa,EAAE,KAAK;cACpBC,QAAQ,EAAE,MAAM;cAChBC,gBAAgB,EAAE,CAAC;YACpB;UAAE,GAED5F,UAAU,CAACsC,GAAG,CAAC,CAACuD,OAAO,EAAEnB,KAAK,KAAK;YACnC,MAAMK,MAAM,GACX,CAAAc,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEtF,GAAG,MACZsF,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEvF,GAAG,MACX,OAAOuF,OAAO,KAAK,QAAQ,GAAGA,OAAO,GAAG,IAAI,CAAC;YAC/C,IAAI,CAACd,MAAM,EAAE,OAAO,IAAI;;YAExB;YACA,MAAM;cAAEhG;YAAU,CAAC,GAAG,IAAI,CAAC0B,KAAK;YAChC,MAAMqF,WAAW,GAAG/G,SAAS,CAACiG,SAAS,CACrCC,GAAG,IAAKA,GAAG,CAAC3E,GAAG,KAAKyE,MAAM,IAAIE,GAAG,CAAC1E,GAAG,KAAKwE,MAC5C,CAAC;YAED,oBACCrJ,KAAA,CAAA2H,aAAA,CAACjH,gBAAgB;cAChBuI,GAAG,EAAED,KAAM;cACXf,OAAO,EAAEA,CAAA,KACR,IAAI,CAACwB,cAAc,CAACW,WAAW,KAAK,CAAC,CAAC,GAAGA,WAAW,GAAG,CAAC,CACxD;cACDV,aAAa,EAAE,GAAI;cACnB9B,KAAK,EAAE;gBAAEvF,KAAK,EAAE,KAAK;gBAAEgI,OAAO,EAAE;cAAE,CAAE,CAAC;YAAA,gBAErCrK,KAAA,CAAA2H,aAAA,CAAC7G,KAAK;cACL6I,MAAM,EAAE;gBAAE/E,GAAG,EAAEyE;cAAO,CAAE;cACxBzB,KAAK,EAAE,CACNC,MAAM,CAAC+B,WAAW,EAClB;gBAAE1H,MAAM,EAAE,GAAG;gBAAE6H,cAAc,EAAE;cAAE,CAAC,CACjC;cACFF,UAAU,EAAC;YAAO,CAClB,CACgB,CAAC;UAErB,CAAC,CACI,CACD,CAAC;QAET;MAEA,KAAK9H,WAAW,CAACuI,KAAK;QACrB,oBAAOtK,KAAA,CAAA2H,aAAA,CAAClH,IAAI;UAACmH,KAAK,EAAEC,MAAM,CAAC0C;QAAU,GAAEjG,UAAiB,CAAC;MAE1D,KAAKvC,WAAW,CAACyI,MAAM;QACtB,oBAAOxK,KAAA,CAAA2H,aAAA,CAAClH,IAAI;UAACmH,KAAK,EAAEC,MAAM,CAAC4C;QAAW,GAAEnG,UAAiB,CAAC;MAE3D;QACC;QACA,oBACCtE,KAAA,CAAA2H,aAAA,CAAClH,IAAI;UAACmH,KAAK,EAAEC,MAAM,CAACa;QAAS,GAC3B,OAAOpE,UAAU,KAAK,QAAQ,GAC5BoG,IAAI,CAACC,SAAS,CAACrG,UAAU,CAAC,GAC1BA,UACE,CAAC;IAEV;EACD;;EAEA;AACD;AACA;EACCsG,YAAYA,CAAA,EAAG;IACd,MAAMC,eAAe,GAAG,IAAI,CAAC7E,aAAa,CAAC,CAAC;IAE5C,OAAO6E,eAAe,CAACjE,GAAG,CAAC,CAACM,KAAK,EAAE4D,MAAM,KAAK;MAAA,IAAAC,sBAAA,EAAAC,sBAAA;MAC7C,oBACChL,KAAA,CAAA2H,aAAA,CAACvH,IAAI;QAAC6I,GAAG,EAAE/B,KAAK,CAACrD,OAAQ;QAAC+D,KAAK,EAAEC,MAAM,CAACoD;MAAe,GACrD/D,KAAK,CAACH,SAAS,KAAKhF,WAAW,CAACyF,GAAG,IACnCN,KAAK,CAACH,SAAS,KAAKhF,WAAW,CAACoC,KAAK,MAAA4G,sBAAA,GACrC7D,KAAK,CAACL,eAAe,cAAAkE,sBAAA,uBAArBA,sBAAA,CAAuBrG,KAAK,kBAC3B1E,KAAA,CAAA2H,aAAA,CAAClH,IAAI;QAACmH,KAAK,EAAEC,MAAM,CAAC/D;MAAW,IAAAkH,sBAAA,GAC7B9D,KAAK,CAACL,eAAe,cAAAmE,sBAAA,uBAArBA,sBAAA,CAAuBtG,KACnB,CACN,EACD,IAAI,CAAC2C,WAAW,CAACH,KAAK,CAACL,eAAe,EAAEK,KAAK,CAAC5C,UAAU,CACpD,CAAC;IAET,CAAC,CAAC;EACH;EAEA4G,cAAcA,CAAA,EAAG;IAChB,MAAM;MAAEhI;IAAQ,CAAC,GAAG,IAAI,CAACJ,KAAK;IAC9B,IAAI,CAACI,OAAO,IAAI,CAACA,OAAO,CAACE,MAAM,EAAE;MAChC,OAAO,IAAI;IACZ;IAEA,MAAMuB,UAAU,GAAGzB,OAAO,CAACE,MAAM,CAACzB,MAAM,CAAC6B,eAAe,CAACC,YAAY,CAAC;IACtE,IAAI,CAACkB,UAAU,EAAE;MAChB,OAAO,IAAI;IACZ;;IAEA;IACA,IAAI,OAAOA,UAAU,KAAK,QAAQ,EAAE;MACnC,OAAOA,UAAU;IAClB;IAEA,OAAO,CAAAA,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEC,GAAG,MAAID,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEE,GAAG,KAAI,IAAI;EAClD;EAEAsG,QAAQA,CAAA,EAAG;IACV,MAAM;MAAEjI;IAAQ,CAAC,GAAG,IAAI,CAACJ,KAAK;IAC9B,IAAI,CAACI,OAAO,IAAI,CAACA,OAAO,CAACE,MAAM,EAAE;MAChC,OAAOzB,MAAM,CAACoC,MAAM,CAACqH,YAAY;IAClC;IAEA,OACClI,OAAO,CAACE,MAAM,CAACzB,MAAM,CAAC6B,eAAe,CAAC2C,KAAK,CAAC,IAAIxE,MAAM,CAACoC,MAAM,CAACqH,YAAY;EAE5E;EAEAC,MAAMA,CAAA,EAAG;IACR,MAAM;MAAEnI;IAAQ,CAAC,GAAG,IAAI,CAACJ,KAAK;IAC9B,MAAMwI,WAAW,GAAG,IAAI,CAACJ,cAAc,CAAC,CAAC;IACzC,MAAM/E,KAAK,GAAG,IAAI,CAACgF,QAAQ,CAAC,CAAC;IAE7B,IAAI,CAACjI,OAAO,IAAI,CAACA,OAAO,CAACE,MAAM,EAAE;MAChC,oBACCpD,KAAA,CAAA2H,aAAA,CAACvH,IAAI;QAACwH,KAAK,EAAEC,MAAM,CAAC0D;MAAgB,gBACnCvL,KAAA,CAAA2H,aAAA,CAAClH,IAAI;QAACmH,KAAK,EAAEC,MAAM,CAAC2D;MAAU,GAAC,gBAAoB,CAC9C,CAAC;IAET;IAEA,oBACCxL,KAAA,CAAA2H,aAAA,CAAC9G,oBAAoB;MACpB4K,QAAQ,EAAEtL,QAAQ,CAACsC,EAAE,KAAK,KAAK,IAAI,SAAU;MAC7CmF,KAAK,EAAE;QACN8D,QAAQ,EAAE,UAAU;QACpBC,IAAI,EAAE,CAAC;QACPC,eAAe,EAAEvK,OAAO,CAACwK,gBAAgB,IAAI;MAC9C;IAAE,gBAEF7L,KAAA,CAAA2H,aAAA,CAACvH,IAAI;MAACwH,KAAK,EAAEC,MAAM,CAACiE;IAAW,gBAC9B9L,KAAA,CAAA2H,aAAA,CAACvH,IAAI;MAACwH,KAAK,EAAEC,MAAM,CAACkE;IAAc,gBACjC/L,KAAA,CAAA2H,aAAA,CAACvG,UAAU,CAAC4K,UAAU;MACrB/D,OAAO,EAAE,IAAI,CAACgE,WAAY;MAC1BrE,KAAK,EAAE;QACNsE,UAAU,EAAE;MACb;IAAE,CACF,CACI,CACD,CAAC,eAEPlM,KAAA,CAAA2H,aAAA,CAACtH,UAAU;MACVuH,KAAK,EAAE;QAAEgE,eAAe,EAAEvK,OAAO,CAACwK,gBAAgB,IAAI;MAAO,CAAE;MAC/DM,yBAAyB,EAAC,QAAQ;MAClCC,GAAG,EAAGA,GAAG,IAAK;QACb,IAAI,CAACC,UAAU,GAAGD,GAAG;MACtB;IAAE,gBAEFpM,KAAA,CAAA2H,aAAA,CAACvH,IAAI;MAACwH,KAAK,EAAE,CAACC,MAAM,CAACyE,UAAU;IAAE,GAC/BhB,WAAW,gBACXtL,KAAA,CAAA2H,aAAA,CAACjH,gBAAgB;MAChBuH,OAAO,EAAEA,CAAA,KAAM,IAAI,CAACwB,cAAc,CAAC,CAAC,CAAE;MACtCC,aAAa,EAAE;IAAI,gBAEnB1J,KAAA,CAAA2H,aAAA,CAACvG,UAAU,CAACmL,eAAe;MAC1B3H,GAAG,EAAE0G,WAAY;MACjBpJ,MAAM,EAAEC,iBAAkB;MAC1BE,KAAK,EAAED;IAAa,CACpB,CACgB,CAAC,gBAEnBpC,KAAA,CAAA2H,aAAA,CAACvH,IAAI;MACJwH,KAAK,EAAE,CACNC,MAAM,CAAC2E,eAAe,EACtB;QAAEtK,MAAM,EAAEC,iBAAiB;QAAEE,KAAK,EAAED;MAAa,CAAC;IACjD,CACF,CACD,eACDpC,KAAA,CAAA2H,aAAA,CAACzG,cAAc;MACd0G,KAAK,EAAEC,MAAM,CAAC4E,eAAgB;MAC9BC,MAAM,EAAE,CAAC,iBAAiB,EAAEpL,kBAAkB,CAAE;MAChDqL,KAAK,EAAE;QAAEC,CAAC,EAAE,CAAC;QAAEC,CAAC,EAAE;MAAE,CAAE;MACtBC,GAAG,EAAE;QAAEF,CAAC,EAAE,CAAC;QAAEC,CAAC,EAAE;MAAE,CAAE;MACpBE,SAAS,EAAE,CAAC,CAAC,EAAE,GAAG;IAAE,CACpB,CACI,CAAC,eACP/M,KAAA,CAAA2H,aAAA,CAACvH,IAAI;MAACwH,KAAK,EAAE;QAAEoF,iBAAiB,EAAE;MAAG;IAAE,gBACtChN,KAAA,CAAA2H,aAAA,CAACvH,IAAI;MAACwH,KAAK,EAAEC,MAAM,CAACoF;IAAe,gBAClCjN,KAAA,CAAA2H,aAAA,CAAClH,IAAI;MAACmH,KAAK,EAAEC,MAAM,CAACqF;IAAW,GAAE/G,KAAY,CACxC,CACD,CAAC,eACPnG,KAAA,CAAA2H,aAAA,CAACvH,IAAI;MAACwH,KAAK,EAAE;QAAEuF,SAAS,EAAEnL,aAAa,GAAGG,iBAAiB,GAAG;MAAG;IAAE,GACjE,IAAI,CAACyI,YAAY,CAAC,CACd,CACK,CAAC,EAGZ,IAAI,CAAC7F,KAAK,CAACG,cAAc,iBACzBlF,KAAA,CAAA2H,aAAA,CAACvG,UAAU,CAACgM,UAAU;MACrBC,OAAO,EAAE,IAAI,CAACtI,KAAK,CAACG,cAAe;MACnCoI,MAAM,EAAE,IAAI,CAACvI,KAAK,CAAC1B,SAAU;MAC7B2F,KAAK,EAAE,IAAI,CAACjE,KAAK,CAACI,kBAAmB;MACrCoI,OAAO,EAAE,IAAI,CAACC;IAAgB,CAC9B,CAEmB,CAAC;EAEzB;AACD;AAEA,MAAM3F,MAAM,GAAGjH,UAAU,CAAC6M,MAAM,CAAC;EAChC3B,UAAU,EAAE;IACXJ,QAAQ,EAAE,UAAU;IACpBgC,IAAI,EAAE,CAAC;IACPC,GAAG,EAAE,CAAC;IACNC,MAAM,EAAE,EAAE;IACVC,SAAS,EAAE,EAAE;IACb3L,MAAM,EAAEI,eAAe,CAAC,EAAE;EAC3B,CAAC;EACDyJ,aAAa,EAAE;IACd+B,SAAS,EAAE,SAAS;IACpB9D,aAAa,EAAE,KAAK;IACpB2B,IAAI,EAAE,CAAC;IACPoC,UAAU,EAAEzL,eAAe,CAAC,EAAE;EAC/B,CAAC;EACD0L,KAAK,EAAE;IACNpC,eAAe,EAAEvK,OAAO,CAACwK,gBAAgB,IAAI,MAAM;IACnDH,QAAQ,EAAE,UAAU;IACpBrJ,KAAK,EAAE4L,SAAS;IAChB/L,MAAM,EAAE+L,SAAS;IACjBtC,IAAI,EAAE;EACP,CAAC;EACDW,UAAU,EAAE;IACXZ,QAAQ,EAAE,UAAU;IACpBxJ,MAAM,EAAEC,iBAAiB;IACzBE,KAAK,EAAED;EACR,CAAC;EAEDqK,eAAe,EAAE;IAChBd,IAAI,EAAE;EACP,CAAC;EAED;EACAV,cAAc,EAAE;IACf+B,iBAAiB,EAAE,EAAE;IACrBjD,cAAc,EAAE;EACjB,CAAC;EAED;EACAjG,UAAU,EAAE;IACXoK,UAAU,EAAE,YAAY;IACxBC,QAAQ,EAAE,EAAE;IACZnG,KAAK,EAAExG,QAAQ;IACf4M,YAAY,EAAE,CAAC;IACfC,aAAa,EAAE,WAAW;IAC1BC,aAAa,EAAE,GAAG;IAClBR,SAAS,EAAE,QAAQ;IACnBS,SAAS,EAAE,QAAQ;IACnBvB,iBAAiB,EAAE,CAAC;IACpBwB,eAAe,EAAE,CAAC;IAClB5C,eAAe,EAAE,kBAAkB;IACnC6C,YAAY,EAAE,EAAE;IAChBC,QAAQ,EAAE;EACX,CAAC;EAED;EACAhG,QAAQ,EAAE;IACTwF,UAAU,EAAE,YAAY;IACxBC,QAAQ,EAAE,EAAE;IACZnG,KAAK,EAAEzG,SAAS;IAChBoN,UAAU,EAAE;EACb,CAAC;EACDpE,SAAS,EAAE;IACV2D,UAAU,EAAE,aAAa;IACzBC,QAAQ,EAAE,EAAE;IACZS,UAAU,EAAE,KAAK;IACjB5G,KAAK,EAAEzG;EACR,CAAC;EACD6H,eAAe,EAAE;IAChB8E,UAAU,EAAE,YAAY;IACxBC,QAAQ,EAAE,EAAE;IACZnG,KAAK,EAAEzG,SAAS;IAChBoN,UAAU,EAAE;EACb,CAAC;EACDlE,UAAU,EAAE;IACXyD,UAAU,EAAE,WAAW;IACvBC,QAAQ,EAAE,EAAE;IACZS,UAAU,EAAE,KAAK;IACjB5G,KAAK,EAAEzG;EACR,CAAC;EAED;EACA6G,aAAa,EAAE;IACd4B,aAAa,EAAE,KAAK;IACpB6E,UAAU,EAAE,QAAQ;IACpBL,eAAe,EAAE;EAClB,CAAC;EACDjG,QAAQ,EAAE;IACT2F,UAAU,EAAE,WAAW;IACvBC,QAAQ,EAAE,EAAE;IACZW,kBAAkB,EAAE;EACrB,CAAC;EAED;EACArG,aAAa,EAAE;IACduB,aAAa,EAAE,KAAK;IACpB6E,UAAU,EAAE,QAAQ;IACpBL,eAAe,EAAE;EAClB,CAAC;EAED;EACA5E,WAAW,EAAE;IACZvH,KAAK,EAAE,MAAM;IACbH,MAAM,EAAE,GAAG;IACXuM,YAAY,EAAE,CAAC;IACf1E,cAAc,EAAE;EACjB,CAAC;EACDD,YAAY,EAAE;IACboE,UAAU,EAAE,WAAW;IACvBC,QAAQ,EAAE,EAAE;IACZY,SAAS,EAAE,QAAQ;IACnB/G,KAAK,EAAExG,QAAQ;IACfwN,SAAS,EAAE,CAAC;IACZT,SAAS,EAAE;EACZ,CAAC;EAED;EACAzG,YAAY,EAAE;IACb+G,UAAU,EAAE,QAAQ;IACpBI,cAAc,EAAE,QAAQ;IACxBT,eAAe,EAAE;EAClB,CAAC;EAED;EACA1F,YAAY,EAAE;IACboF,UAAU,EAAE,SAAS;IACrBC,QAAQ,EAAE,EAAE;IACZS,UAAU,EAAE,KAAK;IACjB5G,KAAK,EAAEzG,SAAS;IAChB6M,YAAY,EAAElO,OAAO,CAACgP;EACvB,CAAC;EAED;EACA5G,SAAS,EAAE;IACV6G,WAAW,EAAE;EACd,CAAC;EAED;EACAC,OAAO,EAAE;IACRZ,eAAe,EAAE;EAClB,CAAC;EACDa,OAAO,EAAE;IACRnN,MAAM,EAAE,CAAC;IACT0J,eAAe,EAAEnK,QAAQ;IACzBsI,cAAc,EAAE,CAAC;IACjBG,gBAAgB,EAAE;EACnB,CAAC;EACDoF,mBAAmB,EAAE;IACpBpB,UAAU,EAAE,SAAS;IACrBlG,KAAK,EAAEzG,SAAS;IAChB4M,QAAQ,EAAE;EACX,CAAC;EACDoB,qBAAqB,EAAE;IACtBrB,UAAU,EAAE,YAAY;IACxBlG,KAAK,EAAEzG,SAAS;IAChB4M,QAAQ,EAAE,EAAE;IACZQ,UAAU,EAAE;EACb,CAAC;EACDa,wBAAwB,EAAE;IACzB7D,IAAI,EAAE;EACP,CAAC;EACD8D,4BAA4B,EAAE;IAC7B9D,IAAI,EAAE,CAAC;IACPsD,cAAc,EAAE;EACjB,CAAC;EACDS,uBAAuB,EAAE;IACxBV,SAAS,EAAE,EAAE;IACbhF,aAAa,EAAE;EAChB,CAAC;EACD2F,4BAA4B,EAAE;IAC7BtN,KAAK,EAAE,GAAG;IACV8M,WAAW,EAAE;EACd,CAAC;EACDlC,cAAc,EAAE;IACfuB,eAAe,EAAE,EAAE;IACnBT,UAAU,EAAE;EACb,CAAC;EACDb,UAAU,EAAE;IACXgB,UAAU,EAAE,SAAS;IACrBC,QAAQ,EAAE,EAAE;IACZQ,UAAU,EAAE,EAAE;IACd3G,KAAK,EAAEzG,SAAS;IAChBqK,eAAe,EAAE,aAAa;IAC9BD,IAAI,EAAE;EACP,CAAC;EACDiE,QAAQ,EAAE;IACT1B,UAAU,EAAE,WAAW;IACvBC,QAAQ,EAAE,EAAE;IACZQ,UAAU,EAAE;EACb,CAAC;EACDnC,eAAe,EAAE;IAChBZ,eAAe,EAAEnK;EAClB,CAAC;EACD8J,eAAe,EAAE;IAChBI,IAAI,EAAE,CAAC;IACPsD,cAAc,EAAE,QAAQ;IACxBJ,UAAU,EAAE,QAAQ;IACpB7B,iBAAiB,EAAE;EACpB,CAAC;EACDxB,SAAS,EAAE;IACV2C,QAAQ,EAAE,EAAE;IACZnG,KAAK,EAAExG,QAAQ;IACf+M,SAAS,EAAE;EACZ,CAAC;EACD1F,cAAc,EAAE;IACfkB,cAAc,EAAE;EACjB;AACD,CAAC,CAAC;AAEF,MAAM8F,eAAe,GAAGA,CAAC9K,KAAK,EAAE+K,QAAQ,KAAK;EAC5C,OAAO;IACNxI,kBAAkB,EAAEjG,OAAO,CAAC0O,8BAA8B,CAAChL,KAAK,CAAC;IACjEiL,oBAAoB,EAAE3O,OAAO,CAAC0O,8BAA8B,CAAChL,KAAK,CAAC;IACnE5B,iBAAiB,EAAEvB,uBAAuB,CAACmD,KAAK,CAAC;IACjDkL,IAAI,EAAElL,KAAK,CAACkL;EACb,CAAC;AACF,CAAC;AAED,eAAejP,OAAO,CAAC6O,eAAe,EAAE,IAAI,EAAE,IAAI,EAAE;EAAEK,UAAU,EAAE;AAAK,CAAC,CAAC,CACxEtN,mBACD,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["React","Component","SPACING","Platform","View","ScrollView","Animated","Dimensions","StatusBar","Text","TouchableOpacity","Linking","StyleSheet","KeyboardAvoidingView","Image","Icon","connect","_","LinearGradient","Services","Components","Colours","COLOUR_TRANSPARENT","TEXT_DARK","TEXT_MID","LINEGREY","FileDownload","values","selectFeatureDefinition","Constants","InlineButton","FIELD_TYPES","SCREEN_HEIGHT","get","height","CARD_IMAGE_HEIGHT","SCREEN_WIDTH","width","StatusBarHeight","size","getStatusBarHeight","OS","statusBarHeight","currentHeight","FeatureDetailScreen","constructor","props","_defineProperty","navigation","goBack","listing","featureDefinition","fields","allImages","fieldDefinitions","primaryImage","mandatoryFields","featureImage","imageObj","normalizeImageField","push","fieldId","fieldLabel","labels","forEach","fieldDef","type","IMAGE","GALLERY","id","fieldValue","Array","isArray","item","label","imageField","uri","url","imageIndex","state","length","setState","showImagePopup","selectedImageIndex","openURL","catch","err","file","isHomeTab","componentDidMount","getParentRoute","collectAllImages","componentDidUpdate","prevProps","componentWillUnmount","setBarStyle","processFields","excludedFieldIds","Set","title","filteredFields","Object","keys","filter","has","hasDefinition","some","f","map","fieldDefinition","find","fieldType","TEXT","sortBy","field","_field$fieldDefinitio","order","renderField","colourBrandingMain","safeFieldDef","CTA","btnLabel","btnUrl","createElement","style","styles","ctaContainer","large","color","onPress","handleLinkPress","EMAIL","linkContainer","name","fieldIcon","linkText","DATE","dateContainer","bodyText","FILE","files","filesContainer","sectionTitle","attachments","index","key","handleFilePress","DESCRIPTION","descriptionText","imgUri","findIndex","img","caption","openImagePopup","activeOpacity","source","inlineImage","resizeMode","imageCaption","marginVertical","flexDirection","flexWrap","marginHorizontal","imgItem","globalIndex","padding","TITLE","titleText","NUMBER","numberText","JSON","stringify","renderFields","processedFields","_index","_field$fieldDefinitio2","_field$fieldDefinitio3","fieldContainer","getImageSource","getTitle","defaultTitle","render","imageSource","centerContainer","errorText","behavior","position","flex","backgroundColor","BACKGROUND_WHITE","backButton","headerContent","BackButton","onPressBack","marginLeft","keyboardShouldPersistTaps","ref","scrollView","mainHeader","AutoOffsetImage","grayPlaceholder","gradientOverlay","colors","start","x","y","end","locations","paddingHorizontal","titleContainer","eventTitle","minHeight","ImagePopup","visible","images","onClose","closeImagePopup","create","left","top","zIndex","elevation","alignSelf","paddingTop","image","undefined","fontFamily","fontSize","marginBottom","textTransform","letterSpacing","textAlign","paddingVertical","borderRadius","maxWidth","lineHeight","fontWeight","alignItems","textDecorationLine","fontStyle","marginTop","justifyContent","SM","marginRight","section","divider","facilityDetailTitle","facilityDetailContent","facilityDetailsContainer","facilityDetailsTextContainer","facilityDetailContainer","facilityDetailTitleContainer","textLink","mapStateToProps","ownProps","getMainBrandingColourFromState","colourBrandingHeader","user","forwardRef"],"sources":["FeatureDetailScreen.js"],"sourcesContent":["import React, { Component } from \"react\";\nimport { SPACING } from \"../js/spacing\";\nimport {\n\tPlatform,\n\tView,\n\tScrollView,\n\tAnimated,\n\tDimensions,\n\tStatusBar,\n\tText,\n\tTouchableOpacity,\n\tLinking,\n\tStyleSheet,\n\tKeyboardAvoidingView,\n\tImage,\n} from \"react-native\";\nimport { Icon } from \"react-native-elements\";\nimport { connect } from \"react-redux\";\nimport _ from \"lodash\";\nimport { LinearGradient } from \"expo-linear-gradient\";\nimport { Services } from \"../feature.config\";\nimport {\n\tComponents,\n\tColours,\n\tCOLOUR_TRANSPARENT,\n\tTEXT_DARK,\n} from \"../core.config\";\nimport { TEXT_MID, LINEGREY } from \"../js/Colors\";\nimport FileDownload from \"./FileDownload\";\nimport { values } from \"../values.config\";\nimport { selectFeatureDefinition } from \"../utils/selectors\";\n\nimport Constants from \"expo-constants\";\nimport { InlineButton } from \"./common\";\nimport { FIELD_TYPES } from \"../js/FieldTypes\";\n\nconst SCREEN_HEIGHT = Dimensions.get(\"window\").height;\nconst CARD_IMAGE_HEIGHT = SCREEN_HEIGHT * 0.3;\nconst SCREEN_WIDTH = Dimensions.get(\"window\").width;\n\n// StatusBarHeight function copied to avoid import from outside extension\nconst StatusBarHeight = (size) => {\n\treturn getStatusBarHeight() + size;\n};\n\nconst getStatusBarHeight = () => {\n\treturn Platform.OS === \"ios\"\n\t\t? Constants.statusBarHeight\n\t\t: StatusBar.currentHeight;\n};\n\nclass FeatureDetailScreen extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = {\n\t\t\tisHomeTab: false,\n\t\t\tshowImagePopup: false,\n\t\t\tselectedImageIndex: 0,\n\t\t\tallImages: [],\n\t\t};\n\t}\n\n\tcomponentDidMount() {\n\t\tthis.setState({\n\t\t\tisHomeTab: !Services.navigation.getParentRoute(),\n\t\t\tallImages: this.collectAllImages(),\n\t\t});\n\t}\n\n\tcomponentDidUpdate(prevProps) {\n\t\t// Recalculate allImages when listing or featureDefinition changes\n\t\tif (\n\t\t\tprevProps.listing !== this.props.listing ||\n\t\t\tprevProps.featureDefinition !== this.props.featureDefinition\n\t\t) {\n\t\t\tthis.setState({ allImages: this.collectAllImages() });\n\t\t}\n\t}\n\n\tcomponentWillUnmount() {\n\t\tif (Platform.OS === \"ios\") StatusBar.setBarStyle(\"dark-content\");\n\t}\n\n\tonPressBack = () => {\n\t\tServices.navigation.goBack();\n\t};\n\n\t/**\n\t * Collect all images from listing fields\n\t */\n\tcollectAllImages = () => {\n\t\tconst { listing, featureDefinition } = this.props;\n\t\tif (!listing || !listing.fields || !featureDefinition) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst allImages = [];\n\t\tconst fieldDefinitions = featureDefinition.fields || [];\n\n\t\t// Add primary feature image first\n\t\tconst primaryImage = listing.fields[values.mandatoryFields.featureImage];\n\t\tif (primaryImage) {\n\t\t\tconst imageObj = this.normalizeImageField(primaryImage);\n\t\t\tif (imageObj) {\n\t\t\t\tallImages.push({\n\t\t\t\t\t...imageObj,\n\t\t\t\t\tfieldId: values.mandatoryFields.featureImage,\n\t\t\t\t\tfieldLabel: values.labels.featureImage,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// Add additional image fields\n\t\tfieldDefinitions.forEach((fieldDef) => {\n\t\t\tif (\n\t\t\t\t(fieldDef.type === FIELD_TYPES.IMAGE ||\n\t\t\t\t\tfieldDef.type === FIELD_TYPES.GALLERY) &&\n\t\t\t\tfieldDef.id !== values.mandatoryFields.featureImage\n\t\t\t) {\n\t\t\t\tconst fieldValue = listing.fields[fieldDef.id];\n\n\t\t\t\tif (fieldValue) {\n\t\t\t\t\tif (fieldDef.type === FIELD_TYPES.GALLERY) {\n\t\t\t\t\t\t// Handle Gallery (Array of images)\n\t\t\t\t\t\tif (Array.isArray(fieldValue)) {\n\t\t\t\t\t\t\tfieldValue.forEach((item) => {\n\t\t\t\t\t\t\t\tconst imageObj = this.normalizeImageField(item);\n\t\t\t\t\t\t\t\tif (imageObj) {\n\t\t\t\t\t\t\t\t\tallImages.push({\n\t\t\t\t\t\t\t\t\t\t...imageObj,\n\t\t\t\t\t\t\t\t\t\tfieldId: fieldDef.id,\n\t\t\t\t\t\t\t\t\t\tfieldLabel: fieldDef.label || fieldDef.id,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Handle Single Image\n\t\t\t\t\t\tconst imageObj = this.normalizeImageField(fieldValue);\n\t\t\t\t\t\tif (imageObj) {\n\t\t\t\t\t\t\tallImages.push({\n\t\t\t\t\t\t\t\t...imageObj,\n\t\t\t\t\t\t\t\tfieldId: fieldDef.id,\n\t\t\t\t\t\t\t\tfieldLabel: fieldDef.label || fieldDef.id,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn allImages;\n\t};\n\n\t/**\n\t * Normalize image field to object format\n\t */\n\tnormalizeImageField = (imageField) => {\n\t\tif (!imageField) return null;\n\n\t\tif (typeof imageField === \"string\") {\n\t\t\treturn { uri: imageField, url: imageField };\n\t\t}\n\n\t\tif (typeof imageField === \"object\") {\n\t\t\tif (imageField.uri) {\n\t\t\t\treturn { uri: imageField.uri, url: imageField.uri, ...imageField };\n\t\t\t}\n\t\t\tif (imageField.url) {\n\t\t\t\treturn { uri: imageField.url, url: imageField.url, ...imageField };\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t};\n\n\t/**\n\t * Open image popup with all images\n\t */\n\topenImagePopup = (imageIndex = 0) => {\n\t\tconst { allImages } = this.state;\n\t\tif (allImages.length > 0) {\n\t\t\tthis.setState({\n\t\t\t\tshowImagePopup: true,\n\t\t\t\tselectedImageIndex: imageIndex,\n\t\t\t});\n\t\t}\n\t};\n\n\t/**\n\t * Close image popup\n\t */\n\tcloseImagePopup = () => {\n\t\tthis.setState({\n\t\t\tshowImagePopup: false,\n\t\t\tselectedImageIndex: 0,\n\t\t});\n\t};\n\n\t/**\n\t * Process fields: filter out mandatory fields and sort by order\n\t */\n\tprocessFields() {\n\t\tconst { listing, featureDefinition } = this.props;\n\t\tif (!listing || !listing.fields || !featureDefinition) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst fieldDefinitions = featureDefinition.fields || [];\n\t\tconst excludedFieldIds = new Set([\n\t\t\tvalues.mandatoryFields.title,\n\t\t\tvalues.mandatoryFields.featureImage,\n\t\t]);\n\n\t\t// Filter and map fields with their definitions\n\t\tconst filteredFields = Object.keys(listing.fields)\n\t\t\t.filter((fieldId) => {\n\t\t\t\tif (!fieldId || excludedFieldIds.has(fieldId)) return false;\n\t\t\t\tif (listing.fields[fieldId] == null) return false;\n\n\t\t\t\t// Only include fields that have definitions\n\t\t\t\tconst hasDefinition = fieldDefinitions.some((f) => f.id === fieldId);\n\t\t\t\tif (!hasDefinition) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t})\n\t\t\t.map((fieldId) => {\n\t\t\t\tconst fieldDefinition = fieldDefinitions.find(\n\t\t\t\t\t(fieldDef) => fieldDef.id === fieldId,\n\t\t\t\t);\n\t\t\t\treturn {\n\t\t\t\t\tfieldId,\n\t\t\t\t\tfieldValue: listing.fields[fieldId],\n\t\t\t\t\tfieldDefinition,\n\t\t\t\t\tfieldType: fieldDefinition?.type || FIELD_TYPES.TEXT,\n\t\t\t\t};\n\t\t\t});\n\n\t\t// Sort by order property if available\n\t\treturn _.sortBy(\n\t\t\tfilteredFields,\n\t\t\t(field) => field.fieldDefinition?.order || 999,\n\t\t);\n\t}\n\n\t/**\n\t * Handle link opening for various field types\n\t */\n\thandleLinkPress = (url) => {\n\t\tif (url) {\n\t\t\tLinking.openURL(url).catch((err) => {\n\t\t\t\t// Silently handle URL open errors\n\t\t\t});\n\t\t}\n\t};\n\n\thandleFilePress = (file) => {\n\t\tif (file?.url) {\n\t\t\tLinking.openURL(file.url).catch((err) => {\n\t\t\t\t// Silently handle URL open errors\n\t\t\t});\n\t\t}\n\t};\n\n\t/**\n\t * Render individual field based on its type\n\t */\n\trenderField(fieldDef, fieldValue) {\n\t\tconst { colourBrandingMain } = this.props;\n\n\t\t// Defensive: ensure fieldDef is always an object\n\t\tconst safeFieldDef = fieldDef || {};\n\t\tconst type = safeFieldDef.type || FIELD_TYPES.TEXT;\n\t\tconst label = safeFieldDef.label || safeFieldDef.id || \"Unknown Field\";\n\n\t\tswitch (type) {\n\t\t\tcase FIELD_TYPES.CTA: {\n\t\t\t\tconst btnLabel = fieldValue?.label || label;\n\t\t\t\tconst btnUrl = fieldValue?.url;\n\t\t\t\treturn (\n\t\t\t\t\t<View style={styles.ctaContainer}>\n\t\t\t\t\t\t<InlineButton\n\t\t\t\t\t\t\tlarge\n\t\t\t\t\t\t\tcolor={colourBrandingMain}\n\t\t\t\t\t\t\tonPress={() => this.handleLinkPress(btnUrl)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{btnLabel}\n\t\t\t\t\t\t</InlineButton>\n\t\t\t\t\t</View>\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tcase FIELD_TYPES.EMAIL:\n\t\t\t\treturn (\n\t\t\t\t\t<TouchableOpacity\n\t\t\t\t\t\tstyle={styles.linkContainer}\n\t\t\t\t\t\tonPress={() => this.handleLinkPress(`mailto:${fieldValue}`)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\ttype=\"font-awesome\"\n\t\t\t\t\t\t\tname=\"envelope\"\n\t\t\t\t\t\t\tsize={16}\n\t\t\t\t\t\t\tcolor={colourBrandingMain}\n\t\t\t\t\t\t\tstyle={styles.fieldIcon}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Text style={[styles.linkText, { color: colourBrandingMain }]}>\n\t\t\t\t\t\t\t{fieldValue}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</TouchableOpacity>\n\t\t\t\t);\n\n\t\t\tcase FIELD_TYPES.DATE:\n\t\t\t\treturn (\n\t\t\t\t\t<View style={styles.dateContainer}>\n\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\ttype=\"font-awesome\"\n\t\t\t\t\t\t\tname=\"calendar\"\n\t\t\t\t\t\t\tsize={16}\n\t\t\t\t\t\t\tcolor={TEXT_DARK}\n\t\t\t\t\t\t\tstyle={styles.fieldIcon}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Text style={styles.bodyText}>{fieldValue}</Text>\n\t\t\t\t\t</View>\n\t\t\t\t);\n\n\t\t\tcase FIELD_TYPES.FILE: {\n\t\t\t\t// Handle both single file and multiple files (array)\n\t\t\t\tconst files = Array.isArray(fieldValue) ? fieldValue : [fieldValue];\n\t\t\t\treturn (\n\t\t\t\t\t<View style={styles.filesContainer}>\n\t\t\t\t\t\t<Text style={styles.sectionTitle}>{values.labels.attachments}</Text>\n\t\t\t\t\t\t{files.map((file, index) => {\n\t\t\t\t\t\t\t// Skip null/undefined files\n\t\t\t\t\t\t\tif (!file) return null;\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<FileDownload\n\t\t\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\t\t\tfile={file}\n\t\t\t\t\t\t\t\t\tonPress={this.handleFilePress}\n\t\t\t\t\t\t\t\t\tcolor={this.props.colourBrandingMain}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</View>\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tcase FIELD_TYPES.DESCRIPTION:\n\t\t\t\treturn <Text style={styles.descriptionText}>{fieldValue}</Text>;\n\n\t\t\tcase FIELD_TYPES.IMAGE: {\n\t\t\t\t// Render secondary images inline with click handler\n\t\t\t\tconst imgUri =\n\t\t\t\t\tfieldValue?.url ||\n\t\t\t\t\tfieldValue?.uri ||\n\t\t\t\t\t(typeof fieldValue === \"string\" ? fieldValue : null);\n\t\t\t\tif (!imgUri) return null;\n\n\t\t\t\t// Find this image's index for popup\n\t\t\t\tconst { allImages } = this.state;\n\t\t\t\tconst imageIndex = allImages.findIndex(\n\t\t\t\t\t(img) => img.uri === imgUri || img.url === imgUri,\n\t\t\t\t);\n\n\t\t\t\tconst caption = fieldValue?.caption;\n\n\t\t\t\treturn (\n\t\t\t\t\t<TouchableOpacity\n\t\t\t\t\t\tonPress={() => this.openImagePopup(imageIndex)}\n\t\t\t\t\t\tactiveOpacity={0.8}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Image\n\t\t\t\t\t\t\tsource={{ uri: imgUri }}\n\t\t\t\t\t\t\tstyle={styles.inlineImage}\n\t\t\t\t\t\t\tresizeMode=\"cover\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{caption && <Text style={styles.imageCaption}>{caption}</Text>}\n\t\t\t\t\t</TouchableOpacity>\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tcase FIELD_TYPES.GALLERY: {\n\t\t\t\t// Handle Gallery Fields (arrays of images)\n\t\t\t\tif (!Array.isArray(fieldValue)) return null;\n\n\t\t\t\treturn (\n\t\t\t\t\t<View style={{ marginVertical: 16 }}>\n\t\t\t\t\t\t<View\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tflexDirection: \"row\",\n\t\t\t\t\t\t\t\tflexWrap: \"wrap\",\n\t\t\t\t\t\t\t\tmarginHorizontal: -4,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{fieldValue.map((imgItem, index) => {\n\t\t\t\t\t\t\t\tconst imgUri =\n\t\t\t\t\t\t\t\t\timgItem?.url ||\n\t\t\t\t\t\t\t\t\timgItem?.uri ||\n\t\t\t\t\t\t\t\t\t(typeof imgItem === \"string\" ? imgItem : null);\n\t\t\t\t\t\t\t\tif (!imgUri) return null;\n\n\t\t\t\t\t\t\t\t// Find global index for the popup\n\t\t\t\t\t\t\t\tconst { allImages } = this.state;\n\t\t\t\t\t\t\t\tconst globalIndex = allImages.findIndex(\n\t\t\t\t\t\t\t\t\t(img) => img.uri === imgUri || img.url === imgUri,\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<TouchableOpacity\n\t\t\t\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\t\t\t\tonPress={() =>\n\t\t\t\t\t\t\t\t\t\t\tthis.openImagePopup(globalIndex !== -1 ? globalIndex : 0)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tactiveOpacity={0.8}\n\t\t\t\t\t\t\t\t\t\tstyle={{ width: \"50%\", padding: 4 }} // 2 column grid\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Image\n\t\t\t\t\t\t\t\t\t\t\tsource={{ uri: imgUri }}\n\t\t\t\t\t\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\t\t\t\t\t\tstyles.inlineImage,\n\t\t\t\t\t\t\t\t\t\t\t\t{ height: 150, marginVertical: 0 },\n\t\t\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t\t\t\tresizeMode=\"cover\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</TouchableOpacity>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</View>\n\t\t\t\t\t</View>\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tcase FIELD_TYPES.TITLE:\n\t\t\t\treturn <Text style={styles.titleText}>{fieldValue}</Text>;\n\n\t\t\tcase FIELD_TYPES.NUMBER:\n\t\t\t\treturn <Text style={styles.numberText}>{fieldValue}</Text>;\n\n\t\t\tdefault:\n\t\t\t\t// Default text fallback\n\t\t\t\treturn (\n\t\t\t\t\t<Text style={styles.bodyText}>\n\t\t\t\t\t\t{typeof fieldValue === \"object\"\n\t\t\t\t\t\t\t? JSON.stringify(fieldValue)\n\t\t\t\t\t\t\t: fieldValue}\n\t\t\t\t\t</Text>\n\t\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Render all fields with proper spacing and structure\n\t */\n\trenderFields() {\n\t\tconst processedFields = this.processFields();\n\n\t\treturn processedFields.map((field, _index) => {\n\t\t\treturn (\n\t\t\t\t<View key={field.fieldId} style={styles.fieldContainer}>\n\t\t\t\t\t{field.fieldType !== FIELD_TYPES.CTA &&\n\t\t\t\t\t\tfield.fieldType !== FIELD_TYPES.IMAGE &&\n\t\t\t\t\t\tfield.fieldDefinition?.label && (\n\t\t\t\t\t\t\t<Text style={styles.fieldLabel}>\n\t\t\t\t\t\t\t\t{field.fieldDefinition?.label}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t{this.renderField(field.fieldDefinition, field.fieldValue)}\n\t\t\t\t</View>\n\t\t\t);\n\t\t});\n\t}\n\n\tgetImageSource() {\n\t\tconst { listing } = this.props;\n\t\tif (!listing || !listing.fields) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst imageField = listing.fields[values.mandatoryFields.featureImage];\n\t\tif (!imageField) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Parse the image field value\n\t\tif (typeof imageField === \"string\") {\n\t\t\treturn imageField;\n\t\t}\n\n\t\treturn imageField?.uri || imageField?.url || null;\n\t}\n\n\tgetTitle() {\n\t\tconst { listing } = this.props;\n\t\tif (!listing || !listing.fields) {\n\t\t\treturn values.labels.defaultTitle;\n\t\t}\n\n\t\treturn (\n\t\t\tlisting.fields[values.mandatoryFields.title] || values.labels.defaultTitle\n\t\t);\n\t}\n\n\trender() {\n\t\tconst { listing } = this.props;\n\t\tconst imageSource = this.getImageSource();\n\t\tconst title = this.getTitle();\n\n\t\tif (!listing || !listing.fields) {\n\t\t\treturn (\n\t\t\t\t<View style={styles.centerContainer}>\n\t\t\t\t\t<Text style={styles.errorText}>Item not found</Text>\n\t\t\t\t</View>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<KeyboardAvoidingView\n\t\t\t\tbehavior={Platform.OS === \"ios\" && \"padding\"}\n\t\t\t\tstyle={{\n\t\t\t\t\tposition: \"relative\",\n\t\t\t\t\tflex: 1,\n\t\t\t\t\tbackgroundColor: Colours.BACKGROUND_WHITE || \"#fff\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<View style={styles.backButton}>\n\t\t\t\t\t<View style={styles.headerContent}>\n\t\t\t\t\t\t<Components.BackButton\n\t\t\t\t\t\t\tonPress={this.onPressBack}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tmarginLeft: 16,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</View>\n\t\t\t\t</View>\n\n\t\t\t\t<ScrollView\n\t\t\t\t\tstyle={{ backgroundColor: Colours.BACKGROUND_WHITE || \"#fff\" }}\n\t\t\t\t\tkeyboardShouldPersistTaps=\"always\"\n\t\t\t\t\tref={(ref) => {\n\t\t\t\t\t\tthis.scrollView = ref;\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<View style={[styles.mainHeader]}>\n\t\t\t\t\t\t{imageSource ? (\n\t\t\t\t\t\t\t<TouchableOpacity\n\t\t\t\t\t\t\t\tonPress={() => this.openImagePopup(0)}\n\t\t\t\t\t\t\t\tactiveOpacity={0.9}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Components.AutoOffsetImage\n\t\t\t\t\t\t\t\t\turi={imageSource}\n\t\t\t\t\t\t\t\t\theight={CARD_IMAGE_HEIGHT}\n\t\t\t\t\t\t\t\t\twidth={SCREEN_WIDTH}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</TouchableOpacity>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<View\n\t\t\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\t\t\tstyles.grayPlaceholder,\n\t\t\t\t\t\t\t\t\t{ height: CARD_IMAGE_HEIGHT, width: SCREEN_WIDTH },\n\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<LinearGradient\n\t\t\t\t\t\t\tstyle={styles.gradientOverlay}\n\t\t\t\t\t\t\tcolors={[\"rgba(0,0,0,0.7)\", COLOUR_TRANSPARENT]}\n\t\t\t\t\t\t\tstart={{ x: 0, y: 0 }}\n\t\t\t\t\t\t\tend={{ x: 0, y: 1 }}\n\t\t\t\t\t\t\tlocations={[0, 0.5]}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</View>\n\t\t\t\t\t<View style={{ paddingHorizontal: 16 }}>\n\t\t\t\t\t\t<View style={styles.titleContainer}>\n\t\t\t\t\t\t\t<Text style={styles.eventTitle}>{title}</Text>\n\t\t\t\t\t\t</View>\n\t\t\t\t\t</View>\n\t\t\t\t\t<View style={{ minHeight: SCREEN_HEIGHT - CARD_IMAGE_HEIGHT - 56 }}>\n\t\t\t\t\t\t{this.renderFields()}\n\t\t\t\t\t</View>\n\t\t\t\t</ScrollView>\n\n\t\t\t\t{/* Image Popup */}\n\t\t\t\t{this.state.showImagePopup && (\n\t\t\t\t\t<Components.ImagePopup\n\t\t\t\t\t\tvisible={this.state.showImagePopup}\n\t\t\t\t\t\timages={this.state.allImages}\n\t\t\t\t\t\tindex={this.state.selectedImageIndex}\n\t\t\t\t\t\tonClose={this.closeImagePopup}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</KeyboardAvoidingView>\n\t\t);\n\t}\n}\n\nconst styles = StyleSheet.create({\n\tbackButton: {\n\t\tposition: \"absolute\",\n\t\tleft: 0,\n\t\ttop: 0,\n\t\tzIndex: 10,\n\t\televation: 10,\n\t\theight: StatusBarHeight(70),\n\t},\n\theaderContent: {\n\t\talignSelf: \"stretch\",\n\t\tflexDirection: \"row\",\n\t\tflex: 1,\n\t\tpaddingTop: StatusBarHeight(12),\n\t},\n\timage: {\n\t\tbackgroundColor: Colours.BACKGROUND_WHITE || \"#fff\",\n\t\tposition: \"relative\",\n\t\twidth: undefined,\n\t\theight: undefined,\n\t\tflex: 1,\n\t},\n\tmainHeader: {\n\t\tposition: \"relative\",\n\t\theight: CARD_IMAGE_HEIGHT,\n\t\twidth: SCREEN_WIDTH,\n\t},\n\n\tgradientOverlay: {\n\t\tflex: 1,\n\t},\n\n\t// Field container and spacing\n\tfieldContainer: {\n\t\tpaddingHorizontal: 16,\n\t\tmarginVertical: 12,\n\t},\n\n\t// Field labels/captions\n\tfieldLabel: {\n\t\tfontFamily: \"sf-regular\",\n\t\tfontSize: 11,\n\t\tcolor: TEXT_MID,\n\t\tmarginBottom: 6,\n\t\ttextTransform: \"uppercase\",\n\t\tletterSpacing: 1.2,\n\t\talignSelf: \"center\",\n\t\ttextAlign: \"center\",\n\t\tpaddingHorizontal: 8,\n\t\tpaddingVertical: 4,\n\t\tbackgroundColor: \"rgba(0,0,0,0.03)\",\n\t\tborderRadius: 12,\n\t\tmaxWidth: \"80%\",\n\t},\n\n\t// Field type styles\n\tbodyText: {\n\t\tfontFamily: \"sf-regular\",\n\t\tfontSize: 16,\n\t\tcolor: TEXT_DARK,\n\t\tlineHeight: 22,\n\t},\n\ttitleText: {\n\t\tfontFamily: \"sf-semibold\",\n\t\tfontSize: 16,\n\t\tfontWeight: \"600\",\n\t\tcolor: TEXT_DARK,\n\t},\n\tdescriptionText: {\n\t\tfontFamily: \"sf-regular\",\n\t\tfontSize: 16,\n\t\tcolor: TEXT_DARK,\n\t\tlineHeight: 24,\n\t},\n\tnumberText: {\n\t\tfontFamily: \"sf-medium\",\n\t\tfontSize: 16,\n\t\tfontWeight: \"500\",\n\t\tcolor: TEXT_DARK,\n\t},\n\n\t// Link styles\n\tlinkContainer: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tpaddingVertical: 4,\n\t},\n\tlinkText: {\n\t\tfontFamily: \"sf-medium\",\n\t\tfontSize: 16,\n\t\ttextDecorationLine: \"underline\",\n\t},\n\n\t// Date styles\n\tdateContainer: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tpaddingVertical: 4,\n\t},\n\n\t// Image styles\n\tinlineImage: {\n\t\twidth: \"100%\",\n\t\theight: 200,\n\t\tborderRadius: 8,\n\t\tmarginVertical: 8,\n\t},\n\timageCaption: {\n\t\tfontFamily: \"sf-italic\",\n\t\tfontSize: 14,\n\t\tfontStyle: \"italic\",\n\t\tcolor: TEXT_MID,\n\t\tmarginTop: 4,\n\t\ttextAlign: \"center\",\n\t},\n\n\t// CTA styles\n\tctaContainer: {\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tpaddingVertical: 8,\n\t},\n\n\t// Section title styles\n\tsectionTitle: {\n\t\tfontFamily: \"sf-bold\",\n\t\tfontSize: 14,\n\t\tfontWeight: \"700\",\n\t\tcolor: TEXT_DARK,\n\t\tmarginBottom: SPACING.SM,\n\t},\n\n\t// Icon styles\n\tfieldIcon: {\n\t\tmarginRight: 8,\n\t},\n\n\t// Legacy styles (kept for compatibility)\n\tsection: {\n\t\tpaddingVertical: 16,\n\t},\n\tdivider: {\n\t\theight: 1,\n\t\tbackgroundColor: LINEGREY,\n\t\tmarginVertical: 8,\n\t\tmarginHorizontal: 16,\n\t},\n\tfacilityDetailTitle: {\n\t\tfontFamily: \"sf-bold\",\n\t\tcolor: TEXT_DARK,\n\t\tfontSize: 14,\n\t},\n\tfacilityDetailContent: {\n\t\tfontFamily: \"sf-regular\",\n\t\tcolor: TEXT_DARK,\n\t\tfontSize: 16,\n\t\tlineHeight: 22,\n\t},\n\tfacilityDetailsContainer: {\n\t\tflex: 1,\n\t},\n\tfacilityDetailsTextContainer: {\n\t\tflex: 1,\n\t\tjustifyContent: \"center\",\n\t},\n\tfacilityDetailContainer: {\n\t\tmarginTop: 16,\n\t\tflexDirection: \"row\",\n\t},\n\tfacilityDetailTitleContainer: {\n\t\twidth: 100,\n\t\tmarginRight: 10,\n\t},\n\ttitleContainer: {\n\t\tpaddingVertical: 16,\n\t\tpaddingTop: 20,\n\t},\n\teventTitle: {\n\t\tfontFamily: \"sf-bold\",\n\t\tfontSize: 24,\n\t\tlineHeight: 32,\n\t\tcolor: TEXT_DARK,\n\t\tbackgroundColor: \"transparent\",\n\t\tflex: 1,\n\t},\n\ttextLink: {\n\t\tfontFamily: \"sf-medium\",\n\t\tfontSize: 16,\n\t\tlineHeight: 22,\n\t},\n\tgrayPlaceholder: {\n\t\tbackgroundColor: LINEGREY,\n\t},\n\tcenterContainer: {\n\t\tflex: 1,\n\t\tjustifyContent: \"center\",\n\t\talignItems: \"center\",\n\t\tpaddingHorizontal: 20,\n\t},\n\terrorText: {\n\t\tfontSize: 16,\n\t\tcolor: TEXT_MID,\n\t\ttextAlign: \"center\",\n\t},\n\tfilesContainer: {\n\t\tmarginVertical: 8,\n\t},\n});\n\nconst mapStateToProps = (state, ownProps) => {\n\treturn {\n\t\tcolourBrandingMain: Colours.getMainBrandingColourFromState(state),\n\t\tcolourBrandingHeader: Colours.getMainBrandingColourFromState(state),\n\t\tfeatureDefinition: selectFeatureDefinition(state),\n\t\tuser: state.user,\n\t};\n};\n\nexport default connect(mapStateToProps, null, null, { forwardRef: true })(\n\tFeatureDetailScreen,\n);\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -8,7 +8,7 @@ import _ from "lodash";
|
|
|
8
8
|
import { Services } from "../feature.config";
|
|
9
9
|
import { Components } from "../core.config";
|
|
10
10
|
import { values } from "../values.config";
|
|
11
|
-
import { selectActiveFeatureDefinitions } from "../
|
|
11
|
+
import { selectActiveFeatureDefinitions } from "../utils/selectors";
|
|
12
12
|
import { getTargetFeatureDefinition } from "../utils/featureSelectors";
|
|
13
13
|
import { SPACING } from "../js/spacing";
|
|
14
14
|
import { getMainBrandingColourFromState } from "../js";
|
|
@@ -27,7 +27,7 @@ class WidgetGrid extends Component {
|
|
|
27
27
|
} = await import("../actions/featureBuilderActions");
|
|
28
28
|
await initializeFeatureBuilder()(this.props.dispatch, () => this.props.getState);
|
|
29
29
|
} catch (error) {
|
|
30
|
-
|
|
30
|
+
console.error('FeatureBuilder WidgetGrid - Error in refresh:', error);
|
|
31
31
|
} finally {
|
|
32
32
|
this.onLoadingChanged(false);
|
|
33
33
|
}
|
|
@@ -58,6 +58,9 @@ class WidgetGrid extends Component {
|
|
|
58
58
|
this.refresh();
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
|
+
componentWillUnmount() {
|
|
62
|
+
// Component cleanup
|
|
63
|
+
}
|
|
61
64
|
render() {
|
|
62
65
|
const {
|
|
63
66
|
colourBrandingMain,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Component","Text","View","StyleSheet","TouchableOpacity","Dimensions","connect","_","Services","Components","values","selectActiveFeatureDefinitions","getTargetFeatureDefinition","SPACING","getMainBrandingColourFromState","WidgetGrid","constructor","props","_defineProperty","onLoadingChanged","initializeFeatureBuilder","dispatch","getState","error","loading","callback","setState","state","navigation","navigate","screens","featureList","options","componentDidMount","refresh","componentDidUpdate","prevProps","dataUpdated","render","colourBrandingMain","featureDefinitions","targetFeatureDefinition","icon","title","displayName","featureName","isLoading","featureCount","length","createElement","onPress","style","styles","container","button","backgroundColor","colors","defaultBrandMain","buttonTitleSection","buttonTitle","buttonTitleLarge","numberOfLines","subtitleText","iconContainer","iconText","mapStateToProps","_state$strings","user","notifications","site","notificationKey","strings","config","create","marginHorizontal","SM","marginVertical","borderRadius","padding","MD","minHeight","justifyContent","alignItems","flexDirection","flex","marginRight","color","fontSize","fontWeight","marginTop","XS","width","height","forwardRef"],"sources":["WidgetGrid.js"],"sourcesContent":["import React, { Component } from \"react\";\nimport {\n\tText,\n\tView,\n\tStyleSheet,\n\tTouchableOpacity,\n\tDimensions,\n} from \"react-native\";\nimport { connect } from \"react-redux\";\nimport _ from \"lodash\";\nimport { Services } from \"../feature.config\";\nimport { Components } from \"../core.config\";\nimport { values } from \"../values.config\";\nimport { selectActiveFeatureDefinitions } from \"../reducers/featureBuilderReducer\";\nimport { getTargetFeatureDefinition } from \"../utils/featureSelectors\";\nimport { SPACING } from \"../js/spacing\";\nimport { getMainBrandingColourFromState } from \"../js\";\n// Import SVGIcon directly from main app since extension has import issues\n// Using a different approach - we'll use a simple text representation for now\n// import { SVGIcon } from '../../../../../src/components/common';\n\nclass WidgetGrid extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = { loading: false };\n\t}\n\n\tcomponentDidMount() {\n\t\tthis.refresh();\n\t}\n\n\tcomponentDidUpdate(prevProps) {\n\t\tif (!prevProps.dataUpdated && this.props.dataUpdated) {\n\t\t\tthis.refresh();\n\t\t}\n\t}\n\n\trefresh = () => {\n\t\tthis.onLoadingChanged(true, async () => {\n\t\t\ttry {\n\t\t\t\tconst { initializeFeatureBuilder } = await import(\n\t\t\t\t\t\"../actions/featureBuilderActions\"\n\t\t\t\t);\n\t\t\t\tawait initializeFeatureBuilder()(\n\t\t\t\t\tthis.props.dispatch,\n\t\t\t\t\t() => this.props.getState,\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\t// Silently handle refresh errors\n\t\t\t} finally {\n\t\t\t\tthis.onLoadingChanged(false);\n\t\t\t}\n\t\t});\n\t};\n\n\tonLoadingChanged = (loading, callback) => {\n\t\tthis.setState({ loading }, () => {\n\t\t\tif (this.props.onLoadingChanged)\n\t\t\t\tthis.props.onLoadingChanged(this.state.loading);\n\t\t\tif (callback) callback();\n\t\t});\n\t};\n\n\tonPress = () => {\n\t\tServices.navigation.navigate(values.screens.featureList, {\n\t\t\toptions: this.props.options,\n\t\t});\n\t};\n\n\trender() {\n\t\tconst { colourBrandingMain, featureDefinitions, targetFeatureDefinition } =\n\t\t\tthis.props;\n\n\t\t// Always show the card, even when loading or no features, with a loading state\n\t\tconst icon = \"settings\"; // Use a valid icon instead of 'cog'\n\t\t// Use the feature definition title if available, otherwise fall back to default\n\t\tconst title =\n\t\t\ttargetFeatureDefinition?.title ||\n\t\t\ttargetFeatureDefinition?.displayName ||\n\t\t\tvalues.featureName ||\n\t\t\t\"Feature Builder\";\n\n\t\tconst isLoading = this.state.loading;\n\t\tconst featureCount = featureDefinitions?.length || 0;\n\n\t\treturn (\n\t\t\t<TouchableOpacity onPress={this.onPress} style={[styles.container]}>\n\t\t\t\t<View\n\t\t\t\t\tstyle={[\n\t\t\t\t\t\tstyles.button,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tbackgroundColor:\n\t\t\t\t\t\t\t\tcolourBrandingMain || values.colors.defaultBrandMain,\n\t\t\t\t\t\t},\n\t\t\t\t\t]}\n\t\t\t\t>\n\t\t\t\t\t<View style={styles.buttonTitleSection}>\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tstyle={[styles.buttonTitle, styles.buttonTitleLarge]}\n\t\t\t\t\t\t\tnumberOfLines={2}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{isLoading ? \"Loading...\" : title}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t<Text style={styles.subtitleText}>\n\t\t\t\t\t\t\t{isLoading\n\t\t\t\t\t\t\t\t? \"Please wait...\"\n\t\t\t\t\t\t\t\t: `${featureCount} Feature${featureCount !== 1 ? \"s\" : \"\"} Available`}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</View>\n\t\t\t\t\t<View style={styles.iconContainer}>\n\t\t\t\t\t\t<Text style={styles.iconText}>⚙</Text>\n\t\t\t\t\t</View>\n\t\t\t\t</View>\n\t\t\t</TouchableOpacity>\n\t\t);\n\t}\n}\n\nconst mapStateToProps = (state) => {\n\tconst { user, notifications } = state;\n\n\tconst targetFeatureDefinition = getTargetFeatureDefinition(state);\n\n\treturn {\n\t\tcolourBrandingMain: getMainBrandingColourFromState(state),\n\t\tfeatureDefinitions: selectActiveFeatureDefinitions(state),\n\t\ttargetFeatureDefinition,\n\t\tsite: user.site,\n\t\tdataUpdated: notifications.dataUpdated[values.notificationKey],\n\t\tstrings: state.strings?.config || {},\n\t};\n};\n\nconst styles = StyleSheet.create({\n\tcontainer: {\n\t\tmarginHorizontal: SPACING.SM,\n\t\tmarginVertical: SPACING.SM,\n\t},\n\tbutton: {\n\t\tborderRadius: SPACING.SM,\n\t\tpadding: SPACING.MD,\n\t\tminHeight: 120,\n\t\tjustifyContent: \"space-between\",\n\t\talignItems: \"flex-start\",\n\t\tflexDirection: \"row\",\n\t},\n\tbuttonTitleSection: {\n\t\tflex: 1,\n\t\tmarginRight: SPACING.MD,\n\t\tjustifyContent: \"center\",\n\t},\n\tbuttonTitle: {\n\t\tcolor: \"#fff\",\n\t\tfontSize: 16,\n\t\tfontWeight: \"600\",\n\t},\n\tbuttonTitleLarge: {\n\t\tfontSize: 18,\n\t},\n\tsubtitleText: {\n\t\tcolor: \"rgba(255, 255, 255, 0.8)\",\n\t\tfontSize: 12,\n\t\tmarginTop: SPACING.XS,\n\t},\n\ticonContainer: {\n\t\twidth: 50,\n\t\theight: 50,\n\t\tborderRadius: 25,\n\t\tbackgroundColor: \"rgba(255, 255, 255, 0.2)\",\n\t\tjustifyContent: \"center\",\n\t\talignItems: \"center\",\n\t},\n\ticonText: {\n\t\tfontSize: 24,\n\t\tcolor: \"#fff\",\n\t},\n});\n\nexport default connect(mapStateToProps, null, null, { forwardRef: true })(\n\tWidgetGrid,\n);\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["React","Component","Text","View","StyleSheet","TouchableOpacity","Dimensions","connect","_","Services","Components","values","selectActiveFeatureDefinitions","getTargetFeatureDefinition","SPACING","getMainBrandingColourFromState","WidgetGrid","constructor","props","_defineProperty","onLoadingChanged","initializeFeatureBuilder","dispatch","getState","error","console","loading","callback","setState","state","navigation","navigate","screens","featureList","options","componentDidMount","refresh","componentDidUpdate","prevProps","dataUpdated","componentWillUnmount","render","colourBrandingMain","featureDefinitions","targetFeatureDefinition","icon","title","displayName","featureName","isLoading","featureCount","length","createElement","onPress","style","styles","container","button","backgroundColor","colors","defaultBrandMain","buttonTitleSection","buttonTitle","buttonTitleLarge","numberOfLines","subtitleText","iconContainer","iconText","mapStateToProps","_state$strings","user","notifications","site","notificationKey","strings","config","create","marginHorizontal","SM","marginVertical","borderRadius","padding","MD","minHeight","justifyContent","alignItems","flexDirection","flex","marginRight","color","fontSize","fontWeight","marginTop","XS","width","height","forwardRef"],"sources":["WidgetGrid.js"],"sourcesContent":["import React, { Component } from \"react\";\nimport {\n\tText,\n\tView,\n\tStyleSheet,\n\tTouchableOpacity,\n\tDimensions,\n} from \"react-native\";\nimport { connect } from \"react-redux\";\nimport _ from \"lodash\";\nimport { Services } from \"../feature.config\";\nimport { Components } from \"../core.config\";\nimport { values } from \"../values.config\";\nimport { selectActiveFeatureDefinitions } from \"../utils/selectors\";\nimport { getTargetFeatureDefinition } from \"../utils/featureSelectors\";\nimport { SPACING } from \"../js/spacing\";\nimport { getMainBrandingColourFromState } from \"../js\";\n// Import SVGIcon directly from main app since extension has import issues\n// Using a different approach - we'll use a simple text representation for now\n// import { SVGIcon } from '../../../../../src/components/common';\n\nclass WidgetGrid extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = { loading: false };\n\t}\n\n\tcomponentDidMount() {\n\t\tthis.refresh();\n\t}\n\n\tcomponentDidUpdate(prevProps) {\n\t\tif (!prevProps.dataUpdated && this.props.dataUpdated) {\n\t\t\tthis.refresh();\n\t\t}\n\t}\n\n\tcomponentWillUnmount() {\n\t\t// Component cleanup\n\t}\n\n\trefresh = () => {\n\t\tthis.onLoadingChanged(true, async () => {\n\t\t\ttry {\n\t\t\t\tconst { initializeFeatureBuilder } = await import(\n\t\t\t\t\t\"../actions/featureBuilderActions\"\n\t\t\t\t);\n\t\t\t\tawait initializeFeatureBuilder()(\n\t\t\t\t\tthis.props.dispatch,\n\t\t\t\t\t() => this.props.getState,\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('FeatureBuilder WidgetGrid - Error in refresh:', error);\n\t\t\t} finally {\n\t\t\t\tthis.onLoadingChanged(false);\n\t\t\t}\n\t\t});\n\t};\n\n\tonLoadingChanged = (loading, callback) => {\n\t\tthis.setState({ loading }, () => {\n\t\t\tif (this.props.onLoadingChanged)\n\t\t\t\tthis.props.onLoadingChanged(this.state.loading);\n\t\t\tif (callback) callback();\n\t\t});\n\t};\n\n\tonPress = () => {\n\t\tServices.navigation.navigate(values.screens.featureList, {\n\t\t\toptions: this.props.options,\n\t\t});\n\t};\n\n\trender() {\n\t\tconst { colourBrandingMain, featureDefinitions, targetFeatureDefinition } =\n\t\t\tthis.props;\n\n\t\t// Always show the card, even when loading or no features, with a loading state\n\t\tconst icon = \"settings\"; // Use a valid icon instead of 'cog'\n\t\t// Use the feature definition title if available, otherwise fall back to default\n\t\tconst title =\n\t\t\ttargetFeatureDefinition?.title ||\n\t\t\ttargetFeatureDefinition?.displayName ||\n\t\t\tvalues.featureName ||\n\t\t\t\"Feature Builder\";\n\n\t\tconst isLoading = this.state.loading;\n\t\tconst featureCount = featureDefinitions?.length || 0;\n\n\t\treturn (\n\t\t\t<TouchableOpacity onPress={this.onPress} style={[styles.container]}>\n\t\t\t\t<View\n\t\t\t\t\tstyle={[\n\t\t\t\t\t\tstyles.button,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tbackgroundColor:\n\t\t\t\t\t\t\t\tcolourBrandingMain || values.colors.defaultBrandMain,\n\t\t\t\t\t\t},\n\t\t\t\t\t]}\n\t\t\t\t>\n\t\t\t\t\t<View style={styles.buttonTitleSection}>\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tstyle={[styles.buttonTitle, styles.buttonTitleLarge]}\n\t\t\t\t\t\t\tnumberOfLines={2}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{isLoading ? \"Loading...\" : title}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t<Text style={styles.subtitleText}>\n\t\t\t\t\t\t\t{isLoading\n\t\t\t\t\t\t\t\t? \"Please wait...\"\n\t\t\t\t\t\t\t\t: `${featureCount} Feature${featureCount !== 1 ? \"s\" : \"\"} Available`}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</View>\n\t\t\t\t\t<View style={styles.iconContainer}>\n\t\t\t\t\t\t<Text style={styles.iconText}>⚙</Text>\n\t\t\t\t\t</View>\n\t\t\t\t</View>\n\t\t\t</TouchableOpacity>\n\t\t);\n\t}\n}\n\nconst mapStateToProps = (state) => {\n\tconst { user, notifications } = state;\n\n\tconst targetFeatureDefinition = getTargetFeatureDefinition(state);\n\n\treturn {\n\t\tcolourBrandingMain: getMainBrandingColourFromState(state),\n\t\tfeatureDefinitions: selectActiveFeatureDefinitions(state),\n\t\ttargetFeatureDefinition,\n\t\tsite: user.site,\n\t\tdataUpdated: notifications.dataUpdated[values.notificationKey],\n\t\tstrings: state.strings?.config || {},\n\t};\n};\n\nconst styles = StyleSheet.create({\n\tcontainer: {\n\t\tmarginHorizontal: SPACING.SM,\n\t\tmarginVertical: SPACING.SM,\n\t},\n\tbutton: {\n\t\tborderRadius: SPACING.SM,\n\t\tpadding: SPACING.MD,\n\t\tminHeight: 120,\n\t\tjustifyContent: \"space-between\",\n\t\talignItems: \"flex-start\",\n\t\tflexDirection: \"row\",\n\t},\n\tbuttonTitleSection: {\n\t\tflex: 1,\n\t\tmarginRight: SPACING.MD,\n\t\tjustifyContent: \"center\",\n\t},\n\tbuttonTitle: {\n\t\tcolor: \"#fff\",\n\t\tfontSize: 16,\n\t\tfontWeight: \"600\",\n\t},\n\tbuttonTitleLarge: {\n\t\tfontSize: 18,\n\t},\n\tsubtitleText: {\n\t\tcolor: \"rgba(255, 255, 255, 0.8)\",\n\t\tfontSize: 12,\n\t\tmarginTop: SPACING.XS,\n\t},\n\ticonContainer: {\n\t\twidth: 50,\n\t\theight: 50,\n\t\tborderRadius: 25,\n\t\tbackgroundColor: \"rgba(255, 255, 255, 0.2)\",\n\t\tjustifyContent: \"center\",\n\t\talignItems: \"center\",\n\t},\n\ticonText: {\n\t\tfontSize: 24,\n\t\tcolor: \"#fff\",\n\t},\n});\n\nexport default connect(mapStateToProps, null, null, { forwardRef: true })(\n\tWidgetGrid,\n);\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -9,7 +9,7 @@ import { Icon } from "react-native-elements";
|
|
|
9
9
|
import { Services } from "../feature.config";
|
|
10
10
|
import { Components, Colours } from "../core.config";
|
|
11
11
|
import { values } from "../values.config";
|
|
12
|
-
import { selectListings, selectFeatureDefinition } from "../
|
|
12
|
+
import { selectListings, selectFeatureDefinition } from "../utils/selectors";
|
|
13
13
|
import { SPACING } from "../js/spacing";
|
|
14
14
|
import { getMainBrandingColourFromState } from "../js";
|
|
15
15
|
import { getSummaryFieldValue } from "../js/helpers";
|