@plusscommunities/pluss-feature-builder-app-d 8.0.6-beta.0 → 8.0.9

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 (34) hide show
  1. package/dist/module/actions/featureBuilderActions.js +1 -1
  2. package/dist/module/actions/featureBuilderActions.js.map +1 -1
  3. package/dist/module/components/FeatureListScreen.js +69 -40
  4. package/dist/module/components/FeatureListScreen.js.map +1 -1
  5. package/dist/module/components/Widget.js +8 -0
  6. package/dist/module/components/Widget.js.map +1 -0
  7. package/dist/module/components/WidgetLarge.js +80 -163
  8. package/dist/module/components/WidgetLarge.js.map +1 -1
  9. package/dist/module/components/WidgetSmall.js +82 -208
  10. package/dist/module/components/WidgetSmall.js.map +1 -1
  11. package/dist/module/components/layouts/CondensedList.js +3 -2
  12. package/dist/module/components/layouts/CondensedList.js.map +1 -1
  13. package/dist/module/components/layouts/FeatureImageList.js +3 -2
  14. package/dist/module/components/layouts/FeatureImageList.js.map +1 -1
  15. package/dist/module/components/layouts/RoundImageList.js +3 -2
  16. package/dist/module/components/layouts/RoundImageList.js.map +1 -1
  17. package/dist/module/components/layouts/SquareImageList.js +3 -2
  18. package/dist/module/components/layouts/SquareImageList.js.map +1 -1
  19. package/dist/module/feature.config.js +3 -2
  20. package/dist/module/feature.config.js.map +1 -1
  21. package/dist/module/index.js +2 -2
  22. package/dist/module/index.js.map +1 -1
  23. package/package.json +1 -1
  24. package/src/actions/featureBuilderActions.js +1 -1
  25. package/src/components/FeatureListScreen.js +85 -60
  26. package/src/components/Widget.js +6 -0
  27. package/src/components/WidgetLarge.js +81 -193
  28. package/src/components/WidgetSmall.js +82 -233
  29. package/src/components/layouts/CondensedList.js +2 -1
  30. package/src/components/layouts/FeatureImageList.js +2 -1
  31. package/src/components/layouts/RoundImageList.js +2 -1
  32. package/src/components/layouts/SquareImageList.js +2 -1
  33. package/src/feature.config.js +2 -1
  34. package/src/index.js +2 -2
