@plusscommunities/pluss-feature-builder-app-d 8.0.11-beta.6 → 8.0.11-beta.7

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.
@@ -4,6 +4,7 @@ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e =
4
4
  import React, { Component } from 'react';
5
5
  import { SPACING } from '../js/spacing';
6
6
  import { Platform, View, ScrollView, Animated, Dimensions, StatusBar, Text, TouchableOpacity, Linking, StyleSheet, KeyboardAvoidingView, Image } from 'react-native';
7
+ import { FontAwesome } from './common';
7
8
  import { connect } from 'react-redux';
8
9
  import _ from 'lodash';
9
10
  import { LinearGradient } from 'expo-linear-gradient';
@@ -14,7 +15,7 @@ import FileDownload from './FileDownload';
14
15
  import { values } from '../values.config';
15
16
  import { selectFeatureDefinition } from '../utils/selectors';
16
17
  import Constants from 'expo-constants';
17
- import { InlineButton, FontAwesome } from './common';
18
+ import { InlineButton } from './common';
18
19
  import { FIELD_TYPES } from '../js/FieldTypes';
19
20
  const SCREEN_HEIGHT = Dimensions.get('window').height;
20
21
  const CARD_IMAGE_HEIGHT = SCREEN_HEIGHT * 0.3;
@@ -1 +1 @@
1
- {"version":3,"names":["React","Component","SPACING","Platform","View","ScrollView","Animated","Dimensions","StatusBar","Text","TouchableOpacity","Linking","StyleSheet","KeyboardAvoidingView","Image","connect","_","LinearGradient","Services","Components","Colours","COLOUR_TRANSPARENT","TEXT_DARK","TEXT_MID","LINEGREY","FileDownload","values","selectFeatureDefinition","Constants","InlineButton","FontAwesome","FIELD_TYPES","SCREEN_HEIGHT","get","height","CARD_IMAGE_HEIGHT","SCREEN_WIDTH","width","StatusBarHeight","size","getStatusBarHeight","OS","statusBarHeight","currentHeight","FeatureDetailScreen","constructor","props","_defineProperty","navigation","goBack","listing","featureDefinition","fields","allImages","fieldDefinitions","primaryImage","mandatoryFields","featureImage","imageObj","normalizeImageField","push","fieldId","fieldLabel","labels","forEach","fieldDef","type","IMAGE","GALLERY","id","fieldValue","Array","isArray","item","label","imageField","uri","url","imageIndex","state","length","setState","showImagePopup","selectedImageIndex","openURL","catch","err","file","isHomeTab","componentDidMount","getParentRoute","collectAllImages","componentDidUpdate","prevProps","componentWillUnmount","setBarStyle","processFields","excludedFieldIds","Set","title","filteredFields","Object","keys","filter","has","hasDefinition","some","f","map","fieldDefinition","find","fieldType","TEXT","sortBy","field","_field$fieldDefinitio","order","renderField","colourBrandingMain","safeFieldDef","CTA","btnLabel","btnUrl","createElement","style","styles","ctaContainer","large","color","onPress","handleLinkPress","EMAIL","linkContainer","name","fieldIcon","linkText","DATE","dateContainer","bodyText","FILE","files","filesContainer","sectionTitle","attachments","index","key","handleFilePress","DESCRIPTION","descriptionText","imgUri","findIndex","img","caption","openImagePopup","activeOpacity","source","inlineImage","resizeMode","imageCaption","marginVertical","flexDirection","flexWrap","marginHorizontal","imgItem","globalIndex","padding","TITLE","titleText","NUMBER","numberText","JSON","stringify","renderFields","processedFields","_index","_field$fieldDefinitio2","_field$fieldDefinitio3","fieldContainer","getImageSource","getTitle","defaultTitle","render","imageSource","centerContainer","errorText","behavior","position","flex","backgroundColor","BACKGROUND_WHITE","backButton","headerContent","BackButton","onPressBack","marginLeft","keyboardShouldPersistTaps","ref","scrollView","mainHeader","AutoOffsetImage","grayPlaceholder","gradientOverlay","colors","start","x","y","end","locations","paddingHorizontal","titleContainer","eventTitle","minHeight","ImagePopup","visible","images","onClose","closeImagePopup","create","left","top","zIndex","elevation","alignSelf","paddingTop","image","undefined","fontFamily","fontSize","marginBottom","textTransform","letterSpacing","textAlign","paddingVertical","borderRadius","maxWidth","lineHeight","fontWeight","alignItems","textDecorationLine","fontStyle","marginTop","justifyContent","SM","marginRight","section","divider","facilityDetailTitle","facilityDetailContent","facilityDetailsContainer","facilityDetailsTextContainer","facilityDetailContainer","facilityDetailTitleContainer","textLink","mapStateToProps","ownProps","getMainBrandingColourFromState","colourBrandingHeader","user","forwardRef"],"sources":["FeatureDetailScreen.js"],"sourcesContent":["import React, { Component } from 'react';\nimport { SPACING } from '../js/spacing';\nimport {\n Platform,\n View,\n ScrollView,\n Animated,\n Dimensions,\n StatusBar,\n Text,\n TouchableOpacity,\n Linking,\n StyleSheet,\n KeyboardAvoidingView,\n Image,\n} from 'react-native';\nimport { connect } from 'react-redux';\nimport _ from 'lodash';\nimport { LinearGradient } from 'expo-linear-gradient';\nimport { Services } from '../feature.config';\nimport { Components, Colours, COLOUR_TRANSPARENT, TEXT_DARK } from '../core.config';\nimport { TEXT_MID, LINEGREY } from '../js/Colors';\nimport FileDownload from './FileDownload';\nimport { values } from '../values.config';\nimport { selectFeatureDefinition } from '../utils/selectors';\n\nimport Constants from 'expo-constants';\nimport { InlineButton, FontAwesome } from './common';\nimport { FIELD_TYPES } from '../js/FieldTypes';\n\nconst SCREEN_HEIGHT = Dimensions.get('window').height;\nconst CARD_IMAGE_HEIGHT = SCREEN_HEIGHT * 0.3;\nconst SCREEN_WIDTH = Dimensions.get('window').width;\n\n// StatusBarHeight function copied to avoid import from outside extension\nconst StatusBarHeight = size => {\n return getStatusBarHeight() + size;\n};\n\nconst getStatusBarHeight = () => {\n return Platform.OS === 'ios' ? Constants.statusBarHeight : StatusBar.currentHeight;\n};\n\nclass FeatureDetailScreen extends Component {\n constructor(props) {\n super(props);\n this.state = {\n isHomeTab: false,\n showImagePopup: false,\n selectedImageIndex: 0,\n allImages: [],\n };\n }\n\n componentDidMount() {\n this.setState({\n isHomeTab: !Services.navigation.getParentRoute(),\n allImages: this.collectAllImages(),\n });\n }\n\n componentDidUpdate(prevProps) {\n // Recalculate allImages when listing or featureDefinition changes\n if (prevProps.listing !== this.props.listing || prevProps.featureDefinition !== this.props.featureDefinition) {\n this.setState({ allImages: this.collectAllImages() });\n }\n }\n\n componentWillUnmount() {\n if (Platform.OS === 'ios') StatusBar.setBarStyle('dark-content');\n }\n\n onPressBack = () => {\n Services.navigation.goBack();\n };\n\n /**\n * Collect all images from listing fields\n */\n collectAllImages = () => {\n const { listing, featureDefinition } = this.props;\n if (!listing || !listing.fields || !featureDefinition) {\n return [];\n }\n\n const allImages = [];\n const fieldDefinitions = featureDefinition.fields || [];\n\n // Add primary feature image first\n const primaryImage = listing.fields[values.mandatoryFields.featureImage];\n if (primaryImage) {\n const imageObj = this.normalizeImageField(primaryImage);\n if (imageObj) {\n allImages.push({\n ...imageObj,\n fieldId: values.mandatoryFields.featureImage,\n fieldLabel: values.labels.featureImage,\n });\n }\n }\n\n // Add additional image fields\n fieldDefinitions.forEach(fieldDef => {\n if (\n (fieldDef.type === FIELD_TYPES.IMAGE || fieldDef.type === FIELD_TYPES.GALLERY) &&\n fieldDef.id !== values.mandatoryFields.featureImage\n ) {\n const fieldValue = listing.fields[fieldDef.id];\n\n if (fieldValue) {\n if (fieldDef.type === FIELD_TYPES.GALLERY) {\n // Handle Gallery (Array of images)\n if (Array.isArray(fieldValue)) {\n fieldValue.forEach(item => {\n const imageObj = this.normalizeImageField(item);\n if (imageObj) {\n allImages.push({\n ...imageObj,\n fieldId: fieldDef.id,\n fieldLabel: fieldDef.label || fieldDef.id,\n });\n }\n });\n }\n } else {\n // Handle Single Image\n const imageObj = this.normalizeImageField(fieldValue);\n if (imageObj) {\n allImages.push({\n ...imageObj,\n fieldId: fieldDef.id,\n fieldLabel: fieldDef.label || fieldDef.id,\n });\n }\n }\n }\n }\n });\n\n return allImages;\n };\n\n /**\n * Normalize image field to object format\n */\n normalizeImageField = imageField => {\n if (!imageField) return null;\n\n if (typeof imageField === 'string') {\n return { uri: imageField, url: imageField };\n }\n\n if (typeof imageField === 'object') {\n if (imageField.uri) {\n return { uri: imageField.uri, url: imageField.uri, ...imageField };\n }\n if (imageField.url) {\n return { uri: imageField.url, url: imageField.url, ...imageField };\n }\n }\n\n return null;\n };\n\n /**\n * Open image popup with all images\n */\n openImagePopup = (imageIndex = 0) => {\n const { allImages } = this.state;\n if (allImages.length > 0) {\n this.setState({\n showImagePopup: true,\n selectedImageIndex: imageIndex,\n });\n }\n };\n\n /**\n * Close image popup\n */\n closeImagePopup = () => {\n this.setState({\n showImagePopup: false,\n selectedImageIndex: 0,\n });\n };\n\n /**\n * Process fields: filter out mandatory fields and sort by order\n */\n processFields() {\n const { listing, featureDefinition } = this.props;\n if (!listing || !listing.fields || !featureDefinition) {\n return [];\n }\n\n const fieldDefinitions = featureDefinition.fields || [];\n const excludedFieldIds = new Set([values.mandatoryFields.title, values.mandatoryFields.featureImage]);\n\n // Filter and map fields with their definitions\n const filteredFields = Object.keys(listing.fields)\n .filter(fieldId => {\n if (!fieldId || excludedFieldIds.has(fieldId)) return false;\n if (listing.fields[fieldId] == null) return false;\n\n // Only include fields that have definitions\n const hasDefinition = fieldDefinitions.some(f => f.id === fieldId);\n if (!hasDefinition) {\n return false;\n }\n return true;\n })\n .map(fieldId => {\n const fieldDefinition = fieldDefinitions.find(fieldDef => fieldDef.id === fieldId);\n return {\n fieldId,\n fieldValue: listing.fields[fieldId],\n fieldDefinition,\n fieldType: fieldDefinition?.type || FIELD_TYPES.TEXT,\n };\n });\n\n // Sort by order property if available\n return _.sortBy(filteredFields, field => field.fieldDefinition?.order || 999);\n }\n\n /**\n * Handle link opening for various field types\n */\n handleLinkPress = url => {\n if (url) {\n Linking.openURL(url).catch(err => {\n // Silently handle URL open errors\n });\n }\n };\n\n handleFilePress = file => {\n if (file?.url) {\n Linking.openURL(file.url).catch(err => {\n // Silently handle URL open errors\n });\n }\n };\n\n /**\n * Render individual field based on its type\n */\n renderField(fieldDef, fieldValue) {\n const { colourBrandingMain } = this.props;\n\n // Defensive: ensure fieldDef is always an object\n const safeFieldDef = fieldDef || {};\n const type = safeFieldDef.type || FIELD_TYPES.TEXT;\n const label = safeFieldDef.label || safeFieldDef.id || 'Unknown Field';\n\n switch (type) {\n case FIELD_TYPES.CTA: {\n const btnLabel = fieldValue?.label || label;\n const btnUrl = fieldValue?.url;\n return (\n <View style={styles.ctaContainer}>\n <InlineButton large color={colourBrandingMain} onPress={() => this.handleLinkPress(btnUrl)}>\n {btnLabel}\n </InlineButton>\n </View>\n );\n }\n\n case FIELD_TYPES.EMAIL:\n return (\n <TouchableOpacity style={styles.linkContainer} onPress={() => this.handleLinkPress(`mailto:${fieldValue}`)}>\n <FontAwesome name=\"envelope\" size={16} color={colourBrandingMain} style={styles.fieldIcon} />\n <Text style={[styles.linkText, { color: colourBrandingMain }]}>{fieldValue}</Text>\n </TouchableOpacity>\n );\n\n case FIELD_TYPES.DATE:\n return (\n <View style={styles.dateContainer}>\n <FontAwesome name=\"calendar\" size={16} color={TEXT_DARK} style={styles.fieldIcon} />\n <Text style={styles.bodyText}>{fieldValue}</Text>\n </View>\n );\n\n case FIELD_TYPES.FILE: {\n // Handle both single file and multiple files (array)\n const files = Array.isArray(fieldValue) ? fieldValue : [fieldValue];\n return (\n <View style={styles.filesContainer}>\n <Text style={styles.sectionTitle}>{values.labels.attachments}</Text>\n {files.map((file, index) => {\n // Skip null/undefined files\n if (!file) return null;\n\n return <FileDownload key={index} file={file} onPress={this.handleFilePress} color={this.props.colourBrandingMain} />;\n })}\n </View>\n );\n }\n\n case FIELD_TYPES.DESCRIPTION:\n return <Text style={styles.descriptionText}>{fieldValue}</Text>;\n\n case FIELD_TYPES.IMAGE: {\n // Render secondary images inline with click handler\n const imgUri = fieldValue?.url || fieldValue?.uri || (typeof fieldValue === 'string' ? fieldValue : null);\n if (!imgUri) return null;\n\n // Find this image's index for popup\n const { allImages } = this.state;\n const imageIndex = allImages.findIndex(img => img.uri === imgUri || img.url === imgUri);\n\n const caption = fieldValue?.caption;\n\n return (\n <TouchableOpacity onPress={() => this.openImagePopup(imageIndex)} activeOpacity={0.8}>\n <Image source={{ uri: imgUri }} style={styles.inlineImage} resizeMode=\"cover\" />\n {caption && <Text style={styles.imageCaption}>{caption}</Text>}\n </TouchableOpacity>\n );\n }\n\n case FIELD_TYPES.GALLERY: {\n // Handle Gallery Fields (arrays of images)\n if (!Array.isArray(fieldValue)) return null;\n\n return (\n <View style={{ marginVertical: 16 }}>\n <View\n style={{\n flexDirection: 'row',\n flexWrap: 'wrap',\n marginHorizontal: -4,\n }}\n >\n {fieldValue.map((imgItem, index) => {\n const imgUri = imgItem?.url || imgItem?.uri || (typeof imgItem === 'string' ? imgItem : null);\n if (!imgUri) return null;\n\n // Find global index for the popup\n const { allImages } = this.state;\n const globalIndex = allImages.findIndex(img => img.uri === imgUri || img.url === imgUri);\n\n return (\n <TouchableOpacity\n key={index}\n onPress={() => this.openImagePopup(globalIndex !== -1 ? globalIndex : 0)}\n activeOpacity={0.8}\n style={{ width: '50%', padding: 4 }} // 2 column grid\n >\n <Image source={{ uri: imgUri }} style={[styles.inlineImage, { height: 150, marginVertical: 0 }]} resizeMode=\"cover\" />\n </TouchableOpacity>\n );\n })}\n </View>\n </View>\n );\n }\n\n case FIELD_TYPES.TITLE:\n return <Text style={styles.titleText}>{fieldValue}</Text>;\n\n case FIELD_TYPES.NUMBER:\n return <Text style={styles.numberText}>{fieldValue}</Text>;\n\n default:\n // Default text fallback\n return <Text style={styles.bodyText}>{typeof fieldValue === 'object' ? JSON.stringify(fieldValue) : fieldValue}</Text>;\n }\n }\n\n /**\n * Render all fields with proper spacing and structure\n */\n renderFields() {\n const processedFields = this.processFields();\n\n return processedFields.map((field, _index) => {\n return (\n <View key={field.fieldId} style={styles.fieldContainer}>\n {field.fieldType !== FIELD_TYPES.CTA && field.fieldType !== FIELD_TYPES.IMAGE && field.fieldDefinition?.label && (\n <Text style={styles.fieldLabel}>{field.fieldDefinition?.label}</Text>\n )}\n {this.renderField(field.fieldDefinition, field.fieldValue)}\n </View>\n );\n });\n }\n\n getImageSource() {\n const { listing } = this.props;\n if (!listing || !listing.fields) {\n return null;\n }\n\n const imageField = listing.fields[values.mandatoryFields.featureImage];\n if (!imageField) {\n return null;\n }\n\n // Parse the image field value\n if (typeof imageField === 'string') {\n return imageField;\n }\n\n return imageField?.uri || imageField?.url || null;\n }\n\n getTitle() {\n const { listing } = this.props;\n if (!listing || !listing.fields) {\n return values.labels.defaultTitle;\n }\n\n return listing.fields[values.mandatoryFields.title] || values.labels.defaultTitle;\n }\n\n render() {\n const { listing } = this.props;\n const imageSource = this.getImageSource();\n const title = this.getTitle();\n\n if (!listing || !listing.fields) {\n return (\n <View style={styles.centerContainer}>\n <Text style={styles.errorText}>Item not found</Text>\n </View>\n );\n }\n\n return (\n <KeyboardAvoidingView\n behavior={Platform.OS === 'ios' && 'padding'}\n style={{\n position: 'relative',\n flex: 1,\n backgroundColor: Colours.BACKGROUND_WHITE || '#fff',\n }}\n >\n <View style={styles.backButton}>\n <View style={styles.headerContent}>\n <Components.BackButton\n onPress={this.onPressBack}\n style={{\n marginLeft: 16,\n }}\n />\n </View>\n </View>\n\n <ScrollView\n style={{ backgroundColor: Colours.BACKGROUND_WHITE || '#fff' }}\n keyboardShouldPersistTaps=\"always\"\n ref={ref => {\n this.scrollView = ref;\n }}\n >\n <View style={[styles.mainHeader]}>\n {imageSource ? (\n <TouchableOpacity onPress={() => this.openImagePopup(0)} activeOpacity={0.9}>\n <Components.AutoOffsetImage uri={imageSource} height={CARD_IMAGE_HEIGHT} width={SCREEN_WIDTH} />\n </TouchableOpacity>\n ) : (\n <View style={[styles.grayPlaceholder, { height: CARD_IMAGE_HEIGHT, width: SCREEN_WIDTH }]} />\n )}\n <LinearGradient\n style={styles.gradientOverlay}\n colors={['rgba(0,0,0,0.7)', COLOUR_TRANSPARENT]}\n start={{ x: 0, y: 0 }}\n end={{ x: 0, y: 1 }}\n locations={[0, 0.5]}\n />\n </View>\n <View style={{ paddingHorizontal: 16 }}>\n <View style={styles.titleContainer}>\n <Text style={styles.eventTitle}>{title}</Text>\n </View>\n </View>\n <View style={{ minHeight: SCREEN_HEIGHT - CARD_IMAGE_HEIGHT - 56 }}>{this.renderFields()}</View>\n </ScrollView>\n\n {/* Image Popup */}\n {this.state.showImagePopup && (\n <Components.ImagePopup\n visible={this.state.showImagePopup}\n images={this.state.allImages}\n index={this.state.selectedImageIndex}\n onClose={this.closeImagePopup}\n />\n )}\n </KeyboardAvoidingView>\n );\n }\n}\n\nconst styles = StyleSheet.create({\n backButton: {\n position: 'absolute',\n left: 0,\n top: 0,\n zIndex: 10,\n elevation: 10,\n height: StatusBarHeight(70),\n },\n headerContent: {\n alignSelf: 'stretch',\n flexDirection: 'row',\n flex: 1,\n paddingTop: StatusBarHeight(12),\n },\n image: {\n backgroundColor: Colours.BACKGROUND_WHITE || '#fff',\n position: 'relative',\n width: undefined,\n height: undefined,\n flex: 1,\n },\n mainHeader: {\n position: 'relative',\n height: CARD_IMAGE_HEIGHT,\n width: SCREEN_WIDTH,\n },\n\n gradientOverlay: {\n flex: 1,\n },\n\n // Field container and spacing\n fieldContainer: {\n paddingHorizontal: 16,\n marginVertical: 12,\n },\n\n // Field labels/captions\n fieldLabel: {\n fontFamily: 'sf-regular',\n fontSize: 11,\n color: TEXT_MID,\n marginBottom: 6,\n textTransform: 'uppercase',\n letterSpacing: 1.2,\n alignSelf: 'center',\n textAlign: 'center',\n paddingHorizontal: 8,\n paddingVertical: 4,\n backgroundColor: 'rgba(0,0,0,0.03)',\n borderRadius: 12,\n maxWidth: '80%',\n },\n\n // Field type styles\n bodyText: {\n fontFamily: 'sf-regular',\n fontSize: 16,\n color: TEXT_DARK,\n lineHeight: 22,\n },\n titleText: {\n fontFamily: 'sf-semibold',\n fontSize: 16,\n fontWeight: '600',\n color: TEXT_DARK,\n },\n descriptionText: {\n fontFamily: 'sf-regular',\n fontSize: 16,\n color: TEXT_DARK,\n lineHeight: 24,\n },\n numberText: {\n fontFamily: 'sf-medium',\n fontSize: 16,\n fontWeight: '500',\n color: TEXT_DARK,\n },\n\n // Link styles\n linkContainer: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingVertical: 4,\n },\n linkText: {\n fontFamily: 'sf-medium',\n fontSize: 16,\n textDecorationLine: 'underline',\n },\n\n // Date styles\n dateContainer: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingVertical: 4,\n },\n\n // Image styles\n inlineImage: {\n width: '100%',\n height: 200,\n borderRadius: 8,\n marginVertical: 8,\n },\n imageCaption: {\n fontFamily: 'sf-italic',\n fontSize: 14,\n fontStyle: 'italic',\n color: TEXT_MID,\n marginTop: 4,\n textAlign: 'center',\n },\n\n // CTA styles\n ctaContainer: {\n alignItems: 'center',\n justifyContent: 'center',\n paddingVertical: 8,\n },\n\n // Section title styles\n sectionTitle: {\n fontFamily: 'sf-bold',\n fontSize: 14,\n fontWeight: '700',\n color: TEXT_DARK,\n marginBottom: SPACING.SM,\n },\n\n // Icon styles\n fieldIcon: {\n marginRight: 8,\n },\n\n // Legacy styles (kept for compatibility)\n section: {\n paddingVertical: 16,\n },\n divider: {\n height: 1,\n backgroundColor: LINEGREY,\n marginVertical: 8,\n marginHorizontal: 16,\n },\n facilityDetailTitle: {\n fontFamily: 'sf-bold',\n color: TEXT_DARK,\n fontSize: 14,\n },\n facilityDetailContent: {\n fontFamily: 'sf-regular',\n color: TEXT_DARK,\n fontSize: 16,\n lineHeight: 22,\n },\n facilityDetailsContainer: {\n flex: 1,\n },\n facilityDetailsTextContainer: {\n flex: 1,\n justifyContent: 'center',\n },\n facilityDetailContainer: {\n marginTop: 16,\n flexDirection: 'row',\n },\n facilityDetailTitleContainer: {\n width: 100,\n marginRight: 10,\n },\n titleContainer: {\n paddingVertical: 16,\n paddingTop: 20,\n },\n eventTitle: {\n fontFamily: 'sf-bold',\n fontSize: 24,\n lineHeight: 32,\n color: TEXT_DARK,\n backgroundColor: 'transparent',\n flex: 1,\n },\n textLink: {\n fontFamily: 'sf-medium',\n fontSize: 16,\n lineHeight: 22,\n },\n grayPlaceholder: {\n backgroundColor: LINEGREY,\n },\n centerContainer: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n paddingHorizontal: 20,\n },\n errorText: {\n fontSize: 16,\n color: TEXT_MID,\n textAlign: 'center',\n },\n filesContainer: {\n marginVertical: 8,\n },\n});\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n colourBrandingMain: Colours.getMainBrandingColourFromState(state),\n colourBrandingHeader: Colours.getMainBrandingColourFromState(state),\n featureDefinition: selectFeatureDefinition(state),\n user: state.user,\n };\n};\n\nexport default connect(mapStateToProps, null, null, { forwardRef: true })(FeatureDetailScreen);\n"],"mappings":";;;AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAQ,OAAO;AACxC,SAASC,OAAO,QAAQ,eAAe;AACvC,SACEC,QAAQ,EACRC,IAAI,EACJC,UAAU,EACVC,QAAQ,EACRC,UAAU,EACVC,SAAS,EACTC,IAAI,EACJC,gBAAgB,EAChBC,OAAO,EACPC,UAAU,EACVC,oBAAoB,EACpBC,KAAK,QACA,cAAc;AACrB,SAASC,OAAO,QAAQ,aAAa;AACrC,OAAOC,CAAC,MAAM,QAAQ;AACtB,SAASC,cAAc,QAAQ,sBAAsB;AACrD,SAASC,QAAQ,QAAQ,mBAAmB;AAC5C,SAASC,UAAU,EAAEC,OAAO,EAAEC,kBAAkB,EAAEC,SAAS,QAAQ,gBAAgB;AACnF,SAASC,QAAQ,EAAEC,QAAQ,QAAQ,cAAc;AACjD,OAAOC,YAAY,MAAM,gBAAgB;AACzC,SAASC,MAAM,QAAQ,kBAAkB;AACzC,SAASC,uBAAuB,QAAQ,oBAAoB;AAE5D,OAAOC,SAAS,MAAM,gBAAgB;AACtC,SAASC,YAAY,EAAEC,WAAW,QAAQ,UAAU;AACpD,SAASC,WAAW,QAAQ,kBAAkB;AAE9C,MAAMC,aAAa,GAAGzB,UAAU,CAAC0B,GAAG,CAAC,QAAQ,CAAC,CAACC,MAAM;AACrD,MAAMC,iBAAiB,GAAGH,aAAa,GAAG,GAAG;AAC7C,MAAMI,YAAY,GAAG7B,UAAU,CAAC0B,GAAG,CAAC,QAAQ,CAAC,CAACI,KAAK;;AAEnD;AACA,MAAMC,eAAe,GAAGC,IAAI,IAAI;EAC9B,OAAOC,kBAAkB,CAAC,CAAC,GAAGD,IAAI;AACpC,CAAC;AAED,MAAMC,kBAAkB,GAAGA,CAAA,KAAM;EAC/B,OAAOrC,QAAQ,CAACsC,EAAE,KAAK,KAAK,GAAGb,SAAS,CAACc,eAAe,GAAGlC,SAAS,CAACmC,aAAa;AACpF,CAAC;AAED,MAAMC,mBAAmB,SAAS3C,SAAS,CAAC;EAC1C4C,WAAWA,CAACC,KAAK,EAAE;IACjB,KAAK,CAACA,KAAK,CAAC;IAACC,eAAA,sBA2BD,MAAM;MAClB7B,QAAQ,CAAC8B,UAAU,CAACC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAED;AACF;AACA;IAFEF,eAAA,2BAGmB,MAAM;MACvB,MAAM;QAAEG,OAAO;QAAEC;MAAkB,CAAC,GAAG,IAAI,CAACL,KAAK;MACjD,IAAI,CAACI,OAAO,IAAI,CAACA,OAAO,CAACE,MAAM,IAAI,CAACD,iBAAiB,EAAE;QACrD,OAAO,EAAE;MACX;MAEA,MAAME,SAAS,GAAG,EAAE;MACpB,MAAMC,gBAAgB,GAAGH,iBAAiB,CAACC,MAAM,IAAI,EAAE;;MAEvD;MACA,MAAMG,YAAY,GAAGL,OAAO,CAACE,MAAM,CAAC1B,MAAM,CAAC8B,eAAe,CAACC,YAAY,CAAC;MACxE,IAAIF,YAAY,EAAE;QAChB,MAAMG,QAAQ,GAAG,IAAI,CAACC,mBAAmB,CAACJ,YAAY,CAAC;QACvD,IAAIG,QAAQ,EAAE;UACZL,SAAS,CAACO,IAAI,CAAC;YACb,GAAGF,QAAQ;YACXG,OAAO,EAAEnC,MAAM,CAAC8B,eAAe,CAACC,YAAY;YAC5CK,UAAU,EAAEpC,MAAM,CAACqC,MAAM,CAACN;UAC5B,CAAC,CAAC;QACJ;MACF;;MAEA;MACAH,gBAAgB,CAACU,OAAO,CAACC,QAAQ,IAAI;QACnC,IACE,CAACA,QAAQ,CAACC,IAAI,KAAKnC,WAAW,CAACoC,KAAK,IAAIF,QAAQ,CAACC,IAAI,KAAKnC,WAAW,CAACqC,OAAO,KAC7EH,QAAQ,CAACI,EAAE,KAAK3C,MAAM,CAAC8B,eAAe,CAACC,YAAY,EACnD;UACA,MAAMa,UAAU,GAAGpB,OAAO,CAACE,MAAM,CAACa,QAAQ,CAACI,EAAE,CAAC;UAE9C,IAAIC,UAAU,EAAE;YACd,IAAIL,QAAQ,CAACC,IAAI,KAAKnC,WAAW,CAACqC,OAAO,EAAE;cACzC;cACA,IAAIG,KAAK,CAACC,OAAO,CAACF,UAAU,CAAC,EAAE;gBAC7BA,UAAU,CAACN,OAAO,CAACS,IAAI,IAAI;kBACzB,MAAMf,QAAQ,GAAG,IAAI,CAACC,mBAAmB,CAACc,IAAI,CAAC;kBAC/C,IAAIf,QAAQ,EAAE;oBACZL,SAAS,CAACO,IAAI,CAAC;sBACb,GAAGF,QAAQ;sBACXG,OAAO,EAAEI,QAAQ,CAACI,EAAE;sBACpBP,UAAU,EAAEG,QAAQ,CAACS,KAAK,IAAIT,QAAQ,CAACI;oBACzC,CAAC,CAAC;kBACJ;gBACF,CAAC,CAAC;cACJ;YACF,CAAC,MAAM;cACL;cACA,MAAMX,QAAQ,GAAG,IAAI,CAACC,mBAAmB,CAACW,UAAU,CAAC;cACrD,IAAIZ,QAAQ,EAAE;gBACZL,SAAS,CAACO,IAAI,CAAC;kBACb,GAAGF,QAAQ;kBACXG,OAAO,EAAEI,QAAQ,CAACI,EAAE;kBACpBP,UAAU,EAAEG,QAAQ,CAACS,KAAK,IAAIT,QAAQ,CAACI;gBACzC,CAAC,CAAC;cACJ;YACF;UACF;QACF;MACF,CAAC,CAAC;MAEF,OAAOhB,SAAS;IAClB,CAAC;IAED;AACF;AACA;IAFEN,eAAA,8BAGsB4B,UAAU,IAAI;MAClC,IAAI,CAACA,UAAU,EAAE,OAAO,IAAI;MAE5B,IAAI,OAAOA,UAAU,KAAK,QAAQ,EAAE;QAClC,OAAO;UAAEC,GAAG,EAAED,UAAU;UAAEE,GAAG,EAAEF;QAAW,CAAC;MAC7C;MAEA,IAAI,OAAOA,UAAU,KAAK,QAAQ,EAAE;QAClC,IAAIA,UAAU,CAACC,GAAG,EAAE;UAClB,OAAO;YAAEA,GAAG,EAAED,UAAU,CAACC,GAAG;YAAEC,GAAG,EAAEF,UAAU,CAACC,GAAG;YAAE,GAAGD;UAAW,CAAC;QACpE;QACA,IAAIA,UAAU,CAACE,GAAG,EAAE;UAClB,OAAO;YAAED,GAAG,EAAED,UAAU,CAACE,GAAG;YAAEA,GAAG,EAAEF,UAAU,CAACE,GAAG;YAAE,GAAGF;UAAW,CAAC;QACpE;MACF;MAEA,OAAO,IAAI;IACb,CAAC;IAED;AACF;AACA;IAFE5B,eAAA,yBAGiB,CAAC+B,UAAU,GAAG,CAAC,KAAK;MACnC,MAAM;QAAEzB;MAAU,CAAC,GAAG,IAAI,CAAC0B,KAAK;MAChC,IAAI1B,SAAS,CAAC2B,MAAM,GAAG,CAAC,EAAE;QACxB,IAAI,CAACC,QAAQ,CAAC;UACZC,cAAc,EAAE,IAAI;UACpBC,kBAAkB,EAAEL;QACtB,CAAC,CAAC;MACJ;IACF,CAAC;IAED;AACF;AACA;IAFE/B,eAAA,0BAGkB,MAAM;MACtB,IAAI,CAACkC,QAAQ,CAAC;QACZC,cAAc,EAAE,KAAK;QACrBC,kBAAkB,EAAE;MACtB,CAAC,CAAC;IACJ,CAAC;IAyCD;AACF;AACA;IAFEpC,eAAA,0BAGkB8B,GAAG,IAAI;MACvB,IAAIA,GAAG,EAAE;QACPlE,OAAO,CAACyE,OAAO,CAACP,GAAG,CAAC,CAACQ,KAAK,CAACC,GAAG,IAAI;UAChC;QAAA,CACD,CAAC;MACJ;IACF,CAAC;IAAAvC,eAAA,0BAEiBwC,IAAI,IAAI;MACxB,IAAIA,IAAI,aAAJA,IAAI,eAAJA,IAAI,CAAEV,GAAG,EAAE;QACblE,OAAO,CAACyE,OAAO,CAACG,IAAI,CAACV,GAAG,CAAC,CAACQ,KAAK,CAACC,GAAG,IAAI;UACrC;QAAA,CACD,CAAC;MACJ;IACF,CAAC;IArMC,IAAI,CAACP,KAAK,GAAG;MACXS,SAAS,EAAE,KAAK;MAChBN,cAAc,EAAE,KAAK;MACrBC,kBAAkB,EAAE,CAAC;MACrB9B,SAAS,EAAE;IACb,CAAC;EACH;EAEAoC,iBAAiBA,CAAA,EAAG;IAClB,IAAI,CAACR,QAAQ,CAAC;MACZO,SAAS,EAAE,CAACtE,QAAQ,CAAC8B,UAAU,CAAC0C,cAAc,CAAC,CAAC;MAChDrC,SAAS,EAAE,IAAI,CAACsC,gBAAgB,CAAC;IACnC,CAAC,CAAC;EACJ;EAEAC,kBAAkBA,CAACC,SAAS,EAAE;IAC5B;IACA,IAAIA,SAAS,CAAC3C,OAAO,KAAK,IAAI,CAACJ,KAAK,CAACI,OAAO,IAAI2C,SAAS,CAAC1C,iBAAiB,KAAK,IAAI,CAACL,KAAK,CAACK,iBAAiB,EAAE;MAC5G,IAAI,CAAC8B,QAAQ,CAAC;QAAE5B,SAAS,EAAE,IAAI,CAACsC,gBAAgB,CAAC;MAAE,CAAC,CAAC;IACvD;EACF;EAEAG,oBAAoBA,CAAA,EAAG;IACrB,IAAI3F,QAAQ,CAACsC,EAAE,KAAK,KAAK,EAAEjC,SAAS,CAACuF,WAAW,CAAC,cAAc,CAAC;EAClE;EAqHA;AACF;AACA;EACEC,aAAaA,CAAA,EAAG;IACd,MAAM;MAAE9C,OAAO;MAAEC;IAAkB,CAAC,GAAG,IAAI,CAACL,KAAK;IACjD,IAAI,CAACI,OAAO,IAAI,CAACA,OAAO,CAACE,MAAM,IAAI,CAACD,iBAAiB,EAAE;MACrD,OAAO,EAAE;IACX;IAEA,MAAMG,gBAAgB,GAAGH,iBAAiB,CAACC,MAAM,IAAI,EAAE;IACvD,MAAM6C,gBAAgB,GAAG,IAAIC,GAAG,CAAC,CAACxE,MAAM,CAAC8B,eAAe,CAAC2C,KAAK,EAAEzE,MAAM,CAAC8B,eAAe,CAACC,YAAY,CAAC,CAAC;;IAErG;IACA,MAAM2C,cAAc,GAAGC,MAAM,CAACC,IAAI,CAACpD,OAAO,CAACE,MAAM,CAAC,CAC/CmD,MAAM,CAAC1C,OAAO,IAAI;MACjB,IAAI,CAACA,OAAO,IAAIoC,gBAAgB,CAACO,GAAG,CAAC3C,OAAO,CAAC,EAAE,OAAO,KAAK;MAC3D,IAAIX,OAAO,CAACE,MAAM,CAACS,OAAO,CAAC,IAAI,IAAI,EAAE,OAAO,KAAK;;MAEjD;MACA,MAAM4C,aAAa,GAAGnD,gBAAgB,CAACoD,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACtC,EAAE,KAAKR,OAAO,CAAC;MAClE,IAAI,CAAC4C,aAAa,EAAE;QAClB,OAAO,KAAK;MACd;MACA,OAAO,IAAI;IACb,CAAC,CAAC,CACDG,GAAG,CAAC/C,OAAO,IAAI;MACd,MAAMgD,eAAe,GAAGvD,gBAAgB,CAACwD,IAAI,CAAC7C,QAAQ,IAAIA,QAAQ,CAACI,EAAE,KAAKR,OAAO,CAAC;MAClF,OAAO;QACLA,OAAO;QACPS,UAAU,EAAEpB,OAAO,CAACE,MAAM,CAACS,OAAO,CAAC;QACnCgD,eAAe;QACfE,SAAS,EAAE,CAAAF,eAAe,aAAfA,eAAe,uBAAfA,eAAe,CAAE3C,IAAI,KAAInC,WAAW,CAACiF;MAClD,CAAC;IACH,CAAC,CAAC;;IAEJ;IACA,OAAOhG,CAAC,CAACiG,MAAM,CAACb,cAAc,EAAEc,KAAK;MAAA,IAAAC,qBAAA;MAAA,OAAI,EAAAA,qBAAA,GAAAD,KAAK,CAACL,eAAe,cAAAM,qBAAA,uBAArBA,qBAAA,CAAuBC,KAAK,KAAI,GAAG;IAAA,EAAC;EAC/E;EAqBA;AACF;AACA;EACEC,WAAWA,CAACpD,QAAQ,EAAEK,UAAU,EAAE;IAChC,MAAM;MAAEgD;IAAmB,CAAC,GAAG,IAAI,CAACxE,KAAK;;IAEzC;IACA,MAAMyE,YAAY,GAAGtD,QAAQ,IAAI,CAAC,CAAC;IACnC,MAAMC,IAAI,GAAGqD,YAAY,CAACrD,IAAI,IAAInC,WAAW,CAACiF,IAAI;IAClD,MAAMtC,KAAK,GAAG6C,YAAY,CAAC7C,KAAK,IAAI6C,YAAY,CAAClD,EAAE,IAAI,eAAe;IAEtE,QAAQH,IAAI;MACV,KAAKnC,WAAW,CAACyF,GAAG;QAAE;UACpB,MAAMC,QAAQ,GAAG,CAAAnD,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEI,KAAK,KAAIA,KAAK;UAC3C,MAAMgD,MAAM,GAAGpD,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEO,GAAG;UAC9B,oBACE7E,KAAA,CAAA2H,aAAA,CAACvH,IAAI;YAACwH,KAAK,EAAEC,MAAM,CAACC;UAAa,gBAC/B9H,KAAA,CAAA2H,aAAA,CAAC9F,YAAY;YAACkG,KAAK;YAACC,KAAK,EAAEV,kBAAmB;YAACW,OAAO,EAAEA,CAAA,KAAM,IAAI,CAACC,eAAe,CAACR,MAAM;UAAE,GACxFD,QACW,CACV,CAAC;QAEX;MAEA,KAAK1F,WAAW,CAACoG,KAAK;QACpB,oBACEnI,KAAA,CAAA2H,aAAA,CAACjH,gBAAgB;UAACkH,KAAK,EAAEC,MAAM,CAACO,aAAc;UAACH,OAAO,EAAEA,CAAA,KAAM,IAAI,CAACC,eAAe,CAAC,UAAU5D,UAAU,EAAE;QAAE,gBACzGtE,KAAA,CAAA2H,aAAA,CAAC7F,WAAW;UAACuG,IAAI,EAAC,UAAU;UAAC9F,IAAI,EAAE,EAAG;UAACyF,KAAK,EAAEV,kBAAmB;UAACM,KAAK,EAAEC,MAAM,CAACS;QAAU,CAAE,CAAC,eAC7FtI,KAAA,CAAA2H,aAAA,CAAClH,IAAI;UAACmH,KAAK,EAAE,CAACC,MAAM,CAACU,QAAQ,EAAE;YAAEP,KAAK,EAAEV;UAAmB,CAAC;QAAE,GAAEhD,UAAiB,CACjE,CAAC;MAGvB,KAAKvC,WAAW,CAACyG,IAAI;QACnB,oBACExI,KAAA,CAAA2H,aAAA,CAACvH,IAAI;UAACwH,KAAK,EAAEC,MAAM,CAACY;QAAc,gBAChCzI,KAAA,CAAA2H,aAAA,CAAC7F,WAAW;UAACuG,IAAI,EAAC,UAAU;UAAC9F,IAAI,EAAE,EAAG;UAACyF,KAAK,EAAE1G,SAAU;UAACsG,KAAK,EAAEC,MAAM,CAACS;QAAU,CAAE,CAAC,eACpFtI,KAAA,CAAA2H,aAAA,CAAClH,IAAI;UAACmH,KAAK,EAAEC,MAAM,CAACa;QAAS,GAAEpE,UAAiB,CAC5C,CAAC;MAGX,KAAKvC,WAAW,CAAC4G,IAAI;QAAE;UACrB;UACA,MAAMC,KAAK,GAAGrE,KAAK,CAACC,OAAO,CAACF,UAAU,CAAC,GAAGA,UAAU,GAAG,CAACA,UAAU,CAAC;UACnE,oBACEtE,KAAA,CAAA2H,aAAA,CAACvH,IAAI;YAACwH,KAAK,EAAEC,MAAM,CAACgB;UAAe,gBACjC7I,KAAA,CAAA2H,aAAA,CAAClH,IAAI;YAACmH,KAAK,EAAEC,MAAM,CAACiB;UAAa,GAAEpH,MAAM,CAACqC,MAAM,CAACgF,WAAkB,CAAC,EACnEH,KAAK,CAAChC,GAAG,CAAC,CAACrB,IAAI,EAAEyD,KAAK,KAAK;YAC1B;YACA,IAAI,CAACzD,IAAI,EAAE,OAAO,IAAI;YAEtB,oBAAOvF,KAAA,CAAA2H,aAAA,CAAClG,YAAY;cAACwH,GAAG,EAAED,KAAM;cAACzD,IAAI,EAAEA,IAAK;cAAC0C,OAAO,EAAE,IAAI,CAACiB,eAAgB;cAAClB,KAAK,EAAE,IAAI,CAAClF,KAAK,CAACwE;YAAmB,CAAE,CAAC;UACtH,CAAC,CACG,CAAC;QAEX;MAEA,KAAKvF,WAAW,CAACoH,WAAW;QAC1B,oBAAOnJ,KAAA,CAAA2H,aAAA,CAAClH,IAAI;UAACmH,KAAK,EAAEC,MAAM,CAACuB;QAAgB,GAAE9E,UAAiB,CAAC;MAEjE,KAAKvC,WAAW,CAACoC,KAAK;QAAE;UACtB;UACA,MAAMkF,MAAM,GAAG,CAAA/E,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEO,GAAG,MAAIP,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEM,GAAG,MAAK,OAAON,UAAU,KAAK,QAAQ,GAAGA,UAAU,GAAG,IAAI,CAAC;UACzG,IAAI,CAAC+E,MAAM,EAAE,OAAO,IAAI;;UAExB;UACA,MAAM;YAAEhG;UAAU,CAAC,GAAG,IAAI,CAAC0B,KAAK;UAChC,MAAMD,UAAU,GAAGzB,SAAS,CAACiG,SAAS,CAACC,GAAG,IAAIA,GAAG,CAAC3E,GAAG,KAAKyE,MAAM,IAAIE,GAAG,CAAC1E,GAAG,KAAKwE,MAAM,CAAC;UAEvF,MAAMG,OAAO,GAAGlF,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEkF,OAAO;UAEnC,oBACExJ,KAAA,CAAA2H,aAAA,CAACjH,gBAAgB;YAACuH,OAAO,EAAEA,CAAA,KAAM,IAAI,CAACwB,cAAc,CAAC3E,UAAU,CAAE;YAAC4E,aAAa,EAAE;UAAI,gBACnF1J,KAAA,CAAA2H,aAAA,CAAC7G,KAAK;YAAC6I,MAAM,EAAE;cAAE/E,GAAG,EAAEyE;YAAO,CAAE;YAACzB,KAAK,EAAEC,MAAM,CAAC+B,WAAY;YAACC,UAAU,EAAC;UAAO,CAAE,CAAC,EAC/EL,OAAO,iBAAIxJ,KAAA,CAAA2H,aAAA,CAAClH,IAAI;YAACmH,KAAK,EAAEC,MAAM,CAACiC;UAAa,GAAEN,OAAc,CAC7C,CAAC;QAEvB;MAEA,KAAKzH,WAAW,CAACqC,OAAO;QAAE;UACxB;UACA,IAAI,CAACG,KAAK,CAACC,OAAO,CAACF,UAAU,CAAC,EAAE,OAAO,IAAI;UAE3C,oBACEtE,KAAA,CAAA2H,aAAA,CAACvH,IAAI;YAACwH,KAAK,EAAE;cAAEmC,cAAc,EAAE;YAAG;UAAE,gBAClC/J,KAAA,CAAA2H,aAAA,CAACvH,IAAI;YACHwH,KAAK,EAAE;cACLoC,aAAa,EAAE,KAAK;cACpBC,QAAQ,EAAE,MAAM;cAChBC,gBAAgB,EAAE,CAAC;YACrB;UAAE,GAED5F,UAAU,CAACsC,GAAG,CAAC,CAACuD,OAAO,EAAEnB,KAAK,KAAK;YAClC,MAAMK,MAAM,GAAG,CAAAc,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEtF,GAAG,MAAIsF,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEvF,GAAG,MAAK,OAAOuF,OAAO,KAAK,QAAQ,GAAGA,OAAO,GAAG,IAAI,CAAC;YAC7F,IAAI,CAACd,MAAM,EAAE,OAAO,IAAI;;YAExB;YACA,MAAM;cAAEhG;YAAU,CAAC,GAAG,IAAI,CAAC0B,KAAK;YAChC,MAAMqF,WAAW,GAAG/G,SAAS,CAACiG,SAAS,CAACC,GAAG,IAAIA,GAAG,CAAC3E,GAAG,KAAKyE,MAAM,IAAIE,GAAG,CAAC1E,GAAG,KAAKwE,MAAM,CAAC;YAExF,oBACErJ,KAAA,CAAA2H,aAAA,CAACjH,gBAAgB;cACfuI,GAAG,EAAED,KAAM;cACXf,OAAO,EAAEA,CAAA,KAAM,IAAI,CAACwB,cAAc,CAACW,WAAW,KAAK,CAAC,CAAC,GAAGA,WAAW,GAAG,CAAC,CAAE;cACzEV,aAAa,EAAE,GAAI;cACnB9B,KAAK,EAAE;gBAAEvF,KAAK,EAAE,KAAK;gBAAEgI,OAAO,EAAE;cAAE,CAAE,CAAC;YAAA,gBAErCrK,KAAA,CAAA2H,aAAA,CAAC7G,KAAK;cAAC6I,MAAM,EAAE;gBAAE/E,GAAG,EAAEyE;cAAO,CAAE;cAACzB,KAAK,EAAE,CAACC,MAAM,CAAC+B,WAAW,EAAE;gBAAE1H,MAAM,EAAE,GAAG;gBAAE6H,cAAc,EAAE;cAAE,CAAC,CAAE;cAACF,UAAU,EAAC;YAAO,CAAE,CACrG,CAAC;UAEvB,CAAC,CACG,CACF,CAAC;QAEX;MAEA,KAAK9H,WAAW,CAACuI,KAAK;QACpB,oBAAOtK,KAAA,CAAA2H,aAAA,CAAClH,IAAI;UAACmH,KAAK,EAAEC,MAAM,CAAC0C;QAAU,GAAEjG,UAAiB,CAAC;MAE3D,KAAKvC,WAAW,CAACyI,MAAM;QACrB,oBAAOxK,KAAA,CAAA2H,aAAA,CAAClH,IAAI;UAACmH,KAAK,EAAEC,MAAM,CAAC4C;QAAW,GAAEnG,UAAiB,CAAC;MAE5D;QACE;QACA,oBAAOtE,KAAA,CAAA2H,aAAA,CAAClH,IAAI;UAACmH,KAAK,EAAEC,MAAM,CAACa;QAAS,GAAE,OAAOpE,UAAU,KAAK,QAAQ,GAAGoG,IAAI,CAACC,SAAS,CAACrG,UAAU,CAAC,GAAGA,UAAiB,CAAC;IAC1H;EACF;;EAEA;AACF;AACA;EACEsG,YAAYA,CAAA,EAAG;IACb,MAAMC,eAAe,GAAG,IAAI,CAAC7E,aAAa,CAAC,CAAC;IAE5C,OAAO6E,eAAe,CAACjE,GAAG,CAAC,CAACM,KAAK,EAAE4D,MAAM,KAAK;MAAA,IAAAC,sBAAA,EAAAC,sBAAA;MAC5C,oBACEhL,KAAA,CAAA2H,aAAA,CAACvH,IAAI;QAAC6I,GAAG,EAAE/B,KAAK,CAACrD,OAAQ;QAAC+D,KAAK,EAAEC,MAAM,CAACoD;MAAe,GACpD/D,KAAK,CAACH,SAAS,KAAKhF,WAAW,CAACyF,GAAG,IAAIN,KAAK,CAACH,SAAS,KAAKhF,WAAW,CAACoC,KAAK,MAAA4G,sBAAA,GAAI7D,KAAK,CAACL,eAAe,cAAAkE,sBAAA,uBAArBA,sBAAA,CAAuBrG,KAAK,kBAC3G1E,KAAA,CAAA2H,aAAA,CAAClH,IAAI;QAACmH,KAAK,EAAEC,MAAM,CAAC/D;MAAW,IAAAkH,sBAAA,GAAE9D,KAAK,CAACL,eAAe,cAAAmE,sBAAA,uBAArBA,sBAAA,CAAuBtG,KAAY,CACrE,EACA,IAAI,CAAC2C,WAAW,CAACH,KAAK,CAACL,eAAe,EAAEK,KAAK,CAAC5C,UAAU,CACrD,CAAC;IAEX,CAAC,CAAC;EACJ;EAEA4G,cAAcA,CAAA,EAAG;IACf,MAAM;MAAEhI;IAAQ,CAAC,GAAG,IAAI,CAACJ,KAAK;IAC9B,IAAI,CAACI,OAAO,IAAI,CAACA,OAAO,CAACE,MAAM,EAAE;MAC/B,OAAO,IAAI;IACb;IAEA,MAAMuB,UAAU,GAAGzB,OAAO,CAACE,MAAM,CAAC1B,MAAM,CAAC8B,eAAe,CAACC,YAAY,CAAC;IACtE,IAAI,CAACkB,UAAU,EAAE;MACf,OAAO,IAAI;IACb;;IAEA;IACA,IAAI,OAAOA,UAAU,KAAK,QAAQ,EAAE;MAClC,OAAOA,UAAU;IACnB;IAEA,OAAO,CAAAA,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEC,GAAG,MAAID,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEE,GAAG,KAAI,IAAI;EACnD;EAEAsG,QAAQA,CAAA,EAAG;IACT,MAAM;MAAEjI;IAAQ,CAAC,GAAG,IAAI,CAACJ,KAAK;IAC9B,IAAI,CAACI,OAAO,IAAI,CAACA,OAAO,CAACE,MAAM,EAAE;MAC/B,OAAO1B,MAAM,CAACqC,MAAM,CAACqH,YAAY;IACnC;IAEA,OAAOlI,OAAO,CAACE,MAAM,CAAC1B,MAAM,CAAC8B,eAAe,CAAC2C,KAAK,CAAC,IAAIzE,MAAM,CAACqC,MAAM,CAACqH,YAAY;EACnF;EAEAC,MAAMA,CAAA,EAAG;IACP,MAAM;MAAEnI;IAAQ,CAAC,GAAG,IAAI,CAACJ,KAAK;IAC9B,MAAMwI,WAAW,GAAG,IAAI,CAACJ,cAAc,CAAC,CAAC;IACzC,MAAM/E,KAAK,GAAG,IAAI,CAACgF,QAAQ,CAAC,CAAC;IAE7B,IAAI,CAACjI,OAAO,IAAI,CAACA,OAAO,CAACE,MAAM,EAAE;MAC/B,oBACEpD,KAAA,CAAA2H,aAAA,CAACvH,IAAI;QAACwH,KAAK,EAAEC,MAAM,CAAC0D;MAAgB,gBAClCvL,KAAA,CAAA2H,aAAA,CAAClH,IAAI;QAACmH,KAAK,EAAEC,MAAM,CAAC2D;MAAU,GAAC,gBAAoB,CAC/C,CAAC;IAEX;IAEA,oBACExL,KAAA,CAAA2H,aAAA,CAAC9G,oBAAoB;MACnB4K,QAAQ,EAAEtL,QAAQ,CAACsC,EAAE,KAAK,KAAK,IAAI,SAAU;MAC7CmF,KAAK,EAAE;QACL8D,QAAQ,EAAE,UAAU;QACpBC,IAAI,EAAE,CAAC;QACPC,eAAe,EAAExK,OAAO,CAACyK,gBAAgB,IAAI;MAC/C;IAAE,gBAEF7L,KAAA,CAAA2H,aAAA,CAACvH,IAAI;MAACwH,KAAK,EAAEC,MAAM,CAACiE;IAAW,gBAC7B9L,KAAA,CAAA2H,aAAA,CAACvH,IAAI;MAACwH,KAAK,EAAEC,MAAM,CAACkE;IAAc,gBAChC/L,KAAA,CAAA2H,aAAA,CAACxG,UAAU,CAAC6K,UAAU;MACpB/D,OAAO,EAAE,IAAI,CAACgE,WAAY;MAC1BrE,KAAK,EAAE;QACLsE,UAAU,EAAE;MACd;IAAE,CACH,CACG,CACF,CAAC,eAEPlM,KAAA,CAAA2H,aAAA,CAACtH,UAAU;MACTuH,KAAK,EAAE;QAAEgE,eAAe,EAAExK,OAAO,CAACyK,gBAAgB,IAAI;MAAO,CAAE;MAC/DM,yBAAyB,EAAC,QAAQ;MAClCC,GAAG,EAAEA,GAAG,IAAI;QACV,IAAI,CAACC,UAAU,GAAGD,GAAG;MACvB;IAAE,gBAEFpM,KAAA,CAAA2H,aAAA,CAACvH,IAAI;MAACwH,KAAK,EAAE,CAACC,MAAM,CAACyE,UAAU;IAAE,GAC9BhB,WAAW,gBACVtL,KAAA,CAAA2H,aAAA,CAACjH,gBAAgB;MAACuH,OAAO,EAAEA,CAAA,KAAM,IAAI,CAACwB,cAAc,CAAC,CAAC,CAAE;MAACC,aAAa,EAAE;IAAI,gBAC1E1J,KAAA,CAAA2H,aAAA,CAACxG,UAAU,CAACoL,eAAe;MAAC3H,GAAG,EAAE0G,WAAY;MAACpJ,MAAM,EAAEC,iBAAkB;MAACE,KAAK,EAAED;IAAa,CAAE,CAC/E,CAAC,gBAEnBpC,KAAA,CAAA2H,aAAA,CAACvH,IAAI;MAACwH,KAAK,EAAE,CAACC,MAAM,CAAC2E,eAAe,EAAE;QAAEtK,MAAM,EAAEC,iBAAiB;QAAEE,KAAK,EAAED;MAAa,CAAC;IAAE,CAAE,CAC7F,eACDpC,KAAA,CAAA2H,aAAA,CAAC1G,cAAc;MACb2G,KAAK,EAAEC,MAAM,CAAC4E,eAAgB;MAC9BC,MAAM,EAAE,CAAC,iBAAiB,EAAErL,kBAAkB,CAAE;MAChDsL,KAAK,EAAE;QAAEC,CAAC,EAAE,CAAC;QAAEC,CAAC,EAAE;MAAE,CAAE;MACtBC,GAAG,EAAE;QAAEF,CAAC,EAAE,CAAC;QAAEC,CAAC,EAAE;MAAE,CAAE;MACpBE,SAAS,EAAE,CAAC,CAAC,EAAE,GAAG;IAAE,CACrB,CACG,CAAC,eACP/M,KAAA,CAAA2H,aAAA,CAACvH,IAAI;MAACwH,KAAK,EAAE;QAAEoF,iBAAiB,EAAE;MAAG;IAAE,gBACrChN,KAAA,CAAA2H,aAAA,CAACvH,IAAI;MAACwH,KAAK,EAAEC,MAAM,CAACoF;IAAe,gBACjCjN,KAAA,CAAA2H,aAAA,CAAClH,IAAI;MAACmH,KAAK,EAAEC,MAAM,CAACqF;IAAW,GAAE/G,KAAY,CACzC,CACF,CAAC,eACPnG,KAAA,CAAA2H,aAAA,CAACvH,IAAI;MAACwH,KAAK,EAAE;QAAEuF,SAAS,EAAEnL,aAAa,GAAGG,iBAAiB,GAAG;MAAG;IAAE,GAAE,IAAI,CAACyI,YAAY,CAAC,CAAQ,CACrF,CAAC,EAGZ,IAAI,CAAC7F,KAAK,CAACG,cAAc,iBACxBlF,KAAA,CAAA2H,aAAA,CAACxG,UAAU,CAACiM,UAAU;MACpBC,OAAO,EAAE,IAAI,CAACtI,KAAK,CAACG,cAAe;MACnCoI,MAAM,EAAE,IAAI,CAACvI,KAAK,CAAC1B,SAAU;MAC7B2F,KAAK,EAAE,IAAI,CAACjE,KAAK,CAACI,kBAAmB;MACrCoI,OAAO,EAAE,IAAI,CAACC;IAAgB,CAC/B,CAEiB,CAAC;EAE3B;AACF;AAEA,MAAM3F,MAAM,GAAGjH,UAAU,CAAC6M,MAAM,CAAC;EAC/B3B,UAAU,EAAE;IACVJ,QAAQ,EAAE,UAAU;IACpBgC,IAAI,EAAE,CAAC;IACPC,GAAG,EAAE,CAAC;IACNC,MAAM,EAAE,EAAE;IACVC,SAAS,EAAE,EAAE;IACb3L,MAAM,EAAEI,eAAe,CAAC,EAAE;EAC5B,CAAC;EACDyJ,aAAa,EAAE;IACb+B,SAAS,EAAE,SAAS;IACpB9D,aAAa,EAAE,KAAK;IACpB2B,IAAI,EAAE,CAAC;IACPoC,UAAU,EAAEzL,eAAe,CAAC,EAAE;EAChC,CAAC;EACD0L,KAAK,EAAE;IACLpC,eAAe,EAAExK,OAAO,CAACyK,gBAAgB,IAAI,MAAM;IACnDH,QAAQ,EAAE,UAAU;IACpBrJ,KAAK,EAAE4L,SAAS;IAChB/L,MAAM,EAAE+L,SAAS;IACjBtC,IAAI,EAAE;EACR,CAAC;EACDW,UAAU,EAAE;IACVZ,QAAQ,EAAE,UAAU;IACpBxJ,MAAM,EAAEC,iBAAiB;IACzBE,KAAK,EAAED;EACT,CAAC;EAEDqK,eAAe,EAAE;IACfd,IAAI,EAAE;EACR,CAAC;EAED;EACAV,cAAc,EAAE;IACd+B,iBAAiB,EAAE,EAAE;IACrBjD,cAAc,EAAE;EAClB,CAAC;EAED;EACAjG,UAAU,EAAE;IACVoK,UAAU,EAAE,YAAY;IACxBC,QAAQ,EAAE,EAAE;IACZnG,KAAK,EAAEzG,QAAQ;IACf6M,YAAY,EAAE,CAAC;IACfC,aAAa,EAAE,WAAW;IAC1BC,aAAa,EAAE,GAAG;IAClBR,SAAS,EAAE,QAAQ;IACnBS,SAAS,EAAE,QAAQ;IACnBvB,iBAAiB,EAAE,CAAC;IACpBwB,eAAe,EAAE,CAAC;IAClB5C,eAAe,EAAE,kBAAkB;IACnC6C,YAAY,EAAE,EAAE;IAChBC,QAAQ,EAAE;EACZ,CAAC;EAED;EACAhG,QAAQ,EAAE;IACRwF,UAAU,EAAE,YAAY;IACxBC,QAAQ,EAAE,EAAE;IACZnG,KAAK,EAAE1G,SAAS;IAChBqN,UAAU,EAAE;EACd,CAAC;EACDpE,SAAS,EAAE;IACT2D,UAAU,EAAE,aAAa;IACzBC,QAAQ,EAAE,EAAE;IACZS,UAAU,EAAE,KAAK;IACjB5G,KAAK,EAAE1G;EACT,CAAC;EACD8H,eAAe,EAAE;IACf8E,UAAU,EAAE,YAAY;IACxBC,QAAQ,EAAE,EAAE;IACZnG,KAAK,EAAE1G,SAAS;IAChBqN,UAAU,EAAE;EACd,CAAC;EACDlE,UAAU,EAAE;IACVyD,UAAU,EAAE,WAAW;IACvBC,QAAQ,EAAE,EAAE;IACZS,UAAU,EAAE,KAAK;IACjB5G,KAAK,EAAE1G;EACT,CAAC;EAED;EACA8G,aAAa,EAAE;IACb4B,aAAa,EAAE,KAAK;IACpB6E,UAAU,EAAE,QAAQ;IACpBL,eAAe,EAAE;EACnB,CAAC;EACDjG,QAAQ,EAAE;IACR2F,UAAU,EAAE,WAAW;IACvBC,QAAQ,EAAE,EAAE;IACZW,kBAAkB,EAAE;EACtB,CAAC;EAED;EACArG,aAAa,EAAE;IACbuB,aAAa,EAAE,KAAK;IACpB6E,UAAU,EAAE,QAAQ;IACpBL,eAAe,EAAE;EACnB,CAAC;EAED;EACA5E,WAAW,EAAE;IACXvH,KAAK,EAAE,MAAM;IACbH,MAAM,EAAE,GAAG;IACXuM,YAAY,EAAE,CAAC;IACf1E,cAAc,EAAE;EAClB,CAAC;EACDD,YAAY,EAAE;IACZoE,UAAU,EAAE,WAAW;IACvBC,QAAQ,EAAE,EAAE;IACZY,SAAS,EAAE,QAAQ;IACnB/G,KAAK,EAAEzG,QAAQ;IACfyN,SAAS,EAAE,CAAC;IACZT,SAAS,EAAE;EACb,CAAC;EAED;EACAzG,YAAY,EAAE;IACZ+G,UAAU,EAAE,QAAQ;IACpBI,cAAc,EAAE,QAAQ;IACxBT,eAAe,EAAE;EACnB,CAAC;EAED;EACA1F,YAAY,EAAE;IACZoF,UAAU,EAAE,SAAS;IACrBC,QAAQ,EAAE,EAAE;IACZS,UAAU,EAAE,KAAK;IACjB5G,KAAK,EAAE1G,SAAS;IAChB8M,YAAY,EAAElO,OAAO,CAACgP;EACxB,CAAC;EAED;EACA5G,SAAS,EAAE;IACT6G,WAAW,EAAE;EACf,CAAC;EAED;EACAC,OAAO,EAAE;IACPZ,eAAe,EAAE;EACnB,CAAC;EACDa,OAAO,EAAE;IACPnN,MAAM,EAAE,CAAC;IACT0J,eAAe,EAAEpK,QAAQ;IACzBuI,cAAc,EAAE,CAAC;IACjBG,gBAAgB,EAAE;EACpB,CAAC;EACDoF,mBAAmB,EAAE;IACnBpB,UAAU,EAAE,SAAS;IACrBlG,KAAK,EAAE1G,SAAS;IAChB6M,QAAQ,EAAE;EACZ,CAAC;EACDoB,qBAAqB,EAAE;IACrBrB,UAAU,EAAE,YAAY;IACxBlG,KAAK,EAAE1G,SAAS;IAChB6M,QAAQ,EAAE,EAAE;IACZQ,UAAU,EAAE;EACd,CAAC;EACDa,wBAAwB,EAAE;IACxB7D,IAAI,EAAE;EACR,CAAC;EACD8D,4BAA4B,EAAE;IAC5B9D,IAAI,EAAE,CAAC;IACPsD,cAAc,EAAE;EAClB,CAAC;EACDS,uBAAuB,EAAE;IACvBV,SAAS,EAAE,EAAE;IACbhF,aAAa,EAAE;EACjB,CAAC;EACD2F,4BAA4B,EAAE;IAC5BtN,KAAK,EAAE,GAAG;IACV8M,WAAW,EAAE;EACf,CAAC;EACDlC,cAAc,EAAE;IACduB,eAAe,EAAE,EAAE;IACnBT,UAAU,EAAE;EACd,CAAC;EACDb,UAAU,EAAE;IACVgB,UAAU,EAAE,SAAS;IACrBC,QAAQ,EAAE,EAAE;IACZQ,UAAU,EAAE,EAAE;IACd3G,KAAK,EAAE1G,SAAS;IAChBsK,eAAe,EAAE,aAAa;IAC9BD,IAAI,EAAE;EACR,CAAC;EACDiE,QAAQ,EAAE;IACR1B,UAAU,EAAE,WAAW;IACvBC,QAAQ,EAAE,EAAE;IACZQ,UAAU,EAAE;EACd,CAAC;EACDnC,eAAe,EAAE;IACfZ,eAAe,EAAEpK;EACnB,CAAC;EACD+J,eAAe,EAAE;IACfI,IAAI,EAAE,CAAC;IACPsD,cAAc,EAAE,QAAQ;IACxBJ,UAAU,EAAE,QAAQ;IACpB7B,iBAAiB,EAAE;EACrB,CAAC;EACDxB,SAAS,EAAE;IACT2C,QAAQ,EAAE,EAAE;IACZnG,KAAK,EAAEzG,QAAQ;IACfgN,SAAS,EAAE;EACb,CAAC;EACD1F,cAAc,EAAE;IACdkB,cAAc,EAAE;EAClB;AACF,CAAC,CAAC;AAEF,MAAM8F,eAAe,GAAGA,CAAC9K,KAAK,EAAE+K,QAAQ,KAAK;EAC3C,OAAO;IACLxI,kBAAkB,EAAElG,OAAO,CAAC2O,8BAA8B,CAAChL,KAAK,CAAC;IACjEiL,oBAAoB,EAAE5O,OAAO,CAAC2O,8BAA8B,CAAChL,KAAK,CAAC;IACnE5B,iBAAiB,EAAExB,uBAAuB,CAACoD,KAAK,CAAC;IACjDkL,IAAI,EAAElL,KAAK,CAACkL;EACd,CAAC;AACH,CAAC;AAED,eAAelP,OAAO,CAAC8O,eAAe,EAAE,IAAI,EAAE,IAAI,EAAE;EAAEK,UAAU,EAAE;AAAK,CAAC,CAAC,CAACtN,mBAAmB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["React","Component","SPACING","Platform","View","ScrollView","Animated","Dimensions","StatusBar","Text","TouchableOpacity","Linking","StyleSheet","KeyboardAvoidingView","Image","FontAwesome","connect","_","LinearGradient","Services","Components","Colours","COLOUR_TRANSPARENT","TEXT_DARK","TEXT_MID","LINEGREY","FileDownload","values","selectFeatureDefinition","Constants","InlineButton","FIELD_TYPES","SCREEN_HEIGHT","get","height","CARD_IMAGE_HEIGHT","SCREEN_WIDTH","width","StatusBarHeight","size","getStatusBarHeight","OS","statusBarHeight","currentHeight","FeatureDetailScreen","constructor","props","_defineProperty","navigation","goBack","listing","featureDefinition","fields","allImages","fieldDefinitions","primaryImage","mandatoryFields","featureImage","imageObj","normalizeImageField","push","fieldId","fieldLabel","labels","forEach","fieldDef","type","IMAGE","GALLERY","id","fieldValue","Array","isArray","item","label","imageField","uri","url","imageIndex","state","length","setState","showImagePopup","selectedImageIndex","openURL","catch","err","file","isHomeTab","componentDidMount","getParentRoute","collectAllImages","componentDidUpdate","prevProps","componentWillUnmount","setBarStyle","processFields","excludedFieldIds","Set","title","filteredFields","Object","keys","filter","has","hasDefinition","some","f","map","fieldDefinition","find","fieldType","TEXT","sortBy","field","_field$fieldDefinitio","order","renderField","colourBrandingMain","safeFieldDef","CTA","btnLabel","btnUrl","createElement","style","styles","ctaContainer","large","color","onPress","handleLinkPress","EMAIL","linkContainer","name","fieldIcon","linkText","DATE","dateContainer","bodyText","FILE","files","filesContainer","sectionTitle","attachments","index","key","handleFilePress","DESCRIPTION","descriptionText","imgUri","findIndex","img","caption","openImagePopup","activeOpacity","source","inlineImage","resizeMode","imageCaption","marginVertical","flexDirection","flexWrap","marginHorizontal","imgItem","globalIndex","padding","TITLE","titleText","NUMBER","numberText","JSON","stringify","renderFields","processedFields","_index","_field$fieldDefinitio2","_field$fieldDefinitio3","fieldContainer","getImageSource","getTitle","defaultTitle","render","imageSource","centerContainer","errorText","behavior","position","flex","backgroundColor","BACKGROUND_WHITE","backButton","headerContent","BackButton","onPressBack","marginLeft","keyboardShouldPersistTaps","ref","scrollView","mainHeader","AutoOffsetImage","grayPlaceholder","gradientOverlay","colors","start","x","y","end","locations","paddingHorizontal","titleContainer","eventTitle","minHeight","ImagePopup","visible","images","onClose","closeImagePopup","create","left","top","zIndex","elevation","alignSelf","paddingTop","image","undefined","fontFamily","fontSize","marginBottom","textTransform","letterSpacing","textAlign","paddingVertical","borderRadius","maxWidth","lineHeight","fontWeight","alignItems","textDecorationLine","fontStyle","marginTop","justifyContent","SM","marginRight","section","divider","facilityDetailTitle","facilityDetailContent","facilityDetailsContainer","facilityDetailsTextContainer","facilityDetailContainer","facilityDetailTitleContainer","textLink","mapStateToProps","ownProps","getMainBrandingColourFromState","colourBrandingHeader","user","forwardRef"],"sources":["FeatureDetailScreen.js"],"sourcesContent":["import React, { Component } from 'react';\nimport { SPACING } from '../js/spacing';\nimport {\n Platform,\n View,\n ScrollView,\n Animated,\n Dimensions,\n StatusBar,\n Text,\n TouchableOpacity,\n Linking,\n StyleSheet,\n KeyboardAvoidingView,\n Image,\n} from 'react-native';\nimport { FontAwesome } from './common';\nimport { connect } from 'react-redux';\nimport _ from 'lodash';\nimport { LinearGradient } from 'expo-linear-gradient';\nimport { Services } from '../feature.config';\nimport { Components, Colours, COLOUR_TRANSPARENT, TEXT_DARK } from '../core.config';\nimport { TEXT_MID, LINEGREY } from '../js/Colors';\nimport FileDownload from './FileDownload';\nimport { values } from '../values.config';\nimport { selectFeatureDefinition } from '../utils/selectors';\n\nimport Constants from 'expo-constants';\nimport { InlineButton } from './common';\nimport { FIELD_TYPES } from '../js/FieldTypes';\n\nconst SCREEN_HEIGHT = Dimensions.get('window').height;\nconst CARD_IMAGE_HEIGHT = SCREEN_HEIGHT * 0.3;\nconst SCREEN_WIDTH = Dimensions.get('window').width;\n\n// StatusBarHeight function copied to avoid import from outside extension\nconst StatusBarHeight = size => {\n return getStatusBarHeight() + size;\n};\n\nconst getStatusBarHeight = () => {\n return Platform.OS === 'ios' ? Constants.statusBarHeight : StatusBar.currentHeight;\n};\n\nclass FeatureDetailScreen extends Component {\n constructor(props) {\n super(props);\n this.state = {\n isHomeTab: false,\n showImagePopup: false,\n selectedImageIndex: 0,\n allImages: [],\n };\n }\n\n componentDidMount() {\n this.setState({\n isHomeTab: !Services.navigation.getParentRoute(),\n allImages: this.collectAllImages(),\n });\n }\n\n componentDidUpdate(prevProps) {\n // Recalculate allImages when listing or featureDefinition changes\n if (prevProps.listing !== this.props.listing || prevProps.featureDefinition !== this.props.featureDefinition) {\n this.setState({ allImages: this.collectAllImages() });\n }\n }\n\n componentWillUnmount() {\n if (Platform.OS === 'ios') StatusBar.setBarStyle('dark-content');\n }\n\n onPressBack = () => {\n Services.navigation.goBack();\n };\n\n /**\n * Collect all images from listing fields\n */\n collectAllImages = () => {\n const { listing, featureDefinition } = this.props;\n if (!listing || !listing.fields || !featureDefinition) {\n return [];\n }\n\n const allImages = [];\n const fieldDefinitions = featureDefinition.fields || [];\n\n // Add primary feature image first\n const primaryImage = listing.fields[values.mandatoryFields.featureImage];\n if (primaryImage) {\n const imageObj = this.normalizeImageField(primaryImage);\n if (imageObj) {\n allImages.push({\n ...imageObj,\n fieldId: values.mandatoryFields.featureImage,\n fieldLabel: values.labels.featureImage,\n });\n }\n }\n\n // Add additional image fields\n fieldDefinitions.forEach(fieldDef => {\n if (\n (fieldDef.type === FIELD_TYPES.IMAGE || fieldDef.type === FIELD_TYPES.GALLERY) &&\n fieldDef.id !== values.mandatoryFields.featureImage\n ) {\n const fieldValue = listing.fields[fieldDef.id];\n\n if (fieldValue) {\n if (fieldDef.type === FIELD_TYPES.GALLERY) {\n // Handle Gallery (Array of images)\n if (Array.isArray(fieldValue)) {\n fieldValue.forEach(item => {\n const imageObj = this.normalizeImageField(item);\n if (imageObj) {\n allImages.push({\n ...imageObj,\n fieldId: fieldDef.id,\n fieldLabel: fieldDef.label || fieldDef.id,\n });\n }\n });\n }\n } else {\n // Handle Single Image\n const imageObj = this.normalizeImageField(fieldValue);\n if (imageObj) {\n allImages.push({\n ...imageObj,\n fieldId: fieldDef.id,\n fieldLabel: fieldDef.label || fieldDef.id,\n });\n }\n }\n }\n }\n });\n\n return allImages;\n };\n\n /**\n * Normalize image field to object format\n */\n normalizeImageField = imageField => {\n if (!imageField) return null;\n\n if (typeof imageField === 'string') {\n return { uri: imageField, url: imageField };\n }\n\n if (typeof imageField === 'object') {\n if (imageField.uri) {\n return { uri: imageField.uri, url: imageField.uri, ...imageField };\n }\n if (imageField.url) {\n return { uri: imageField.url, url: imageField.url, ...imageField };\n }\n }\n\n return null;\n };\n\n /**\n * Open image popup with all images\n */\n openImagePopup = (imageIndex = 0) => {\n const { allImages } = this.state;\n if (allImages.length > 0) {\n this.setState({\n showImagePopup: true,\n selectedImageIndex: imageIndex,\n });\n }\n };\n\n /**\n * Close image popup\n */\n closeImagePopup = () => {\n this.setState({\n showImagePopup: false,\n selectedImageIndex: 0,\n });\n };\n\n /**\n * Process fields: filter out mandatory fields and sort by order\n */\n processFields() {\n const { listing, featureDefinition } = this.props;\n if (!listing || !listing.fields || !featureDefinition) {\n return [];\n }\n\n const fieldDefinitions = featureDefinition.fields || [];\n const excludedFieldIds = new Set([values.mandatoryFields.title, values.mandatoryFields.featureImage]);\n\n // Filter and map fields with their definitions\n const filteredFields = Object.keys(listing.fields)\n .filter(fieldId => {\n if (!fieldId || excludedFieldIds.has(fieldId)) return false;\n if (listing.fields[fieldId] == null) return false;\n\n // Only include fields that have definitions\n const hasDefinition = fieldDefinitions.some(f => f.id === fieldId);\n if (!hasDefinition) {\n return false;\n }\n return true;\n })\n .map(fieldId => {\n const fieldDefinition = fieldDefinitions.find(fieldDef => fieldDef.id === fieldId);\n return {\n fieldId,\n fieldValue: listing.fields[fieldId],\n fieldDefinition,\n fieldType: fieldDefinition?.type || FIELD_TYPES.TEXT,\n };\n });\n\n // Sort by order property if available\n return _.sortBy(filteredFields, field => field.fieldDefinition?.order || 999);\n }\n\n /**\n * Handle link opening for various field types\n */\n handleLinkPress = url => {\n if (url) {\n Linking.openURL(url).catch(err => {\n // Silently handle URL open errors\n });\n }\n };\n\n handleFilePress = file => {\n if (file?.url) {\n Linking.openURL(file.url).catch(err => {\n // Silently handle URL open errors\n });\n }\n };\n\n /**\n * Render individual field based on its type\n */\n renderField(fieldDef, fieldValue) {\n const { colourBrandingMain } = this.props;\n\n // Defensive: ensure fieldDef is always an object\n const safeFieldDef = fieldDef || {};\n const type = safeFieldDef.type || FIELD_TYPES.TEXT;\n const label = safeFieldDef.label || safeFieldDef.id || 'Unknown Field';\n\n switch (type) {\n case FIELD_TYPES.CTA: {\n const btnLabel = fieldValue?.label || label;\n const btnUrl = fieldValue?.url;\n return (\n <View style={styles.ctaContainer}>\n <InlineButton large color={colourBrandingMain} onPress={() => this.handleLinkPress(btnUrl)}>\n {btnLabel}\n </InlineButton>\n </View>\n );\n }\n\n case FIELD_TYPES.EMAIL:\n return (\n <TouchableOpacity style={styles.linkContainer} onPress={() => this.handleLinkPress(`mailto:${fieldValue}`)}>\n <FontAwesome name=\"envelope\" size={16} color={colourBrandingMain} style={styles.fieldIcon} />\n <Text style={[styles.linkText, { color: colourBrandingMain }]}>{fieldValue}</Text>\n </TouchableOpacity>\n );\n\n case FIELD_TYPES.DATE:\n return (\n <View style={styles.dateContainer}>\n <FontAwesome name=\"calendar\" size={16} color={TEXT_DARK} style={styles.fieldIcon} />\n <Text style={styles.bodyText}>{fieldValue}</Text>\n </View>\n );\n\n case FIELD_TYPES.FILE: {\n // Handle both single file and multiple files (array)\n const files = Array.isArray(fieldValue) ? fieldValue : [fieldValue];\n return (\n <View style={styles.filesContainer}>\n <Text style={styles.sectionTitle}>{values.labels.attachments}</Text>\n {files.map((file, index) => {\n // Skip null/undefined files\n if (!file) return null;\n\n return <FileDownload key={index} file={file} onPress={this.handleFilePress} color={this.props.colourBrandingMain} />;\n })}\n </View>\n );\n }\n\n case FIELD_TYPES.DESCRIPTION:\n return <Text style={styles.descriptionText}>{fieldValue}</Text>;\n\n case FIELD_TYPES.IMAGE: {\n // Render secondary images inline with click handler\n const imgUri = fieldValue?.url || fieldValue?.uri || (typeof fieldValue === 'string' ? fieldValue : null);\n if (!imgUri) return null;\n\n // Find this image's index for popup\n const { allImages } = this.state;\n const imageIndex = allImages.findIndex(img => img.uri === imgUri || img.url === imgUri);\n\n const caption = fieldValue?.caption;\n\n return (\n <TouchableOpacity onPress={() => this.openImagePopup(imageIndex)} activeOpacity={0.8}>\n <Image source={{ uri: imgUri }} style={styles.inlineImage} resizeMode=\"cover\" />\n {caption && <Text style={styles.imageCaption}>{caption}</Text>}\n </TouchableOpacity>\n );\n }\n\n case FIELD_TYPES.GALLERY: {\n // Handle Gallery Fields (arrays of images)\n if (!Array.isArray(fieldValue)) return null;\n\n return (\n <View style={{ marginVertical: 16 }}>\n <View\n style={{\n flexDirection: 'row',\n flexWrap: 'wrap',\n marginHorizontal: -4,\n }}\n >\n {fieldValue.map((imgItem, index) => {\n const imgUri = imgItem?.url || imgItem?.uri || (typeof imgItem === 'string' ? imgItem : null);\n if (!imgUri) return null;\n\n // Find global index for the popup\n const { allImages } = this.state;\n const globalIndex = allImages.findIndex(img => img.uri === imgUri || img.url === imgUri);\n\n return (\n <TouchableOpacity\n key={index}\n onPress={() => this.openImagePopup(globalIndex !== -1 ? globalIndex : 0)}\n activeOpacity={0.8}\n style={{ width: '50%', padding: 4 }} // 2 column grid\n >\n <Image source={{ uri: imgUri }} style={[styles.inlineImage, { height: 150, marginVertical: 0 }]} resizeMode=\"cover\" />\n </TouchableOpacity>\n );\n })}\n </View>\n </View>\n );\n }\n\n case FIELD_TYPES.TITLE:\n return <Text style={styles.titleText}>{fieldValue}</Text>;\n\n case FIELD_TYPES.NUMBER:\n return <Text style={styles.numberText}>{fieldValue}</Text>;\n\n default:\n // Default text fallback\n return <Text style={styles.bodyText}>{typeof fieldValue === 'object' ? JSON.stringify(fieldValue) : fieldValue}</Text>;\n }\n }\n\n /**\n * Render all fields with proper spacing and structure\n */\n renderFields() {\n const processedFields = this.processFields();\n\n return processedFields.map((field, _index) => {\n return (\n <View key={field.fieldId} style={styles.fieldContainer}>\n {field.fieldType !== FIELD_TYPES.CTA && field.fieldType !== FIELD_TYPES.IMAGE && field.fieldDefinition?.label && (\n <Text style={styles.fieldLabel}>{field.fieldDefinition?.label}</Text>\n )}\n {this.renderField(field.fieldDefinition, field.fieldValue)}\n </View>\n );\n });\n }\n\n getImageSource() {\n const { listing } = this.props;\n if (!listing || !listing.fields) {\n return null;\n }\n\n const imageField = listing.fields[values.mandatoryFields.featureImage];\n if (!imageField) {\n return null;\n }\n\n // Parse the image field value\n if (typeof imageField === 'string') {\n return imageField;\n }\n\n return imageField?.uri || imageField?.url || null;\n }\n\n getTitle() {\n const { listing } = this.props;\n if (!listing || !listing.fields) {\n return values.labels.defaultTitle;\n }\n\n return listing.fields[values.mandatoryFields.title] || values.labels.defaultTitle;\n }\n\n render() {\n const { listing } = this.props;\n const imageSource = this.getImageSource();\n const title = this.getTitle();\n\n if (!listing || !listing.fields) {\n return (\n <View style={styles.centerContainer}>\n <Text style={styles.errorText}>Item not found</Text>\n </View>\n );\n }\n\n return (\n <KeyboardAvoidingView\n behavior={Platform.OS === 'ios' && 'padding'}\n style={{\n position: 'relative',\n flex: 1,\n backgroundColor: Colours.BACKGROUND_WHITE || '#fff',\n }}\n >\n <View style={styles.backButton}>\n <View style={styles.headerContent}>\n <Components.BackButton\n onPress={this.onPressBack}\n style={{\n marginLeft: 16,\n }}\n />\n </View>\n </View>\n\n <ScrollView\n style={{ backgroundColor: Colours.BACKGROUND_WHITE || '#fff' }}\n keyboardShouldPersistTaps=\"always\"\n ref={ref => {\n this.scrollView = ref;\n }}\n >\n <View style={[styles.mainHeader]}>\n {imageSource ? (\n <TouchableOpacity onPress={() => this.openImagePopup(0)} activeOpacity={0.9}>\n <Components.AutoOffsetImage uri={imageSource} height={CARD_IMAGE_HEIGHT} width={SCREEN_WIDTH} />\n </TouchableOpacity>\n ) : (\n <View style={[styles.grayPlaceholder, { height: CARD_IMAGE_HEIGHT, width: SCREEN_WIDTH }]} />\n )}\n <LinearGradient\n style={styles.gradientOverlay}\n colors={['rgba(0,0,0,0.7)', COLOUR_TRANSPARENT]}\n start={{ x: 0, y: 0 }}\n end={{ x: 0, y: 1 }}\n locations={[0, 0.5]}\n />\n </View>\n <View style={{ paddingHorizontal: 16 }}>\n <View style={styles.titleContainer}>\n <Text style={styles.eventTitle}>{title}</Text>\n </View>\n </View>\n <View style={{ minHeight: SCREEN_HEIGHT - CARD_IMAGE_HEIGHT - 56 }}>{this.renderFields()}</View>\n </ScrollView>\n\n {/* Image Popup */}\n {this.state.showImagePopup && (\n <Components.ImagePopup\n visible={this.state.showImagePopup}\n images={this.state.allImages}\n index={this.state.selectedImageIndex}\n onClose={this.closeImagePopup}\n />\n )}\n </KeyboardAvoidingView>\n );\n }\n}\n\nconst styles = StyleSheet.create({\n backButton: {\n position: 'absolute',\n left: 0,\n top: 0,\n zIndex: 10,\n elevation: 10,\n height: StatusBarHeight(70),\n },\n headerContent: {\n alignSelf: 'stretch',\n flexDirection: 'row',\n flex: 1,\n paddingTop: StatusBarHeight(12),\n },\n image: {\n backgroundColor: Colours.BACKGROUND_WHITE || '#fff',\n position: 'relative',\n width: undefined,\n height: undefined,\n flex: 1,\n },\n mainHeader: {\n position: 'relative',\n height: CARD_IMAGE_HEIGHT,\n width: SCREEN_WIDTH,\n },\n\n gradientOverlay: {\n flex: 1,\n },\n\n // Field container and spacing\n fieldContainer: {\n paddingHorizontal: 16,\n marginVertical: 12,\n },\n\n // Field labels/captions\n fieldLabel: {\n fontFamily: 'sf-regular',\n fontSize: 11,\n color: TEXT_MID,\n marginBottom: 6,\n textTransform: 'uppercase',\n letterSpacing: 1.2,\n alignSelf: 'center',\n textAlign: 'center',\n paddingHorizontal: 8,\n paddingVertical: 4,\n backgroundColor: 'rgba(0,0,0,0.03)',\n borderRadius: 12,\n maxWidth: '80%',\n },\n\n // Field type styles\n bodyText: {\n fontFamily: 'sf-regular',\n fontSize: 16,\n color: TEXT_DARK,\n lineHeight: 22,\n },\n titleText: {\n fontFamily: 'sf-semibold',\n fontSize: 16,\n fontWeight: '600',\n color: TEXT_DARK,\n },\n descriptionText: {\n fontFamily: 'sf-regular',\n fontSize: 16,\n color: TEXT_DARK,\n lineHeight: 24,\n },\n numberText: {\n fontFamily: 'sf-medium',\n fontSize: 16,\n fontWeight: '500',\n color: TEXT_DARK,\n },\n\n // Link styles\n linkContainer: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingVertical: 4,\n },\n linkText: {\n fontFamily: 'sf-medium',\n fontSize: 16,\n textDecorationLine: 'underline',\n },\n\n // Date styles\n dateContainer: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingVertical: 4,\n },\n\n // Image styles\n inlineImage: {\n width: '100%',\n height: 200,\n borderRadius: 8,\n marginVertical: 8,\n },\n imageCaption: {\n fontFamily: 'sf-italic',\n fontSize: 14,\n fontStyle: 'italic',\n color: TEXT_MID,\n marginTop: 4,\n textAlign: 'center',\n },\n\n // CTA styles\n ctaContainer: {\n alignItems: 'center',\n justifyContent: 'center',\n paddingVertical: 8,\n },\n\n // Section title styles\n sectionTitle: {\n fontFamily: 'sf-bold',\n fontSize: 14,\n fontWeight: '700',\n color: TEXT_DARK,\n marginBottom: SPACING.SM,\n },\n\n // Icon styles\n fieldIcon: {\n marginRight: 8,\n },\n\n // Legacy styles (kept for compatibility)\n section: {\n paddingVertical: 16,\n },\n divider: {\n height: 1,\n backgroundColor: LINEGREY,\n marginVertical: 8,\n marginHorizontal: 16,\n },\n facilityDetailTitle: {\n fontFamily: 'sf-bold',\n color: TEXT_DARK,\n fontSize: 14,\n },\n facilityDetailContent: {\n fontFamily: 'sf-regular',\n color: TEXT_DARK,\n fontSize: 16,\n lineHeight: 22,\n },\n facilityDetailsContainer: {\n flex: 1,\n },\n facilityDetailsTextContainer: {\n flex: 1,\n justifyContent: 'center',\n },\n facilityDetailContainer: {\n marginTop: 16,\n flexDirection: 'row',\n },\n facilityDetailTitleContainer: {\n width: 100,\n marginRight: 10,\n },\n titleContainer: {\n paddingVertical: 16,\n paddingTop: 20,\n },\n eventTitle: {\n fontFamily: 'sf-bold',\n fontSize: 24,\n lineHeight: 32,\n color: TEXT_DARK,\n backgroundColor: 'transparent',\n flex: 1,\n },\n textLink: {\n fontFamily: 'sf-medium',\n fontSize: 16,\n lineHeight: 22,\n },\n grayPlaceholder: {\n backgroundColor: LINEGREY,\n },\n centerContainer: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n paddingHorizontal: 20,\n },\n errorText: {\n fontSize: 16,\n color: TEXT_MID,\n textAlign: 'center',\n },\n filesContainer: {\n marginVertical: 8,\n },\n});\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n colourBrandingMain: Colours.getMainBrandingColourFromState(state),\n colourBrandingHeader: Colours.getMainBrandingColourFromState(state),\n featureDefinition: selectFeatureDefinition(state),\n user: state.user,\n };\n};\n\nexport default connect(mapStateToProps, null, null, { forwardRef: true })(FeatureDetailScreen);\n"],"mappings":"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","ignoreList":[]}
@@ -1,10 +1,10 @@
1
- import React from 'react';
2
- import { Text, TouchableOpacity, View, StyleSheet, Image } from 'react-native';
3
- import { FontAwesome } from './common';
4
- import _ from 'lodash';
5
- import { Helper, Colours } from '../core.config';
6
- import { values } from '../values.config';
7
- import FieldRenderer from './FieldRenderer';
1
+ import React from "react";
2
+ import { Text, TouchableOpacity, View, StyleSheet, Image } from "react-native";
3
+ import { FontAwesome } from "./common";
4
+ import _ from "lodash";
5
+ import { Helper, Colours } from "../core.config";
6
+ import { values } from "../values.config";
7
+ import FieldRenderer from "./FieldRenderer";
8
8
  const FeatureListItem = ({
9
9
  listing,
10
10
  onItemPress,
@@ -15,15 +15,15 @@ const FeatureListItem = ({
15
15
  var _listing$fields, _listing$fields2, _listing$fields3;
16
16
  const getImageSource = imageField => {
17
17
  if (!imageField) return null;
18
- if (typeof imageField === 'string') {
18
+ if (typeof imageField === "string") {
19
19
  return {
20
20
  uri: imageField
21
21
  };
22
22
  }
23
- if (typeof imageField === 'object' && imageField.uri) {
23
+ if (typeof imageField === "object" && imageField.uri) {
24
24
  return imageField;
25
25
  }
26
- if (typeof imageField === 'object' && imageField.url) {
26
+ if (typeof imageField === "object" && imageField.url) {
27
27
  return {
28
28
  uri: imageField.url
29
29
  };
@@ -38,7 +38,7 @@ const FeatureListItem = ({
38
38
 
39
39
  // Get data from feature builder fields
40
40
  const title = ((_listing$fields = listing.fields) === null || _listing$fields === void 0 ? void 0 : _listing$fields[values.mandatoryFields.title]) || values.labels.defaultTitle;
41
- const description = ((_listing$fields2 = listing.fields) === null || _listing$fields2 === void 0 ? void 0 : _listing$fields2.description) || '';
41
+ const description = ((_listing$fields2 = listing.fields) === null || _listing$fields2 === void 0 ? void 0 : _listing$fields2.description) || "";
42
42
  const imageField = (_listing$fields3 = listing.fields) === null || _listing$fields3 === void 0 ? void 0 : _listing$fields3[values.mandatoryFields.featureImage];
43
43
  const imageSource = getImageSource(imageField);
44
44
 
@@ -49,9 +49,9 @@ const FeatureListItem = ({
49
49
  const getFeatureType = () => {
50
50
  if (listing.featureDefinitionId) {
51
51
  // Convert kebab-case to title case for display
52
- return listing.featureDefinitionId.split('-').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join(' ');
52
+ return listing.featureDefinitionId.split("-").map(word => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
53
53
  }
54
- return values.featureName || 'Feature';
54
+ return values.featureName || "Feature";
55
55
  };
56
56
  const featureType = getFeatureType();
57
57
 
@@ -117,22 +117,22 @@ const styles = StyleSheet.create({
117
117
  marginLeft: 60,
118
118
  marginVertical: 15,
119
119
  paddingRight: 15,
120
- justifyContent: 'space-between'
120
+ justifyContent: "space-between"
121
121
  },
122
122
  titleText: {
123
- fontFamily: 'sf-semibold',
123
+ fontFamily: "sf-semibold",
124
124
  fontSize: 16,
125
125
  color: Colours.TEXT_DARK
126
126
  },
127
127
  descriptionText: {
128
- fontFamily: 'sf-regular',
128
+ fontFamily: "sf-regular",
129
129
  fontSize: 12,
130
130
  color: Colours.TEXT_LIGHT,
131
131
  minHeight: 30
132
132
  },
133
133
  typeContainer: {
134
- flexDirection: 'row',
135
- alignItems: 'center'
134
+ flexDirection: "row",
135
+ alignItems: "center"
136
136
  },
137
137
  typeIcon: {
138
138
  fontSize: 16,
@@ -140,28 +140,28 @@ const styles = StyleSheet.create({
140
140
  marginRight: 6
141
141
  },
142
142
  typeText: {
143
- fontFamily: 'sf-semibold',
143
+ fontFamily: "sf-semibold",
144
144
  fontSize: 12,
145
- color: '#007AFF' // TODO: Add colour main here
145
+ color: "#007AFF" // TODO: Add colour main here
146
146
  },
147
147
  imageContainer: {
148
- position: 'absolute',
148
+ position: "absolute",
149
149
  top: 0,
150
150
  left: 16,
151
151
  bottom: 0,
152
- justifyContent: 'center',
152
+ justifyContent: "center",
153
153
  elevation: 8
154
154
  },
155
155
  image: {
156
156
  width: values.dimensions.imageSize,
157
157
  height: values.dimensions.imageSize,
158
- resizeMode: 'cover',
158
+ resizeMode: "cover",
159
159
  borderRadius: values.dimensions.imageBorderRadius
160
160
  },
161
161
  placeholderImage: {
162
- backgroundColor: '#808080',
163
- justifyContent: 'center',
164
- alignItems: 'center'
162
+ backgroundColor: "#808080",
163
+ justifyContent: "center",
164
+ alignItems: "center"
165
165
  },
166
166
  placeholderText: {
167
167
  fontSize: 24
@@ -1 +1 @@
1
- {"version":3,"names":["React","Text","TouchableOpacity","View","StyleSheet","Image","FontAwesome","_","Helper","Colours","values","FieldRenderer","FeatureListItem","listing","onItemPress","colourBrandingMain","style","featureDefinition","_listing$fields","_listing$fields2","_listing$fields3","getImageSource","imageField","uri","url","onPress","title","fields","mandatoryFields","labels","defaultTitle","description","featureImage","imageSource","fieldDefinitions","getFeatureType","featureDefinitionId","split","map","word","charAt","toUpperCase","slice","join","featureName","featureType","renderFieldContent","nonMandatoryFields","filter","fieldDef","id","length","fieldValue","createElement","key","styles","fieldContainer","fieldId","fieldDefinition","color","container","innerContainer","textContainer","titleText","isEmpty","numberOfLines","descriptionText","imageContainer","source","image","resizeMode","placeholderImage","create","marginVertical","paddingHorizontal","height","dimensions","cardHeight","marginLeft","getShadowStyle","shadowOpacity","shadowRadius","elevation","flex","paddingRight","justifyContent","fontFamily","fontSize","TEXT_DARK","TEXT_LIGHT","minHeight","typeContainer","flexDirection","alignItems","typeIcon","marginRight","typeText","position","top","left","bottom","width","imageSize","borderRadius","imageBorderRadius","backgroundColor","placeholderText","marginTop"],"sources":["FeatureListItem.js"],"sourcesContent":["import React from 'react';\nimport { Text, TouchableOpacity, View, StyleSheet, Image } from 'react-native';\nimport { FontAwesome } from './common';\nimport _ from 'lodash';\nimport { Helper, Colours } from '../core.config';\nimport { values } from '../values.config';\n\nimport FieldRenderer from './FieldRenderer';\n\nconst FeatureListItem = ({ listing, onItemPress, colourBrandingMain, style, featureDefinition }) => {\n const getImageSource = imageField => {\n if (!imageField) return null;\n\n if (typeof imageField === 'string') {\n return { uri: imageField };\n }\n\n if (typeof imageField === 'object' && imageField.uri) {\n return imageField;\n }\n\n if (typeof imageField === 'object' && imageField.url) {\n return { uri: imageField.url };\n }\n\n return null;\n };\n\n const onPress = () => {\n if (onItemPress) {\n onItemPress(listing);\n }\n };\n\n // Get data from feature builder fields\n const title = listing.fields?.[values.mandatoryFields.title] || values.labels.defaultTitle;\n const description = listing.fields?.description || '';\n const imageField = listing.fields?.[values.mandatoryFields.featureImage];\n const imageSource = getImageSource(imageField);\n\n // Get field definitions for type-aware rendering\n const fieldDefinitions = featureDefinition?.fields || [];\n\n // Use featureDefinitionId to determine the feature type, fallback to featureName\n const getFeatureType = () => {\n if (listing.featureDefinitionId) {\n // Convert kebab-case to title case for display\n return listing.featureDefinitionId\n .split('-')\n .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n }\n return values.featureName || 'Feature';\n };\n\n const featureType = getFeatureType();\n\n // Render field content based on field definitions\n const renderFieldContent = () => {\n // Get non-mandatory fields to render\n const nonMandatoryFields = fieldDefinitions.filter(\n fieldDef => fieldDef.id !== values.mandatoryFields.title && fieldDef.id !== values.mandatoryFields.featureImage,\n );\n\n if (nonMandatoryFields.length === 0) {\n return null;\n }\n\n return nonMandatoryFields.map(fieldDef => {\n const fieldValue = listing.fields[fieldDef.id];\n if (!fieldValue) return null;\n\n return (\n <View key={fieldDef.id} style={styles.fieldContainer}>\n <FieldRenderer fieldId={fieldDef.id} fieldValue={fieldValue} fieldDefinition={fieldDef} color={colourBrandingMain} />\n </View>\n );\n });\n };\n\n return (\n <TouchableOpacity onPress={onPress}>\n <View style={[styles.container, style]}>\n <View style={styles.innerContainer}>\n <View style={styles.textContainer}>\n <Text style={styles.titleText}>{title}</Text>\n {!_.isEmpty(description) && (\n <Text numberOfLines={3} style={styles.descriptionText}>\n {description}\n </Text>\n )}\n {renderFieldContent()}\n </View>\n </View>\n <View style={styles.imageContainer}>\n {imageSource ? (\n <Image source={imageSource} style={styles.image} resizeMode=\"cover\" />\n ) : (\n <View style={[styles.image, styles.placeholderImage]}></View>\n )}\n </View>\n </View>\n </TouchableOpacity>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n marginVertical: 8,\n paddingHorizontal: 16,\n },\n innerContainer: {\n height: values.dimensions.cardHeight,\n marginLeft: 50,\n ...Helper.getShadowStyle(),\n shadowOpacity: 0.25,\n shadowRadius: 12,\n elevation: 10,\n },\n textContainer: {\n flex: 1,\n marginLeft: 60,\n marginVertical: 15,\n paddingRight: 15,\n justifyContent: 'space-between',\n },\n titleText: {\n fontFamily: 'sf-semibold',\n fontSize: 16,\n color: Colours.TEXT_DARK,\n },\n descriptionText: {\n fontFamily: 'sf-regular',\n fontSize: 12,\n color: Colours.TEXT_LIGHT,\n minHeight: 30,\n },\n typeContainer: {\n flexDirection: 'row',\n alignItems: 'center',\n },\n typeIcon: {\n fontSize: 16,\n color: Colours.TEXT_DARK,\n marginRight: 6,\n },\n typeText: {\n fontFamily: 'sf-semibold',\n fontSize: 12,\n color: '#007AFF', // TODO: Add colour main here\n },\n imageContainer: {\n position: 'absolute',\n top: 0,\n left: 16,\n bottom: 0,\n justifyContent: 'center',\n elevation: 8,\n },\n image: {\n width: values.dimensions.imageSize,\n height: values.dimensions.imageSize,\n resizeMode: 'cover',\n borderRadius: values.dimensions.imageBorderRadius,\n },\n placeholderImage: {\n backgroundColor: '#808080',\n justifyContent: 'center',\n alignItems: 'center',\n },\n placeholderText: {\n fontSize: 24,\n },\n fieldContainer: {\n marginTop: 8,\n },\n});\n\nexport default FeatureListItem;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","Text","TouchableOpacity","View","StyleSheet","Image","FontAwesome","_","Helper","Colours","values","FieldRenderer","FeatureListItem","listing","onItemPress","colourBrandingMain","style","featureDefinition","_listing$fields","_listing$fields2","_listing$fields3","getImageSource","imageField","uri","url","onPress","title","fields","mandatoryFields","labels","defaultTitle","description","featureImage","imageSource","fieldDefinitions","getFeatureType","featureDefinitionId","split","map","word","charAt","toUpperCase","slice","join","featureName","featureType","renderFieldContent","nonMandatoryFields","filter","fieldDef","id","length","fieldValue","createElement","key","styles","fieldContainer","fieldId","fieldDefinition","color","container","innerContainer","textContainer","titleText","isEmpty","numberOfLines","descriptionText","imageContainer","source","image","resizeMode","placeholderImage","create","marginVertical","paddingHorizontal","height","dimensions","cardHeight","marginLeft","getShadowStyle","shadowOpacity","shadowRadius","elevation","flex","paddingRight","justifyContent","fontFamily","fontSize","TEXT_DARK","TEXT_LIGHT","minHeight","typeContainer","flexDirection","alignItems","typeIcon","marginRight","typeText","position","top","left","bottom","width","imageSize","borderRadius","imageBorderRadius","backgroundColor","placeholderText","marginTop"],"sources":["FeatureListItem.js"],"sourcesContent":["import React from \"react\";\nimport { Text, TouchableOpacity, View, StyleSheet, Image } from \"react-native\";\nimport { FontAwesome } from \"./common\";\nimport _ from \"lodash\";\nimport { Helper, Colours } from \"../core.config\";\nimport { values } from \"../values.config\";\n\nimport FieldRenderer from \"./FieldRenderer\";\n\nconst FeatureListItem = ({\n listing,\n onItemPress,\n colourBrandingMain,\n style,\n featureDefinition,\n}) => {\n const getImageSource = (imageField) => {\n if (!imageField) return null;\n\n if (typeof imageField === \"string\") {\n return { uri: imageField };\n }\n\n if (typeof imageField === \"object\" && imageField.uri) {\n return imageField;\n }\n\n if (typeof imageField === \"object\" && imageField.url) {\n return { uri: imageField.url };\n }\n\n return null;\n };\n\n const onPress = () => {\n if (onItemPress) {\n onItemPress(listing);\n }\n };\n\n // Get data from feature builder fields\n const title =\n listing.fields?.[values.mandatoryFields.title] ||\n values.labels.defaultTitle;\n const description = listing.fields?.description || \"\";\n const imageField = listing.fields?.[values.mandatoryFields.featureImage];\n const imageSource = getImageSource(imageField);\n\n // Get field definitions for type-aware rendering\n const fieldDefinitions = featureDefinition?.fields || [];\n\n // Use featureDefinitionId to determine the feature type, fallback to featureName\n const getFeatureType = () => {\n if (listing.featureDefinitionId) {\n // Convert kebab-case to title case for display\n return listing.featureDefinitionId\n .split(\"-\")\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n }\n return values.featureName || \"Feature\";\n };\n\n const featureType = getFeatureType();\n\n // Render field content based on field definitions\n const renderFieldContent = () => {\n // Get non-mandatory fields to render\n const nonMandatoryFields = fieldDefinitions.filter(\n (fieldDef) =>\n fieldDef.id !== values.mandatoryFields.title &&\n fieldDef.id !== values.mandatoryFields.featureImage,\n );\n\n if (nonMandatoryFields.length === 0) {\n return null;\n }\n\n return nonMandatoryFields.map((fieldDef) => {\n const fieldValue = listing.fields[fieldDef.id];\n if (!fieldValue) return null;\n\n return (\n <View key={fieldDef.id} style={styles.fieldContainer}>\n <FieldRenderer\n fieldId={fieldDef.id}\n fieldValue={fieldValue}\n fieldDefinition={fieldDef}\n color={colourBrandingMain}\n />\n </View>\n );\n });\n };\n\n return (\n <TouchableOpacity onPress={onPress}>\n <View style={[styles.container, style]}>\n <View style={styles.innerContainer}>\n <View style={styles.textContainer}>\n <Text style={styles.titleText}>{title}</Text>\n {!_.isEmpty(description) && (\n <Text numberOfLines={3} style={styles.descriptionText}>\n {description}\n </Text>\n )}\n {renderFieldContent()}\n </View>\n </View>\n <View style={styles.imageContainer}>\n {imageSource ? (\n <Image\n source={imageSource}\n style={styles.image}\n resizeMode=\"cover\"\n />\n ) : (\n <View style={[styles.image, styles.placeholderImage]}></View>\n )}\n </View>\n </View>\n </TouchableOpacity>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n marginVertical: 8,\n paddingHorizontal: 16,\n },\n innerContainer: {\n height: values.dimensions.cardHeight,\n marginLeft: 50,\n ...Helper.getShadowStyle(),\n shadowOpacity: 0.25,\n shadowRadius: 12,\n elevation: 10,\n },\n textContainer: {\n flex: 1,\n marginLeft: 60,\n marginVertical: 15,\n paddingRight: 15,\n justifyContent: \"space-between\",\n },\n titleText: {\n fontFamily: \"sf-semibold\",\n fontSize: 16,\n color: Colours.TEXT_DARK,\n },\n descriptionText: {\n fontFamily: \"sf-regular\",\n fontSize: 12,\n color: Colours.TEXT_LIGHT,\n minHeight: 30,\n },\n typeContainer: {\n flexDirection: \"row\",\n alignItems: \"center\",\n },\n typeIcon: {\n fontSize: 16,\n color: Colours.TEXT_DARK,\n marginRight: 6,\n },\n typeText: {\n fontFamily: \"sf-semibold\",\n fontSize: 12,\n color: \"#007AFF\", // TODO: Add colour main here\n },\n imageContainer: {\n position: \"absolute\",\n top: 0,\n left: 16,\n bottom: 0,\n justifyContent: \"center\",\n elevation: 8,\n },\n image: {\n width: values.dimensions.imageSize,\n height: values.dimensions.imageSize,\n resizeMode: \"cover\",\n borderRadius: values.dimensions.imageBorderRadius,\n },\n placeholderImage: {\n backgroundColor: \"#808080\",\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n placeholderText: {\n fontSize: 24,\n },\n fieldContainer: {\n marginTop: 8,\n },\n});\n\nexport default FeatureListItem;\n"],"mappings":"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","ignoreList":[]}
@@ -1,7 +1,7 @@
1
1
  import { Components } from '../../core.config';
2
2
  export const InlineButton = Components.InlineButton;
3
3
  // export const ProfilePic = Components.ProfilePic; // Disabled due to circular dependency in core-app package
4
- export const FontAwesome = Components.Icon;
4
+ export const FontAwesome = Components.FontAwesome;
5
5
  export const EmptyStateMain = Components.EmptyStateMain;
6
6
  export const Spinner = Components.Spinner;
7
7
  export const MiddlePopup = Components.MiddlePopup;
@@ -1 +1 @@
1
- {"version":3,"names":["Components","InlineButton","FontAwesome","Icon","EmptyStateMain","Spinner","MiddlePopup","BackButton","UserListing","GenericInput","Toggle","ImageUploader","Header","FormCard","FormCardSection","Input","StickyFooter","LoadingIndicator","EmptyStateWidget","AutoOffsetImage","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 FontAwesome = Components.Icon;\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 EmptyStateWidget = Components.EmptyStateWidget;\nexport const AutoOffsetImage = Components.AutoOffsetImage;\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,WAAW,GAAGF,UAAU,CAACG,IAAI;AAC1C,OAAO,MAAMC,cAAc,GAAGJ,UAAU,CAACI,cAAc;AACvD,OAAO,MAAMC,OAAO,GAAGL,UAAU,CAACK,OAAO;AACzC,OAAO,MAAMC,WAAW,GAAGN,UAAU,CAACM,WAAW;AACjD,OAAO,MAAMC,UAAU,GAAGP,UAAU,CAACO,UAAU;AAC/C,OAAO,MAAMC,WAAW,GAAGR,UAAU,CAACQ,WAAW;AACjD,OAAO,MAAMC,YAAY,GAAGT,UAAU,CAACS,YAAY;AACnD,OAAO,MAAMC,MAAM,GAAGV,UAAU,CAACU,MAAM;AACvC,OAAO,MAAMC,aAAa,GAAGX,UAAU,CAACW,aAAa;AACrD,OAAO,MAAMC,MAAM,GAAGZ,UAAU,CAACY,MAAM;AACvC,OAAO,MAAMC,QAAQ,GAAGb,UAAU,CAACa,QAAQ;AAC3C,OAAO,MAAMC,eAAe,GAAGd,UAAU,CAACc,eAAe;AACzD,OAAO,MAAMC,KAAK,GAAGf,UAAU,CAACe,KAAK;AACrC,OAAO,MAAMC,YAAY,GAAGhB,UAAU,CAACgB,YAAY;AACnD,OAAO,MAAMC,gBAAgB,GAAGjB,UAAU,CAACiB,gBAAgB;AAC3D,OAAO,MAAMC,gBAAgB,GAAGlB,UAAU,CAACkB,gBAAgB;AAC3D,OAAO,MAAMC,eAAe,GAAGnB,UAAU,CAACmB,eAAe;AACzD,OAAO,MAAMC,YAAY,GAAGpB,UAAU,CAACoB,YAAY;AACnD,OAAO,MAAMC,YAAY,GAAGrB,UAAU,CAACqB,YAAY;AACnD,OAAO,MAAMC,YAAY,GAAGtB,UAAU,CAACsB,YAAY;AACnD,OAAO,MAAMC,SAAS,GAAGvB,UAAU,CAACuB,SAAS;AAC7C,OAAO,MAAMC,UAAU,GAAGxB,UAAU,CAACwB,UAAU;;AAE/C","ignoreList":[]}
1
+ {"version":3,"names":["Components","InlineButton","FontAwesome","EmptyStateMain","Spinner","MiddlePopup","BackButton","UserListing","GenericInput","Toggle","ImageUploader","Header","FormCard","FormCardSection","Input","StickyFooter","LoadingIndicator","EmptyStateWidget","AutoOffsetImage","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 FontAwesome = Components.FontAwesome;\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 EmptyStateWidget = Components.EmptyStateWidget;\nexport const AutoOffsetImage = Components.AutoOffsetImage;\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,WAAW,GAAGF,UAAU,CAACE,WAAW;AACjD,OAAO,MAAMC,cAAc,GAAGH,UAAU,CAACG,cAAc;AACvD,OAAO,MAAMC,OAAO,GAAGJ,UAAU,CAACI,OAAO;AACzC,OAAO,MAAMC,WAAW,GAAGL,UAAU,CAACK,WAAW;AACjD,OAAO,MAAMC,UAAU,GAAGN,UAAU,CAACM,UAAU;AAC/C,OAAO,MAAMC,WAAW,GAAGP,UAAU,CAACO,WAAW;AACjD,OAAO,MAAMC,YAAY,GAAGR,UAAU,CAACQ,YAAY;AACnD,OAAO,MAAMC,MAAM,GAAGT,UAAU,CAACS,MAAM;AACvC,OAAO,MAAMC,aAAa,GAAGV,UAAU,CAACU,aAAa;AACrD,OAAO,MAAMC,MAAM,GAAGX,UAAU,CAACW,MAAM;AACvC,OAAO,MAAMC,QAAQ,GAAGZ,UAAU,CAACY,QAAQ;AAC3C,OAAO,MAAMC,eAAe,GAAGb,UAAU,CAACa,eAAe;AACzD,OAAO,MAAMC,KAAK,GAAGd,UAAU,CAACc,KAAK;AACrC,OAAO,MAAMC,YAAY,GAAGf,UAAU,CAACe,YAAY;AACnD,OAAO,MAAMC,gBAAgB,GAAGhB,UAAU,CAACgB,gBAAgB;AAC3D,OAAO,MAAMC,gBAAgB,GAAGjB,UAAU,CAACiB,gBAAgB;AAC3D,OAAO,MAAMC,eAAe,GAAGlB,UAAU,CAACkB,eAAe;AACzD,OAAO,MAAMC,YAAY,GAAGnB,UAAU,CAACmB,YAAY;AACnD,OAAO,MAAMC,YAAY,GAAGpB,UAAU,CAACoB,YAAY;AACnD,OAAO,MAAMC,YAAY,GAAGrB,UAAU,CAACqB,YAAY;AACnD,OAAO,MAAMC,SAAS,GAAGtB,UAAU,CAACsB,SAAS;AAC7C,OAAO,MAAMC,UAAU,GAAGvB,UAAU,CAACuB,UAAU;;AAE/C","ignoreList":[]}
@@ -1,6 +1,7 @@
1
1
  import React, { useState, useRef, useEffect } from "react";
2
2
  import { View, Text, StyleSheet, FlatList, TouchableOpacity, Image, Dimensions, Animated } from "react-native";
3
- import { Components, Colours } from "../../core.config.js";
3
+ import { FontAwesome } from "../common";
4
+ import { Components, Colours } from "../../core.config";
4
5
  import { values } from "../../values.config";
5
6
  import { getSummaryFieldValue } from "../../js/helpers";
6
7
  const {
@@ -1 +1 @@
1
- {"version":3,"names":["React","useState","useRef","useEffect","View","Text","StyleSheet","FlatList","TouchableOpacity","Image","Dimensions","Animated","Components","Colours","values","getSummaryFieldValue","width","screenWidth","get","CARD_WIDTH","IMAGE_HEIGHT","getEmptyStateMessage","title","featureName","FeatureImageList","listings","onItemPress","colourBrandingMain","refreshing","onRefresh","featureDefinition","isWidget","getImageSource","imageField","uri","url","renderListingItem","item","listing","_listing$fields","_listing$fields2","fields","mandatoryFields","summary","featureImage","imageSource","createElement","style","styles","cardContainer","onPress","imageContainer","source","placeholderImage","placeholderText","contentContainer","cardTitle","numberOfLines","cardSummary","length","emptyContainer","EmptyStateWidget","height","container","LoadingIndicator","visible","data","keyExtractor","id","renderItem","contentContainerStyle","listContainer","showsVerticalScrollIndicator","create","flex","backgroundColor","padding","borderRadius","marginBottom","shadowColor","shadowOffset","shadowOpacity","shadowRadius","elevation","overflow","justifyContent","alignItems","fontSize","color","fontFamily","fontWeight","lineHeight"],"sources":["FeatureImageList.js"],"sourcesContent":["import React, { useState, useRef, useEffect } from \"react\";\nimport {\n View,\n Text,\n StyleSheet,\n FlatList,\n TouchableOpacity,\n Image,\n Dimensions,\n Animated,\n} from \"react-native\";\nimport { Components, Colours } from \"../../core.config.js\"\nimport { values } from \"../../values.config\";\nimport { getSummaryFieldValue } from \"../../js/helpers\";\n\nconst { width: screenWidth } = Dimensions.get(\"window\");\nconst CARD_WIDTH = screenWidth - 32; // 16px padding on each side\nconst IMAGE_HEIGHT = (CARD_WIDTH * 9) / 16; // 16:9 aspect ratio\n\nconst getEmptyStateMessage = (title) => {\n const featureName = title || \"Feature\";\n return `${featureName} listings will appear here once they're available.\\nCome back soon to see what's new!`;\n};\n\nconst FeatureImageList = ({\n listings,\n onItemPress,\n colourBrandingMain,\n refreshing,\n onRefresh,\n featureDefinition,\n title,\n isWidget,\n}) => {\n const getImageSource = (imageField) => {\n if (!imageField) return null;\n\n // Handle different image field formats\n if (typeof imageField === \"string\") {\n return { uri: imageField };\n }\n\n if (typeof imageField === \"object\" && imageField.uri) {\n return imageField;\n }\n\n if (typeof imageField === \"object\" && imageField.url) {\n return { uri: imageField.url };\n }\n\n return null;\n };\n\n const renderListingItem = ({ item: listing }) => {\n const title = listing.fields?.[values.mandatoryFields.title] || \"Untitled\";\n const summary = getSummaryFieldValue(listing, featureDefinition);\n const imageField = listing.fields?.[values.mandatoryFields.featureImage];\n const imageSource = getImageSource(imageField);\n\n return (\n <TouchableOpacity\n style={styles.cardContainer}\n onPress={() => onItemPress && onItemPress(listing)}\n >\n <View style={styles.imageContainer}>\n {imageSource ? (\n <Image source={imageSource} style={styles.featureImage} />\n ) : (\n <View style={[styles.featureImage, styles.placeholderImage]}>\n <Text style={styles.placeholderText}>No Image</Text>\n </View>\n )}\n </View>\n <View style={styles.contentContainer}>\n <Text style={styles.cardTitle} numberOfLines={2}>\n {title}\n </Text>\n {summary && (\n <Text style={styles.cardSummary} numberOfLines={2}>\n {summary}\n </Text>\n )}\n </View>\n </TouchableOpacity>\n );\n };\n\n if (!listings || listings.length === 0) {\n return (\n <View style={styles.emptyContainer}>\n <Components.EmptyStateWidget\n title={getEmptyStateMessage(title)}\n height={120}\n />\n </View>\n );\n }\n\n if (onRefresh) {\n return (\n <View style={styles.container}>\n {!isWidget && <Components.LoadingIndicator visible={refreshing} />}\n <FlatList\n data={listings}\n keyExtractor={(item) => item.id}\n renderItem={renderListingItem}\n contentContainerStyle={styles.listContainer}\n showsVerticalScrollIndicator={false}\n />\n </View>\n );\n }\n\n return (\n <View style={styles.container}>\n <FlatList\n data={listings}\n keyExtractor={(item) => item.id}\n renderItem={renderListingItem}\n contentContainerStyle={styles.listContainer}\n showsVerticalScrollIndicator={false}\n />\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n backgroundColor: \"#f5f5f5\",\n },\n listContainer: {\n padding: 16,\n },\n cardContainer: {\n backgroundColor: \"#fff\",\n borderRadius: 8,\n marginBottom: 16,\n shadowColor: \"#000\",\n shadowOffset: {\n width: 0,\n height: 2,\n },\n shadowOpacity: 0.1,\n shadowRadius: 4,\n elevation: 3,\n overflow: \"hidden\",\n },\n imageContainer: {\n width: CARD_WIDTH,\n height: IMAGE_HEIGHT,\n },\n featureImage: {\n width: \"100%\",\n height: \"100%\",\n backgroundColor: \"#f0f0f0\",\n },\n placeholderImage: {\n justifyContent: \"center\",\n alignItems: \"center\",\n backgroundColor: \"#e0e0e0\",\n },\n placeholderText: {\n fontSize: 16,\n color: \"#999\",\n fontFamily: \"sf-medium\",\n },\n contentContainer: {\n padding: 16,\n },\n cardTitle: {\n fontSize: 18,\n fontWeight: \"600\",\n fontFamily: \"sf-semibold\",\n color: \"#333\",\n marginBottom: 8,\n lineHeight: 24,\n },\n cardSummary: {\n fontSize: 14,\n fontFamily: \"sf-regular\",\n color: \"#666\",\n lineHeight: 18,\n },\n emptyContainer: {\n flex: 1,\n justifyContent: \"center\",\n alignItems: \"center\",\n padding: 32,\n },\n});\n\nexport default FeatureImageList;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useState","useRef","useEffect","View","Text","StyleSheet","FlatList","TouchableOpacity","Image","Dimensions","Animated","FontAwesome","Components","Colours","values","getSummaryFieldValue","width","screenWidth","get","CARD_WIDTH","IMAGE_HEIGHT","getEmptyStateMessage","title","featureName","FeatureImageList","listings","onItemPress","colourBrandingMain","refreshing","onRefresh","featureDefinition","isWidget","getImageSource","imageField","uri","url","renderListingItem","item","listing","_listing$fields","_listing$fields2","fields","mandatoryFields","summary","featureImage","imageSource","createElement","style","styles","cardContainer","onPress","imageContainer","source","placeholderImage","placeholderText","contentContainer","cardTitle","numberOfLines","cardSummary","length","emptyContainer","EmptyStateWidget","height","container","LoadingIndicator","visible","data","keyExtractor","id","renderItem","contentContainerStyle","listContainer","showsVerticalScrollIndicator","create","flex","backgroundColor","padding","borderRadius","marginBottom","shadowColor","shadowOffset","shadowOpacity","shadowRadius","elevation","overflow","justifyContent","alignItems","fontSize","color","fontFamily","fontWeight","lineHeight"],"sources":["FeatureImageList.js"],"sourcesContent":["import React, { useState, useRef, useEffect } from \"react\";\nimport {\n View,\n Text,\n StyleSheet,\n FlatList,\n TouchableOpacity,\n Image,\n Dimensions,\n Animated,\n} from \"react-native\";\nimport { FontAwesome } from \"../common\";\nimport { Components, Colours } from \"../../core.config\";\nimport { values } from \"../../values.config\";\nimport { getSummaryFieldValue } from \"../../js/helpers\";\n\nconst { width: screenWidth } = Dimensions.get(\"window\");\nconst CARD_WIDTH = screenWidth - 32; // 16px padding on each side\nconst IMAGE_HEIGHT = (CARD_WIDTH * 9) / 16; // 16:9 aspect ratio\n\nconst getEmptyStateMessage = (title) => {\n const featureName = title || \"Feature\";\n return `${featureName} listings will appear here once they're available.\\nCome back soon to see what's new!`;\n};\n\nconst FeatureImageList = ({\n listings,\n onItemPress,\n colourBrandingMain,\n refreshing,\n onRefresh,\n featureDefinition,\n title,\n isWidget,\n}) => {\n const getImageSource = (imageField) => {\n if (!imageField) return null;\n\n // Handle different image field formats\n if (typeof imageField === \"string\") {\n return { uri: imageField };\n }\n\n if (typeof imageField === \"object\" && imageField.uri) {\n return imageField;\n }\n\n if (typeof imageField === \"object\" && imageField.url) {\n return { uri: imageField.url };\n }\n\n return null;\n };\n\n const renderListingItem = ({ item: listing }) => {\n const title = listing.fields?.[values.mandatoryFields.title] || \"Untitled\";\n const summary = getSummaryFieldValue(listing, featureDefinition);\n const imageField = listing.fields?.[values.mandatoryFields.featureImage];\n const imageSource = getImageSource(imageField);\n\n return (\n <TouchableOpacity\n style={styles.cardContainer}\n onPress={() => onItemPress && onItemPress(listing)}\n >\n <View style={styles.imageContainer}>\n {imageSource ? (\n <Image source={imageSource} style={styles.featureImage} />\n ) : (\n <View style={[styles.featureImage, styles.placeholderImage]}>\n <Text style={styles.placeholderText}>No Image</Text>\n </View>\n )}\n </View>\n <View style={styles.contentContainer}>\n <Text style={styles.cardTitle} numberOfLines={2}>\n {title}\n </Text>\n {summary && (\n <Text style={styles.cardSummary} numberOfLines={2}>\n {summary}\n </Text>\n )}\n </View>\n </TouchableOpacity>\n );\n };\n\n if (!listings || listings.length === 0) {\n return (\n <View style={styles.emptyContainer}>\n <Components.EmptyStateWidget\n title={getEmptyStateMessage(title)}\n height={120}\n />\n </View>\n );\n }\n\n if (onRefresh) {\n return (\n <View style={styles.container}>\n {!isWidget && <Components.LoadingIndicator visible={refreshing} />}\n <FlatList\n data={listings}\n keyExtractor={(item) => item.id}\n renderItem={renderListingItem}\n contentContainerStyle={styles.listContainer}\n showsVerticalScrollIndicator={false}\n />\n </View>\n );\n }\n\n return (\n <View style={styles.container}>\n <FlatList\n data={listings}\n keyExtractor={(item) => item.id}\n renderItem={renderListingItem}\n contentContainerStyle={styles.listContainer}\n showsVerticalScrollIndicator={false}\n />\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n backgroundColor: \"#f5f5f5\",\n },\n listContainer: {\n padding: 16,\n },\n cardContainer: {\n backgroundColor: \"#fff\",\n borderRadius: 8,\n marginBottom: 16,\n shadowColor: \"#000\",\n shadowOffset: {\n width: 0,\n height: 2,\n },\n shadowOpacity: 0.1,\n shadowRadius: 4,\n elevation: 3,\n overflow: \"hidden\",\n },\n imageContainer: {\n width: CARD_WIDTH,\n height: IMAGE_HEIGHT,\n },\n featureImage: {\n width: \"100%\",\n height: \"100%\",\n backgroundColor: \"#f0f0f0\",\n },\n placeholderImage: {\n justifyContent: \"center\",\n alignItems: \"center\",\n backgroundColor: \"#e0e0e0\",\n },\n placeholderText: {\n fontSize: 16,\n color: \"#999\",\n fontFamily: \"sf-medium\",\n },\n contentContainer: {\n padding: 16,\n },\n cardTitle: {\n fontSize: 18,\n fontWeight: \"600\",\n fontFamily: \"sf-semibold\",\n color: \"#333\",\n marginBottom: 8,\n lineHeight: 24,\n },\n cardSummary: {\n fontSize: 14,\n fontFamily: \"sf-regular\",\n color: \"#666\",\n lineHeight: 18,\n },\n emptyContainer: {\n flex: 1,\n justifyContent: \"center\",\n alignItems: \"center\",\n padding: 32,\n },\n});\n\nexport default FeatureImageList;\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plusscommunities/pluss-feature-builder-app-d",
3
- "version": "8.0.11-beta.6",
3
+ "version": "8.0.11-beta.7",
4
4
  "description": "Feature Builder mobile extension for displaying custom features",
5
5
  "main": "dist/module/index.js",
6
6
  "module": "dist/module/index.js",
@@ -14,6 +14,7 @@ import {
14
14
  KeyboardAvoidingView,
15
15
  Image,
16
16
  } from 'react-native';
17
+ import { FontAwesome } from './common';
17
18
  import { connect } from 'react-redux';
18
19
  import _ from 'lodash';
19
20
  import { LinearGradient } from 'expo-linear-gradient';
@@ -25,7 +26,7 @@ import { values } from '../values.config';
25
26
  import { selectFeatureDefinition } from '../utils/selectors';
26
27
 
27
28
  import Constants from 'expo-constants';
28
- import { InlineButton, FontAwesome } from './common';
29
+ import { InlineButton } from './common';
29
30
  import { FIELD_TYPES } from '../js/FieldTypes';
30
31
 
31
32
  const SCREEN_HEIGHT = Dimensions.get('window').height;
@@ -1,25 +1,31 @@
1
- import React from 'react';
2
- import { Text, TouchableOpacity, View, StyleSheet, Image } from 'react-native';
3
- import { FontAwesome } from './common';
4
- import _ from 'lodash';
5
- import { Helper, Colours } from '../core.config';
6
- import { values } from '../values.config';
7
-
8
- import FieldRenderer from './FieldRenderer';
9
-
10
- const FeatureListItem = ({ listing, onItemPress, colourBrandingMain, style, featureDefinition }) => {
11
- const getImageSource = imageField => {
1
+ import React from "react";
2
+ import { Text, TouchableOpacity, View, StyleSheet, Image } from "react-native";
3
+ import { FontAwesome } from "./common";
4
+ import _ from "lodash";
5
+ import { Helper, Colours } from "../core.config";
6
+ import { values } from "../values.config";
7
+
8
+ import FieldRenderer from "./FieldRenderer";
9
+
10
+ const FeatureListItem = ({
11
+ listing,
12
+ onItemPress,
13
+ colourBrandingMain,
14
+ style,
15
+ featureDefinition,
16
+ }) => {
17
+ const getImageSource = (imageField) => {
12
18
  if (!imageField) return null;
13
19
 
14
- if (typeof imageField === 'string') {
20
+ if (typeof imageField === "string") {
15
21
  return { uri: imageField };
16
22
  }
17
23
 
18
- if (typeof imageField === 'object' && imageField.uri) {
24
+ if (typeof imageField === "object" && imageField.uri) {
19
25
  return imageField;
20
26
  }
21
27
 
22
- if (typeof imageField === 'object' && imageField.url) {
28
+ if (typeof imageField === "object" && imageField.url) {
23
29
  return { uri: imageField.url };
24
30
  }
25
31
 
@@ -33,8 +39,10 @@ const FeatureListItem = ({ listing, onItemPress, colourBrandingMain, style, feat
33
39
  };
34
40
 
35
41
  // Get data from feature builder fields
36
- const title = listing.fields?.[values.mandatoryFields.title] || values.labels.defaultTitle;
37
- const description = listing.fields?.description || '';
42
+ const title =
43
+ listing.fields?.[values.mandatoryFields.title] ||
44
+ values.labels.defaultTitle;
45
+ const description = listing.fields?.description || "";
38
46
  const imageField = listing.fields?.[values.mandatoryFields.featureImage];
39
47
  const imageSource = getImageSource(imageField);
40
48
 
@@ -46,11 +54,11 @@ const FeatureListItem = ({ listing, onItemPress, colourBrandingMain, style, feat
46
54
  if (listing.featureDefinitionId) {
47
55
  // Convert kebab-case to title case for display
48
56
  return listing.featureDefinitionId
49
- .split('-')
50
- .map(word => word.charAt(0).toUpperCase() + word.slice(1))
51
- .join(' ');
57
+ .split("-")
58
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
59
+ .join(" ");
52
60
  }
53
- return values.featureName || 'Feature';
61
+ return values.featureName || "Feature";
54
62
  };
55
63
 
56
64
  const featureType = getFeatureType();
@@ -59,20 +67,27 @@ const FeatureListItem = ({ listing, onItemPress, colourBrandingMain, style, feat
59
67
  const renderFieldContent = () => {
60
68
  // Get non-mandatory fields to render
61
69
  const nonMandatoryFields = fieldDefinitions.filter(
62
- fieldDef => fieldDef.id !== values.mandatoryFields.title && fieldDef.id !== values.mandatoryFields.featureImage,
70
+ (fieldDef) =>
71
+ fieldDef.id !== values.mandatoryFields.title &&
72
+ fieldDef.id !== values.mandatoryFields.featureImage,
63
73
  );
64
74
 
65
75
  if (nonMandatoryFields.length === 0) {
66
76
  return null;
67
77
  }
68
78
 
69
- return nonMandatoryFields.map(fieldDef => {
79
+ return nonMandatoryFields.map((fieldDef) => {
70
80
  const fieldValue = listing.fields[fieldDef.id];
71
81
  if (!fieldValue) return null;
72
82
 
73
83
  return (
74
84
  <View key={fieldDef.id} style={styles.fieldContainer}>
75
- <FieldRenderer fieldId={fieldDef.id} fieldValue={fieldValue} fieldDefinition={fieldDef} color={colourBrandingMain} />
85
+ <FieldRenderer
86
+ fieldId={fieldDef.id}
87
+ fieldValue={fieldValue}
88
+ fieldDefinition={fieldDef}
89
+ color={colourBrandingMain}
90
+ />
76
91
  </View>
77
92
  );
78
93
  });
@@ -94,7 +109,11 @@ const FeatureListItem = ({ listing, onItemPress, colourBrandingMain, style, feat
94
109
  </View>
95
110
  <View style={styles.imageContainer}>
96
111
  {imageSource ? (
97
- <Image source={imageSource} style={styles.image} resizeMode="cover" />
112
+ <Image
113
+ source={imageSource}
114
+ style={styles.image}
115
+ resizeMode="cover"
116
+ />
98
117
  ) : (
99
118
  <View style={[styles.image, styles.placeholderImage]}></View>
100
119
  )}
@@ -122,22 +141,22 @@ const styles = StyleSheet.create({
122
141
  marginLeft: 60,
123
142
  marginVertical: 15,
124
143
  paddingRight: 15,
125
- justifyContent: 'space-between',
144
+ justifyContent: "space-between",
126
145
  },
127
146
  titleText: {
128
- fontFamily: 'sf-semibold',
147
+ fontFamily: "sf-semibold",
129
148
  fontSize: 16,
130
149
  color: Colours.TEXT_DARK,
131
150
  },
132
151
  descriptionText: {
133
- fontFamily: 'sf-regular',
152
+ fontFamily: "sf-regular",
134
153
  fontSize: 12,
135
154
  color: Colours.TEXT_LIGHT,
136
155
  minHeight: 30,
137
156
  },
138
157
  typeContainer: {
139
- flexDirection: 'row',
140
- alignItems: 'center',
158
+ flexDirection: "row",
159
+ alignItems: "center",
141
160
  },
142
161
  typeIcon: {
143
162
  fontSize: 16,
@@ -145,28 +164,28 @@ const styles = StyleSheet.create({
145
164
  marginRight: 6,
146
165
  },
147
166
  typeText: {
148
- fontFamily: 'sf-semibold',
167
+ fontFamily: "sf-semibold",
149
168
  fontSize: 12,
150
- color: '#007AFF', // TODO: Add colour main here
169
+ color: "#007AFF", // TODO: Add colour main here
151
170
  },
152
171
  imageContainer: {
153
- position: 'absolute',
172
+ position: "absolute",
154
173
  top: 0,
155
174
  left: 16,
156
175
  bottom: 0,
157
- justifyContent: 'center',
176
+ justifyContent: "center",
158
177
  elevation: 8,
159
178
  },
160
179
  image: {
161
180
  width: values.dimensions.imageSize,
162
181
  height: values.dimensions.imageSize,
163
- resizeMode: 'cover',
182
+ resizeMode: "cover",
164
183
  borderRadius: values.dimensions.imageBorderRadius,
165
184
  },
166
185
  placeholderImage: {
167
- backgroundColor: '#808080',
168
- justifyContent: 'center',
169
- alignItems: 'center',
186
+ backgroundColor: "#808080",
187
+ justifyContent: "center",
188
+ alignItems: "center",
170
189
  },
171
190
  placeholderText: {
172
191
  fontSize: 24,
@@ -2,7 +2,7 @@ import { Components } from '../../core.config';
2
2
 
3
3
  export const InlineButton = Components.InlineButton;
4
4
  // export const ProfilePic = Components.ProfilePic; // Disabled due to circular dependency in core-app package
5
- export const FontAwesome = Components.Icon;
5
+ export const FontAwesome = Components.FontAwesome;
6
6
  export const EmptyStateMain = Components.EmptyStateMain;
7
7
  export const Spinner = Components.Spinner;
8
8
  export const MiddlePopup = Components.MiddlePopup;
@@ -9,7 +9,8 @@ import {
9
9
  Dimensions,
10
10
  Animated,
11
11
  } from "react-native";
12
- import { Components, Colours } from "../../core.config.js"
12
+ import { FontAwesome } from "../common";
13
+ import { Components, Colours } from "../../core.config";
13
14
  import { values } from "../../values.config";
14
15
  import { getSummaryFieldValue } from "../../js/helpers";
15
16