@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.
- package/dist/module/actions/featureBuilderActions.js +6 -4
- package/dist/module/actions/featureBuilderActions.js.map +1 -1
- package/dist/module/actions/featureBuilderStringsActions.js +19 -34
- package/dist/module/actions/featureBuilderStringsActions.js.map +1 -1
- package/dist/module/components/FeatureDetailScreen.js +1 -1
- package/dist/module/components/FeatureDetailScreen.js.map +1 -1
- package/dist/module/components/WidgetGrid.js +5 -2
- package/dist/module/components/WidgetGrid.js.map +1 -1
- package/dist/module/components/WidgetLarge.js +1 -1
- package/dist/module/components/WidgetLarge.js.map +1 -1
- package/dist/module/components/WidgetSmall.js +1 -1
- package/dist/module/components/WidgetSmall.js.map +1 -1
- package/dist/module/components/common/index.js +1 -1
- package/dist/module/components/common/index.js.map +1 -1
- package/dist/module/feature.config.js +33 -24
- package/dist/module/feature.config.js.map +1 -1
- package/dist/module/index.js +11 -17
- package/dist/module/index.js.map +1 -1
- package/dist/module/reducers/featureBuilderReducer.js +0 -37
- package/dist/module/reducers/featureBuilderReducer.js.map +1 -1
- package/dist/module/utils/featureSelectors.js +1 -1
- package/dist/module/utils/featureSelectors.js.map +1 -1
- package/dist/module/utils/selectors.js +38 -0
- package/dist/module/utils/selectors.js.map +1 -0
- package/dist/module/values.config.a.js +2 -24
- package/dist/module/values.config.a.js.map +1 -1
- package/dist/module/values.config.b.js +2 -24
- package/dist/module/values.config.b.js.map +1 -1
- package/dist/module/values.config.c.js +2 -24
- package/dist/module/values.config.c.js.map +1 -1
- package/dist/module/values.config.d.js +2 -24
- package/dist/module/values.config.d.js.map +1 -1
- package/dist/module/values.config.js +16 -38
- package/dist/module/values.config.js.map +1 -1
- package/dist/module/webapi/featureBuilderAPI.js +3 -11
- package/dist/module/webapi/featureBuilderAPI.js.map +1 -1
- package/package.json +2 -2
- package/src/actions/featureBuilderActions.js +7 -4
- package/src/actions/featureBuilderStringsActions.js +13 -35
- package/src/components/FeatureDetailScreen.js +1 -1
- package/src/components/WidgetGrid.js +6 -2
- package/src/components/WidgetLarge.js +6 -8
- package/src/components/WidgetSmall.js +7 -11
- package/src/components/common/index.js +1 -1
- package/src/feature.config.js +35 -29
- package/src/index.js +11 -17
- package/src/reducers/featureBuilderReducer.js +0 -32
- package/src/utils/featureSelectors.js +1 -1
- package/src/utils/selectors.js +34 -0
- package/src/values.config.a.js +4 -35
- package/src/values.config.b.js +4 -35
- package/src/values.config.c.js +4 -35
- package/src/values.config.d.js +4 -35
- package/src/values.config.js +4 -35
- package/src/webapi/featureBuilderAPI.js +3 -11
|
@@ -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 "../
|
|
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","
|
|
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
|
|
1
|
+
import _ from 'lodash';
|
|
2
2
|
// import * as PlussCore from '../../pluss-core/src';
|
|
3
|
-
import * as PlussCore from
|
|
4
|
-
import { values } from
|
|
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], [
|
|
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 ===
|
|
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: [
|
|
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:
|
|
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","
|
|
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":[]}
|
package/dist/module/index.js
CHANGED
|
@@ -1,24 +1,18 @@
|
|
|
1
|
-
import FeatureConfig
|
|
2
|
-
import featureBuilderReducer from
|
|
3
|
-
import FeatureListScreen from
|
|
4
|
-
import FeatureDetailScreen from
|
|
5
|
-
import
|
|
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
|
-
|
|
17
|
-
|
|
10
|
+
[values.screens.featureList]: FeatureListScreen,
|
|
11
|
+
[values.screens.featureDetail]: FeatureDetailScreen
|
|
18
12
|
};
|
|
19
|
-
export { default as Config } from
|
|
20
|
-
export { default as WidgetSmall } from
|
|
21
|
-
export { default as WidgetLarge } from
|
|
22
|
-
export { default as WidgetGrid } from
|
|
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
|
package/dist/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["FeatureConfig","
|
|
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":["
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"names":["selectFeatureDefinition","getTargetFeatureDefinition","state"],"sources":["featureSelectors.js"],"sourcesContent":["import { selectFeatureDefinition } from \"
|
|
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":[]}
|