@@ -1 +1 @@
1
- {"version":3,"names":["React","Component","Text","View","ScrollView","StyleSheet","TouchableOpacity","Image","connect","_","FontAwesome","Services","Components","Colours","values","selectListings","selectFeatureDefinition","SPACING","getMainBrandingColourFromState","getSummaryFieldValue","loadTargetFeature","WidgetLarge","constructor","props","_defineProperty","options","featureDefinition","isEmpty","Title","title","displayName","featureName","EmptyText","onLoadingChanged","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","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 { FontAwesome } from \"@expo/vector-icons\";\nimport { Services } from \"../feature.config\";\nimport { Components, Colours } from \"../core.config\";\nimport { values } from \"../values.config\";\nimport { selectListings, selectFeatureDefinition } from \"../utils/selectors\";\nimport { SPACING } from \"../js/spacing\";\nimport { getMainBrandingColourFromState } from \"../js\";\nimport { getSummaryFieldValue } from \"../js/helpers\";\nimport { loadTargetFeature } from \"../actions/featureBuilderActions\";\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\tawait loadTargetFeature()(\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<FontAwesome name=\"image\" size={16} color={Colours.TEXT_LIGHT} />\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<FontAwesome\n\t\t\t\t\t\tname=\"chevron-right\"\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","StyleSheet","connect","_","FontAwesome","Services","Components","Colours","values","selectListings","selectFeatureDefinition","SPACING","getMainBrandingColourFromState","getSummaryFieldValue","loadTargetFeature","RoundImageList","CondensedList","SquareImageList","FeatureImageList","WidgetLarge","constructor","props","_defineProperty","options","featureDefinition","isEmpty","Title","title","displayName","featureName","EmptyText","layoutType","layoutTypes","round","square","feature","onLoadingChanged","dispatch","loading","callback","setState","state","item","navigation","navigate","screens","featureDetail","listing","featureTitle","componentDidMount","refresh","componentDidUpdate","prevProps","dataUpdated","renderContent","_featureDefinition$la","listings","colourBrandingMain","createElement","style","styles","loadingPadding","LoadingStateWidget","height","emptyPadding","EmptyStateWidget","getTitle","layout","type","LayoutComponent","getLayoutComponent","onItemPress","render","sectionContainer","sectionPadding","sectionTitle","create","backgroundColor","flex","paddingHorizontal","MD","paddingBottom","XS","paddingTop","fontFamily","fontSize","color","mapStateToProps","_state$strings","user","notifications","site","notificationKey","strings","config","forwardRef"],"sources":["WidgetLarge.js"],"sourcesContent":["import React, { Component } from 'react';\nimport { Text, View, StyleSheet } from 'react-native';\nimport { connect } from 'react-redux';\nimport _ from 'lodash';\nimport { FontAwesome } from '@expo/vector-icons';\nimport { Services } from '../feature.config';\nimport { Components, Colours } from '../core.config';\nimport { values } from '../values.config';\nimport { selectListings, selectFeatureDefinition } from '../utils/selectors';\nimport { SPACING } from '../js/spacing';\nimport { getMainBrandingColourFromState } from '../js';\nimport { getSummaryFieldValue } from '../js/helpers';\nimport { loadTargetFeature } from '../actions/featureBuilderActions';\n\n// Layouts\nimport RoundImageList from './layouts/RoundImageList';\nimport CondensedList from './layouts/CondensedList';\nimport SquareImageList from './layouts/SquareImageList';\nimport FeatureImageList from './layouts/FeatureImageList';\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, featureDefinition } = this.props;\n\t\tif (options && !_.isEmpty(options.EmptyText)) return options.EmptyText;\n\n\t\tconst featureName = featureDefinition?.title || featureDefinition?.displayName || values.featureName || 'Feature';\n\t\treturn `No listings for ${featureName}`;\n\t};\n\n\tgetLayoutComponent = layoutType => {\n\t\tswitch (layoutType) {\n\t\t\tcase values.layoutTypes.round:\n\t\t\t\treturn RoundImageList;\n\t\t\tcase values.layoutTypes.square:\n\t\t\t\treturn SquareImageList;\n\t\t\tcase values.layoutTypes.feature:\n\t\t\t\treturn FeatureImageList;\n\t\t\tdefault:\n\t\t\t\treturn CondensedList;\n\t\t}\n\t};\n\n\trefresh = () => {\n\t\tthis.onLoadingChanged(true, async () => {\n\t\t\ttry {\n\t\t\t\tawait this.props.dispatch(loadTargetFeature());\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) this.props.onLoadingChanged(this.state.loading);\n\t\t\tif (callback) callback();\n\t\t});\n\t};\n\n\tonItemPress = item => {\n\t\tconst { featureDefinition } = this.props;\n\t\tif (featureDefinition) {\n\t\t\tServices.navigation.navigate(values.screens.featureDetail, {\n\t\t\t\tlisting: item,\n\t\t\t\tfeatureDefinition: featureDefinition,\n\t\t\t\tfeatureTitle: featureDefinition.title || featureDefinition.displayName,\n\t\t\t});\n\t\t}\n\t};\n\n\trenderContent() {\n\t\tconst { listings, featureDefinition, colourBrandingMain } = this.props;\n\n\t\t// Show loading state if no definition or loading\n\t\tif (!featureDefinition || this.state.loading) {\n\t\t\treturn (\n\t\t\t\t<View style={styles.loadingPadding}>\n\t\t\t\t\t<Components.LoadingStateWidget height={300} />\n\t\t\t\t</View>\n\t\t\t);\n\t\t}\n\n\t\t// Show empty state if no listings are available\n\t\tif (_.isEmpty(listings)) {\n\t\t\treturn (\n\t\t\t\t<View style={styles.emptyPadding}>\n\t\t\t\t\t<Components.EmptyStateWidget title={this.getTitle()} height={120} />\n\t\t\t\t</View>\n\t\t\t);\n\t\t}\n\n\t\tconst layoutType = featureDefinition.layout?.type || 'condensed';\n\t\tconst LayoutComponent = this.getLayoutComponent(layoutType);\n\t\tconst title = this.getTitle();\n\n\t\treturn (\n\t\t\t<LayoutComponent\n\t\t\t\tlistings={listings}\n\t\t\t\tfeatureDefinition={featureDefinition}\n\t\t\t\tcolourBrandingMain={colourBrandingMain}\n\t\t\t\ttitle={title}\n\t\t\t\tonItemPress={this.onItemPress}\n\t\t\t/>\n\t\t);\n\t}\n\n\trender() {\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<Text style={styles.sectionTitle}>{this.getTitle()}</Text>\n\t\t\t\t</View>\n\t\t\t\t{this.renderContent()}\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\temptyPadding: {\n\t\tpaddingHorizontal: SPACING.MD,\n\t},\n\tsectionTitle: {\n\t\tfontFamily: 'sf-bold',\n\t\tfontSize: 24,\n\t\tcolor: '#000',\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 })(WidgetLarge);\n"],"mappings":"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","ignoreList":[]}
@@ -1,19 +1,23 @@
1
1
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
2
2
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
3
3
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
4
- import React, { Component } from "react";
5
- import { Text, View, ScrollView, StyleSheet, TouchableOpacity, Image } from "react-native";
6
- import { connect } from "react-redux";
7
- import _ from "lodash";
8
- import { FontAwesome } from "@expo/vector-icons";
9
- import { Services } from "../feature.config";
10
- import { Components, Colours } from "../core.config";
11
- import { values } from "../values.config";
12
- import { selectListings, selectFeatureDefinition } from "../utils/selectors";
13
- import { SPACING } from "../js/spacing";
14
- import { getMainBrandingColourFromState } from "../js";
15
- import { getSummaryFieldValue } from "../js/helpers";
16
- import { loadTargetFeature } from "../actions/featureBuilderActions";
4
+ import React, { Component } from 'react';
5
+ import { Text, View, StyleSheet } from 'react-native';
6
+ import { connect } from 'react-redux';
7
+ import _ from 'lodash';
8
+ import { Services } from '../feature.config';
9
+ import { Components, Colours } from '../core.config';
10
+ import { values } from '../values.config';
11
+ import { selectListings, selectFeatureDefinition } from '../utils/selectors';
12
+ import { SPACING } from '../js/spacing';
13
+ import { getMainBrandingColourFromState } from '../js';
14
+ import { loadTargetFeature } from '../actions/featureBuilderActions';
15
+
16
+ // Layouts
17
+ import RoundImageList from './layouts/RoundImageList';
18
+ import CondensedList from './layouts/CondensedList';
19
+ import SquareImageList from './layouts/SquareImageList';
20
+ import FeatureImageList from './layouts/FeatureImageList';
17
21
  class WidgetSmall extends Component {
18
22
  constructor(props) {
19
23
  super(props);
@@ -27,19 +31,33 @@ class WidgetSmall extends Component {
27
31
  if (featureDefinition !== null && featureDefinition !== void 0 && featureDefinition.title || featureDefinition !== null && featureDefinition !== void 0 && featureDefinition.displayName) {
28
32
  return featureDefinition.title || featureDefinition.displayName;
29
33
  }
30
- return values.featureName || "Features";
34
+ return values.featureName || 'Features';
31
35
  });
32
36
  _defineProperty(this, "getEmptyStateText", () => {
33
37
  const {
34
- options
38
+ options,
39
+ featureDefinition
35
40
  } = this.props;
36
41
  if (options && !_.isEmpty(options.EmptyText)) return options.EmptyText;
37
- return values.labels.emptyState;
42
+ const featureName = (featureDefinition === null || featureDefinition === void 0 ? void 0 : featureDefinition.title) || (featureDefinition === null || featureDefinition === void 0 ? void 0 : featureDefinition.displayName) || values.featureName || 'Feature';
43
+ return `No listings for ${featureName}`;
44
+ });
45
+ _defineProperty(this, "getLayoutComponent", layoutType => {
46
+ switch (layoutType) {
47
+ case values.layoutTypes.round:
48
+ return RoundImageList;
49
+ case values.layoutTypes.square:
50
+ return SquareImageList;
51
+ case values.layoutTypes.feature:
52
+ return FeatureImageList;
53
+ default:
54
+ return CondensedList;
55
+ }
38
56
  });
39
57
  _defineProperty(this, "refresh", () => {
40
58
  this.onLoadingChanged(true, async () => {
41
59
  try {
42
- await loadTargetFeature()(this.props.dispatch, () => this.props.getState);
60
+ await this.props.dispatch(loadTargetFeature());
43
61
  } finally {
44
62
  this.onLoadingChanged(false);
45
63
  }
@@ -53,72 +71,17 @@ class WidgetSmall extends Component {
53
71
  if (callback) callback();
54
72
  });
55
73
  });
56
- _defineProperty(this, "onPressAll", () => {
57
- Services.navigation.navigate(values.screens.featureList, {
58
- options: this.props.options
59
- });
60
- });
61
- _defineProperty(this, "getImageSource", imageField => {
62
- if (!imageField) return null;
63
- if (typeof imageField === "string") {
64
- return {
65
- uri: imageField
66
- };
67
- }
68
- if (typeof imageField === "object" && imageField.uri) {
69
- return imageField;
70
- }
71
- if (typeof imageField === "object" && imageField.url) {
72
- return {
73
- uri: imageField.url
74
- };
75
- }
76
- return null;
77
- });
78
- _defineProperty(this, "onListingPress", listing => {
74
+ _defineProperty(this, "onItemPress", item => {
79
75
  const {
80
76
  featureDefinition
81
77
  } = this.props;
82
- const title = this.getTitle();
83
- Services.navigation.navigate(values.screens.featureDetail, {
84
- listing: listing,
85
- featureDefinition: featureDefinition,
86
- featureTitle: title
87
- });
88
- });
89
- _defineProperty(this, "renderListingCard", listing => {
90
- var _listing$fields, _listing$fields2;
91
- const {
92
- colourBrandingMain,
93
- featureDefinition
94
- } = this.props;
95
- const title = ((_listing$fields = listing.fields) === null || _listing$fields === void 0 ? void 0 : _listing$fields[values.mandatoryFields.title]) || "Untitled";
96
- const summary = getSummaryFieldValue(listing, featureDefinition);
97
- const imageField = (_listing$fields2 = listing.fields) === null || _listing$fields2 === void 0 ? void 0 : _listing$fields2[values.mandatoryFields.featureImage];
98
- const imageSource = this.getImageSource(imageField);
99
- return /*#__PURE__*/React.createElement(TouchableOpacity, {
100
- key: listing.id,
101
- style: styles.cardContainer,
102
- onPress: () => this.onListingPress(listing)
103
- }, /*#__PURE__*/React.createElement(View, {
104
- style: styles.borderContainer
105
- }, imageSource ? /*#__PURE__*/React.createElement(Image, {
106
- source: imageSource,
107
- style: styles.cardImage,
108
- resizeMode: "cover"
109
- }) : /*#__PURE__*/React.createElement(View, {
110
- style: [styles.cardImage, styles.placeholderImage]
111
- }, /*#__PURE__*/React.createElement(FontAwesome, {
112
- name: "image",
113
- size: 24,
114
- color: Colours.TEXT_LIGHT
115
- })), /*#__PURE__*/React.createElement(Text, {
116
- style: styles.cardTitle,
117
- numberOfLines: 1
118
- }, title), summary && /*#__PURE__*/React.createElement(Text, {
119
- style: styles.cardSummary,
120
- numberOfLines: 1
121
- }, summary)));
78
+ if (featureDefinition) {
79
+ Services.navigation.navigate(values.screens.featureDetail, {
80
+ listing: item,
81
+ featureDefinition: featureDefinition,
82
+ featureTitle: featureDefinition.title || featureDefinition.displayName
83
+ });
84
+ }
122
85
  });
123
86
  this.state = {
124
87
  loading: false
@@ -133,77 +96,55 @@ class WidgetSmall extends Component {
133
96
  }
134
97
  }
135
98
  renderContent() {
99
+ var _featureDefinition$la;
136
100
  const {
137
- listings
101
+ listings,
102
+ featureDefinition,
103
+ colourBrandingMain
138
104
  } = this.props;
139
105
 
140
- // Don't render widget if no listings are available (and not loading)
141
- if (_.isEmpty(listings) && !this.state.loading) {
142
- return null;
106
+ // Show loading state if no definition or loading
107
+ if (!featureDefinition || this.state.loading) {
108
+ return /*#__PURE__*/React.createElement(View, {
109
+ style: styles.loadingPadding
110
+ }, /*#__PURE__*/React.createElement(Components.LoadingStateWidget, {
111
+ height: 180
112
+ }));
143
113
  }
114
+
115
+ // Show empty state if no listings are available
144
116
  if (_.isEmpty(listings)) {
145
- if (this.state.loading) {
146
- return /*#__PURE__*/React.createElement(View, {
147
- style: styles.loadingPadding
148
- }, /*#__PURE__*/React.createElement(Components.LoadingStateWidget, {
149
- height: 180
150
- }));
151
- }
152
- return null;
117
+ return /*#__PURE__*/React.createElement(View, {
118
+ style: styles.emptyPadding
119
+ }, /*#__PURE__*/React.createElement(Components.EmptyStateWidget, {
120
+ title: this.getTitle(),
121
+ height: 120
122
+ }));
153
123
  }
154
-
155
- // Show first 3 listings with peeking indicator
156
- const listingsToShow = listings.slice(0, values.widget.maxItems);
157
- return /*#__PURE__*/React.createElement(ScrollView, {
158
- horizontal: true,
159
- contentContainerStyle: {
160
- paddingLeft: SPACING.XS + 2,
161
- paddingRight: SPACING.SM
162
- },
163
- showsHorizontalScrollIndicator: false
164
- }, listingsToShow.map(listing => this.renderListingCard(listing)), listings.length > values.widget.maxItems && /*#__PURE__*/React.createElement(TouchableOpacity, {
165
- style: [styles.cardContainer, styles.viewMoreCard],
166
- onPress: this.onPressAll
167
- }, /*#__PURE__*/React.createElement(View, {
168
- style: [styles.borderContainer, styles.viewMoreContainer]
169
- }, /*#__PURE__*/React.createElement(Text, {
170
- style: styles.viewMoreText
171
- }, "View all"), /*#__PURE__*/React.createElement(Text, {
172
- style: styles.viewMoreCount
173
- }, listings.length, " items"))));
124
+ const layoutType = ((_featureDefinition$la = featureDefinition.layout) === null || _featureDefinition$la === void 0 ? void 0 : _featureDefinition$la.type) || 'condensed';
125
+ const LayoutComponent = this.getLayoutComponent(layoutType);
126
+ const title = this.getTitle();
127
+ return /*#__PURE__*/React.createElement(LayoutComponent, {
128
+ listings: listings,
129
+ featureDefinition: featureDefinition,
130
+ colourBrandingMain: colourBrandingMain,
131
+ title: title,
132
+ onItemPress: this.onItemPress
133
+ });
174
134
  }
175
135
  render() {
176
- const {
177
- colourBrandingMain
178
- } = this.props;
179
- const content = this.renderContent();
180
- // Don't render widget section if content is null (no features available)
181
- if (content === null) {
182
- return null;
183
- }
184
136
  return /*#__PURE__*/React.createElement(View, {
185
137
  style: styles.sectionContainer
186
138
  }, /*#__PURE__*/React.createElement(View, {
187
139
  style: styles.sectionPadding
188
- }, /*#__PURE__*/React.createElement(View, {
189
- style: styles.sectionHeading
190
140
  }, /*#__PURE__*/React.createElement(Text, {
191
141
  style: styles.sectionTitle
192
- }, this.getTitle()), /*#__PURE__*/React.createElement(Components.InlineButton, {
193
- onPress: this.onPressAll,
194
- color: colourBrandingMain,
195
- touchableStyle: {
196
- paddingTop: SPACING.XS + 2
197
- },
198
- textStyle: {
199
- color: "#fff"
200
- }
201
- }, values.labels.viewAll))), content);
142
+ }, this.getTitle())), this.renderContent());
202
143
  }
203
144
  }
