@plusscommunities/pluss-feature-builder-app-c 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
@@ -1 +1 @@
1
- {"version":3,"names":["React","Component","Text","View","ScrollView","StyleSheet","TouchableOpacity","Image","connect","_","Icon","Services","Components","Colours","values","selectListings","selectFeatureDefinition","SPACING","getMainBrandingColourFromState","getSummaryFieldValue","WidgetLarge","constructor","props","_defineProperty","options","featureDefinition","isEmpty","Title","title","displayName","featureName","EmptyText","onLoadingChanged","initializeFeatureBuilder","dispatch","getState","loading","callback","setState","state","imageField","uri","url","listing","getTitle","navigation","navigate","screens","featureDetail","featureTitle","_listing$fields","_listing$fields2","colourBrandingMain","fields","mandatoryFields","summary","featureImage","imageSource","getImageSource","createElement","key","id","style","styles","listItem","onPress","onListingPress","avatarContainer","source","avatar","resizeMode","placeholderAvatar","name","type","size","color","TEXT_LIGHT","textContainer","titleText","numberOfLines","descriptionText","chevronContainer","componentDidMount","refresh","componentDidUpdate","prevProps","dataUpdated","renderContent","listings","loadingPadding","LoadingStateWidget","height","contentContainerStyle","featuresContainer","showsVerticalScrollIndicator","map","renderListingCard","render","content","sectionContainer","sectionPadding","sectionHeading","sectionTitle","create","backgroundColor","flex","paddingHorizontal","MD","paddingBottom","XS","paddingTop","marginBottom","fontFamily","fontSize","flexDirection","alignItems","paddingVertical","width","borderRadius","marginRight","BACKGROUND_LIGHT","justifyContent","TEXT_DARK","lineHeight","paddingLeft","mapStateToProps","_state$strings","user","notifications","site","notificationKey","strings","config","forwardRef"],"sources":["WidgetLarge.js"],"sourcesContent":["import React, { Component } from \"react\";\nimport {\n\tText,\n\tView,\n\tScrollView,\n\tStyleSheet,\n\tTouchableOpacity,\n\tImage,\n} from \"react-native\";\nimport { connect } from \"react-redux\";\nimport _ from \"lodash\";\nimport { Icon } from \"react-native-elements\";\nimport { Services } from \"../feature.config\";\nimport { Components, Colours } from \"../core.config\";\nimport { values } from \"../values.config\";\nimport { selectListings, selectFeatureDefinition } from \"../reducers/featureBuilderReducer\";\nimport { SPACING } from \"../js/spacing\";\nimport { getMainBrandingColourFromState } from \"../js\";\nimport { getSummaryFieldValue } from \"../js/helpers\";\n\nclass WidgetLarge 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\tgetTitle = () => {\n\t\tconst { options, featureDefinition } = this.props;\n\t\tif (options && !_.isEmpty(options.Title)) return options.Title;\n\t\t// Use feature definition title\n\t\tif (\n\t\t\tfeatureDefinition?.title ||\n\t\t\tfeatureDefinition?.displayName\n\t\t) {\n\t\t\treturn (\n\t\t\t\tfeatureDefinition.title || featureDefinition.displayName\n\t\t\t);\n\t\t}\n\t\treturn values.featureName || \"Custom Features\";\n\t};\n\n\tgetEmptyStateText = () => {\n\t\tconst { options } = this.props;\n\t\tif (options && !_.isEmpty(options.EmptyText)) return options.EmptyText;\n\t\treturn \"No custom features available\";\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} 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\tgetImageSource = (imageField) => {\n\t\tif (!imageField) return null;\n\n\t\tif (typeof imageField === \"string\") {\n\t\t\treturn { uri: imageField };\n\t\t}\n\n\t\tif (typeof imageField === \"object\" && imageField.uri) {\n\t\t\treturn imageField;\n\t\t}\n\n\t\tif (typeof imageField === \"object\" && imageField.url) {\n\t\t\treturn { uri: imageField.url };\n\t\t}\n\n\t\treturn null;\n\t};\n\n\tonListingPress = (listing) => {\n\t\tconst { featureDefinition } = this.props;\n\t\tconst title = this.getTitle();\n\t\tServices.navigation.navigate(values.screens.featureDetail, {\n\t\t\tlisting: listing,\n\t\t\tfeatureDefinition: featureDefinition,\n\t\t\tfeatureTitle: title,\n\t\t});\n\t};\n\n\trenderListingCard = (listing) => {\n\t\tconst { colourBrandingMain, featureDefinition } = this.props;\n\t\tconst title = listing.fields?.[values.mandatoryFields.title] || \"Untitled\";\n\t\tconst summary = getSummaryFieldValue(listing, featureDefinition);\n\t\tconst imageField = listing.fields?.[values.mandatoryFields.featureImage];\n\t\tconst imageSource = this.getImageSource(imageField);\n\n\t\treturn (\n\t\t\t<TouchableOpacity\n\t\t\t\tkey={listing.id}\n\t\t\t\tstyle={styles.listItem}\n\t\t\t\tonPress={() => this.onListingPress(listing)}\n\t\t\t>\n\t\t\t\t{/* Small circular avatar image */}\n\t\t\t\t<View style={styles.avatarContainer}>\n\t\t\t\t\t{imageSource ? (\n\t\t\t\t\t\t<Image\n\t\t\t\t\t\t\tsource={imageSource}\n\t\t\t\t\t\t\tstyle={styles.avatar}\n\t\t\t\t\t\t\tresizeMode=\"cover\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<View style={[styles.avatar, styles.placeholderAvatar]}>\n\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\tname=\"image\"\n\t\t\t\t\t\t\t\ttype=\"font-awesome\"\n\t\t\t\t\t\t\t\tsize={16}\n\t\t\t\t\t\t\t\tcolor={Colours.TEXT_LIGHT}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</View>\n\t\t\t\t\t)}\n\t\t\t\t</View>\n\n\t\t\t\t{/* Text content */}\n\t\t\t\t<View style={styles.textContainer}>\n\t\t\t\t\t<Text style={styles.titleText} numberOfLines={1}>\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</Text>\n\t\t\t\t\t{summary && (\n\t\t\t\t\t\t<Text style={styles.descriptionText} numberOfLines={1}>\n\t\t\t\t\t\t\t{summary}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t)}\n\t\t\t\t</View>\n\n\t\t\t\t{/* Chevron icon */}\n\t\t\t\t<View style={styles.chevronContainer}>\n\t\t\t\t\t<Icon\n\t\t\t\t\t\tname=\"chevron-right\"\n\t\t\t\t\t\ttype=\"font-awesome\"\n\t\t\t\t\t\tsize={14}\n\t\t\t\t\t\tcolor={Colours.TEXT_LIGHT}\n\t\t\t\t\t/>\n\t\t\t\t</View>\n\t\t\t</TouchableOpacity>\n\t\t);\n\t};\n\n\trenderContent() {\n\t\tconst { listings } = this.props;\n\n\t\t// Don't render widget if no listings are available (and not loading)\n\t\tif (_.isEmpty(listings) && !this.state.loading) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (_.isEmpty(listings)) {\n\t\t\tif (this.state.loading) {\n\t\t\t\treturn (\n\t\t\t\t\t<View style={styles.loadingPadding}>\n\t\t\t\t\t\t<Components.LoadingStateWidget height={300} />\n\t\t\t\t\t</View>\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\treturn (\n\t\t\t<ScrollView\n\t\t\t\tcontentContainerStyle={styles.featuresContainer}\n\t\t\t\tshowsVerticalScrollIndicator={false}\n\t\t\t>\n\t\t\t\t{listings.map((listing) => this.renderListingCard(listing))}\n\t\t\t</ScrollView>\n\t\t);\n\t}\n\n\trender() {\n\t\tconst { colourBrandingMain } = this.props;\n\n\t\tconst content = this.renderContent();\n\t\t// Don't render widget section if content is null (no features available)\n\t\tif (content === null) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn (\n\t\t\t<View style={styles.sectionContainer}>\n\t\t\t\t<View style={styles.sectionPadding}>\n\t\t\t\t\t<View style={styles.sectionHeading}>\n\t\t\t\t\t\t<Text style={styles.sectionTitle}>{this.getTitle()}</Text>\n\t\t\t\t\t</View>\n\t\t\t\t</View>\n\t\t\t\t{content}\n\t\t\t</View>\n\t\t);\n\t}\n}\n\nconst styles = StyleSheet.create({\n\tsectionContainer: {\n\t\tbackgroundColor: \"#fff\",\n\t\tflex: 1,\n\t},\n\tsectionPadding: {\n\t\tpaddingHorizontal: SPACING.MD,\n\t\tpaddingBottom: SPACING.XS + 2,\n\t\tpaddingTop: SPACING.MD,\n\t},\n\tloadingPadding: {\n\t\tpaddingHorizontal: SPACING.MD,\n\t},\n\tsectionHeading: {\n\t\tmarginBottom: SPACING.MD,\n\t},\n\tsectionTitle: {\n\t\tfontFamily: \"sf-bold\",\n\t\tfontSize: 24,\n\t\tcolor: \"#000\",\n\t},\n\tfeaturesContainer: {\n\t\tpaddingHorizontal: SPACING.MD,\n\t\tpaddingBottom: SPACING.MD,\n\t},\n\t// Listing item styles (similar to CondensedListItem)\n\tlistItem: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tpaddingHorizontal: 16,\n\t\tpaddingVertical: 8,\n\t\tbackgroundColor: \"#fff\",\n\t},\n\tavatarContainer: {\n\t\twidth: 40,\n\t\theight: 40,\n\t\tborderRadius: 20,\n\t\tmarginRight: 12,\n\t},\n\tavatar: {\n\t\twidth: 40,\n\t\theight: 40,\n\t\tborderRadius: 20,\n\t\tbackgroundColor: Colours.BACKGROUND_LIGHT || \"#f0f0f0\",\n\t},\n\tplaceholderAvatar: {\n\t\tbackgroundColor: Colours.BACKGROUND_LIGHT || \"#f0f0f0\",\n\t\tjustifyContent: \"center\",\n\t\talignItems: \"center\",\n\t},\n\ttextContainer: {\n\t\tflex: 1,\n\t\tjustifyContent: \"center\",\n\t},\n\ttitleText: {\n\t\tfontFamily: \"sf-semibold\",\n\t\tfontSize: 16,\n\t\tcolor: Colours.TEXT_DARK || \"#333\",\n\t\tmarginBottom: 2,\n\t},\n\tdescriptionText: {\n\t\tfontFamily: \"sf-regular\",\n\t\tfontSize: 14,\n\t\tcolor: Colours.TEXT_LIGHT || \"#666\",\n\t\tlineHeight: 18,\n\t},\n\tchevronContainer: {\n\t\tpaddingLeft: 8,\n\t},\n});\n\nconst mapStateToProps = (state) => {\n\tconst { user, notifications } = state;\n\n\treturn {\n\t\tcolourBrandingMain: getMainBrandingColourFromState(state),\n\t\tlistings: selectListings(state),\n\t\tfeatureDefinition: selectFeatureDefinition(state),\n\t\tsite: user.site,\n\t\tdataUpdated: notifications.dataUpdated[values.notificationKey],\n\t\tstrings: state.strings?.config || {},\n\t};\n};\n\nexport default connect(mapStateToProps, null, null, { forwardRef: true })(\n\tWidgetLarge,\n);\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","Component","Text","View","ScrollView","StyleSheet","TouchableOpacity","Image","connect","_","Icon","Services","Components","Colours","values","selectListings","selectFeatureDefinition","SPACING","getMainBrandingColourFromState","getSummaryFieldValue","WidgetLarge","constructor","props","_defineProperty","options","featureDefinition","isEmpty","Title","title","displayName","featureName","EmptyText","onLoadingChanged","initializeFeatureBuilder","dispatch","getState","loading","callback","setState","state","imageField","uri","url","listing","getTitle","navigation","navigate","screens","featureDetail","featureTitle","_listing$fields","_listing$fields2","colourBrandingMain","fields","mandatoryFields","summary","featureImage","imageSource","getImageSource","createElement","key","id","style","styles","listItem","onPress","onListingPress","avatarContainer","source","avatar","resizeMode","placeholderAvatar","name","type","size","color","TEXT_LIGHT","textContainer","titleText","numberOfLines","descriptionText","chevronContainer","componentDidMount","refresh","componentDidUpdate","prevProps","dataUpdated","renderContent","listings","loadingPadding","LoadingStateWidget","height","contentContainerStyle","featuresContainer","showsVerticalScrollIndicator","map","renderListingCard","render","content","sectionContainer","sectionPadding","sectionHeading","sectionTitle","create","backgroundColor","flex","paddingHorizontal","MD","paddingBottom","XS","paddingTop","marginBottom","fontFamily","fontSize","flexDirection","alignItems","paddingVertical","width","borderRadius","marginRight","BACKGROUND_LIGHT","justifyContent","TEXT_DARK","lineHeight","paddingLeft","mapStateToProps","_state$strings","user","notifications","site","notificationKey","strings","config","forwardRef"],"sources":["WidgetLarge.js"],"sourcesContent":["import React, { Component } from \"react\";\nimport {\n\tText,\n\tView,\n\tScrollView,\n\tStyleSheet,\n\tTouchableOpacity,\n\tImage,\n} from \"react-native\";\nimport { connect } from \"react-redux\";\nimport _ from \"lodash\";\nimport { Icon } from \"react-native-elements\";\nimport { Services } from \"../feature.config\";\nimport { Components, Colours } from \"../core.config\";\nimport { values } from \"../values.config\";\nimport {\n\tselectListings,\n\tselectFeatureDefinition,\n} from \"../utils/selectors\";\nimport { SPACING } from \"../js/spacing\";\nimport { getMainBrandingColourFromState } from \"../js\";\nimport { getSummaryFieldValue } from \"../js/helpers\";\n\nclass WidgetLarge 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\tgetTitle = () => {\n\t\tconst { options, featureDefinition } = this.props;\n\t\tif (options && !_.isEmpty(options.Title)) return options.Title;\n\t\t// Use feature definition title\n\t\tif (featureDefinition?.title || featureDefinition?.displayName) {\n\t\t\treturn featureDefinition.title || featureDefinition.displayName;\n\t\t}\n\t\treturn values.featureName || \"Custom Features\";\n\t};\n\n\tgetEmptyStateText = () => {\n\t\tconst { options } = this.props;\n\t\tif (options && !_.isEmpty(options.EmptyText)) return options.EmptyText;\n\t\treturn \"No custom features available\";\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} 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\tgetImageSource = (imageField) => {\n\t\tif (!imageField) return null;\n\n\t\tif (typeof imageField === \"string\") {\n\t\t\treturn { uri: imageField };\n\t\t}\n\n\t\tif (typeof imageField === \"object\" && imageField.uri) {\n\t\t\treturn imageField;\n\t\t}\n\n\t\tif (typeof imageField === \"object\" && imageField.url) {\n\t\t\treturn { uri: imageField.url };\n\t\t}\n\n\t\treturn null;\n\t};\n\n\tonListingPress = (listing) => {\n\t\tconst { featureDefinition } = this.props;\n\t\tconst title = this.getTitle();\n\t\tServices.navigation.navigate(values.screens.featureDetail, {\n\t\t\tlisting: listing,\n\t\t\tfeatureDefinition: featureDefinition,\n\t\t\tfeatureTitle: title,\n\t\t});\n\t};\n\n\trenderListingCard = (listing) => {\n\t\tconst { colourBrandingMain, featureDefinition } = this.props;\n\t\tconst title = listing.fields?.[values.mandatoryFields.title] || \"Untitled\";\n\t\tconst summary = getSummaryFieldValue(listing, featureDefinition);\n\t\tconst imageField = listing.fields?.[values.mandatoryFields.featureImage];\n\t\tconst imageSource = this.getImageSource(imageField);\n\n\t\treturn (\n\t\t\t<TouchableOpacity\n\t\t\t\tkey={listing.id}\n\t\t\t\tstyle={styles.listItem}\n\t\t\t\tonPress={() => this.onListingPress(listing)}\n\t\t\t>\n\t\t\t\t{/* Small circular avatar image */}\n\t\t\t\t<View style={styles.avatarContainer}>\n\t\t\t\t\t{imageSource ? (\n\t\t\t\t\t\t<Image\n\t\t\t\t\t\t\tsource={imageSource}\n\t\t\t\t\t\t\tstyle={styles.avatar}\n\t\t\t\t\t\t\tresizeMode=\"cover\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<View style={[styles.avatar, styles.placeholderAvatar]}>\n\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\tname=\"image\"\n\t\t\t\t\t\t\t\ttype=\"font-awesome\"\n\t\t\t\t\t\t\t\tsize={16}\n\t\t\t\t\t\t\t\tcolor={Colours.TEXT_LIGHT}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</View>\n\t\t\t\t\t)}\n\t\t\t\t</View>\n\n\t\t\t\t{/* Text content */}\n\t\t\t\t<View style={styles.textContainer}>\n\t\t\t\t\t<Text style={styles.titleText} numberOfLines={1}>\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</Text>\n\t\t\t\t\t{summary && (\n\t\t\t\t\t\t<Text style={styles.descriptionText} numberOfLines={1}>\n\t\t\t\t\t\t\t{summary}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t)}\n\t\t\t\t</View>\n\n\t\t\t\t{/* Chevron icon */}\n\t\t\t\t<View style={styles.chevronContainer}>\n\t\t\t\t\t<Icon\n\t\t\t\t\t\tname=\"chevron-right\"\n\t\t\t\t\t\ttype=\"font-awesome\"\n\t\t\t\t\t\tsize={14}\n\t\t\t\t\t\tcolor={Colours.TEXT_LIGHT}\n\t\t\t\t\t/>\n\t\t\t\t</View>\n\t\t\t</TouchableOpacity>\n\t\t);\n\t};\n\n\trenderContent() {\n\t\tconst { listings } = this.props;\n\n\t\t// Don't render widget if no listings are available (and not loading)\n\t\tif (_.isEmpty(listings) && !this.state.loading) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (_.isEmpty(listings)) {\n\t\t\tif (this.state.loading) {\n\t\t\t\treturn (\n\t\t\t\t\t<View style={styles.loadingPadding}>\n\t\t\t\t\t\t<Components.LoadingStateWidget height={300} />\n\t\t\t\t\t</View>\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\treturn (\n\t\t\t<ScrollView\n\t\t\t\tcontentContainerStyle={styles.featuresContainer}\n\t\t\t\tshowsVerticalScrollIndicator={false}\n\t\t\t>\n\t\t\t\t{listings.map((listing) => this.renderListingCard(listing))}\n\t\t\t</ScrollView>\n\t\t);\n\t}\n\n\trender() {\n\t\tconst { colourBrandingMain } = this.props;\n\n\t\tconst content = this.renderContent();\n\t\t// Don't render widget section if content is null (no features available)\n\t\tif (content === null) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn (\n\t\t\t<View style={styles.sectionContainer}>\n\t\t\t\t<View style={styles.sectionPadding}>\n\t\t\t\t\t<View style={styles.sectionHeading}>\n\t\t\t\t\t\t<Text style={styles.sectionTitle}>{this.getTitle()}</Text>\n\t\t\t\t\t</View>\n\t\t\t\t</View>\n\t\t\t\t{content}\n\t\t\t</View>\n\t\t);\n\t}\n}\n\nconst styles = StyleSheet.create({\n\tsectionContainer: {\n\t\tbackgroundColor: \"#fff\",\n\t\tflex: 1,\n\t},\n\tsectionPadding: {\n\t\tpaddingHorizontal: SPACING.MD,\n\t\tpaddingBottom: SPACING.XS + 2,\n\t\tpaddingTop: SPACING.MD,\n\t},\n\tloadingPadding: {\n\t\tpaddingHorizontal: SPACING.MD,\n\t},\n\tsectionHeading: {\n\t\tmarginBottom: SPACING.MD,\n\t},\n\tsectionTitle: {\n\t\tfontFamily: \"sf-bold\",\n\t\tfontSize: 24,\n\t\tcolor: \"#000\",\n\t},\n\tfeaturesContainer: {\n\t\tpaddingHorizontal: SPACING.MD,\n\t\tpaddingBottom: SPACING.MD,\n\t},\n\t// Listing item styles (similar to CondensedListItem)\n\tlistItem: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tpaddingHorizontal: 16,\n\t\tpaddingVertical: 8,\n\t\tbackgroundColor: \"#fff\",\n\t},\n\tavatarContainer: {\n\t\twidth: 40,\n\t\theight: 40,\n\t\tborderRadius: 20,\n\t\tmarginRight: 12,\n\t},\n\tavatar: {\n\t\twidth: 40,\n\t\theight: 40,\n\t\tborderRadius: 20,\n\t\tbackgroundColor: Colours.BACKGROUND_LIGHT || \"#f0f0f0\",\n\t},\n\tplaceholderAvatar: {\n\t\tbackgroundColor: Colours.BACKGROUND_LIGHT || \"#f0f0f0\",\n\t\tjustifyContent: \"center\",\n\t\talignItems: \"center\",\n\t},\n\ttextContainer: {\n\t\tflex: 1,\n\t\tjustifyContent: \"center\",\n\t},\n\ttitleText: {\n\t\tfontFamily: \"sf-semibold\",\n\t\tfontSize: 16,\n\t\tcolor: Colours.TEXT_DARK || \"#333\",\n\t\tmarginBottom: 2,\n\t},\n\tdescriptionText: {\n\t\tfontFamily: \"sf-regular\",\n\t\tfontSize: 14,\n\t\tcolor: Colours.TEXT_LIGHT || \"#666\",\n\t\tlineHeight: 18,\n\t},\n\tchevronContainer: {\n\t\tpaddingLeft: 8,\n\t},\n});\n\nconst mapStateToProps = (state) => {\n\tconst { user, notifications } = state;\n\n\treturn {\n\t\tcolourBrandingMain: getMainBrandingColourFromState(state),\n\t\tlistings: selectListings(state),\n\t\tfeatureDefinition: selectFeatureDefinition(state),\n\t\tsite: user.site,\n\t\tdataUpdated: notifications.dataUpdated[values.notificationKey],\n\t\tstrings: state.strings?.config || {},\n\t};\n};\n\nexport default connect(mapStateToProps, null, null, { forwardRef: true })(\n\tWidgetLarge,\n);\n"],"mappings":"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","ignoreList":[]}
@@ -9,7 +9,7 @@ import { Icon } from "react-native-elements";
9
9
  import { Services } from "../feature.config";
