@plusscommunities/pluss-feature-builder-app-d 8.0.11-beta.5 → 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.
- package/dist/module/components/FeatureDetailScreen.js +2 -1
- package/dist/module/components/FeatureDetailScreen.js.map +1 -1
- package/dist/module/components/FeatureListItem.js +26 -26
- package/dist/module/components/FeatureListItem.js.map +1 -1
- package/dist/module/components/common/index.js +1 -1
- package/dist/module/components/common/index.js.map +1 -1
- package/dist/module/components/layouts/FeatureImageList.js +1 -1
- package/dist/module/components/layouts/FeatureImageList.js.map +1 -1
- package/package.json +1 -1
- package/src/components/FeatureDetailScreen.js +2 -1
- package/src/components/FeatureListItem.js +56 -37
- package/src/components/common/index.js +1 -1
- package/src/components/layouts/FeatureImageList.js +1 -1
|
@@ -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
|
|
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":"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","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
|
|
2
|
-
import { Text, TouchableOpacity, View, StyleSheet, Image } from
|
|
3
|
-
import { FontAwesome } from
|
|
4
|
-
import _ from
|
|
5
|
-
import { Helper, Colours } from
|
|
6
|
-
import { values } from
|
|
7
|
-
import FieldRenderer from
|
|
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 ===
|
|
18
|
+
if (typeof imageField === "string") {
|
|
19
19
|
return {
|
|
20
20
|
uri: imageField
|
|
21
21
|
};
|
|
22
22
|
}
|
|
23
|
-
if (typeof imageField ===
|
|
23
|
+
if (typeof imageField === "object" && imageField.uri) {
|
|
24
24
|
return imageField;
|
|
25
25
|
}
|
|
26
|
-
if (typeof imageField ===
|
|
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(
|
|
52
|
+
return listing.featureDefinitionId.split("-").map(word => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
|
|
53
53
|
}
|
|
54
|
-
return values.featureName ||
|
|
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:
|
|
120
|
+
justifyContent: "space-between"
|
|
121
121
|
},
|
|
122
122
|
titleText: {
|
|
123
|
-
fontFamily:
|
|
123
|
+
fontFamily: "sf-semibold",
|
|
124
124
|
fontSize: 16,
|
|
125
125
|
color: Colours.TEXT_DARK
|
|
126
126
|
},
|
|
127
127
|
descriptionText: {
|
|
128
|
-
fontFamily:
|
|
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:
|
|
135
|
-
alignItems:
|
|
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:
|
|
143
|
+
fontFamily: "sf-semibold",
|
|
144
144
|
fontSize: 12,
|
|
145
|
-
color:
|
|
145
|
+
color: "#007AFF" // TODO: Add colour main here
|
|
146
146
|
},
|
|
147
147
|
imageContainer: {
|
|
148
|
-
position:
|
|
148
|
+
position: "absolute",
|
|
149
149
|
top: 0,
|
|
150
150
|
left: 16,
|
|
151
151
|
bottom: 0,
|
|
152
|
-
justifyContent:
|
|
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:
|
|
158
|
+
resizeMode: "cover",
|
|
159
159
|
borderRadius: values.dimensions.imageBorderRadius
|
|
160
160
|
},
|
|
161
161
|
placeholderImage: {
|
|
162
|
-
backgroundColor:
|
|
163
|
-
justifyContent:
|
|
164
|
-
alignItems:
|
|
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.
|
|
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","
|
|
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,7 +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
3
|
import { FontAwesome } from "../common";
|
|
4
|
-
import { Components, Colours } from "
|
|
4
|
+
import { Components, Colours } from "../../core.config";
|
|
5
5
|
import { values } from "../../values.config";
|
|
6
6
|
import { getSummaryFieldValue } from "../../js/helpers";
|
|
7
7
|
const {
|
|
@@ -1 +1 @@
|
|
|
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":"AAAA,OAAOA,KAAK,IAAIC,QAAQ,EAAEC,MAAM,EAAEC,SAAS,QAAQ,OAAO;AAC1D,SACEC,IAAI,EACJC,IAAI,EACJC,UAAU,EACVC,QAAQ,EACRC,gBAAgB,EAChBC,KAAK,EACLC,UAAU,EACVC,QAAQ,QACH,cAAc;AACrB,SAASC,WAAW,QAAQ,WAAW;AACvC,SAASC,UAAU,EAAEC,OAAO,QAAQ,kBAAkB;AACtD,SAASC,MAAM,QAAQ,qBAAqB;AAC5C,SAASC,oBAAoB,QAAQ,kBAAkB;AAEvD,MAAM;EAAEC,KAAK,EAAEC;AAAY,CAAC,GAAGR,UAAU,CAACS,GAAG,CAAC,QAAQ,CAAC;AACvD,MAAMC,UAAU,GAAGF,WAAW,GAAG,EAAE,CAAC,CAAC;AACrC,MAAMG,YAAY,GAAID,UAAU,GAAG,CAAC,GAAI,EAAE,CAAC,CAAC;;AAE5C,MAAME,oBAAoB,GAAIC,KAAK,IAAK;EACtC,MAAMC,WAAW,GAAGD,KAAK,IAAI,SAAS;EACtC,OAAO,GAAGC,WAAW,uFAAuF;AAC9G,CAAC;AAED,MAAMC,gBAAgB,GAAGA,CAAC;EACxBC,QAAQ;EACRC,WAAW;EACXC,kBAAkB;EAClBC,UAAU;EACVC,SAAS;EACTC,iBAAiB;EACjBR,KAAK;EACLS;AACF,CAAC,KAAK;EACJ,MAAMC,cAAc,GAAIC,UAAU,IAAK;IACrC,IAAI,CAACA,UAAU,EAAE,OAAO,IAAI;;IAE5B;IACA,IAAI,OAAOA,UAAU,KAAK,QAAQ,EAAE;MAClC,OAAO;QAAEC,GAAG,EAAED;MAAW,CAAC;IAC5B;IAEA,IAAI,OAAOA,UAAU,KAAK,QAAQ,IAAIA,UAAU,CAACC,GAAG,EAAE;MACpD,OAAOD,UAAU;IACnB;IAEA,IAAI,OAAOA,UAAU,KAAK,QAAQ,IAAIA,UAAU,CAACE,GAAG,EAAE;MACpD,OAAO;QAAED,GAAG,EAAED,UAAU,CAACE;MAAI,CAAC;IAChC;IAEA,OAAO,IAAI;EACb,CAAC;EAED,MAAMC,iBAAiB,GAAGA,CAAC;IAAEC,IAAI,EAAEC;EAAQ,CAAC,KAAK;IAAA,IAAAC,eAAA,EAAAC,gBAAA;IAC/C,MAAMlB,KAAK,GAAG,EAAAiB,eAAA,GAAAD,OAAO,CAACG,MAAM,cAAAF,eAAA,uBAAdA,eAAA,CAAiBzB,MAAM,CAAC4B,eAAe,CAACpB,KAAK,CAAC,KAAI,UAAU;IAC1E,MAAMqB,OAAO,GAAG5B,oBAAoB,CAACuB,OAAO,EAAER,iBAAiB,CAAC;IAChE,MAAMG,UAAU,IAAAO,gBAAA,GAAGF,OAAO,CAACG,MAAM,cAAAD,gBAAA,uBAAdA,gBAAA,CAAiB1B,MAAM,CAAC4B,eAAe,CAACE,YAAY,CAAC;IACxE,MAAMC,WAAW,GAAGb,cAAc,CAACC,UAAU,CAAC;IAE9C,oBACElC,KAAA,CAAA+C,aAAA,CAACvC,gBAAgB;MACfwC,KAAK,EAAEC,MAAM,CAACC,aAAc;MAC5BC,OAAO,EAAEA,CAAA,KAAMxB,WAAW,IAAIA,WAAW,CAACY,OAAO;IAAE,gBAEnDvC,KAAA,CAAA+C,aAAA,CAAC3C,IAAI;MAAC4C,KAAK,EAAEC,MAAM,CAACG;IAAe,GAChCN,WAAW,gBACV9C,KAAA,CAAA+C,aAAA,CAACtC,KAAK;MAAC4C,MAAM,EAAEP,WAAY;MAACE,KAAK,EAAEC,MAAM,CAACJ;IAAa,CAAE,CAAC,gBAE1D7C,KAAA,CAAA+C,aAAA,CAAC3C,IAAI;MAAC4C,KAAK,EAAE,CAACC,MAAM,CAACJ,YAAY,EAAEI,MAAM,CAACK,gBAAgB;IAAE,gBAC1DtD,KAAA,CAAA+C,aAAA,CAAC1C,IAAI;MAAC2C,KAAK,EAAEC,MAAM,CAACM;IAAgB,GAAC,UAAc,CAC/C,CAEJ,CAAC,eACPvD,KAAA,CAAA+C,aAAA,CAAC3C,IAAI;MAAC4C,KAAK,EAAEC,MAAM,CAACO;IAAiB,gBACnCxD,KAAA,CAAA+C,aAAA,CAAC1C,IAAI;MAAC2C,KAAK,EAAEC,MAAM,CAACQ,SAAU;MAACC,aAAa,EAAE;IAAE,GAC7CnC,KACG,CAAC,EACNqB,OAAO,iBACN5C,KAAA,CAAA+C,aAAA,CAAC1C,IAAI;MAAC2C,KAAK,EAAEC,MAAM,CAACU,WAAY;MAACD,aAAa,EAAE;IAAE,GAC/Cd,OACG,CAEJ,CACU,CAAC;EAEvB,CAAC;EAED,IAAI,CAAClB,QAAQ,IAAIA,QAAQ,CAACkC,MAAM,KAAK,CAAC,EAAE;IACtC,oBACE5D,KAAA,CAAA+C,aAAA,CAAC3C,IAAI;MAAC4C,KAAK,EAAEC,MAAM,CAACY;IAAe,gBACjC7D,KAAA,CAAA+C,aAAA,CAAClC,UAAU,CAACiD,gBAAgB;MAC1BvC,KAAK,EAAED,oBAAoB,CAACC,KAAK,CAAE;MACnCwC,MAAM,EAAE;IAAI,CACb,CACG,CAAC;EAEX;EAEA,IAAIjC,SAAS,EAAE;IACb,oBACE9B,KAAA,CAAA+C,aAAA,CAAC3C,IAAI;MAAC4C,KAAK,EAAEC,MAAM,CAACe;IAAU,GAC3B,CAAChC,QAAQ,iBAAIhC,KAAA,CAAA+C,aAAA,CAAClC,UAAU,CAACoD,gBAAgB;MAACC,OAAO,EAAErC;IAAW,CAAE,CAAC,eAClE7B,KAAA,CAAA+C,aAAA,CAACxC,QAAQ;MACP4D,IAAI,EAAEzC,QAAS;MACf0C,YAAY,EAAG9B,IAAI,IAAKA,IAAI,CAAC+B,EAAG;MAChCC,UAAU,EAAEjC,iBAAkB;MAC9BkC,qBAAqB,EAAEtB,MAAM,CAACuB,aAAc;MAC5CC,4BAA4B,EAAE;IAAM,CACrC,CACG,CAAC;EAEX;EAEA,oBACEzE,KAAA,CAAA+C,aAAA,CAAC3C,IAAI;IAAC4C,KAAK,EAAEC,MAAM,CAACe;EAAU,gBAC5BhE,KAAA,CAAA+C,aAAA,CAACxC,QAAQ;IACP4D,IAAI,EAAEzC,QAAS;IACf0C,YAAY,EAAG9B,IAAI,IAAKA,IAAI,CAAC+B,EAAG;IAChCC,UAAU,EAAEjC,iBAAkB;IAC9BkC,qBAAqB,EAAEtB,MAAM,CAACuB,aAAc;IAC5CC,4BAA4B,EAAE;EAAM,CACrC,CACG,CAAC;AAEX,CAAC;AAED,MAAMxB,MAAM,GAAG3C,UAAU,CAACoE,MAAM,CAAC;EAC/BV,SAAS,EAAE;IACTW,IAAI,EAAE,CAAC;IACPC,eAAe,EAAE;EACnB,CAAC;EACDJ,aAAa,EAAE;IACbK,OAAO,EAAE;EACX,CAAC;EACD3B,aAAa,EAAE;IACb0B,eAAe,EAAE,MAAM;IACvBE,YAAY,EAAE,CAAC;IACfC,YAAY,EAAE,EAAE;IAChBC,WAAW,EAAE,MAAM;IACnBC,YAAY,EAAE;MACZhE,KAAK,EAAE,CAAC;MACR8C,MAAM,EAAE;IACV,CAAC;IACDmB,aAAa,EAAE,GAAG;IAClBC,YAAY,EAAE,CAAC;IACfC,SAAS,EAAE,CAAC;IACZC,QAAQ,EAAE;EACZ,CAAC;EACDjC,cAAc,EAAE;IACdnC,KAAK,EAAEG,UAAU;IACjB2C,MAAM,EAAE1C;EACV,CAAC;EACDwB,YAAY,EAAE;IACZ5B,KAAK,EAAE,MAAM;IACb8C,MAAM,EAAE,MAAM;IACda,eAAe,EAAE;EACnB,CAAC;EACDtB,gBAAgB,EAAE;IAChBgC,cAAc,EAAE,QAAQ;IACxBC,UAAU,EAAE,QAAQ;IACpBX,eAAe,EAAE;EACnB,CAAC;EACDrB,eAAe,EAAE;IACfiC,QAAQ,EAAE,EAAE;IACZC,KAAK,EAAE,MAAM;IACbC,UAAU,EAAE;EACd,CAAC;EACDlC,gBAAgB,EAAE;IAChBqB,OAAO,EAAE;EACX,CAAC;EACDpB,SAAS,EAAE;IACT+B,QAAQ,EAAE,EAAE;IACZG,UAAU,EAAE,KAAK;IACjBD,UAAU,EAAE,aAAa;IACzBD,KAAK,EAAE,MAAM;IACbV,YAAY,EAAE,CAAC;IACfa,UAAU,EAAE;EACd,CAAC;EACDjC,WAAW,EAAE;IACX6B,QAAQ,EAAE,EAAE;IACZE,UAAU,EAAE,YAAY;IACxBD,KAAK,EAAE,MAAM;IACbG,UAAU,EAAE;EACd,CAAC;EACD/B,cAAc,EAAE;IACdc,IAAI,EAAE,CAAC;IACPW,cAAc,EAAE,QAAQ;IACxBC,UAAU,EAAE,QAAQ;IACpBV,OAAO,EAAE;EACX;AACF,CAAC,CAAC;AAEF,eAAepD,gBAAgB","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.
|
|
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
|
|
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
|
|
2
|
-
import { Text, TouchableOpacity, View, StyleSheet, Image } from
|
|
3
|
-
import { FontAwesome } from
|
|
4
|
-
import _ from
|
|
5
|
-
import { Helper, Colours } from
|
|
6
|
-
import { values } from
|
|
7
|
-
|
|
8
|
-
import FieldRenderer from
|
|
9
|
-
|
|
10
|
-
const FeatureListItem = ({
|
|
11
|
-
|
|
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 ===
|
|
20
|
+
if (typeof imageField === "string") {
|
|
15
21
|
return { uri: imageField };
|
|
16
22
|
}
|
|
17
23
|
|
|
18
|
-
if (typeof imageField ===
|
|
24
|
+
if (typeof imageField === "object" && imageField.uri) {
|
|
19
25
|
return imageField;
|
|
20
26
|
}
|
|
21
27
|
|
|
22
|
-
if (typeof imageField ===
|
|
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 =
|
|
37
|
-
|
|
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 ||
|
|
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 =>
|
|
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
|
|
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
|
|
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:
|
|
144
|
+
justifyContent: "space-between",
|
|
126
145
|
},
|
|
127
146
|
titleText: {
|
|
128
|
-
fontFamily:
|
|
147
|
+
fontFamily: "sf-semibold",
|
|
129
148
|
fontSize: 16,
|
|
130
149
|
color: Colours.TEXT_DARK,
|
|
131
150
|
},
|
|
132
151
|
descriptionText: {
|
|
133
|
-
fontFamily:
|
|
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:
|
|
140
|
-
alignItems:
|
|
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:
|
|
167
|
+
fontFamily: "sf-semibold",
|
|
149
168
|
fontSize: 12,
|
|
150
|
-
color:
|
|
169
|
+
color: "#007AFF", // TODO: Add colour main here
|
|
151
170
|
},
|
|
152
171
|
imageContainer: {
|
|
153
|
-
position:
|
|
172
|
+
position: "absolute",
|
|
154
173
|
top: 0,
|
|
155
174
|
left: 16,
|
|
156
175
|
bottom: 0,
|
|
157
|
-
justifyContent:
|
|
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:
|
|
182
|
+
resizeMode: "cover",
|
|
164
183
|
borderRadius: values.dimensions.imageBorderRadius,
|
|
165
184
|
},
|
|
166
185
|
placeholderImage: {
|
|
167
|
-
backgroundColor:
|
|
168
|
-
justifyContent:
|
|
169
|
-
alignItems:
|
|
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.
|
|
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;
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
Animated,
|
|
11
11
|
} from "react-native";
|
|
12
12
|
import { FontAwesome } from "../common";
|
|
13
|
-
import { Components, Colours } from "
|
|
13
|
+
import { Components, Colours } from "../../core.config";
|
|
14
14
|
import { values } from "../../values.config";
|
|
15
15
|
import { getSummaryFieldValue } from "../../js/helpers";
|
|
16
16
|
|