204
145
  const styles = StyleSheet.create({
205
146
  sectionContainer: {
206
- backgroundColor: "#fff",
147
+ backgroundColor: '#fff',
207
148
  paddingTop: SPACING.MD
208
149
  },
209
150
  sectionPadding: {
@@ -213,82 +154,13 @@ const styles = StyleSheet.create({
213
154
  loadingPadding: {
214
155
  paddingHorizontal: SPACING.MD
215
156
  },
216
- sectionHeading: {
217
- marginBottom: SPACING.XS,
218
- flexDirection: "row",
219
- alignContent: "flex-start",
220
- justifyContent: "space-between"
157
+ emptyPadding: {
158
+ paddingHorizontal: SPACING.MD
221
159
  },
222
160
  sectionTitle: {
223
- fontFamily: "sf-bold",
161
+ fontFamily: 'sf-bold',
224
162
  fontSize: 24,
225
- color: "#000"
226
- },
227
- // Listing card styles
228
- cardContainer: {
229
- marginRight: SPACING.SM + 4,
230
- width: values.widget.itemMaxWidth
231
- },
232
- borderContainer: {
233
- borderRadius: SPACING.SM,
234
- backgroundColor: "#fff",
235
- shadowColor: "#000",
236
- shadowOffset: {
237
- width: 0,
238
- height: 2
239
- },
240
- shadowOpacity: 0.1,
241
- shadowRadius: 3.84,
242
- elevation: 4,
243
- padding: SPACING.SM,
244
- margin: SPACING.SM,
245
- minHeight: values.widget.itemMinWidth
246
- },
247
- cardImage: {
248
- width: 88,
249
- height: 88,
250
- borderRadius: 44,
251
- backgroundColor: "#f0f0f0",
252
- alignSelf: "center",
253
- marginBottom: SPACING.XS
254
- },
255
- placeholderImage: {
256
- justifyContent: "center",
257
- alignItems: "center",
258
- backgroundColor: "#f0f0f0"
259
- },
260
- cardTitle: {
261
- fontFamily: "sf-semibold",
262
- fontSize: 14,
263
- color: "#000",
264
- textAlign: "center",
265
- marginBottom: 4
266
- },
267
- cardSummary: {
268
- fontFamily: "sf-regular",
269
- fontSize: 12,
270
- color: "#666",
271
- textAlign: "center"
272
- },
273
- // View more card
274
- viewMoreCard: {
275
- justifyContent: "center"
276
- },
277
- viewMoreContainer: {
278
- justifyContent: "center",
279
- alignItems: "center",
280
- minHeight: values.widget.itemMinWidth
281
- },
282
- viewMoreText: {
283
- fontFamily: "sf-semibold",
284
- fontSize: 14,
285
- color: Colours.TEXT_DARK || "#000"
286
- },
287
- viewMoreCount: {
288
- fontFamily: "sf-regular",
289
- fontSize: 12,
290
- color: "#666",
291
- marginTop: 2
163
+ color: '#000'
292
164
  }
293
165
  });
294
166
  const mapStateToProps = state => {
@@ -297,10 +169,12 @@ const mapStateToProps = state => {
297
169
  user,
298
170
  notifications
299
171
  } = state;
172
+ const listings = selectListings(state);
173
+ const featureDefinition = selectFeatureDefinition(state);
300
174
  return {
301
175
  colourBrandingMain: getMainBrandingColourFromState(state),
302
- listings: selectListings(state),
303
- featureDefinition: selectFeatureDefinition(state),
176
+ listings: listings,
177
+ featureDefinition: featureDefinition,
304
178
  site: user.site,
305
179
  dataUpdated: notifications.dataUpdated[values.notificationKey],
306
180
  strings: ((_state$strings = state.strings) === null || _state$strings === void 0 ? void 0 : _state$strings.config) || {}
@@ -1 +1 @@
1
- {"version":3,"names":["React","Component","Text","View","ScrollView","StyleSheet","TouchableOpacity","Image","connect","_","FontAwesome","Services","Components","Colours","values","selectListings","selectFeatureDefinition","SPACING","getMainBrandingColourFromState","getSummaryFieldValue","loadTargetFeature","WidgetSmall","constructor","props","_defineProperty","options","featureDefinition","isEmpty","Title","title","displayName","featureName","EmptyText","labels","emptyState","onLoadingChanged","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","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","margin","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 { FontAwesome } from \"@expo/vector-icons\";\nimport { Services } from \"../feature.config\";\nimport { Components, Colours } from \"../core.config\";\nimport { values } from \"../values.config\";\nimport { selectListings, selectFeatureDefinition } from \"../utils/selectors\";\nimport { SPACING } from \"../js/spacing\";\nimport { getMainBrandingColourFromState } from \"../js\";\nimport { getSummaryFieldValue } from \"../js/helpers\";\nimport { loadTargetFeature } from \"../actions/featureBuilderActions\";\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\tawait loadTargetFeature()(\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<FontAwesome name=\"image\" size={24} color={Colours.TEXT_LIGHT} />\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\tmargin: 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","StyleSheet","connect","_","Services","Components","Colours","values","selectListings","selectFeatureDefinition","SPACING","getMainBrandingColourFromState","loadTargetFeature","RoundImageList","CondensedList","SquareImageList","FeatureImageList","WidgetSmall","constructor","props","_defineProperty","options","featureDefinition","isEmpty","Title","title","displayName","featureName","EmptyText","layoutType","layoutTypes","round","square","feature","onLoadingChanged","dispatch","loading","callback","setState","state","item","navigation","navigate","screens","featureDetail","listing","featureTitle","componentDidMount","refresh","componentDidUpdate","prevProps","dataUpdated","renderContent","_featureDefinition$la","listings","colourBrandingMain","createElement","style","styles","loadingPadding","LoadingStateWidget","height","emptyPadding","EmptyStateWidget","getTitle","layout","type","LayoutComponent","getLayoutComponent","onItemPress","render","sectionContainer","sectionPadding","sectionTitle","create","backgroundColor","paddingTop","MD","paddingHorizontal","paddingBottom","XS","fontFamily","fontSize","color","mapStateToProps","_state$strings","user","notifications","site","notificationKey","strings","config","forwardRef"],"sources":["WidgetSmall.js"],"sourcesContent":["import React, { Component } from 'react';\nimport { Text, View, StyleSheet } from 'react-native';\nimport { connect } from 'react-redux';\nimport _ from 'lodash';\nimport { Services } from '../feature.config';\nimport { Components, Colours } from '../core.config';\nimport { values } from '../values.config';\nimport { selectListings, selectFeatureDefinition } from '../utils/selectors';\nimport { SPACING } from '../js/spacing';\nimport { getMainBrandingColourFromState } from '../js';\nimport { loadTargetFeature } from '../actions/featureBuilderActions';\n\n// Layouts\nimport RoundImageList from './layouts/RoundImageList';\nimport CondensedList from './layouts/CondensedList';\nimport SquareImageList from './layouts/SquareImageList';\nimport FeatureImageList from './layouts/FeatureImageList';\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, featureDefinition } = this.props;\n\t\tif (options && !_.isEmpty(options.EmptyText)) return options.EmptyText;\n\n\t\tconst featureName = featureDefinition?.title || featureDefinition?.displayName || values.featureName || 'Feature';\n\t\treturn `No listings for ${featureName}`;\n\t};\n\n\tgetLayoutComponent = layoutType => {\n\t\tswitch (layoutType) {\n\t\t\tcase values.layoutTypes.round:\n\t\t\t\treturn RoundImageList;\n\t\t\tcase values.layoutTypes.square:\n\t\t\t\treturn SquareImageList;\n\t\t\tcase values.layoutTypes.feature:\n\t\t\t\treturn FeatureImageList;\n\t\t\tdefault:\n\t\t\t\treturn CondensedList;\n\t\t}\n\t};\n\n\trefresh = () => {\n\t\tthis.onLoadingChanged(true, async () => {\n\t\t\ttry {\n\t\t\t\tawait this.props.dispatch(loadTargetFeature());\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) this.props.onLoadingChanged(this.state.loading);\n\t\t\tif (callback) callback();\n\t\t});\n\t};\n\n\tonItemPress = item => {\n\t\tconst { featureDefinition } = this.props;\n\t\tif (featureDefinition) {\n\t\t\tServices.navigation.navigate(values.screens.featureDetail, {\n\t\t\t\tlisting: item,\n\t\t\t\tfeatureDefinition: featureDefinition,\n\t\t\t\tfeatureTitle: featureDefinition.title || featureDefinition.displayName,\n\t\t\t});\n\t\t}\n\t};\n\n\trenderContent() {\n\t\tconst { listings, featureDefinition, colourBrandingMain } = this.props;\n\n\t\t// Show loading state if no definition or loading\n\t\tif (!featureDefinition || this.state.loading) {\n\t\t\treturn (\n\t\t\t\t<View style={styles.loadingPadding}>\n\t\t\t\t\t<Components.LoadingStateWidget height={180} />\n\t\t\t\t</View>\n\t\t\t);\n\t\t}\n\n\t\t// Show empty state if no listings are available\n\t\tif (_.isEmpty(listings)) {\n\t\t\treturn (\n\t\t\t\t<View style={styles.emptyPadding}>\n\t\t\t\t\t<Components.EmptyStateWidget title={this.getTitle()} height={120} />\n\t\t\t\t</View>\n\t\t\t);\n\t\t}\n\n\t\tconst layoutType = featureDefinition.layout?.type || 'condensed';\n\t\tconst LayoutComponent = this.getLayoutComponent(layoutType);\n\t\tconst title = this.getTitle();\n\n\t\treturn (\n\t\t\t<LayoutComponent\n\t\t\t\tlistings={listings}\n\t\t\t\tfeatureDefinition={featureDefinition}\n\t\t\t\tcolourBrandingMain={colourBrandingMain}\n\t\t\t\ttitle={title}\n\t\t\t\tonItemPress={this.onItemPress}\n\t\t\t/>\n\t\t);\n\t}\n\n\trender() {\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<Text style={styles.sectionTitle}>{this.getTitle()}</Text>\n\t\t\t\t</View>\n\t\t\t\t{this.renderContent()}\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\temptyPadding: {\n\t\tpaddingHorizontal: SPACING.MD,\n\t},\n\tsectionTitle: {\n\t\tfontFamily: 'sf-bold',\n\t\tfontSize: 24,\n\t\tcolor: '#000',\n\t},\n});\n\nconst mapStateToProps = state => {\n\tconst { user, notifications } = state;\n\tconst listings = selectListings(state);\n\tconst featureDefinition = selectFeatureDefinition(state);\n\n\treturn {\n\t\tcolourBrandingMain: getMainBrandingColourFromState(state),\n\t\tlistings: listings,\n\t\tfeatureDefinition: featureDefinition,\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 })(WidgetSmall);\n"],"mappings":"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","ignoreList":[]}
@@ -85,7 +85,8 @@ const CondensedList = ({
85
85
  refreshing,
86
86
  onRefresh,
87
87
  featureDefinition,
88
- title
88
+ title,
89
+ isWidget
89
90
  }) => {
90
91
  const renderListingItem = ({
91
92
  item: listing
@@ -110,7 +111,7 @@ const CondensedList = ({
110
111
  if (onRefresh) {
111
112
  return /*#__PURE__*/React.createElement(View, {
112
113
  style: styles.container
113
- }, /*#__PURE__*/React.createElement(Components.LoadingIndicator, {
114
+ }, !isWidget && /*#__PURE__*/React.createElement(Components.LoadingIndicator, {
114
115
  visible: refreshing
115
116
  }), /*#__PURE__*/React.createElement(FlatList, {
116
117
  data: listings,
@@ -1 +1 @@
1
- {"version":3,"names":["React","View","StyleSheet","FlatList","Text","TouchableOpacity","Image","FontAwesome","Components","Colours","Helper","values","getSummaryFieldValue","CondensedListItem","listing","onItemPress","colourBrandingMain","featureDefinition","_listing$fields","_listing$fields2","getImageSource","imageField","uri","url","onPress","title","fields","mandatoryFields","summary","featureImage","imageSource","createElement","activeOpacity","style","styles","listItem","avatarContainer","source","avatar","resizeMode","placeholderAvatar","name","size","color","TEXT_LIGHT","textContainer","titleText","numberOfLines","descriptionText","chevronContainer","divider","getEmptyStateMessage","featureName","CondensedList","listings","refreshing","onRefresh","renderListingItem","item","listingFeatureDefinition","length","emptyContainer","EmptyStateWidget","height","container","LoadingIndicator","visible","data","keyExtractor","id","renderItem","scrollContainer","showsVerticalScrollIndicator","create","flex","backgroundColor","BACKGROUND_WHITE","justifyContent","alignItems","padding","flexDirection","paddingHorizontal","paddingVertical","width","borderRadius","marginRight","BACKGROUND_LIGHT","fontFamily","fontSize","TEXT_DARK","marginBottom","lineHeight","paddingLeft","LINE_GREY","marginLeft"],"sources":["CondensedList.js"],"sourcesContent":["import React from \"react\";\nimport {\n\tView,\n\tStyleSheet,\n\tFlatList,\n\tText,\n\tTouchableOpacity,\n\tImage,\n} from \"react-native\";\nimport { FontAwesome } from \"@expo/vector-icons\";\nimport { Components, Colours, Helper } from \"../../core.config\";\nimport { values } from \"../../values.config\";\nimport { getSummaryFieldValue } from \"../../js/helpers\";\n\nconst CondensedListItem = ({\n\tlisting,\n\tonItemPress,\n\tcolourBrandingMain,\n\tfeatureDefinition,\n}) => {\n\tconst getImageSource = (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\tconst onPress = () => {\n\t\tif (onItemPress) {\n\t\t\tonItemPress(listing);\n\t\t}\n\t};\n\n\t// Get data from feature builder fields\n\tconst title = listing.fields?.[values.mandatoryFields.title] || \"Untitled\";\n\tconst summary = getSummaryFieldValue(listing, featureDefinition);\n\tconst imageField = listing.fields?.[values.mandatoryFields.featureImage];\n\tconst imageSource = getImageSource(imageField);\n\n\treturn (\n\t\t<TouchableOpacity activeOpacity={0.9} onPress={onPress}>\n\t\t\t<View style={styles.listItem}>\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<FontAwesome name=\"image\" size={16} color={Colours.TEXT_LIGHT} />\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<FontAwesome\n\t\t\t\t\t\tname=\"chevron-right\"\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</View>\n\n\t\t\t{/* Divider line */}\n\t\t\t<View style={styles.divider} />\n\t\t</TouchableOpacity>\n\t);\n};\n\nconst getEmptyStateMessage = (title) => {\n\tconst featureName = title || \"Feature\";\n\treturn `${featureName} listings will appear here once they're available.\\nCome back soon to see what's new!`;\n};\n\nconst CondensedList = ({\n\tlistings,\n\tonItemPress,\n\tcolourBrandingMain,\n\trefreshing,\n\tonRefresh,\n\tfeatureDefinition,\n\ttitle,\n}) => {\n\tconst renderListingItem = ({ item: listing }) => {\n\t\t// Get feature definition for this listing\n\t\tconst listingFeatureDefinition = featureDefinition;\n\n\t\treturn (\n\t\t\t<CondensedListItem\n\t\t\t\tlisting={listing}\n\t\t\t\tonItemPress={onItemPress}\n\t\t\t\tcolourBrandingMain={colourBrandingMain}\n\t\t\t\tfeatureDefinition={listingFeatureDefinition}\n\t\t\t/>\n\t\t);\n\t};\n\n\tif (!listings || listings.length === 0) {\n\t\treturn (\n\t\t\t<View style={styles.emptyContainer}>\n\t\t\t\t<Components.EmptyStateWidget\n\t\t\t\t\ttitle={getEmptyStateMessage(title)}\n\t\t\t\t\theight={120}\n\t\t\t\t/>\n\t\t\t</View>\n\t\t);\n\t}\n\n\tif (onRefresh) {\n\t\treturn (\n\t\t\t<View style={styles.container}>\n\t\t\t\t<Components.LoadingIndicator visible={refreshing} />\n\t\t\t\t<FlatList\n\t\t\t\t\tdata={listings}\n\t\t\t\t\tkeyExtractor={(item) => item.id}\n\t\t\t\t\trenderItem={renderListingItem}\n\t\t\t\t\tstyle={styles.scrollContainer}\n\t\t\t\t\tshowsVerticalScrollIndicator={false}\n\t\t\t\t/>\n\t\t\t</View>\n\t\t);\n\t}\n\n\treturn (\n\t\t<View style={styles.container}>\n\t\t\t<FlatList\n\t\t\t\tdata={listings}\n\t\t\t\tkeyExtractor={(item) => item.id}\n\t\t\t\trenderItem={renderListingItem}\n\t\t\t\tshowsVerticalScrollIndicator={false}\n\t\t\t/>\n\t\t</View>\n\t);\n};\n\nconst styles = StyleSheet.create({\n\tcontainer: {\n\t\tflex: 1,\n\t\tbackgroundColor: Colours.BACKGROUND_WHITE || \"#fff\",\n\t},\n\tscrollContainer: {\n\t\tflex: 1,\n\t},\n\temptyContainer: {\n\t\tflex: 1,\n\t\tjustifyContent: \"center\",\n\t\talignItems: \"center\",\n\t\tpadding: 32,\n\t},\n\tlistItem: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tpaddingHorizontal: 16,\n\t\tpaddingVertical: 8,\n\t\tbackgroundColor: Colours.BACKGROUND_WHITE || \"#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,\n\t},\n\tplaceholderAvatar: {\n\t\tbackgroundColor: Colours.BACKGROUND_LIGHT,\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,\n\t\tmarginBottom: 2,\n\t},\n\tdescriptionText: {\n\t\tfontFamily: \"sf-regular\",\n\t\tfontSize: 14,\n\t\tcolor: Colours.TEXT_LIGHT,\n\t\tlineHeight: 18,\n\t},\n\tchevronContainer: {\n\t\tpaddingLeft: 8,\n\t},\n\tdivider: {\n\t\theight: 1,\n\t\tbackgroundColor: Colours.LINE_GREY || \"#e0e0e0\",\n\t\tmarginLeft: 0, // Full width border\n\t},\n});\n\nexport default CondensedList;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","View","StyleSheet","FlatList","Text","TouchableOpacity","Image","FontAwesome","Components","Colours","Helper","values","getSummaryFieldValue","CondensedListItem","listing","onItemPress","colourBrandingMain","featureDefinition","_listing$fields","_listing$fields2","getImageSource","imageField","uri","url","onPress","title","fields","mandatoryFields","summary","featureImage","imageSource","createElement","activeOpacity","style","styles","listItem","avatarContainer","source","avatar","resizeMode","placeholderAvatar","name","size","color","TEXT_LIGHT","textContainer","titleText","numberOfLines","descriptionText","chevronContainer","divider","getEmptyStateMessage","featureName","CondensedList","listings","refreshing","onRefresh","isWidget","renderListingItem","item","listingFeatureDefinition","length","emptyContainer","EmptyStateWidget","height","container","LoadingIndicator","visible","data","keyExtractor","id","renderItem","scrollContainer","showsVerticalScrollIndicator","create","flex","backgroundColor","BACKGROUND_WHITE","justifyContent","alignItems","padding","flexDirection","paddingHorizontal","paddingVertical","width","borderRadius","marginRight","BACKGROUND_LIGHT","fontFamily","fontSize","TEXT_DARK","marginBottom","lineHeight","paddingLeft","LINE_GREY","marginLeft"],"sources":["CondensedList.js"],"sourcesContent":["import React from \"react\";\nimport {\n\tView,\n\tStyleSheet,\n\tFlatList,\n\tText,\n\tTouchableOpacity,\n\tImage,\n} from \"react-native\";\nimport { FontAwesome } from \"@expo/vector-icons\";\nimport { Components, Colours, Helper } from \"../../core.config\";\nimport { values } from \"../../values.config\";\nimport { getSummaryFieldValue } from \"../../js/helpers\";\n\nconst CondensedListItem = ({\n\tlisting,\n\tonItemPress,\n\tcolourBrandingMain,\n\tfeatureDefinition,\n}) => {\n\tconst getImageSource = (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\tconst onPress = () => {\n\t\tif (onItemPress) {\n\t\t\tonItemPress(listing);\n\t\t}\n\t};\n\n\t// Get data from feature builder fields\n\tconst title = listing.fields?.[values.mandatoryFields.title] || \"Untitled\";\n\tconst summary = getSummaryFieldValue(listing, featureDefinition);\n\tconst imageField = listing.fields?.[values.mandatoryFields.featureImage];\n\tconst imageSource = getImageSource(imageField);\n\n\treturn (\n\t\t<TouchableOpacity activeOpacity={0.9} onPress={onPress}>\n\t\t\t<View style={styles.listItem}>\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<FontAwesome name=\"image\" size={16} color={Colours.TEXT_LIGHT} />\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<FontAwesome\n\t\t\t\t\t\tname=\"chevron-right\"\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</View>\n\n\t\t\t{/* Divider line */}\n\t\t\t<View style={styles.divider} />\n\t\t</TouchableOpacity>\n\t);\n};\n\nconst getEmptyStateMessage = (title) => {\n\tconst featureName = title || \"Feature\";\n\treturn `${featureName} listings will appear here once they're available.\\nCome back soon to see what's new!`;\n};\n\nconst CondensedList = ({\n\tlistings,\n\tonItemPress,\n\tcolourBrandingMain,\n\trefreshing,\n\tonRefresh,\n\tfeatureDefinition,\n\ttitle,\n\tisWidget,\n}) => {\n\tconst renderListingItem = ({ item: listing }) => {\n\t\t// Get feature definition for this listing\n\t\tconst listingFeatureDefinition = featureDefinition;\n\n\t\treturn (\n\t\t\t<CondensedListItem\n\t\t\t\tlisting={listing}\n\t\t\t\tonItemPress={onItemPress}\n\t\t\t\tcolourBrandingMain={colourBrandingMain}\n\t\t\t\tfeatureDefinition={listingFeatureDefinition}\n\t\t\t/>\n\t\t);\n\t};\n\n\tif (!listings || listings.length === 0) {\n\t\treturn (\n\t\t\t<View style={styles.emptyContainer}>\n\t\t\t\t<Components.EmptyStateWidget\n\t\t\t\t\ttitle={getEmptyStateMessage(title)}\n\t\t\t\t\theight={120}\n\t\t\t\t/>\n\t\t\t</View>\n\t\t);\n\t}\n\n\tif (onRefresh) {\n\t\treturn (\n\t\t\t<View style={styles.container}>\n\t\t\t\t{!isWidget && <Components.LoadingIndicator visible={refreshing} />}\n\t\t\t\t<FlatList\n\t\t\t\t\tdata={listings}\n\t\t\t\t\tkeyExtractor={(item) => item.id}\n\t\t\t\t\trenderItem={renderListingItem}\n\t\t\t\t\tstyle={styles.scrollContainer}\n\t\t\t\t\tshowsVerticalScrollIndicator={false}\n\t\t\t\t/>\n\t\t\t</View>\n\t\t);\n\t}\n\n\treturn (\n\t\t<View style={styles.container}>\n\t\t\t<FlatList\n\t\t\t\tdata={listings}\n\t\t\t\tkeyExtractor={(item) => item.id}\n\t\t\t\trenderItem={renderListingItem}\n\t\t\t\tshowsVerticalScrollIndicator={false}\n\t\t\t/>\n\t\t</View>\n\t);\n};\n\nconst styles = StyleSheet.create({\n\tcontainer: {\n\t\tflex: 1,\n\t\tbackgroundColor: Colours.BACKGROUND_WHITE || \"#fff\",\n\t},\n\tscrollContainer: {\n\t\tflex: 1,\n\t},\n\temptyContainer: {\n\t\tflex: 1,\n\t\tjustifyContent: \"center\",\n\t\talignItems: \"center\",\n\t\tpadding: 32,\n\t},\n\tlistItem: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tpaddingHorizontal: 16,\n\t\tpaddingVertical: 8,\n\t\tbackgroundColor: Colours.BACKGROUND_WHITE || \"#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,\n\t},\n\tplaceholderAvatar: {\n\t\tbackgroundColor: Colours.BACKGROUND_LIGHT,\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,\n\t\tmarginBottom: 2,\n\t},\n\tdescriptionText: {\n\t\tfontFamily: \"sf-regular\",\n\t\tfontSize: 14,\n\t\tcolor: Colours.TEXT_LIGHT,\n\t\tlineHeight: 18,\n\t},\n\tchevronContainer: {\n\t\tpaddingLeft: 8,\n\t},\n\tdivider: {\n\t\theight: 1,\n\t\tbackgroundColor: Colours.LINE_GREY || \"#e0e0e0\",\n\t\tmarginLeft: 0, // Full width border\n\t},\n});\n\nexport default CondensedList;\n"],"mappings":"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","ignoreList":[]}
@@ -21,7 +21,8 @@ const FeatureImageList = ({
21
21
  refreshing,
22
22
  onRefresh,
23
23
  featureDefinition,
24
- title
24
+ title,
25
+ isWidget
25
26
  }) => {
26
27
  const getImageSource = imageField => {
27
28
  if (!imageField) return null;
@@ -83,7 +84,7 @@ const FeatureImageList = ({
83
84
  if (onRefresh) {
84
85
  return /*#__PURE__*/React.createElement(View, {
85
86
  style: styles.container
86
- }, /*#__PURE__*/React.createElement(Components.LoadingIndicator, {
87
+ }, !isWidget && /*#__PURE__*/React.createElement(Components.LoadingIndicator, {
87
88
  visible: refreshing
88
89
  }), /*#__PURE__*/React.createElement(FlatList, {
89
90
  data: listings,