10
10
  import { Components, Colours } from "../core.config";
11
11
  import { values } from "../values.config";
12
- import { selectListings, selectFeatureDefinition } from "../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";
@@ -1 +1 @@
1
- {"version":3,"names":["React","Component","Text","View","ScrollView","StyleSheet","TouchableOpacity","Image","connect","_","Icon","Services","Components","Colours","values","selectListings","selectFeatureDefinition","SPACING","getMainBrandingColourFromState","getSummaryFieldValue","WidgetSmall","constructor","props","_defineProperty","options","featureDefinition","isEmpty","Title","title","displayName","featureName","EmptyText","labels","emptyState","onLoadingChanged","initializeFeatureBuilder","dispatch","getState","loading","callback","setState","state","navigation","navigate","screens","featureList","imageField","uri","url","listing","getTitle","featureDetail","featureTitle","_listing$fields","_listing$fields2","colourBrandingMain","fields","mandatoryFields","summary","featureImage","imageSource","getImageSource","createElement","key","id","style","styles","cardContainer","onPress","onListingPress","borderContainer","source","cardImage","resizeMode","placeholderImage","name","type","size","color","TEXT_LIGHT","cardTitle","numberOfLines","cardSummary","componentDidMount","refresh","componentDidUpdate","prevProps","dataUpdated","renderContent","listings","loadingPadding","LoadingStateWidget","height","listingsToShow","slice","widget","maxItems","horizontal","contentContainerStyle","paddingLeft","XS","paddingRight","SM","showsHorizontalScrollIndicator","map","renderListingCard","length","viewMoreCard","onPressAll","viewMoreContainer","viewMoreText","viewMoreCount","render","content","sectionContainer","sectionPadding","sectionHeading","sectionTitle","InlineButton","touchableStyle","paddingTop","textStyle","viewAll","create","backgroundColor","MD","paddingHorizontal","paddingBottom","marginBottom","flexDirection","alignContent","justifyContent","fontFamily","fontSize","marginRight","width","itemMaxWidth","borderRadius","shadowColor","shadowOffset","shadowOpacity","shadowRadius","elevation","padding","minHeight","itemMinWidth","alignSelf","alignItems","textAlign","TEXT_DARK","marginTop","mapStateToProps","_state$strings","user","notifications","site","notificationKey","strings","config","forwardRef"],"sources":["WidgetSmall.js"],"sourcesContent":["import React, { Component } from \"react\";\nimport {\n\tText,\n\tView,\n\tScrollView,\n\tStyleSheet,\n\tTouchableOpacity,\n\tImage,\n} from \"react-native\";\nimport { connect } from \"react-redux\";\nimport _ from \"lodash\";\nimport { Icon } from \"react-native-elements\";\nimport { Services } from \"../feature.config\";\nimport { Components, Colours } from \"../core.config\";\nimport { values } from \"../values.config\";\nimport { selectListings, selectFeatureDefinition } from \"../reducers/featureBuilderReducer\";\nimport { SPACING } from \"../js/spacing\";\nimport { getMainBrandingColourFromState } from \"../js\";\nimport { getSummaryFieldValue } from \"../js/helpers\";\n\nclass WidgetSmall 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\tgetTitle = () => {\n\t\tconst { options, featureDefinition } = this.props;\n\t\tif (options && !_.isEmpty(options.Title)) return options.Title;\n\t\t// Use feature definition title\n\t\tif (\n\t\t\tfeatureDefinition?.title ||\n\t\t\tfeatureDefinition?.displayName\n\t\t) {\n\t\t\treturn (\n\t\t\t\tfeatureDefinition.title || featureDefinition.displayName\n\t\t\t);\n\t\t}\n\t\treturn values.featureName || \"Features\";\n\t};\n\n\tgetEmptyStateText = () => {\n\t\tconst { options } = this.props;\n\t\tif (options && !_.isEmpty(options.EmptyText)) return options.EmptyText;\n\t\treturn values.labels.emptyState;\n\t};\n\n\trefresh = () => {\n\t\tthis.onLoadingChanged(true, async () => {\n\t\t\ttry {\n\t\t\t\t// Import actions dynamically to avoid circular dependencies\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} 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\tonPressAll = () => {\n\t\tServices.navigation.navigate(values.screens.featureList, {\n\t\t\toptions: this.props.options,\n\t\t});\n\t};\n\n\tgetImageSource = (imageField) => {\n\t\tif (!imageField) return null;\n\n\t\tif (typeof imageField === \"string\") {\n\t\t\treturn { uri: imageField };\n\t\t}\n\n\t\tif (typeof imageField === \"object\" && imageField.uri) {\n\t\t\treturn imageField;\n\t\t}\n\n\t\tif (typeof imageField === \"object\" && imageField.url) {\n\t\t\treturn { uri: imageField.url };\n\t\t}\n\n\t\treturn null;\n\t};\n\n\tonListingPress = (listing) => {\n\t\tconst { featureDefinition } = this.props;\n\t\tconst title = this.getTitle();\n\t\tServices.navigation.navigate(values.screens.featureDetail, {\n\t\t\tlisting: listing,\n\t\t\tfeatureDefinition: featureDefinition,\n\t\t\tfeatureTitle: title,\n\t\t});\n\t};\n\n\trenderListingCard = (listing) => {\n\t\tconst { colourBrandingMain, featureDefinition } = this.props;\n\t\tconst title = listing.fields?.[values.mandatoryFields.title] || \"Untitled\";\n\t\tconst summary = getSummaryFieldValue(listing, featureDefinition);\n\t\tconst imageField = listing.fields?.[values.mandatoryFields.featureImage];\n\t\tconst imageSource = this.getImageSource(imageField);\n\n\t\treturn (\n\t\t\t<TouchableOpacity\n\t\t\t\tkey={listing.id}\n\t\t\t\tstyle={styles.cardContainer}\n\t\t\t\tonPress={() => this.onListingPress(listing)}\n\t\t\t>\n\t\t\t\t<View style={styles.borderContainer}>\n\t\t\t\t\t{imageSource ? (\n\t\t\t\t\t\t<Image\n\t\t\t\t\t\t\tsource={imageSource}\n\t\t\t\t\t\t\tstyle={styles.cardImage}\n\t\t\t\t\t\t\tresizeMode=\"cover\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<View style={[styles.cardImage, styles.placeholderImage]}>\n\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\tname=\"image\"\n\t\t\t\t\t\t\t\ttype=\"font-awesome\"\n\t\t\t\t\t\t\t\tsize={24}\n\t\t\t\t\t\t\t\tcolor={Colours.TEXT_LIGHT}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</View>\n\t\t\t\t\t)}\n\t\t\t\t\t<Text style={styles.cardTitle} numberOfLines={1}>\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</Text>\n\t\t\t\t\t{summary && (\n\t\t\t\t\t\t<Text style={styles.cardSummary} numberOfLines={1}>\n\t\t\t\t\t\t\t{summary}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t)}\n\t\t\t\t</View>\n\t\t\t</TouchableOpacity>\n\t\t);\n\t};\n\n\trenderContent() {\n\t\tconst { listings } = this.props;\n\n\t\t// Don't render widget if no listings are available (and not loading)\n\t\tif (_.isEmpty(listings) && !this.state.loading) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (_.isEmpty(listings)) {\n\t\t\tif (this.state.loading) {\n\t\t\t\treturn (\n\t\t\t\t\t<View style={styles.loadingPadding}>\n\t\t\t\t\t\t<Components.LoadingStateWidget height={180} />\n\t\t\t\t\t</View>\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\t// Show first 3 listings with peeking indicator\n\t\tconst listingsToShow = listings.slice(0, values.widget.maxItems);\n\n\t\treturn (\n\t\t\t<ScrollView\n\t\t\t\thorizontal\n\t\t\t\tcontentContainerStyle={{\n\t\t\t\t\tpaddingLeft: SPACING.XS + 2,\n\t\t\t\t\tpaddingRight: SPACING.SM,\n\t\t\t\t}}\n\t\t\t\tshowsHorizontalScrollIndicator={false}\n\t\t\t>\n\t\t\t\t{listingsToShow.map((listing) => this.renderListingCard(listing))}\n\t\t\t\t{listings.length > values.widget.maxItems && (\n\t\t\t\t\t<TouchableOpacity\n\t\t\t\t\t\tstyle={[styles.cardContainer, styles.viewMoreCard]}\n\t\t\t\t\t\tonPress={this.onPressAll}\n\t\t\t\t\t>\n\t\t\t\t\t\t<View style={[styles.borderContainer, styles.viewMoreContainer]}>\n\t\t\t\t\t\t\t<Text style={styles.viewMoreText}>View all</Text>\n\t\t\t\t\t\t\t<Text style={styles.viewMoreCount}>\n\t\t\t\t\t\t\t\t{listings.length} items\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t</View>\n\t\t\t\t\t</TouchableOpacity>\n\t\t\t\t)}\n\t\t\t</ScrollView>\n\t\t);\n\t}\n\n\trender() {\n\t\tconst { colourBrandingMain } = this.props;\n\n\t\tconst content = this.renderContent();\n\t\t// Don't render widget section if content is null (no features available)\n\t\tif (content === null) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn (\n\t\t\t<View style={styles.sectionContainer}>\n\t\t\t\t<View style={styles.sectionPadding}>\n\t\t\t\t\t<View style={styles.sectionHeading}>\n\t\t\t\t\t\t<Text style={styles.sectionTitle}>{this.getTitle()}</Text>\n\t\t\t\t\t\t<Components.InlineButton\n\t\t\t\t\t\t\tonPress={this.onPressAll}\n\t\t\t\t\t\t\tcolor={colourBrandingMain}\n\t\t\t\t\t\t\ttouchableStyle={{ paddingTop: SPACING.XS + 2 }}\n\t\t\t\t\t\t\ttextStyle={{ color: \"#fff\" }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{values.labels.viewAll}\n\t\t\t\t\t\t</Components.InlineButton>\n\t\t\t\t\t</View>\n\t\t\t\t</View>\n\t\t\t\t{content}\n\t\t\t</View>\n\t\t);\n\t}\n}\n\nconst styles = StyleSheet.create({\n\tsectionContainer: {\n\t\tbackgroundColor: \"#fff\",\n\t\tpaddingTop: SPACING.MD,\n\t},\n\tsectionPadding: {\n\t\tpaddingHorizontal: SPACING.MD,\n\t\tpaddingBottom: SPACING.XS + 2,\n\t},\n\tloadingPadding: {\n\t\tpaddingHorizontal: SPACING.MD,\n\t},\n\tsectionHeading: {\n\t\tmarginBottom: SPACING.XS,\n\t\tflexDirection: \"row\",\n\t\talignContent: \"flex-start\",\n\t\tjustifyContent: \"space-between\",\n\t},\n\tsectionTitle: {\n\t\tfontFamily: \"sf-bold\",\n\t\tfontSize: 24,\n\t\tcolor: \"#000\",\n\t},\n\t// Listing card styles\n\tcardContainer: {\n\t\tmarginRight: SPACING.SM + 4,\n\t\twidth: values.widget.itemMaxWidth,\n\t},\n\tborderContainer: {\n\t\tborderRadius: SPACING.SM,\n\t\tbackgroundColor: \"#fff\",\n\t\tshadowColor: \"#000\",\n\t\tshadowOffset: {\n\t\t\twidth: 0,\n\t\t\theight: 2,\n\t\t},\n\t\tshadowOpacity: 0.1,\n\t\tshadowRadius: 3.84,\n\t\televation: 4,\n\t\tpadding: SPACING.SM,\n\t\tminHeight: values.widget.itemMinWidth,\n\t},\n\tcardImage: {\n\t\twidth: 88,\n\t\theight: 88,\n\t\tborderRadius: 44,\n\t\tbackgroundColor: \"#f0f0f0\",\n\t\talignSelf: \"center\",\n\t\tmarginBottom: SPACING.XS,\n\t},\n\tplaceholderImage: {\n\t\tjustifyContent: \"center\",\n\t\talignItems: \"center\",\n\t\tbackgroundColor: \"#f0f0f0\",\n\t},\n\tcardTitle: {\n\t\tfontFamily: \"sf-semibold\",\n\t\tfontSize: 14,\n\t\tcolor: \"#000\",\n\t\ttextAlign: \"center\",\n\t\tmarginBottom: 4,\n\t},\n\tcardSummary: {\n\t\tfontFamily: \"sf-regular\",\n\t\tfontSize: 12,\n\t\tcolor: \"#666\",\n\t\ttextAlign: \"center\",\n\t},\n\t// View more card\n\tviewMoreCard: {\n\t\tjustifyContent: \"center\",\n\t},\n\tviewMoreContainer: {\n\t\tjustifyContent: \"center\",\n\t\talignItems: \"center\",\n\t\tminHeight: values.widget.itemMinWidth,\n\t},\n\tviewMoreText: {\n\t\tfontFamily: \"sf-semibold\",\n\t\tfontSize: 14,\n\t\tcolor: Colours.TEXT_DARK || \"#000\",\n\t},\n\tviewMoreCount: {\n\t\tfontFamily: \"sf-regular\",\n\t\tfontSize: 12,\n\t\tcolor: \"#666\",\n\t\tmarginTop: 2,\n\t},\n});\n\nconst mapStateToProps = (state) => {\n\tconst { user, notifications } = state;\n\n\treturn {\n\t\tcolourBrandingMain: getMainBrandingColourFromState(state),\n\t\tlistings: selectListings(state),\n\t\tfeatureDefinition: selectFeatureDefinition(state),\n\t\tsite: user.site,\n\t\tdataUpdated: notifications.dataUpdated[values.notificationKey],\n\t\tstrings: state.strings?.config || {},\n\t};\n};\n\nexport default connect(mapStateToProps, null, null, { forwardRef: true })(\n\tWidgetSmall,\n);\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","Component","Text","View","ScrollView","StyleSheet","TouchableOpacity","Image","connect","_","Icon","Services","Components","Colours","values","selectListings","selectFeatureDefinition","SPACING","getMainBrandingColourFromState","getSummaryFieldValue","WidgetSmall","constructor","props","_defineProperty","options","featureDefinition","isEmpty","Title","title","displayName","featureName","EmptyText","labels","emptyState","onLoadingChanged","initializeFeatureBuilder","dispatch","getState","loading","callback","setState","state","navigation","navigate","screens","featureList","imageField","uri","url","listing","getTitle","featureDetail","featureTitle","_listing$fields","_listing$fields2","colourBrandingMain","fields","mandatoryFields","summary","featureImage","imageSource","getImageSource","createElement","key","id","style","styles","cardContainer","onPress","onListingPress","borderContainer","source","cardImage","resizeMode","placeholderImage","name","type","size","color","TEXT_LIGHT","cardTitle","numberOfLines","cardSummary","componentDidMount","refresh","componentDidUpdate","prevProps","dataUpdated","renderContent","listings","loadingPadding","LoadingStateWidget","height","listingsToShow","slice","widget","maxItems","horizontal","contentContainerStyle","paddingLeft","XS","paddingRight","SM","showsHorizontalScrollIndicator","map","renderListingCard","length","viewMoreCard","onPressAll","viewMoreContainer","viewMoreText","viewMoreCount","render","content","sectionContainer","sectionPadding","sectionHeading","sectionTitle","InlineButton","touchableStyle","paddingTop","textStyle","viewAll","create","backgroundColor","MD","paddingHorizontal","paddingBottom","marginBottom","flexDirection","alignContent","justifyContent","fontFamily","fontSize","marginRight","width","itemMaxWidth","borderRadius","shadowColor","shadowOffset","shadowOpacity","shadowRadius","elevation","padding","minHeight","itemMinWidth","alignSelf","alignItems","textAlign","TEXT_DARK","marginTop","mapStateToProps","_state$strings","user","notifications","site","notificationKey","strings","config","forwardRef"],"sources":["WidgetSmall.js"],"sourcesContent":["import React, { Component } from \"react\";\nimport {\n\tText,\n\tView,\n\tScrollView,\n\tStyleSheet,\n\tTouchableOpacity,\n\tImage,\n} from \"react-native\";\nimport { connect } from \"react-redux\";\nimport _ from \"lodash\";\nimport { Icon } from \"react-native-elements\";\nimport { Services } from \"../feature.config\";\nimport { Components, Colours } from \"../core.config\";\nimport { values } from \"../values.config\";\nimport {\n\tselectListings,\n\tselectFeatureDefinition,\n} from \"../utils/selectors\";\nimport { SPACING } from \"../js/spacing\";\nimport { getMainBrandingColourFromState } from \"../js\";\nimport { getSummaryFieldValue } from \"../js/helpers\";\n\nclass WidgetSmall 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\tgetTitle = () => {\n\t\tconst { options, featureDefinition } = this.props;\n\t\tif (options && !_.isEmpty(options.Title)) return options.Title;\n\t\t// Use feature definition title\n\t\tif (featureDefinition?.title || featureDefinition?.displayName) {\n\t\t\treturn featureDefinition.title || featureDefinition.displayName;\n\t\t}\n\t\treturn values.featureName || \"Features\";\n\t};\n\n\tgetEmptyStateText = () => {\n\t\tconst { options } = this.props;\n\t\tif (options && !_.isEmpty(options.EmptyText)) return options.EmptyText;\n\t\treturn values.labels.emptyState;\n\t};\n\n\trefresh = () => {\n\t\tthis.onLoadingChanged(true, async () => {\n\t\t\ttry {\n\t\t\t\t// Import actions dynamically to avoid circular dependencies\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} 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\tonPressAll = () => {\n\t\tServices.navigation.navigate(values.screens.featureList, {\n\t\t\toptions: this.props.options,\n\t\t});\n\t};\n\n\tgetImageSource = (imageField) => {\n\t\tif (!imageField) return null;\n\n\t\tif (typeof imageField === \"string\") {\n\t\t\treturn { uri: imageField };\n\t\t}\n\n\t\tif (typeof imageField === \"object\" && imageField.uri) {\n\t\t\treturn imageField;\n\t\t}\n\n\t\tif (typeof imageField === \"object\" && imageField.url) {\n\t\t\treturn { uri: imageField.url };\n\t\t}\n\n\t\treturn null;\n\t};\n\n\tonListingPress = (listing) => {\n\t\tconst { featureDefinition } = this.props;\n\t\tconst title = this.getTitle();\n\t\tServices.navigation.navigate(values.screens.featureDetail, {\n\t\t\tlisting: listing,\n\t\t\tfeatureDefinition: featureDefinition,\n\t\t\tfeatureTitle: title,\n\t\t});\n\t};\n\n\trenderListingCard = (listing) => {\n\t\tconst { colourBrandingMain, featureDefinition } = this.props;\n\t\tconst title = listing.fields?.[values.mandatoryFields.title] || \"Untitled\";\n\t\tconst summary = getSummaryFieldValue(listing, featureDefinition);\n\t\tconst imageField = listing.fields?.[values.mandatoryFields.featureImage];\n\t\tconst imageSource = this.getImageSource(imageField);\n\n\t\treturn (\n\t\t\t<TouchableOpacity\n\t\t\t\tkey={listing.id}\n\t\t\t\tstyle={styles.cardContainer}\n\t\t\t\tonPress={() => this.onListingPress(listing)}\n\t\t\t>\n\t\t\t\t<View style={styles.borderContainer}>\n\t\t\t\t\t{imageSource ? (\n\t\t\t\t\t\t<Image\n\t\t\t\t\t\t\tsource={imageSource}\n\t\t\t\t\t\t\tstyle={styles.cardImage}\n\t\t\t\t\t\t\tresizeMode=\"cover\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<View style={[styles.cardImage, styles.placeholderImage]}>\n\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\tname=\"image\"\n\t\t\t\t\t\t\t\ttype=\"font-awesome\"\n\t\t\t\t\t\t\t\tsize={24}\n\t\t\t\t\t\t\t\tcolor={Colours.TEXT_LIGHT}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</View>\n\t\t\t\t\t)}\n\t\t\t\t\t<Text style={styles.cardTitle} numberOfLines={1}>\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</Text>\n\t\t\t\t\t{summary && (\n\t\t\t\t\t\t<Text style={styles.cardSummary} numberOfLines={1}>\n\t\t\t\t\t\t\t{summary}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t)}\n\t\t\t\t</View>\n\t\t\t</TouchableOpacity>\n\t\t);\n\t};\n\n\trenderContent() {\n\t\tconst { listings } = this.props;\n\n\t\t// Don't render widget if no listings are available (and not loading)\n\t\tif (_.isEmpty(listings) && !this.state.loading) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (_.isEmpty(listings)) {\n\t\t\tif (this.state.loading) {\n\t\t\t\treturn (\n\t\t\t\t\t<View style={styles.loadingPadding}>\n\t\t\t\t\t\t<Components.LoadingStateWidget height={180} />\n\t\t\t\t\t</View>\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\t// Show first 3 listings with peeking indicator\n\t\tconst listingsToShow = listings.slice(0, values.widget.maxItems);\n\n\t\treturn (\n\t\t\t<ScrollView\n\t\t\t\thorizontal\n\t\t\t\tcontentContainerStyle={{\n\t\t\t\t\tpaddingLeft: SPACING.XS + 2,\n\t\t\t\t\tpaddingRight: SPACING.SM,\n\t\t\t\t}}\n\t\t\t\tshowsHorizontalScrollIndicator={false}\n\t\t\t>\n\t\t\t\t{listingsToShow.map((listing) => this.renderListingCard(listing))}\n\t\t\t\t{listings.length > values.widget.maxItems && (\n\t\t\t\t\t<TouchableOpacity\n\t\t\t\t\t\tstyle={[styles.cardContainer, styles.viewMoreCard]}\n\t\t\t\t\t\tonPress={this.onPressAll}\n\t\t\t\t\t>\n\t\t\t\t\t\t<View style={[styles.borderContainer, styles.viewMoreContainer]}>\n\t\t\t\t\t\t\t<Text style={styles.viewMoreText}>View all</Text>\n\t\t\t\t\t\t\t<Text style={styles.viewMoreCount}>{listings.length} items</Text>\n\t\t\t\t\t\t</View>\n\t\t\t\t\t</TouchableOpacity>\n\t\t\t\t)}\n\t\t\t</ScrollView>\n\t\t);\n\t}\n\n\trender() {\n\t\tconst { colourBrandingMain } = this.props;\n\n\t\tconst content = this.renderContent();\n\t\t// Don't render widget section if content is null (no features available)\n\t\tif (content === null) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn (\n\t\t\t<View style={styles.sectionContainer}>\n\t\t\t\t<View style={styles.sectionPadding}>\n\t\t\t\t\t<View style={styles.sectionHeading}>\n\t\t\t\t\t\t<Text style={styles.sectionTitle}>{this.getTitle()}</Text>\n\t\t\t\t\t\t<Components.InlineButton\n\t\t\t\t\t\t\tonPress={this.onPressAll}\n\t\t\t\t\t\t\tcolor={colourBrandingMain}\n\t\t\t\t\t\t\ttouchableStyle={{ paddingTop: SPACING.XS + 2 }}\n\t\t\t\t\t\t\ttextStyle={{ color: \"#fff\" }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{values.labels.viewAll}\n\t\t\t\t\t\t</Components.InlineButton>\n\t\t\t\t\t</View>\n\t\t\t\t</View>\n\t\t\t\t{content}\n\t\t\t</View>\n\t\t);\n\t}\n}\n\nconst styles = StyleSheet.create({\n\tsectionContainer: {\n\t\tbackgroundColor: \"#fff\",\n\t\tpaddingTop: SPACING.MD,\n\t},\n\tsectionPadding: {\n\t\tpaddingHorizontal: SPACING.MD,\n\t\tpaddingBottom: SPACING.XS + 2,\n\t},\n\tloadingPadding: {\n\t\tpaddingHorizontal: SPACING.MD,\n\t},\n\tsectionHeading: {\n\t\tmarginBottom: SPACING.XS,\n\t\tflexDirection: \"row\",\n\t\talignContent: \"flex-start\",\n\t\tjustifyContent: \"space-between\",\n\t},\n\tsectionTitle: {\n\t\tfontFamily: \"sf-bold\",\n\t\tfontSize: 24,\n\t\tcolor: \"#000\",\n\t},\n\t// Listing card styles\n\tcardContainer: {\n\t\tmarginRight: SPACING.SM + 4,\n\t\twidth: values.widget.itemMaxWidth,\n\t},\n\tborderContainer: {\n\t\tborderRadius: SPACING.SM,\n\t\tbackgroundColor: \"#fff\",\n\t\tshadowColor: \"#000\",\n\t\tshadowOffset: {\n\t\t\twidth: 0,\n\t\t\theight: 2,\n\t\t},\n\t\tshadowOpacity: 0.1,\n\t\tshadowRadius: 3.84,\n\t\televation: 4,\n\t\tpadding: SPACING.SM,\n\t\tminHeight: values.widget.itemMinWidth,\n\t},\n\tcardImage: {\n\t\twidth: 88,\n\t\theight: 88,\n\t\tborderRadius: 44,\n\t\tbackgroundColor: \"#f0f0f0\",\n\t\talignSelf: \"center\",\n\t\tmarginBottom: SPACING.XS,\n\t},\n\tplaceholderImage: {\n\t\tjustifyContent: \"center\",\n\t\talignItems: \"center\",\n\t\tbackgroundColor: \"#f0f0f0\",\n\t},\n\tcardTitle: {\n\t\tfontFamily: \"sf-semibold\",\n\t\tfontSize: 14,\n\t\tcolor: \"#000\",\n\t\ttextAlign: \"center\",\n\t\tmarginBottom: 4,\n\t},\n\tcardSummary: {\n\t\tfontFamily: \"sf-regular\",\n\t\tfontSize: 12,\n\t\tcolor: \"#666\",\n\t\ttextAlign: \"center\",\n\t},\n\t// View more card\n\tviewMoreCard: {\n\t\tjustifyContent: \"center\",\n\t},\n\tviewMoreContainer: {\n\t\tjustifyContent: \"center\",\n\t\talignItems: \"center\",\n\t\tminHeight: values.widget.itemMinWidth,\n\t},\n\tviewMoreText: {\n\t\tfontFamily: \"sf-semibold\",\n\t\tfontSize: 14,\n\t\tcolor: Colours.TEXT_DARK || \"#000\",\n\t},\n\tviewMoreCount: {\n\t\tfontFamily: \"sf-regular\",\n\t\tfontSize: 12,\n\t\tcolor: \"#666\",\n\t\tmarginTop: 2,\n\t},\n});\n\nconst mapStateToProps = (state) => {\n\tconst { user, notifications } = state;\n\n\treturn {\n\t\tcolourBrandingMain: getMainBrandingColourFromState(state),\n\t\tlistings: selectListings(state),\n\t\tfeatureDefinition: selectFeatureDefinition(state),\n\t\tsite: user.site,\n\t\tdataUpdated: notifications.dataUpdated[values.notificationKey],\n\t\tstrings: state.strings?.config || {},\n\t};\n};\n\nexport default connect(mapStateToProps, null, null, { forwardRef: true })(\n\tWidgetSmall,\n);\n"],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  import { Components } from "../../core.config";
2
2
  export const InlineButton = Components.InlineButton;
3
- export const ProfilePic = Components.ProfilePic;
3
+ // export const ProfilePic = Components.ProfilePic; // Disabled due to circular dependency in core-app package
4
4
  export const EmptyStateMain = Components.EmptyStateMain;
5
5
  export const Spinner = Components.Spinner;
6
6
  export const MiddlePopup = Components.MiddlePopup;
@@ -1 +1 @@
1
- {"version":3,"names":["Components","InlineButton","ProfilePic","EmptyStateMain","Spinner","MiddlePopup","BackButton","UserListing","GenericInput","Toggle","ImageUploader","Header","FormCard","FormCardSection","Input","StickyFooter","LoadingIndicator","ConfirmPopup","DropDownMenu","DropDownItem","PlussChat","Attachment"],"sources":["index.js"],"sourcesContent":["import { Components } from \"../../core.config\";\n\nexport const InlineButton = Components.InlineButton;\nexport const ProfilePic = Components.ProfilePic;\nexport const EmptyStateMain = Components.EmptyStateMain;\nexport const Spinner = Components.Spinner;\nexport const MiddlePopup = Components.MiddlePopup;\nexport const BackButton = Components.BackButton;\nexport const UserListing = Components.UserListing;\nexport const GenericInput = Components.GenericInput;\nexport const Toggle = Components.Toggle;\nexport const ImageUploader = Components.ImageUploader;\nexport const Header = Components.Header;\nexport const FormCard = Components.FormCard;\nexport const FormCardSection = Components.FormCardSection;\nexport const Input = Components.Input;\nexport const StickyFooter = Components.StickyFooter;\nexport const LoadingIndicator = Components.LoadingIndicator;\nexport const ConfirmPopup = Components.ConfirmPopup;\nexport const DropDownMenu = Components.DropDownMenu;\nexport const DropDownItem = Components.DropDownItem;\nexport const PlussChat = Components.PlussChat;\nexport const Attachment = Components.Attachment;\n\n// TODO: Add core components as required\n"],"mappings":"AAAA,SAASA,UAAU,QAAQ,mBAAmB;AAE9C,OAAO,MAAMC,YAAY,GAAGD,UAAU,CAACC,YAAY;AACnD,OAAO,MAAMC,UAAU,GAAGF,UAAU,CAACE,UAAU;AAC/C,OAAO,MAAMC,cAAc,GAAGH,UAAU,CAACG,cAAc;AACvD,OAAO,MAAMC,OAAO,GAAGJ,UAAU,CAACI,OAAO;AACzC,OAAO,MAAMC,WAAW,GAAGL,UAAU,CAACK,WAAW;AACjD,OAAO,MAAMC,UAAU,GAAGN,UAAU,CAACM,UAAU;AAC/C,OAAO,MAAMC,WAAW,GAAGP,UAAU,CAACO,WAAW;AACjD,OAAO,MAAMC,YAAY,GAAGR,UAAU,CAACQ,YAAY;AACnD,OAAO,MAAMC,MAAM,GAAGT,UAAU,CAACS,MAAM;AACvC,OAAO,MAAMC,aAAa,GAAGV,UAAU,CAACU,aAAa;AACrD,OAAO,MAAMC,MAAM,GAAGX,UAAU,CAACW,MAAM;AACvC,OAAO,MAAMC,QAAQ,GAAGZ,UAAU,CAACY,QAAQ;AAC3C,OAAO,MAAMC,eAAe,GAAGb,UAAU,CAACa,eAAe;AACzD,OAAO,MAAMC,KAAK,GAAGd,UAAU,CAACc,KAAK;AACrC,OAAO,MAAMC,YAAY,GAAGf,UAAU,CAACe,YAAY;AACnD,OAAO,MAAMC,gBAAgB,GAAGhB,UAAU,CAACgB,gBAAgB;AAC3D,OAAO,MAAMC,YAAY,GAAGjB,UAAU,CAACiB,YAAY;AACnD,OAAO,MAAMC,YAAY,GAAGlB,UAAU,CAACkB,YAAY;AACnD,OAAO,MAAMC,YAAY,GAAGnB,UAAU,CAACmB,YAAY;AACnD,OAAO,MAAMC,SAAS,GAAGpB,UAAU,CAACoB,SAAS;AAC7C,OAAO,MAAMC,UAAU,GAAGrB,UAAU,CAACqB,UAAU;;AAE/C","ignoreList":[]}
1
+ {"version":3,"names":["Components","InlineButton","EmptyStateMain","Spinner","MiddlePopup","BackButton","UserListing","GenericInput","Toggle","ImageUploader","Header","FormCard","FormCardSection","Input","StickyFooter","LoadingIndicator","ConfirmPopup","DropDownMenu","DropDownItem","PlussChat","Attachment"],"sources":["index.js"],"sourcesContent":["import { Components } from \"../../core.config\";\n\nexport const InlineButton = Components.InlineButton;\n// export const ProfilePic = Components.ProfilePic; // Disabled due to circular dependency in core-app package\nexport const EmptyStateMain = Components.EmptyStateMain;\nexport const Spinner = Components.Spinner;\nexport const MiddlePopup = Components.MiddlePopup;\nexport const BackButton = Components.BackButton;\nexport const UserListing = Components.UserListing;\nexport const GenericInput = Components.GenericInput;\nexport const Toggle = Components.Toggle;\nexport const ImageUploader = Components.ImageUploader;\nexport const Header = Components.Header;\nexport const FormCard = Components.FormCard;\nexport const FormCardSection = Components.FormCardSection;\nexport const Input = Components.Input;\nexport const StickyFooter = Components.StickyFooter;\nexport const LoadingIndicator = Components.LoadingIndicator;\nexport const ConfirmPopup = Components.ConfirmPopup;\nexport const DropDownMenu = Components.DropDownMenu;\nexport const DropDownItem = Components.DropDownItem;\nexport const PlussChat = Components.PlussChat;\nexport const Attachment = Components.Attachment;\n\n// TODO: Add core components as required\n"],"mappings":"AAAA,SAASA,UAAU,QAAQ,mBAAmB;AAE9C,OAAO,MAAMC,YAAY,GAAGD,UAAU,CAACC,YAAY;AACnD;AACA,OAAO,MAAMC,cAAc,GAAGF,UAAU,CAACE,cAAc;AACvD,OAAO,MAAMC,OAAO,GAAGH,UAAU,CAACG,OAAO;AACzC,OAAO,MAAMC,WAAW,GAAGJ,UAAU,CAACI,WAAW;AACjD,OAAO,MAAMC,UAAU,GAAGL,UAAU,CAACK,UAAU;AAC/C,OAAO,MAAMC,WAAW,GAAGN,UAAU,CAACM,WAAW;AACjD,OAAO,MAAMC,YAAY,GAAGP,UAAU,CAACO,YAAY;AACnD,OAAO,MAAMC,MAAM,GAAGR,UAAU,CAACQ,MAAM;AACvC,OAAO,MAAMC,aAAa,GAAGT,UAAU,CAACS,aAAa;AACrD,OAAO,MAAMC,MAAM,GAAGV,UAAU,CAACU,MAAM;AACvC,OAAO,MAAMC,QAAQ,GAAGX,UAAU,CAACW,QAAQ;AAC3C,OAAO,MAAMC,eAAe,GAAGZ,UAAU,CAACY,eAAe;AACzD,OAAO,MAAMC,KAAK,GAAGb,UAAU,CAACa,KAAK;AACrC,OAAO,MAAMC,YAAY,GAAGd,UAAU,CAACc,YAAY;AACnD,OAAO,MAAMC,gBAAgB,GAAGf,UAAU,CAACe,gBAAgB;AAC3D,OAAO,MAAMC,YAAY,GAAGhB,UAAU,CAACgB,YAAY;AACnD,OAAO,MAAMC,YAAY,GAAGjB,UAAU,CAACiB,YAAY;AACnD,OAAO,MAAMC,YAAY,GAAGlB,UAAU,CAACkB,YAAY;AACnD,OAAO,MAAMC,SAAS,GAAGnB,UAAU,CAACmB,SAAS;AAC7C,OAAO,MAAMC,UAAU,GAAGpB,UAAU,CAACoB,UAAU;;AAE/C","ignoreList":[]}
@@ -1,7 +1,9 @@
1
- import _ from "lodash";
1
+ import _ from 'lodash';
2
2
  // import * as PlussCore from '../../pluss-core/src';
3
- import * as PlussCore from "@plusscommunities/pluss-core-app";
4
- import { values } from "./values.config";
3
+ import * as PlussCore from '@plusscommunities/pluss-core-app';
4
+ import { values } from './values.config';
5
+ import { loadTargetFeature } from './actions/featureBuilderActions';
6
+ import { updateFeatureBuilderString, updateFeatureBuilderIcon } from './actions/featureBuilderStringsActions';
5
7
  export { PlussCore };
6
8
  export const Services = {
7
9
  navigation: null
@@ -9,13 +11,6 @@ export const Services = {
9
11
  export const BaseComponents = {
10
12
  NotificationBell: null
11
13
  };
12
-
13
- // These will be set when the components are imported in index.js
14
- export const setWidgets = (small, large, grid) => {
15
- WidgetSmall = small;
16
- WidgetLarge = large;
17
- WidgetGrid = grid;
18
- };
19
14
  const fetchFeatured = async (site, store, props) => {
20
15
  // No-op: listings are already loaded by loadTargetFeature()
21
16
  return [];
@@ -27,14 +22,14 @@ const getFeatured = (state, features) => {
27
22
  if (!listings || listings.length === 0) return [];
28
23
 
29
24
  // Get latest 3-4 listings, sorted by createdAt or updatedAt
30
- const latestListings = _.orderBy(listings, [item => item.createdAt || item.updatedAt], ["desc"]).slice(0, 4);
25
+ const latestListings = _.orderBy(listings, [item => item.createdAt || item.updatedAt], ['desc']).slice(0, 4);
31
26
  return latestListings.map(listing => {
32
27
  var _listing$fields, _listing$fields2;
33
28
  const title = ((_listing$fields = listing.fields) === null || _listing$fields === void 0 ? void 0 : _listing$fields[values.mandatoryFields.title]) || values.labels.defaultTitle;
34
29
  const imageField = (_listing$fields2 = listing.fields) === null || _listing$fields2 === void 0 ? void 0 : _listing$fields2[values.mandatoryFields.featureImage];
35
30
  let imageSource = null;
36
31
  if (imageField) {
37
- if (typeof imageField === "string") {
32
+ if (typeof imageField === 'string') {
38
33
  imageSource = imageField;
39
34
  } else if (imageField !== null && imageField !== void 0 && imageField.url) {
40
35
  imageSource = imageField.url;
@@ -46,7 +41,7 @@ const getFeatured = (state, features) => {
46
41
  id: listing.id,
47
42
  type: values.featureKey,
48
43
  title: title,
49
- description: "",
44
+ description: '',
50
45
  image: imageSource,
51
46
  date: listing.createdAt || listing.updatedAt || 0,
52
47
  data: listing
@@ -55,7 +50,7 @@ const getFeatured = (state, features) => {
55
50
  };
56
51
  const FeatureConfig = {
57
52
  key: values.featureKey,
58
- aliases: ["feature-builder", "custom-features"],
53
+ aliases: ['feature-builder', 'custom-features'],
59
54
  title: values.featureName,
60
55
  gridMenu: {
61
56
  icon: values.navigation.gridMenu.icon,
@@ -77,7 +72,7 @@ const FeatureConfig = {
77
72
  prop: values.featureKey,
78
73
  reducer: {
79
74
  key: values.featureKey,
80
- prop: "list"
75
+ prop: 'list'
81
76
  },
82
77
  updateKey: values.featureKey,
83
78
  fetch: fetchFeatured,
@@ -87,19 +82,19 @@ const FeatureConfig = {
87
82
  // No special tab bar hiding needed
88
83
 
89
84
  env: {
90
- baseStage: "",
91
- baseAPIUrl: "",
85
+ baseStage: '',
86
+ baseAPIUrl: '',
92
87
  hasGradientHeader: false,
93
- defaultProfileImage: "",
94
- tinyChatDefault: "",
95
- baseUploadsUrl: "",
88
+ defaultProfileImage: '',
89
+ tinyChatDefault: '',
90
+ baseUploadsUrl: '',
96
91
  allowMediaDownload: false,
97
92
  allowMediaSharing: false,
98
- awsUploadsBucket: "",
99
- awsStorageBucket: "",
100
- preferredSite: "",
93
+ awsUploadsBucket: '',
94
+ awsStorageBucket: '',
95
+ preferredSite: '',
101
96
  strings: {},
102
- newEventDefaults: "",
97
+ newEventDefaults: '',
103
98
  defaultAllowComments: true
104
99
  },
105
100
  init: (environment, navigation, notificationBell) => {
@@ -107,6 +102,20 @@ const FeatureConfig = {
107
102
  Services.navigation = navigation;
108
103
  BaseComponents.NotificationBell = notificationBell;
109
104
  PlussCore.Config.init(environment, navigation);
105
+ },
106
+ afterStoreInit: (dispatch, getState) => {
107
+ var _getState$user;
108
+ // Get the site from state (guaranteed to be available due to polling)
109
+ const site = (_getState$user = getState().user) === null || _getState$user === void 0 ? void 0 : _getState$user.site;
110
+ if (site) {
111
+ // Show loading state before fetching
112
+ dispatch(updateFeatureBuilderString('Loading...'));
113
+ dispatch(updateFeatureBuilderIcon('spinner'));
114
+
115
+ // Load the target feature definition and listings
116
+ // This will also update the title and icon from the definition
117
+ dispatch(loadTargetFeature());
118
+ }
110
119
  }
111
120
  };
112
121
  export default FeatureConfig;
@@ -1 +1 @@
1
- {"version":3,"names":["_","PlussCore","values","Services","navigation","BaseComponents","NotificationBell","setWidgets","small","large","grid","WidgetSmall","WidgetLarge","WidgetGrid","fetchFeatured","site","store","props","getFeatured","state","features","_state$values$reducer","includes","featureKey","listings","reducerKey","length","latestListings","orderBy","item","createdAt","updatedAt","slice","map","listing","_listing$fields","_listing$fields2","title","fields","mandatoryFields","labels","defaultTitle","imageField","featureImage","imageSource","url","uri","id","type","description","image","date","data","FeatureConfig","key","aliases","featureName","gridMenu","icon","viewBox","navigate","options","addMenu","moreMenu","kioskAction","notification","submission","featured","prop","reducer","updateKey","fetch","get","hideTabBar","env","baseStage","baseAPIUrl","hasGradientHeader","defaultProfileImage","tinyChatDefault","baseUploadsUrl","allowMediaDownload","allowMediaSharing","awsUploadsBucket","awsStorageBucket","preferredSite","strings","newEventDefaults","defaultAllowComments","init","environment","notificationBell","Config"],"sources":["feature.config.js"],"sourcesContent":["import _ from \"lodash\";\n// import * as PlussCore from '../../pluss-core/src';\nimport * as PlussCore from \"@plusscommunities/pluss-core-app\";\nimport { values } from \"./values.config\";\n\nexport { PlussCore };\n\nexport const Services = {\n\tnavigation: null,\n};\n\nexport const BaseComponents = {\n\tNotificationBell: null,\n};\n\n// These will be set when the components are imported in index.js\nexport const setWidgets = (small, large, grid) => {\n\tWidgetSmall = small;\n\tWidgetLarge = large;\n\tWidgetGrid = grid;\n};\n\nconst fetchFeatured = async (site, store, props) => {\n\t// No-op: listings are already loaded by loadTargetFeature()\n\treturn [];\n};\n\nconst getFeatured = (state, features) => {\n\tif (!_.includes(features, values.featureKey)) return null;\n\n\tconst listings = state[values.reducerKey]?.listings || [];\n\tif (!listings || listings.length === 0) return [];\n\n\t// Get latest 3-4 listings, sorted by createdAt or updatedAt\n\tconst latestListings = _.orderBy(\n\t\tlistings,\n\t\t[(item) => item.createdAt || item.updatedAt],\n\t\t[\"desc\"]\n\t).slice(0, 4);\n\n\treturn latestListings.map((listing) => {\n\t\tconst title = listing.fields?.[values.mandatoryFields.title] || values.labels.defaultTitle;\n\t\tconst imageField = listing.fields?.[values.mandatoryFields.featureImage];\n\t\tlet imageSource = null;\n\n\t\tif (imageField) {\n\t\t\tif (typeof imageField === \"string\") {\n\t\t\t\timageSource = imageField;\n\t\t\t} else if (imageField?.url) {\n\t\t\t\timageSource = imageField.url;\n\t\t\t} else if (imageField?.uri) {\n\t\t\t\timageSource = imageField.uri;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tid: listing.id,\n\t\t\ttype: values.featureKey,\n\t\t\ttitle: title,\n\t\t\tdescription: \"\",\n\t\t\timage: imageSource,\n\t\t\tdate: listing.createdAt || listing.updatedAt || 0,\n\t\t\tdata: listing,\n\t\t};\n\t});\n};\n\nconst FeatureConfig = {\n\tkey: values.featureKey,\n\taliases: [\"feature-builder\", \"custom-features\"],\n\ttitle: values.featureName,\n\n\tgridMenu: {\n\t\ticon: values.navigation.gridMenu.icon,\n\t\tviewBox: values.navigation.gridMenu.viewBox,\n\t\tnavigate: values.navigation.gridMenu.navigate,\n\t\toptions: values.navigation.gridMenu.options,\n\t},\n\n\t// For now, keep other menus minimal since this is primarily a display feature\n\taddMenu: null,\n\tmoreMenu: null,\n\tkioskAction: null,\n\n\tnotification: null, // No notifications for MVP\n\tsubmission: null, // No submissions for MVP\n\n\tfeatured: {\n\t\ttype: values.featureKey,\n\t\tprop: values.featureKey,\n\t\treducer: {\n\t\t\tkey: values.featureKey,\n\t\t\tprop: \"list\",\n\t\t},\n\t\tupdateKey: values.featureKey,\n\t\tfetch: fetchFeatured,\n\t\tget: getFeatured,\n\t},\n\n\thideTabBar: [], // No special tab bar hiding needed\n\n\tenv: {\n\t\tbaseStage: \"\",\n\t\tbaseAPIUrl: \"\",\n\t\thasGradientHeader: false,\n\t\tdefaultProfileImage: \"\",\n\t\ttinyChatDefault: \"\",\n\t\tbaseUploadsUrl: \"\",\n\t\tallowMediaDownload: false,\n\t\tallowMediaSharing: false,\n\t\tawsUploadsBucket: \"\",\n\t\tawsStorageBucket: \"\",\n\t\tpreferredSite: \"\",\n\t\tstrings: {},\n\t\tnewEventDefaults: \"\",\n\t\tdefaultAllowComments: true,\n\t},\n\n\tinit: (environment, navigation, notificationBell) => {\n\t\tFeatureConfig.env = environment;\n\t\tServices.navigation = navigation;\n\t\tBaseComponents.NotificationBell = notificationBell;\n\t\tPlussCore.Config.init(environment, navigation);\n\t},\n};\n\nexport default FeatureConfig;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_","PlussCore","values","loadTargetFeature","updateFeatureBuilderString","updateFeatureBuilderIcon","Services","navigation","BaseComponents","NotificationBell","fetchFeatured","site","store","props","getFeatured","state","features","_state$values$reducer","includes","featureKey","listings","reducerKey","length","latestListings","orderBy","item","createdAt","updatedAt","slice","map","listing","_listing$fields","_listing$fields2","title","fields","mandatoryFields","labels","defaultTitle","imageField","featureImage","imageSource","url","uri","id","type","description","image","date","data","FeatureConfig","key","aliases","featureName","gridMenu","icon","viewBox","navigate","options","addMenu","moreMenu","kioskAction","notification","submission","featured","prop","reducer","updateKey","fetch","get","hideTabBar","env","baseStage","baseAPIUrl","hasGradientHeader","defaultProfileImage","tinyChatDefault","baseUploadsUrl","allowMediaDownload","allowMediaSharing","awsUploadsBucket","awsStorageBucket","preferredSite","strings","newEventDefaults","defaultAllowComments","init","environment","notificationBell","Config","afterStoreInit","dispatch","getState","_getState$user","user"],"sources":["feature.config.js"],"sourcesContent":["import _ from 'lodash';\n// import * as PlussCore from '../../pluss-core/src';\nimport * as PlussCore from '@plusscommunities/pluss-core-app';\nimport { values } from './values.config';\nimport { loadTargetFeature } from './actions/featureBuilderActions';\nimport { updateFeatureBuilderString, updateFeatureBuilderIcon } from './actions/featureBuilderStringsActions';\n\nexport { PlussCore };\n\nexport const Services = {\n\tnavigation: null,\n};\n\nexport const BaseComponents = {\n\tNotificationBell: null,\n};\n\nconst fetchFeatured = async (site, store, props) => {\n\t// No-op: listings are already loaded by loadTargetFeature()\n\treturn [];\n};\n\nconst getFeatured = (state, features) => {\n\tif (!_.includes(features, values.featureKey)) return null;\n\n\tconst listings = state[values.reducerKey]?.listings || [];\n\tif (!listings || listings.length === 0) return [];\n\n\t// Get latest 3-4 listings, sorted by createdAt or updatedAt\n\tconst latestListings = _.orderBy(listings, [item => item.createdAt || item.updatedAt], ['desc']).slice(0, 4);\n\n\treturn latestListings.map(listing => {\n\t\tconst title = listing.fields?.[values.mandatoryFields.title] || values.labels.defaultTitle;\n\t\tconst imageField = listing.fields?.[values.mandatoryFields.featureImage];\n\t\tlet imageSource = null;\n\n\t\tif (imageField) {\n\t\t\tif (typeof imageField === 'string') {\n\t\t\t\timageSource = imageField;\n\t\t\t} else if (imageField?.url) {\n\t\t\t\timageSource = imageField.url;\n\t\t\t} else if (imageField?.uri) {\n\t\t\t\timageSource = imageField.uri;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tid: listing.id,\n\t\t\ttype: values.featureKey,\n\t\t\ttitle: title,\n\t\t\tdescription: '',\n\t\t\timage: imageSource,\n\t\t\tdate: listing.createdAt || listing.updatedAt || 0,\n\t\t\tdata: listing,\n\t\t};\n\t});\n};\n\nconst FeatureConfig = {\n\tkey: values.featureKey,\n\taliases: ['feature-builder', 'custom-features'],\n\ttitle: values.featureName,\n\n\tgridMenu: {\n\t\ticon: values.navigation.gridMenu.icon,\n\t\tviewBox: values.navigation.gridMenu.viewBox,\n\t\tnavigate: values.navigation.gridMenu.navigate,\n\t\toptions: values.navigation.gridMenu.options,\n\t},\n\n\t// For now, keep other menus minimal since this is primarily a display feature\n\taddMenu: null,\n\tmoreMenu: null,\n\tkioskAction: null,\n\n\tnotification: null, // No notifications for MVP\n\tsubmission: null, // No submissions for MVP\n\n\tfeatured: {\n\t\ttype: values.featureKey,\n\t\tprop: values.featureKey,\n\t\treducer: {\n\t\t\tkey: values.featureKey,\n\t\t\tprop: 'list',\n\t\t},\n\t\tupdateKey: values.featureKey,\n\t\tfetch: fetchFeatured,\n\t\tget: getFeatured,\n\t},\n\n\thideTabBar: [], // No special tab bar hiding needed\n\n\tenv: {\n\t\tbaseStage: '',\n\t\tbaseAPIUrl: '',\n\t\thasGradientHeader: false,\n\t\tdefaultProfileImage: '',\n\t\ttinyChatDefault: '',\n\t\tbaseUploadsUrl: '',\n\t\tallowMediaDownload: false,\n\t\tallowMediaSharing: false,\n\t\tawsUploadsBucket: '',\n\t\tawsStorageBucket: '',\n\t\tpreferredSite: '',\n\t\tstrings: {},\n\t\tnewEventDefaults: '',\n\t\tdefaultAllowComments: true,\n\t},\n\n\tinit: (environment, navigation, notificationBell) => {\n\t\tFeatureConfig.env = environment;\n\t\tServices.navigation = navigation;\n\t\tBaseComponents.NotificationBell = notificationBell;\n\t\tPlussCore.Config.init(environment, navigation);\n\t},\n\n\tafterStoreInit: (dispatch, getState) => {\n\t\t// Get the site from state (guaranteed to be available due to polling)\n\t\tconst site = getState().user?.site;\n\n\t\tif (site) {\n\t\t\t// Show loading state before fetching\n\t\t\tdispatch(updateFeatureBuilderString('Loading...'));\n\t\t\tdispatch(updateFeatureBuilderIcon('spinner'));\n\n\t\t\t// Load the target feature definition and listings\n\t\t\t// This will also update the title and icon from the definition\n\t\t\tdispatch(loadTargetFeature());\n\t\t}\n\t},\n};\n\nexport default FeatureConfig;\n"],"mappings":"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","ignoreList":[]}
@@ -1,24 +1,18 @@
1
- import FeatureConfig, { setWidgets } from "./feature.config";
2
- import featureBuilderReducer from "./reducers/featureBuilderReducer";
3
- import FeatureListScreen from "./components/FeatureListScreen";
4
- import FeatureDetailScreen from "./components/FeatureDetailScreen";
5
- import WidgetSmall from "./components/WidgetSmall";
6
- import WidgetLarge from "./components/WidgetLarge";
7
- import WidgetGrid from "./components/WidgetGrid";
8
- import { values } from "./values.config";
9
-
10
- // Set widgets in the config to avoid circular dependencies
11
- setWidgets(WidgetSmall, WidgetLarge, WidgetGrid);
1
+ import FeatureConfig from './feature.config';
2
+ import featureBuilderReducer from './reducers/featureBuilderReducer';
3
+ import FeatureListScreen from './components/FeatureListScreen';
4
+ import FeatureDetailScreen from './components/FeatureDetailScreen';
5
+ import { values } from './values.config';
12
6
  export const Reducers = {
13
7
  [values.reducerKey]: featureBuilderReducer
14
8
  };
15
9
  export const Screens = {
16
- FeatureBuilderList: FeatureListScreen,
17
- FeatureBuilderDetail: FeatureDetailScreen
10
+ [values.screens.featureList]: FeatureListScreen,
11
+ [values.screens.featureDetail]: FeatureDetailScreen
18
12
  };
19
- export { default as Config } from "./feature.config";
20
- export { default as WidgetSmall } from "./components/WidgetSmall";
21
- export { default as WidgetLarge } from "./components/WidgetLarge";
22
- export { default as WidgetGrid } from "./components/WidgetGrid";
13
+ export { default as Config } from './feature.config';
14
+ export { default as WidgetSmall } from './components/WidgetSmall';
15
+ export { default as WidgetLarge } from './components/WidgetLarge';
16
+ export { default as WidgetGrid } from './components/WidgetGrid';
23
17
  export { FeatureConfig };
24
18
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["FeatureConfig","setWidgets","featureBuilderReducer","FeatureListScreen","FeatureDetailScreen","WidgetSmall","WidgetLarge","WidgetGrid","values","Reducers","reducerKey","Screens","FeatureBuilderList","FeatureBuilderDetail","default","Config"],"sources":["index.js"],"sourcesContent":["import FeatureConfig, { setWidgets } from \"./feature.config\";\nimport featureBuilderReducer from \"./reducers/featureBuilderReducer\";\nimport FeatureListScreen from \"./components/FeatureListScreen\";\nimport FeatureDetailScreen from \"./components/FeatureDetailScreen\";\nimport WidgetSmall from \"./components/WidgetSmall\";\nimport WidgetLarge from \"./components/WidgetLarge\";\nimport WidgetGrid from \"./components/WidgetGrid\";\nimport { values } from \"./values.config\";\n\n// Set widgets in the config to avoid circular dependencies\nsetWidgets(WidgetSmall, WidgetLarge, WidgetGrid);\n\nexport const Reducers = {\n\t[values.reducerKey]: featureBuilderReducer,\n};\n\nexport const Screens = {\n\tFeatureBuilderList: FeatureListScreen,\n\tFeatureBuilderDetail: FeatureDetailScreen,\n};\n\nexport { default as Config } from \"./feature.config\";\nexport { default as WidgetSmall } from \"./components/WidgetSmall\";\nexport { default as WidgetLarge } from \"./components/WidgetLarge\";\nexport { default as WidgetGrid } from \"./components/WidgetGrid\";\n\nexport { FeatureConfig };\n"],"mappings":"AAAA,OAAOA,aAAa,IAAIC,UAAU,QAAQ,kBAAkB;AAC5D,OAAOC,qBAAqB,MAAM,kCAAkC;AACpE,OAAOC,iBAAiB,MAAM,gCAAgC;AAC9D,OAAOC,mBAAmB,MAAM,kCAAkC;AAClE,OAAOC,WAAW,MAAM,0BAA0B;AAClD,OAAOC,WAAW,MAAM,0BAA0B;AAClD,OAAOC,UAAU,MAAM,yBAAyB;AAChD,SAASC,MAAM,QAAQ,iBAAiB;;AAExC;AACAP,UAAU,CAACI,WAAW,EAAEC,WAAW,EAAEC,UAAU,CAAC;AAEhD,OAAO,MAAME,QAAQ,GAAG;EACvB,CAACD,MAAM,CAACE,UAAU,GAAGR;AACtB,CAAC;AAED,OAAO,MAAMS,OAAO,GAAG;EACtBC,kBAAkB,EAAET,iBAAiB;EACrCU,oBAAoB,EAAET;AACvB,CAAC;AAED,SAASU,OAAO,IAAIC,MAAM,QAAQ,kBAAkB;AACpD,SAASD,OAAO,IAAIT,WAAW,QAAQ,0BAA0B;AACjE,SAASS,OAAO,IAAIR,WAAW,QAAQ,0BAA0B;AACjE,SAASQ,OAAO,IAAIP,UAAU,QAAQ,yBAAyB;AAE/D,SAASP,aAAa","ignoreList":[]}
1
+ {"version":3,"names":["FeatureConfig","featureBuilderReducer","FeatureListScreen","FeatureDetailScreen","values","Reducers","reducerKey","Screens","screens","featureList","featureDetail","default","Config","WidgetSmall","WidgetLarge","WidgetGrid"],"sources":["index.js"],"sourcesContent":["import FeatureConfig from './feature.config';\nimport featureBuilderReducer from './reducers/featureBuilderReducer';\nimport FeatureListScreen from './components/FeatureListScreen';\nimport FeatureDetailScreen from './components/FeatureDetailScreen';\nimport { values } from './values.config';\n\nexport const Reducers = {\n\t[values.reducerKey]: featureBuilderReducer,\n};\n\nexport const Screens = {\n\t[values.screens.featureList]: FeatureListScreen,\n\t[values.screens.featureDetail]: FeatureDetailScreen,\n};\n\nexport { default as Config } from './feature.config';\nexport { default as WidgetSmall } from './components/WidgetSmall';\nexport { default as WidgetLarge } from './components/WidgetLarge';\nexport { default as WidgetGrid } from './components/WidgetGrid';\n\nexport { FeatureConfig };\n"],"mappings":"AAAA,OAAOA,aAAa,MAAM,kBAAkB;AAC5C,OAAOC,qBAAqB,MAAM,kCAAkC;AACpE,OAAOC,iBAAiB,MAAM,gCAAgC;AAC9D,OAAOC,mBAAmB,MAAM,kCAAkC;AAClE,SAASC,MAAM,QAAQ,iBAAiB;AAExC,OAAO,MAAMC,QAAQ,GAAG;EACvB,CAACD,MAAM,CAACE,UAAU,GAAGL;AACtB,CAAC;AAED,OAAO,MAAMM,OAAO,GAAG;EACtB,CAACH,MAAM,CAACI,OAAO,CAACC,WAAW,GAAGP,iBAAiB;EAC/C,CAACE,MAAM,CAACI,OAAO,CAACE,aAAa,GAAGP;AACjC,CAAC;AAED,SAASQ,OAAO,IAAIC,MAAM,QAAQ,kBAAkB;AACpD,SAASD,OAAO,IAAIE,WAAW,QAAQ,0BAA0B;AACjE,SAASF,OAAO,IAAIG,WAAW,QAAQ,0BAA0B;AACjE,SAASH,OAAO,IAAII,UAAU,QAAQ,yBAAyB;AAE/D,SAASf,aAAa","ignoreList":[]}
@@ -1,4 +1,3 @@
1
- import { values } from "../values.config";
2
1
  import { FeatureBuilderActionTypes } from "../actions/featureBuilderActions";
3
2
  const initialState = {
4
3
  feature: null,
@@ -36,40 +35,4 @@ const featureBuilderReducer = (state = initialState, action) => {
36
35
  }
37
36
  };
38
37
  export default featureBuilderReducer;
39
-
40
- // --- Selectors ---
41
-
42
- // Use values.reducerKey to access the correct state slice for multi-instance support
43
- export const selectFeature = state => {
44
- var _state$values$reducer;
45
- return (_state$values$reducer = state[values.reducerKey]) === null || _state$values$reducer === void 0 ? void 0 : _state$values$reducer.feature;
46
- };
47
- export const selectFeatureDefinition = state => {
48
- var _state$values$reducer2;
49
- return (_state$values$reducer2 = state[values.reducerKey]) === null || _state$values$reducer2 === void 0 ? void 0 : _state$values$reducer2.feature;
50
- };
51
- export const selectListings = state => {
52
- var _state$values$reducer3;
53
- return ((_state$values$reducer3 = state[values.reducerKey]) === null || _state$values$reducer3 === void 0 ? void 0 : _state$values$reducer3.listings) || [];
54
- };
55
- export const selectListingsForFeature = state => {
56
- var _state$values$reducer4;
57
- return ((_state$values$reducer4 = state[values.reducerKey]) === null || _state$values$reducer4 === void 0 ? void 0 : _state$values$reducer4.listings) || [];
58
- };
59
-
60
- // Legacy Helpers for Widgets
61
- export const selectActiveFeatureDefinitions = state => {
62
- var _state$values$reducer5;
63
- return (_state$values$reducer5 = state[values.reducerKey]) !== null && _state$values$reducer5 !== void 0 && _state$values$reducer5.feature ? [state[values.reducerKey].feature] : [];
64
- };
65
- export const selectFeaturesWithListings = state => {
66
- var _state$values$reducer6, _state$values$reducer7;
67
- const feature = (_state$values$reducer6 = state[values.reducerKey]) === null || _state$values$reducer6 === void 0 ? void 0 : _state$values$reducer6.feature;
68
- const listings = (_state$values$reducer7 = state[values.reducerKey]) === null || _state$values$reducer7 === void 0 ? void 0 : _state$values$reducer7.listings;
69
- if (!feature || !listings) return [];
70
- return [{
71
- definition: feature,
72
- listings: listings
73
- }];
74
- };
75
38
  //# sourceMappingURL=featureBuilderReducer.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["values","FeatureBuilderActionTypes","initialState","feature","listings","loading","error","featureBuilderReducer","state","action","type","LOADING","LOAD_SUCCESS","payload","FAILURE","selectFeature","_state$values$reducer","reducerKey","selectFeatureDefinition","_state$values$reducer2","selectListings","_state$values$reducer3","selectListingsForFeature","_state$values$reducer4","selectActiveFeatureDefinitions","_state$values$reducer5","selectFeaturesWithListings","_state$values$reducer6","_state$values$reducer7","definition"],"sources":["featureBuilderReducer.js"],"sourcesContent":["import { values } from \"../values.config\";\nimport { FeatureBuilderActionTypes } from \"../actions/featureBuilderActions\";\n\nconst initialState = {\n\tfeature: null,\n\tlistings: [],\n\tloading: false,\n\terror: null,\n};\n\nconst featureBuilderReducer = (state = initialState, action) => {\n\tswitch (action.type) {\n\t\tcase FeatureBuilderActionTypes.LOADING:\n\t\t\treturn { ...state, loading: true, error: null };\n\n\t\tcase FeatureBuilderActionTypes.LOAD_SUCCESS:\n\t\t\tconst { feature, listings } = action.payload;\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tloading: false,\n\t\t\t\tfeature: feature,\n\t\t\t\tlistings: listings,\n\t\t\t};\n\n\t\tcase FeatureBuilderActionTypes.FAILURE:\n\t\t\treturn { ...state, loading: false, error: action.payload };\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n};\n\nexport default featureBuilderReducer;\n\n// --- Selectors ---\n\n// Use values.reducerKey to access the correct state slice for multi-instance support\nexport const selectFeature = (state) => {\n\treturn state[values.reducerKey]?.feature;\n};\n\nexport const selectFeatureDefinition = (state) => {\n\treturn state[values.reducerKey]?.feature;\n};\n\nexport const selectListings = (state) => {\n\treturn state[values.reducerKey]?.listings || [];\n};\n\nexport const selectListingsForFeature = (state) => {\n\treturn state[values.reducerKey]?.listings || [];\n};\n\n// Legacy Helpers for Widgets\nexport const selectActiveFeatureDefinitions = (state) => {\n\treturn state[values.reducerKey]?.feature ? [state[values.reducerKey].feature] : [];\n};\n\nexport const selectFeaturesWithListings = (state) => {\n\tconst feature = state[values.reducerKey]?.feature;\n\tconst listings = state[values.reducerKey]?.listings;\n\tif (!feature || !listings) return [];\n\treturn [{ definition: feature, listings: listings }];\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["FeatureBuilderActionTypes","initialState","feature","listings","loading","error","featureBuilderReducer","state","action","type","LOADING","LOAD_SUCCESS","payload","FAILURE"],"sources":["featureBuilderReducer.js"],"sourcesContent":["import { FeatureBuilderActionTypes } from \"../actions/featureBuilderActions\";\n\nconst initialState = {\n\tfeature: null,\n\tlistings: [],\n\tloading: false,\n\terror: null,\n};\n\nconst featureBuilderReducer = (state = initialState, action) => {\n\tswitch (action.type) {\n\t\tcase FeatureBuilderActionTypes.LOADING:\n\t\t\treturn { ...state, loading: true, error: null };\n\n\t\tcase FeatureBuilderActionTypes.LOAD_SUCCESS:\n\t\t\tconst { feature, listings } = action.payload;\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tloading: false,\n\t\t\t\tfeature: feature,\n\t\t\t\tlistings: listings,\n\t\t\t};\n\n\t\tcase FeatureBuilderActionTypes.FAILURE:\n\t\t\treturn { ...state, loading: false, error: action.payload };\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n};\n\nexport default featureBuilderReducer;\n"],"mappings":"AAAA,SAASA,yBAAyB,QAAQ,kCAAkC;AAE5E,MAAMC,YAAY,GAAG;EACpBC,OAAO,EAAE,IAAI;EACbC,QAAQ,EAAE,EAAE;EACZC,OAAO,EAAE,KAAK;EACdC,KAAK,EAAE;AACR,CAAC;AAED,MAAMC,qBAAqB,GAAGA,CAACC,KAAK,GAAGN,YAAY,EAAEO,MAAM,KAAK;EAC/D,QAAQA,MAAM,CAACC,IAAI;IAClB,KAAKT,yBAAyB,CAACU,OAAO;MACrC,OAAO;QAAE,GAAGH,KAAK;QAAEH,OAAO,EAAE,IAAI;QAAEC,KAAK,EAAE;MAAK,CAAC;IAEhD,KAAKL,yBAAyB,CAACW,YAAY;MAC1C,MAAM;QAAET,OAAO;QAAEC;MAAS,CAAC,GAAGK,MAAM,CAACI,OAAO;MAC5C,OAAO;QACN,GAAGL,KAAK;QACRH,OAAO,EAAE,KAAK;QACdF,OAAO,EAAEA,OAAO;QAChBC,QAAQ,EAAEA;MACX,CAAC;IAEF,KAAKH,yBAAyB,CAACa,OAAO;MACrC,OAAO;QAAE,GAAGN,KAAK;QAAEH,OAAO,EAAE,KAAK;QAAEC,KAAK,EAAEG,MAAM,CAACI;MAAQ,CAAC;IAE3D;MACC,OAAOL,KAAK;EACd;AACD,CAAC;AAED,eAAeD,qBAAqB","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import { selectFeatureDefinition } from "../reducers/featureBuilderReducer";
1
+ import { selectFeatureDefinition } from "./selectors";
2
2
 
3
3
  /**
4
4
  * Get the target feature definition from the store
@@ -1 +1 @@
1
- {"version":3,"names":["selectFeatureDefinition","getTargetFeatureDefinition","state"],"sources":["featureSelectors.js"],"sourcesContent":["import { selectFeatureDefinition } from \"../reducers/featureBuilderReducer\";\n\n/**\n * Get the target feature definition from the store\n */\nexport const getTargetFeatureDefinition = (state) => {\n\treturn selectFeatureDefinition(state);\n};\n"],"mappings":"AAAA,SAASA,uBAAuB,QAAQ,mCAAmC;;AAE3E;AACA;AACA;AACA,OAAO,MAAMC,0BAA0B,GAAIC,KAAK,IAAK;EACpD,OAAOF,uBAAuB,CAACE,KAAK,CAAC;AACtC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["selectFeatureDefinition","getTargetFeatureDefinition","state"],"sources":["featureSelectors.js"],"sourcesContent":["import { selectFeatureDefinition } from \"./selectors\";\n\n/**\n * Get the target feature definition from the store\n */\nexport const getTargetFeatureDefinition = (state) => {\n\treturn selectFeatureDefinition(state);\n};\n"],"mappings":"AAAA,SAASA,uBAAuB,QAAQ,aAAa;;AAErD;AACA;AACA;AACA,OAAO,MAAMC,0BAA0B,GAAIC,KAAK,IAAK;EACpD,OAAOF,uBAAuB,CAACE,KAAK,CAAC;AACtC,CAAC","ignoreList":[]}
@@ -0,0 +1,38 @@
1
+ import { values } from "../values.config";
2
+
3
+ // --- Selectors ---
4
+ // Use values.reducerKey to access the correct state slice for multi-instance support
5
+
6
+ export const selectFeature = state => {
7
+ var _state$values$reducer;
8
+ return (_state$values$reducer = state[values.reducerKey]) === null || _state$values$reducer === void 0 ? void 0 : _state$values$reducer.feature;
9
+ };
10
+ export const selectFeatureDefinition = state => {
11
+ var _state$values$reducer2;
12
+ return (_state$values$reducer2 = state[values.reducerKey]) === null || _state$values$reducer2 === void 0 ? void 0 : _state$values$reducer2.feature;
13
+ };
14
+ export const selectListings = state => {
15
+ var _state$values$reducer3;
16
+ return ((_state$values$reducer3 = state[values.reducerKey]) === null || _state$values$reducer3 === void 0 ? void 0 : _state$values$reducer3.listings) || [];
17
+ };
18
+ export const selectListingsForFeature = state => {
19
+ var _state$values$reducer4;
20
+ return ((_state$values$reducer4 = state[values.reducerKey]) === null || _state$values$reducer4 === void 0 ? void 0 : _state$values$reducer4.listings) || [];
21
+ };
22
+
23
+ // Legacy Helpers for Widgets
24
+ export const selectActiveFeatureDefinitions = state => {
25
+ var _state$values$reducer5;
26
+ return (_state$values$reducer5 = state[values.reducerKey]) !== null && _state$values$reducer5 !== void 0 && _state$values$reducer5.feature ? [state[values.reducerKey].feature] : [];
27
+ };
28
+ export const selectFeaturesWithListings = state => {
29
+ var _state$values$reducer6, _state$values$reducer7;
30
+ const feature = (_state$values$reducer6 = state[values.reducerKey]) === null || _state$values$reducer6 === void 0 ? void 0 : _state$values$reducer6.feature;
31
+ const listings = (_state$values$reducer7 = state[values.reducerKey]) === null || _state$values$reducer7 === void 0 ? void 0 : _state$values$reducer7.listings;
32
+ if (!feature || !listings) return [];
33
+ return [{
34
+ definition: feature,
35
+ listings: listings
36
+ }];
37
+ };
38
+ //# sourceMappingURL=selectors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["values","selectFeature","state","_state$values$reducer","reducerKey","feature","selectFeatureDefinition","_state$values$reducer2","selectListings","_state$values$reducer3","listings","selectListingsForFeature","_state$values$reducer4","selectActiveFeatureDefinitions","_state$values$reducer5","selectFeaturesWithListings","_state$values$reducer6","_state$values$reducer7","definition"],"sources":["selectors.js"],"sourcesContent":["import { values } from \"../values.config\";\n\n// --- Selectors ---\n// Use values.reducerKey to access the correct state slice for multi-instance support\n\nexport const selectFeature = (state) => {\n\treturn state[values.reducerKey]?.feature;\n};\n\nexport const selectFeatureDefinition = (state) => {\n\treturn state[values.reducerKey]?.feature;\n};\n\nexport const selectListings = (state) => {\n\treturn state[values.reducerKey]?.listings || [];\n};\n\nexport const selectListingsForFeature = (state) => {\n\treturn state[values.reducerKey]?.listings || [];\n};\n\n// Legacy Helpers for Widgets\nexport const selectActiveFeatureDefinitions = (state) => {\n\treturn state[values.reducerKey]?.feature\n\t\t? [state[values.reducerKey].feature]\n\t\t: [];\n};\n\nexport const selectFeaturesWithListings = (state) => {\n\tconst feature = state[values.reducerKey]?.feature;\n\tconst listings = state[values.reducerKey]?.listings;\n\tif (!feature || !listings) return [];\n\treturn [{ definition: feature, listings: listings }];\n};\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,kBAAkB;;AAEzC;AACA;;AAEA,OAAO,MAAMC,aAAa,GAAIC,KAAK,IAAK;EAAA,IAAAC,qBAAA;EACvC,QAAAA,qBAAA,GAAOD,KAAK,CAACF,MAAM,CAACI,UAAU,CAAC,cAAAD,qBAAA,uBAAxBA,qBAAA,CAA0BE,OAAO;AACzC,CAAC;AAED,OAAO,MAAMC,uBAAuB,GAAIJ,KAAK,IAAK;EAAA,IAAAK,sBAAA;EACjD,QAAAA,sBAAA,GAAOL,KAAK,CAACF,MAAM,CAACI,UAAU,CAAC,cAAAG,sBAAA,uBAAxBA,sBAAA,CAA0BF,OAAO;AACzC,CAAC;AAED,OAAO,MAAMG,cAAc,GAAIN,KAAK,IAAK;EAAA,IAAAO,sBAAA;EACxC,OAAO,EAAAA,sBAAA,GAAAP,KAAK,CAACF,MAAM,CAACI,UAAU,CAAC,cAAAK,sBAAA,uBAAxBA,sBAAA,CAA0BC,QAAQ,KAAI,EAAE;AAChD,CAAC;AAED,OAAO,MAAMC,wBAAwB,GAAIT,KAAK,IAAK;EAAA,IAAAU,sBAAA;EAClD,OAAO,EAAAA,sBAAA,GAAAV,KAAK,CAACF,MAAM,CAACI,UAAU,CAAC,cAAAQ,sBAAA,uBAAxBA,sBAAA,CAA0BF,QAAQ,KAAI,EAAE;AAChD,CAAC;;AAED;AACA,OAAO,MAAMG,8BAA8B,GAAIX,KAAK,IAAK;EAAA,IAAAY,sBAAA;EACxD,OAAO,CAAAA,sBAAA,GAAAZ,KAAK,CAACF,MAAM,CAACI,UAAU,CAAC,cAAAU,sBAAA,eAAxBA,sBAAA,CAA0BT,OAAO,GACrC,CAACH,KAAK,CAACF,MAAM,CAACI,UAAU,CAAC,CAACC,OAAO,CAAC,GAClC,EAAE;AACN,CAAC;AAED,OAAO,MAAMU,0BAA0B,GAAIb,KAAK,IAAK;EAAA,IAAAc,sBAAA,EAAAC,sBAAA;EACpD,MAAMZ,OAAO,IAAAW,sBAAA,GAAGd,KAAK,CAACF,MAAM,CAACI,UAAU,CAAC,cAAAY,sBAAA,uBAAxBA,sBAAA,CAA0BX,OAAO;EACjD,MAAMK,QAAQ,IAAAO,sBAAA,GAAGf,KAAK,CAACF,MAAM,CAACI,UAAU,CAAC,cAAAa,sBAAA,uBAAxBA,sBAAA,CAA0BP,QAAQ;EACnD,IAAI,CAACL,OAAO,IAAI,CAACK,QAAQ,EAAE,OAAO,EAAE;EACpC,OAAO,CAAC;IAAEQ,UAAU,EAAEb,OAAO;IAAEK,QAAQ,EAAEA;EAAS,CAAC,CAAC;AACrD,CAAC","ignoreList":[]}