@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.
Files changed (55) hide show
  1. package/dist/module/actions/featureBuilderActions.js +6 -4
  2. package/dist/module/actions/featureBuilderActions.js.map +1 -1
  3. package/dist/module/actions/featureBuilderStringsActions.js +19 -34
  4. package/dist/module/actions/featureBuilderStringsActions.js.map +1 -1
  5. package/dist/module/components/FeatureDetailScreen.js +1 -1
  6. package/dist/module/components/FeatureDetailScreen.js.map +1 -1
  7. package/dist/module/components/WidgetGrid.js +5 -2
  8. package/dist/module/components/WidgetGrid.js.map +1 -1
  9. package/dist/module/components/WidgetLarge.js +1 -1
  10. package/dist/module/components/WidgetLarge.js.map +1 -1
  11. package/dist/module/components/WidgetSmall.js +1 -1
  12. package/dist/module/components/WidgetSmall.js.map +1 -1
  13. package/dist/module/components/common/index.js +1 -1
  14. package/dist/module/components/common/index.js.map +1 -1
  15. package/dist/module/feature.config.js +33 -24
  16. package/dist/module/feature.config.js.map +1 -1
  17. package/dist/module/index.js +11 -17
  18. package/dist/module/index.js.map +1 -1
  19. package/dist/module/reducers/featureBuilderReducer.js +0 -37
  20. package/dist/module/reducers/featureBuilderReducer.js.map +1 -1
  21. package/dist/module/utils/featureSelectors.js +1 -1
  22. package/dist/module/utils/featureSelectors.js.map +1 -1
  23. package/dist/module/utils/selectors.js +38 -0
  24. package/dist/module/utils/selectors.js.map +1 -0
  25. package/dist/module/values.config.a.js +2 -24
  26. package/dist/module/values.config.a.js.map +1 -1
  27. package/dist/module/values.config.b.js +2 -24
  28. package/dist/module/values.config.b.js.map +1 -1
  29. package/dist/module/values.config.c.js +2 -24
  30. package/dist/module/values.config.c.js.map +1 -1
  31. package/dist/module/values.config.d.js +2 -24
  32. package/dist/module/values.config.d.js.map +1 -1
  33. package/dist/module/values.config.js +16 -38
  34. package/dist/module/values.config.js.map +1 -1
  35. package/dist/module/webapi/featureBuilderAPI.js +3 -11
  36. package/dist/module/webapi/featureBuilderAPI.js.map +1 -1
  37. package/package.json +2 -2
  38. package/src/actions/featureBuilderActions.js +7 -4
  39. package/src/actions/featureBuilderStringsActions.js +13 -35
  40. package/src/components/FeatureDetailScreen.js +1 -1
  41. package/src/components/WidgetGrid.js +6 -2
  42. package/src/components/WidgetLarge.js +6 -8
  43. package/src/components/WidgetSmall.js +7 -11
  44. package/src/components/common/index.js +1 -1
  45. package/src/feature.config.js +35 -29
  46. package/src/index.js +11 -17
  47. package/src/reducers/featureBuilderReducer.js +0 -32
  48. package/src/utils/featureSelectors.js +1 -1
  49. package/src/utils/selectors.js +34 -0
  50. package/src/values.config.a.js +4 -35
  51. package/src/values.config.b.js +4 -35
  52. package/src/values.config.c.js +4 -35
  53. package/src/values.config.d.js +4 -35
  54. package/src/values.config.js +4 -35
  55. 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\tdispatch({\n\t\t\t\ttype: FeatureBuilderActionTypes.LOAD_SUCCESS,\n\t\t\t\tpayload: {\n\t\t\t\t\tfeature: flattenedFeature,\n\t\t\t\t\tlistings: listings,\n\t\t\t\t},\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\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;MACjD,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;MAEpE3B,QAAQ,CAAC;QACRE,IAAI,EAAER,yBAAyB,CAACG,YAAY;QAC5C+B,OAAO,EAAE;UACRC,OAAO,EAAEV,gBAAgB;UACzBK,QAAQ,EAAEA;QACX;MACD,CAAC,CAAC;;MAEF;MACAxB,QAAQ,CAACP,+CAA+C,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC,OAAOqC,KAAK,EAAE;MACf9B,QAAQ,CAAC;QACRE,IAAI,EAAER,yBAAyB,CAACI,OAAO;QACvC8B,OAAO,EAAEE,KAAK,CAACC,OAAO,IAAI;MAC3B,CAAC,CAAC;IACH;EACD,CAAC;AACF,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,wBAAwB,GAAGjC,iBAAiB;;AAEzD;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMkC,cAAc,GAAGlC,iBAAiB;;AAE/C;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMmC,0BAA0B,GAAGnC,iBAAiB","ignoreList":[]}
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 "../reducers/featureBuilderReducer";
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 => (dispatch, getState) => {
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: updatedStrings
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 => (dispatch, getState) => {
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: updatedStrings
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 => (dispatch, getState) => {
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: updatedStrings
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","getState","_getState$strings","currentStrings","strings","config","updatedStrings","featureTitles","featureKey","featureName","type","payload","updateFeatureBuilderStringFromDefinition","definition","capitalizedTitle","charAt","toUpperCase","slice","updateFeatureBuilderIcon","icon","_getState$strings2","featureIcons","updateFeatureBuilderIconFromDefinition","navigation","gridMenu","updateFeatureBuilderGridIcon","gridIcon","_getState$strings3","updateFeatureBuilderStringAndIconFromDefinition"],"sources":["featureBuilderStringsActions.js"],"sourcesContent":["import { selectFeatureDefinition } from \"../reducers/featureBuilderReducer\";\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, getState) => {\n\tconst currentStrings = getState().strings?.config || {};\n\n\tconst updatedStrings = {\n\t\t...currentStrings,\n\t\tfeatureTitles: {\n\t\t\t...currentStrings.featureTitles,\n\t\t\t[values.featureKey]: title || values.featureName,\n\t\t},\n\t};\n\n\tdispatch({\n\t\ttype: UPDATE_STRINGS,\n\t\tpayload: updatedStrings,\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, getState) => {\n\tconst currentStrings = getState().strings?.config || {};\n\tconst updatedStrings = {\n\t\t...currentStrings,\n\t\tfeatureIcons: {\n\t\t\t...currentStrings.featureIcons,\n\t\t\t[values.featureKey]: icon,\n\t\t},\n\t};\n\n\tdispatch({\n\t\ttype: UPDATE_STRINGS,\n\t\tpayload: updatedStrings,\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, getState) => {\n\t\tconst currentStrings = getState().strings?.config || {};\n\t\tconst updatedStrings = {\n\t\t\t...currentStrings,\n\t\t\tfeatureIcons: {\n\t\t\t\t...currentStrings.featureIcons,\n\t\t\t\t[values.featureKey]: gridIcon,\n\t\t\t},\n\t\t};\n\n\t\tdispatch({\n\t\t\ttype: UPDATE_STRINGS,\n\t\t\tpayload: updatedStrings,\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":[]}
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 "../reducers/featureBuilderReducer";
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 "../reducers/featureBuilderReducer";
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
- // Silently handle refresh errors
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":";;;AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAQ,OAAO;AACxC,SACCC,IAAI,EACJC,IAAI,EACJC,UAAU,EACVC,gBAAgB,EAChBC,UAAU,QACJ,cAAc;AACrB,SAASC,OAAO,QAAQ,aAAa;AACrC,OAAOC,CAAC,MAAM,QAAQ;AACtB,SAASC,QAAQ,QAAQ,mBAAmB;AAC5C,SAASC,UAAU,QAAQ,gBAAgB;AAC3C,SAASC,MAAM,QAAQ,kBAAkB;AACzC,SAASC,8BAA8B,QAAQ,mCAAmC;AAClF,SAASC,0BAA0B,QAAQ,2BAA2B;AACtE,SAASC,OAAO,QAAQ,eAAe;AACvC,SAASC,8BAA8B,QAAQ,OAAO;AACtD;AACA;AACA;;AAEA,MAAMC,UAAU,SAASf,SAAS,CAAC;EAClCgB,WAAWA,CAACC,KAAK,EAAE;IAClB,KAAK,CAACA,KAAK,CAAC;IAACC,eAAA,kBAcJ,MAAM;MACf,IAAI,CAACC,gBAAgB,CAAC,IAAI,EAAE,YAAY;QACvC,IAAI;UACH,MAAM;YAAEC;UAAyB,CAAC,GAAG,MAAM,MAAM,CAChD,kCACD,CAAC;UACD,MAAMA,wBAAwB,CAAC,CAAC,CAC/B,IAAI,CAACH,KAAK,CAACI,QAAQ,EACnB,MAAM,IAAI,CAACJ,KAAK,CAACK,QAClB,CAAC;QACF,CAAC,CAAC,OAAOC,KAAK,EAAE;UACf;QAAA,CACA,SAAS;UACT,IAAI,CAACJ,gBAAgB,CAAC,KAAK,CAAC;QAC7B;MACD,CAAC,CAAC;IACH,CAAC;IAAAD,eAAA,2BAEkB,CAACM,OAAO,EAAEC,QAAQ,KAAK;MACzC,IAAI,CAACC,QAAQ,CAAC;QAAEF;MAAQ,CAAC,EAAE,MAAM;QAChC,IAAI,IAAI,CAACP,KAAK,CAACE,gBAAgB,EAC9B,IAAI,CAACF,KAAK,CAACE,gBAAgB,CAAC,IAAI,CAACQ,KAAK,CAACH,OAAO,CAAC;QAChD,IAAIC,QAAQ,EAAEA,QAAQ,CAAC,CAAC;MACzB,CAAC,CAAC;IACH,CAAC;IAAAP,eAAA,kBAES,MAAM;MACfV,QAAQ,CAACoB,UAAU,CAACC,QAAQ,CAACnB,MAAM,CAACoB,OAAO,CAACC,WAAW,EAAE;QACxDC,OAAO,EAAE,IAAI,CAACf,KAAK,CAACe;MACrB,CAAC,CAAC;IACH,CAAC;IA3CA,IAAI,CAACL,KAAK,GAAG;MAAEH,OAAO,EAAE;IAAM,CAAC;EAChC;EAEAS,iBAAiBA,CAAA,EAAG;IACnB,IAAI,CAACC,OAAO,CAAC,CAAC;EACf;EAEAC,kBAAkBA,CAACC,SAAS,EAAE;IAC7B,IAAI,CAACA,SAAS,CAACC,WAAW,IAAI,IAAI,CAACpB,KAAK,CAACoB,WAAW,EAAE;MACrD,IAAI,CAACH,OAAO,CAAC,CAAC;IACf;EACD;EAkCAI,MAAMA,CAAA,EAAG;IACR,MAAM;MAAEC,kBAAkB;MAAEC,kBAAkB;MAAEC;IAAwB,CAAC,GACxE,IAAI,CAACxB,KAAK;;IAEX;IACA,MAAMyB,IAAI,GAAG,UAAU,CAAC,CAAC;IACzB;IACA,MAAMC,KAAK,GACV,CAAAF,uBAAuB,aAAvBA,uBAAuB,uBAAvBA,uBAAuB,CAAEE,KAAK,MAC9BF,uBAAuB,aAAvBA,uBAAuB,uBAAvBA,uBAAuB,CAAEG,WAAW,KACpClC,MAAM,CAACmC,WAAW,IAClB,iBAAiB;IAElB,MAAMC,SAAS,GAAG,IAAI,CAACnB,KAAK,CAACH,OAAO;IACpC,MAAMuB,YAAY,GAAG,CAAAP,kBAAkB,aAAlBA,kBAAkB,uBAAlBA,kBAAkB,CAAEQ,MAAM,KAAI,CAAC;IAEpD,oBACCjD,KAAA,CAAAkD,aAAA,CAAC7C,gBAAgB;MAAC8C,OAAO,EAAE,IAAI,CAACA,OAAQ;MAACC,KAAK,EAAE,CAACC,MAAM,CAACC,SAAS;IAAE,gBAClEtD,KAAA,CAAAkD,aAAA,CAAC/C,IAAI;MACJiD,KAAK,EAAE,CACNC,MAAM,CAACE,MAAM,EACb;QACCC,eAAe,EACdhB,kBAAkB,IAAI7B,MAAM,CAAC8C,MAAM,CAACC;MACtC,CAAC;IACA,gBAEF1D,KAAA,CAAAkD,aAAA,CAAC/C,IAAI;MAACiD,KAAK,EAAEC,MAAM,CAACM;IAAmB,gBACtC3D,KAAA,CAAAkD,aAAA,CAAChD,IAAI;MACJkD,KAAK,EAAE,CAACC,MAAM,CAACO,WAAW,EAAEP,MAAM,CAACQ,gBAAgB,CAAE;MACrDC,aAAa,EAAE;IAAE,GAEhBf,SAAS,GAAG,YAAY,GAAGH,KACvB,CAAC,eACP5C,KAAA,CAAAkD,aAAA,CAAChD,IAAI;MAACkD,KAAK,EAAEC,MAAM,CAACU;IAAa,GAC/BhB,SAAS,GACP,gBAAgB,GAChB,GAAGC,YAAY,WAAWA,YAAY,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,YACrD,CACD,CAAC,eACPhD,KAAA,CAAAkD,aAAA,CAAC/C,IAAI;MAACiD,KAAK,EAAEC,MAAM,CAACW;IAAc,gBACjChE,KAAA,CAAAkD,aAAA,CAAChD,IAAI;MAACkD,KAAK,EAAEC,MAAM,CAACY;IAAS,GAAC,QAAO,CAChC,CACD,CACW,CAAC;EAErB;AACD;AAEA,MAAMC,eAAe,GAAItC,KAAK,IAAK;EAAA,IAAAuC,cAAA;EAClC,MAAM;IAAEC,IAAI;IAAEC;EAAc,CAAC,GAAGzC,KAAK;EAErC,MAAMc,uBAAuB,GAAG7B,0BAA0B,CAACe,KAAK,CAAC;EAEjE,OAAO;IACNY,kBAAkB,EAAEzB,8BAA8B,CAACa,KAAK,CAAC;IACzDa,kBAAkB,EAAE7B,8BAA8B,CAACgB,KAAK,CAAC;IACzDc,uBAAuB;IACvB4B,IAAI,EAAEF,IAAI,CAACE,IAAI;IACfhC,WAAW,EAAE+B,aAAa,CAAC/B,WAAW,CAAC3B,MAAM,CAAC4D,eAAe,CAAC;IAC9DC,OAAO,EAAE,EAAAL,cAAA,GAAAvC,KAAK,CAAC4C,OAAO,cAAAL,cAAA,uBAAbA,cAAA,CAAeM,MAAM,KAAI,CAAC;EACpC,CAAC;AACF,CAAC;AAED,MAAMpB,MAAM,GAAGjD,UAAU,CAACsE,MAAM,CAAC;EAChCpB,SAAS,EAAE;IACVqB,gBAAgB,EAAE7D,OAAO,CAAC8D,EAAE;IAC5BC,cAAc,EAAE/D,OAAO,CAAC8D;EACzB,CAAC;EACDrB,MAAM,EAAE;IACPuB,YAAY,EAAEhE,OAAO,CAAC8D,EAAE;IACxBG,OAAO,EAAEjE,OAAO,CAACkE,EAAE;IACnBC,SAAS,EAAE,GAAG;IACdC,cAAc,EAAE,eAAe;IAC/BC,UAAU,EAAE,YAAY;IACxBC,aAAa,EAAE;EAChB,CAAC;EACDzB,kBAAkB,EAAE;IACnB0B,IAAI,EAAE,CAAC;IACPC,WAAW,EAAExE,OAAO,CAACkE,EAAE;IACvBE,cAAc,EAAE;EACjB,CAAC;EACDtB,WAAW,EAAE;IACZ2B,KAAK,EAAE,MAAM;IACbC,QAAQ,EAAE,EAAE;IACZC,UAAU,EAAE;EACb,CAAC;EACD5B,gBAAgB,EAAE;IACjB2B,QAAQ,EAAE;EACX,CAAC;EACDzB,YAAY,EAAE;IACbwB,KAAK,EAAE,0BAA0B;IACjCC,QAAQ,EAAE,EAAE;IACZE,SAAS,EAAE5E,OAAO,CAAC6E;EACpB,CAAC;EACD3B,aAAa,EAAE;IACd4B,KAAK,EAAE,EAAE;IACTC,MAAM,EAAE,EAAE;IACVf,YAAY,EAAE,EAAE;IAChBtB,eAAe,EAAE,0BAA0B;IAC3C0B,cAAc,EAAE,QAAQ;IACxBC,UAAU,EAAE;EACb,CAAC;EACDlB,QAAQ,EAAE;IACTuB,QAAQ,EAAE,EAAE;IACZD,KAAK,EAAE;EACR;AACD,CAAC,CAAC;AAEF,eAAehF,OAAO,CAAC2D,eAAe,EAAE,IAAI,EAAE,IAAI,EAAE;EAAE4B,UAAU,EAAE;AAAK,CAAC,CAAC,CACxE9E,UACD,CAAC","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":";;;AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAQ,OAAO;AACxC,SACCC,IAAI,EACJC,IAAI,EACJC,UAAU,EACVC,gBAAgB,EAChBC,UAAU,QACJ,cAAc;AACrB,SAASC,OAAO,QAAQ,aAAa;AACrC,OAAOC,CAAC,MAAM,QAAQ;AACtB,SAASC,QAAQ,QAAQ,mBAAmB;AAC5C,SAASC,UAAU,QAAQ,gBAAgB;AAC3C,SAASC,MAAM,QAAQ,kBAAkB;AACzC,SAASC,8BAA8B,QAAQ,oBAAoB;AACnE,SAASC,0BAA0B,QAAQ,2BAA2B;AACtE,SAASC,OAAO,QAAQ,eAAe;AACvC,SAASC,8BAA8B,QAAQ,OAAO;AACtD;AACA;AACA;;AAEA,MAAMC,UAAU,SAASf,SAAS,CAAC;EAClCgB,WAAWA,CAACC,KAAK,EAAE;IAClB,KAAK,CAACA,KAAK,CAAC;IAACC,eAAA,kBAkBJ,MAAM;MACf,IAAI,CAACC,gBAAgB,CAAC,IAAI,EAAE,YAAY;QACvC,IAAI;UACH,MAAM;YAAEC;UAAyB,CAAC,GAAG,MAAM,MAAM,CAChD,kCACD,CAAC;UACD,MAAMA,wBAAwB,CAAC,CAAC,CAC/B,IAAI,CAACH,KAAK,CAACI,QAAQ,EACnB,MAAM,IAAI,CAACJ,KAAK,CAACK,QAClB,CAAC;QACF,CAAC,CAAC,OAAOC,KAAK,EAAE;UACfC,OAAO,CAACD,KAAK,CAAC,+CAA+C,EAAEA,KAAK,CAAC;QACtE,CAAC,SAAS;UACT,IAAI,CAACJ,gBAAgB,CAAC,KAAK,CAAC;QAC7B;MACD,CAAC,CAAC;IACH,CAAC;IAAAD,eAAA,2BAEkB,CAACO,OAAO,EAAEC,QAAQ,KAAK;MACzC,IAAI,CAACC,QAAQ,CAAC;QAAEF;MAAQ,CAAC,EAAE,MAAM;QAChC,IAAI,IAAI,CAACR,KAAK,CAACE,gBAAgB,EAC9B,IAAI,CAACF,KAAK,CAACE,gBAAgB,CAAC,IAAI,CAACS,KAAK,CAACH,OAAO,CAAC;QAChD,IAAIC,QAAQ,EAAEA,QAAQ,CAAC,CAAC;MACzB,CAAC,CAAC;IACH,CAAC;IAAAR,eAAA,kBAES,MAAM;MACfV,QAAQ,CAACqB,UAAU,CAACC,QAAQ,CAACpB,MAAM,CAACqB,OAAO,CAACC,WAAW,EAAE;QACxDC,OAAO,EAAE,IAAI,CAAChB,KAAK,CAACgB;MACrB,CAAC,CAAC;IACH,CAAC;IA/CA,IAAI,CAACL,KAAK,GAAG;MAAEH,OAAO,EAAE;IAAM,CAAC;EAChC;EAEAS,iBAAiBA,CAAA,EAAG;IACnB,IAAI,CAACC,OAAO,CAAC,CAAC;EACf;EAEAC,kBAAkBA,CAACC,SAAS,EAAE;IAC7B,IAAI,CAACA,SAAS,CAACC,WAAW,IAAI,IAAI,CAACrB,KAAK,CAACqB,WAAW,EAAE;MACrD,IAAI,CAACH,OAAO,CAAC,CAAC;IACf;EACD;EAEAI,oBAAoBA,CAAA,EAAG;IACtB;EAAA;EAmCDC,MAAMA,CAAA,EAAG;IACR,MAAM;MAAEC,kBAAkB;MAAEC,kBAAkB;MAAEC;IAAwB,CAAC,GACxE,IAAI,CAAC1B,KAAK;;IAEX;IACA,MAAM2B,IAAI,GAAG,UAAU,CAAC,CAAC;IACzB;IACA,MAAMC,KAAK,GACV,CAAAF,uBAAuB,aAAvBA,uBAAuB,uBAAvBA,uBAAuB,CAAEE,KAAK,MAC9BF,uBAAuB,aAAvBA,uBAAuB,uBAAvBA,uBAAuB,CAAEG,WAAW,KACpCpC,MAAM,CAACqC,WAAW,IAClB,iBAAiB;IAElB,MAAMC,SAAS,GAAG,IAAI,CAACpB,KAAK,CAACH,OAAO;IACpC,MAAMwB,YAAY,GAAG,CAAAP,kBAAkB,aAAlBA,kBAAkB,uBAAlBA,kBAAkB,CAAEQ,MAAM,KAAI,CAAC;IAEpD,oBACCnD,KAAA,CAAAoD,aAAA,CAAC/C,gBAAgB;MAACgD,OAAO,EAAE,IAAI,CAACA,OAAQ;MAACC,KAAK,EAAE,CAACC,MAAM,CAACC,SAAS;IAAE,gBAClExD,KAAA,CAAAoD,aAAA,CAACjD,IAAI;MACJmD,KAAK,EAAE,CACNC,MAAM,CAACE,MAAM,EACb;QACCC,eAAe,EACdhB,kBAAkB,IAAI/B,MAAM,CAACgD,MAAM,CAACC;MACtC,CAAC;IACA,gBAEF5D,KAAA,CAAAoD,aAAA,CAACjD,IAAI;MAACmD,KAAK,EAAEC,MAAM,CAACM;IAAmB,gBACtC7D,KAAA,CAAAoD,aAAA,CAAClD,IAAI;MACJoD,KAAK,EAAE,CAACC,MAAM,CAACO,WAAW,EAAEP,MAAM,CAACQ,gBAAgB,CAAE;MACrDC,aAAa,EAAE;IAAE,GAEhBf,SAAS,GAAG,YAAY,GAAGH,KACvB,CAAC,eACP9C,KAAA,CAAAoD,aAAA,CAAClD,IAAI;MAACoD,KAAK,EAAEC,MAAM,CAACU;IAAa,GAC/BhB,SAAS,GACP,gBAAgB,GAChB,GAAGC,YAAY,WAAWA,YAAY,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,YACrD,CACD,CAAC,eACPlD,KAAA,CAAAoD,aAAA,CAACjD,IAAI;MAACmD,KAAK,EAAEC,MAAM,CAACW;IAAc,gBACjClE,KAAA,CAAAoD,aAAA,CAAClD,IAAI;MAACoD,KAAK,EAAEC,MAAM,CAACY;IAAS,GAAC,QAAO,CAChC,CACD,CACW,CAAC;EAErB;AACD;AAEA,MAAMC,eAAe,GAAIvC,KAAK,IAAK;EAAA,IAAAwC,cAAA;EAClC,MAAM;IAAEC,IAAI;IAAEC;EAAc,CAAC,GAAG1C,KAAK;EAErC,MAAMe,uBAAuB,GAAG/B,0BAA0B,CAACgB,KAAK,CAAC;EAEjE,OAAO;IACNa,kBAAkB,EAAE3B,8BAA8B,CAACc,KAAK,CAAC;IACzDc,kBAAkB,EAAE/B,8BAA8B,CAACiB,KAAK,CAAC;IACzDe,uBAAuB;IACvB4B,IAAI,EAAEF,IAAI,CAACE,IAAI;IACfjC,WAAW,EAAEgC,aAAa,CAAChC,WAAW,CAAC5B,MAAM,CAAC8D,eAAe,CAAC;IAC9DC,OAAO,EAAE,EAAAL,cAAA,GAAAxC,KAAK,CAAC6C,OAAO,cAAAL,cAAA,uBAAbA,cAAA,CAAeM,MAAM,KAAI,CAAC;EACpC,CAAC;AACF,CAAC;AAED,MAAMpB,MAAM,GAAGnD,UAAU,CAACwE,MAAM,CAAC;EAChCpB,SAAS,EAAE;IACVqB,gBAAgB,EAAE/D,OAAO,CAACgE,EAAE;IAC5BC,cAAc,EAAEjE,OAAO,CAACgE;EACzB,CAAC;EACDrB,MAAM,EAAE;IACPuB,YAAY,EAAElE,OAAO,CAACgE,EAAE;IACxBG,OAAO,EAAEnE,OAAO,CAACoE,EAAE;IACnBC,SAAS,EAAE,GAAG;IACdC,cAAc,EAAE,eAAe;IAC/BC,UAAU,EAAE,YAAY;IACxBC,aAAa,EAAE;EAChB,CAAC;EACDzB,kBAAkB,EAAE;IACnB0B,IAAI,EAAE,CAAC;IACPC,WAAW,EAAE1E,OAAO,CAACoE,EAAE;IACvBE,cAAc,EAAE;EACjB,CAAC;EACDtB,WAAW,EAAE;IACZ2B,KAAK,EAAE,MAAM;IACbC,QAAQ,EAAE,EAAE;IACZC,UAAU,EAAE;EACb,CAAC;EACD5B,gBAAgB,EAAE;IACjB2B,QAAQ,EAAE;EACX,CAAC;EACDzB,YAAY,EAAE;IACbwB,KAAK,EAAE,0BAA0B;IACjCC,QAAQ,EAAE,EAAE;IACZE,SAAS,EAAE9E,OAAO,CAAC+E;EACpB,CAAC;EACD3B,aAAa,EAAE;IACd4B,KAAK,EAAE,EAAE;IACTC,MAAM,EAAE,EAAE;IACVf,YAAY,EAAE,EAAE;IAChBtB,eAAe,EAAE,0BAA0B;IAC3C0B,cAAc,EAAE,QAAQ;IACxBC,UAAU,EAAE;EACb,CAAC;EACDlB,QAAQ,EAAE;IACTuB,QAAQ,EAAE,EAAE;IACZD,KAAK,EAAE;EACR;AACD,CAAC,CAAC;AAEF,eAAelF,OAAO,CAAC6D,eAAe,EAAE,IAAI,EAAE,IAAI,EAAE;EAAE4B,UAAU,EAAE;AAAK,CAAC,CAAC,CACxEhF,UACD,CAAC","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 "../reducers/featureBuilderReducer";
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";