@plusscommunities/pluss-feature-builder-app-d 8.0.8-beta.0 → 8.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/module/components/WidgetLarge.js +80 -163
- package/dist/module/components/WidgetLarge.js.map +1 -1
- package/dist/module/components/WidgetSmall.js +82 -208
- package/dist/module/components/WidgetSmall.js.map +1 -1
- package/dist/module/feature.config.js +3 -2
- package/dist/module/feature.config.js.map +1 -1
- package/package.json +1 -1
- package/src/components/WidgetLarge.js +81 -193
- package/src/components/WidgetSmall.js +82 -233
- package/src/feature.config.js +2 -1
|
@@ -1,19 +1,23 @@
|
|
|
1
1
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
2
2
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
3
3
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
4
|
-
import React, { Component } from
|
|
5
|
-
import { Text, View,
|
|
6
|
-
import { connect } from
|
|
7
|
-
import _ from
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
|
|
16
|
-
|
|
4
|
+
import React, { Component } from 'react';
|
|
5
|
+
import { Text, View, StyleSheet } from 'react-native';
|
|
6
|
+
import { connect } from 'react-redux';
|
|
7
|
+
import _ from 'lodash';
|
|
8
|
+
import { Services } from '../feature.config';
|
|
9
|
+
import { Components, Colours } from '../core.config';
|
|
10
|
+
import { values } from '../values.config';
|
|
11
|
+
import { selectListings, selectFeatureDefinition } from '../utils/selectors';
|
|
12
|
+
import { SPACING } from '../js/spacing';
|
|
13
|
+
import { getMainBrandingColourFromState } from '../js';
|
|
14
|
+
import { loadTargetFeature } from '../actions/featureBuilderActions';
|
|
15
|
+
|
|
16
|
+
// Layouts
|
|
17
|
+
import RoundImageList from './layouts/RoundImageList';
|
|
18
|
+
import CondensedList from './layouts/CondensedList';
|
|
19
|
+
import SquareImageList from './layouts/SquareImageList';
|
|
20
|
+
import FeatureImageList from './layouts/FeatureImageList';
|
|
17
21
|
class WidgetSmall extends Component {
|
|
18
22
|
constructor(props) {
|
|
19
23
|
super(props);
|
|
@@ -27,19 +31,33 @@ class WidgetSmall extends Component {
|
|
|
27
31
|
if (featureDefinition !== null && featureDefinition !== void 0 && featureDefinition.title || featureDefinition !== null && featureDefinition !== void 0 && featureDefinition.displayName) {
|
|
28
32
|
return featureDefinition.title || featureDefinition.displayName;
|
|
29
33
|
}
|
|
30
|
-
return values.featureName ||
|
|
34
|
+
return values.featureName || 'Features';
|
|
31
35
|
});
|
|
32
36
|
_defineProperty(this, "getEmptyStateText", () => {
|
|
33
37
|
const {
|
|
34
|
-
options
|
|
38
|
+
options,
|
|
39
|
+
featureDefinition
|
|
35
40
|
} = this.props;
|
|
36
41
|
if (options && !_.isEmpty(options.EmptyText)) return options.EmptyText;
|
|
37
|
-
|
|
42
|
+
const featureName = (featureDefinition === null || featureDefinition === void 0 ? void 0 : featureDefinition.title) || (featureDefinition === null || featureDefinition === void 0 ? void 0 : featureDefinition.displayName) || values.featureName || 'Feature';
|
|
43
|
+
return `No listings for ${featureName}`;
|
|
44
|
+
});
|
|
45
|
+
_defineProperty(this, "getLayoutComponent", layoutType => {
|
|
46
|
+
switch (layoutType) {
|
|
47
|
+
case values.layoutTypes.round:
|
|
48
|
+
return RoundImageList;
|
|
49
|
+
case values.layoutTypes.square:
|
|
50
|
+
return SquareImageList;
|
|
51
|
+
case values.layoutTypes.feature:
|
|
52
|
+
return FeatureImageList;
|
|
53
|
+
default:
|
|
54
|
+
return CondensedList;
|
|
55
|
+
}
|
|
38
56
|
});
|
|
39
57
|
_defineProperty(this, "refresh", () => {
|
|
40
58
|
this.onLoadingChanged(true, async () => {
|
|
41
59
|
try {
|
|
42
|
-
await
|
|
60
|
+
await this.props.dispatch(loadTargetFeature());
|
|
43
61
|
} finally {
|
|
44
62
|
this.onLoadingChanged(false);
|
|
45
63
|
}
|
|
@@ -53,72 +71,17 @@ class WidgetSmall extends Component {
|
|
|
53
71
|
if (callback) callback();
|
|
54
72
|
});
|
|
55
73
|
});
|
|
56
|
-
_defineProperty(this, "
|
|
57
|
-
Services.navigation.navigate(values.screens.featureList, {
|
|
58
|
-
options: this.props.options
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
_defineProperty(this, "getImageSource", imageField => {
|
|
62
|
-
if (!imageField) return null;
|
|
63
|
-
if (typeof imageField === "string") {
|
|
64
|
-
return {
|
|
65
|
-
uri: imageField
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
if (typeof imageField === "object" && imageField.uri) {
|
|
69
|
-
return imageField;
|
|
70
|
-
}
|
|
71
|
-
if (typeof imageField === "object" && imageField.url) {
|
|
72
|
-
return {
|
|
73
|
-
uri: imageField.url
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
return null;
|
|
77
|
-
});
|
|
78
|
-
_defineProperty(this, "onListingPress", listing => {
|
|
74
|
+
_defineProperty(this, "onItemPress", item => {
|
|
79
75
|
const {
|
|
80
76
|
featureDefinition
|
|
81
77
|
} = this.props;
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
_defineProperty(this, "renderListingCard", listing => {
|
|
90
|
-
var _listing$fields, _listing$fields2;
|
|
91
|
-
const {
|
|
92
|
-
colourBrandingMain,
|
|
93
|
-
featureDefinition
|
|
94
|
-
} = this.props;
|
|
95
|
-
const title = ((_listing$fields = listing.fields) === null || _listing$fields === void 0 ? void 0 : _listing$fields[values.mandatoryFields.title]) || "Untitled";
|
|
96
|
-
const summary = getSummaryFieldValue(listing, featureDefinition);
|
|
97
|
-
const imageField = (_listing$fields2 = listing.fields) === null || _listing$fields2 === void 0 ? void 0 : _listing$fields2[values.mandatoryFields.featureImage];
|
|
98
|
-
const imageSource = this.getImageSource(imageField);
|
|
99
|
-
return /*#__PURE__*/React.createElement(TouchableOpacity, {
|
|
100
|
-
key: listing.id,
|
|
101
|
-
style: styles.cardContainer,
|
|
102
|
-
onPress: () => this.onListingPress(listing)
|
|
103
|
-
}, /*#__PURE__*/React.createElement(View, {
|
|
104
|
-
style: styles.borderContainer
|
|
105
|
-
}, imageSource ? /*#__PURE__*/React.createElement(Image, {
|
|
106
|
-
source: imageSource,
|
|
107
|
-
style: styles.cardImage,
|
|
108
|
-
resizeMode: "cover"
|
|
109
|
-
}) : /*#__PURE__*/React.createElement(View, {
|
|
110
|
-
style: [styles.cardImage, styles.placeholderImage]
|
|
111
|
-
}, /*#__PURE__*/React.createElement(FontAwesome, {
|
|
112
|
-
name: "image",
|
|
113
|
-
size: 24,
|
|
114
|
-
color: Colours.TEXT_LIGHT
|
|
115
|
-
})), /*#__PURE__*/React.createElement(Text, {
|
|
116
|
-
style: styles.cardTitle,
|
|
117
|
-
numberOfLines: 1
|
|
118
|
-
}, title), summary && /*#__PURE__*/React.createElement(Text, {
|
|
119
|
-
style: styles.cardSummary,
|
|
120
|
-
numberOfLines: 1
|
|
121
|
-
}, summary)));
|
|
78
|
+
if (featureDefinition) {
|
|
79
|
+
Services.navigation.navigate(values.screens.featureDetail, {
|
|
80
|
+
listing: item,
|
|
81
|
+
featureDefinition: featureDefinition,
|
|
82
|
+
featureTitle: featureDefinition.title || featureDefinition.displayName
|
|
83
|
+
});
|
|
84
|
+
}
|
|
122
85
|
});
|
|
123
86
|
this.state = {
|
|
124
87
|
loading: false
|
|
@@ -133,77 +96,55 @@ class WidgetSmall extends Component {
|
|
|
133
96
|
}
|
|
134
97
|
}
|
|
135
98
|
renderContent() {
|
|
99
|
+
var _featureDefinition$la;
|
|
136
100
|
const {
|
|
137
|
-
listings
|
|
101
|
+
listings,
|
|
102
|
+
featureDefinition,
|
|
103
|
+
colourBrandingMain
|
|
138
104
|
} = this.props;
|
|
139
105
|
|
|
140
|
-
//
|
|
141
|
-
if (
|
|
142
|
-
return
|
|
106
|
+
// Show loading state if no definition or loading
|
|
107
|
+
if (!featureDefinition || this.state.loading) {
|
|
108
|
+
return /*#__PURE__*/React.createElement(View, {
|
|
109
|
+
style: styles.loadingPadding
|
|
110
|
+
}, /*#__PURE__*/React.createElement(Components.LoadingStateWidget, {
|
|
111
|
+
height: 180
|
|
112
|
+
}));
|
|
143
113
|
}
|
|
114
|
+
|
|
115
|
+
// Show empty state if no listings are available
|
|
144
116
|
if (_.isEmpty(listings)) {
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
}
|
|
152
|
-
return null;
|
|
117
|
+
return /*#__PURE__*/React.createElement(View, {
|
|
118
|
+
style: styles.emptyPadding
|
|
119
|
+
}, /*#__PURE__*/React.createElement(Components.EmptyStateWidget, {
|
|
120
|
+
title: this.getTitle(),
|
|
121
|
+
height: 120
|
|
122
|
+
}));
|
|
153
123
|
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
const
|
|
157
|
-
return /*#__PURE__*/React.createElement(
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
}, listingsToShow.map(listing => this.renderListingCard(listing)), listings.length > values.widget.maxItems && /*#__PURE__*/React.createElement(TouchableOpacity, {
|
|
165
|
-
style: [styles.cardContainer, styles.viewMoreCard],
|
|
166
|
-
onPress: this.onPressAll
|
|
167
|
-
}, /*#__PURE__*/React.createElement(View, {
|
|
168
|
-
style: [styles.borderContainer, styles.viewMoreContainer]
|
|
169
|
-
}, /*#__PURE__*/React.createElement(Text, {
|
|
170
|
-
style: styles.viewMoreText
|
|
171
|
-
}, "View all"), /*#__PURE__*/React.createElement(Text, {
|
|
172
|
-
style: styles.viewMoreCount
|
|
173
|
-
}, listings.length, " items"))));
|
|
124
|
+
const layoutType = ((_featureDefinition$la = featureDefinition.layout) === null || _featureDefinition$la === void 0 ? void 0 : _featureDefinition$la.type) || 'condensed';
|
|
125
|
+
const LayoutComponent = this.getLayoutComponent(layoutType);
|
|
126
|
+
const title = this.getTitle();
|
|
127
|
+
return /*#__PURE__*/React.createElement(LayoutComponent, {
|
|
128
|
+
listings: listings,
|
|
129
|
+
featureDefinition: featureDefinition,
|
|
130
|
+
colourBrandingMain: colourBrandingMain,
|
|
131
|
+
title: title,
|
|
132
|
+
onItemPress: this.onItemPress
|
|
133
|
+
});
|
|
174
134
|
}
|
|
175
135
|
render() {
|
|
176
|
-
const {
|
|
177
|
-
colourBrandingMain
|
|
178
|
-
} = this.props;
|
|
179
|
-
const content = this.renderContent();
|
|
180
|
-
// Don't render widget section if content is null (no features available)
|
|
181
|
-
if (content === null) {
|
|
182
|
-
return null;
|
|
183
|
-
}
|
|
184
136
|
return /*#__PURE__*/React.createElement(View, {
|
|
185
137
|
style: styles.sectionContainer
|
|
186
138
|
}, /*#__PURE__*/React.createElement(View, {
|
|
187
139
|
style: styles.sectionPadding
|
|
188
|
-
}, /*#__PURE__*/React.createElement(View, {
|
|
189
|
-
style: styles.sectionHeading
|
|
190
140
|
}, /*#__PURE__*/React.createElement(Text, {
|
|
191
141
|
style: styles.sectionTitle
|
|
192
|
-
}, this.getTitle()),
|
|
193
|
-
onPress: this.onPressAll,
|
|
194
|
-
color: colourBrandingMain,
|
|
195
|
-
touchableStyle: {
|
|
196
|
-
paddingTop: SPACING.XS + 2
|
|
197
|
-
},
|
|
198
|
-
textStyle: {
|
|
199
|
-
color: "#fff"
|
|
200
|
-
}
|
|
201
|
-
}, values.labels.viewAll))), content);
|
|
142
|
+
}, this.getTitle())), this.renderContent());
|
|
202
143
|
}
|
|
203
144
|
}
|
|
204
145
|
const styles = StyleSheet.create({
|
|
205
146
|
sectionContainer: {
|
|
206
|
-
backgroundColor:
|
|
147
|
+
backgroundColor: '#fff',
|
|
207
148
|
paddingTop: SPACING.MD
|
|
208
149
|
},
|
|
209
150
|
sectionPadding: {
|
|
@@ -213,82 +154,13 @@ const styles = StyleSheet.create({
|
|
|
213
154
|
loadingPadding: {
|
|
214
155
|
paddingHorizontal: SPACING.MD
|
|
215
156
|
},
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
flexDirection: "row",
|
|
219
|
-
alignContent: "flex-start",
|
|
220
|
-
justifyContent: "space-between"
|
|
157
|
+
emptyPadding: {
|
|
158
|
+
paddingHorizontal: SPACING.MD
|
|
221
159
|
},
|
|
222
160
|
sectionTitle: {
|
|
223
|
-
fontFamily:
|
|
161
|
+
fontFamily: 'sf-bold',
|
|
224
162
|
fontSize: 24,
|
|
225
|
-
color:
|
|
226
|
-
},
|
|
227
|
-
// Listing card styles
|
|
228
|
-
cardContainer: {
|
|
229
|
-
marginRight: SPACING.SM + 4,
|
|
230
|
-
width: values.widget.itemMaxWidth
|
|
231
|
-
},
|
|
232
|
-
borderContainer: {
|
|
233
|
-
borderRadius: SPACING.SM,
|
|
234
|
-
backgroundColor: "#fff",
|
|
235
|
-
shadowColor: "#000",
|
|
236
|
-
shadowOffset: {
|
|
237
|
-
width: 0,
|
|
238
|
-
height: 2
|
|
239
|
-
},
|
|
240
|
-
shadowOpacity: 0.1,
|
|
241
|
-
shadowRadius: 3.84,
|
|
242
|
-
elevation: 4,
|
|
243
|
-
padding: SPACING.SM,
|
|
244
|
-
margin: SPACING.SM,
|
|
245
|
-
minHeight: values.widget.itemMinWidth
|
|
246
|
-
},
|
|
247
|
-
cardImage: {
|
|
248
|
-
width: 88,
|
|
249
|
-
height: 88,
|
|
250
|
-
borderRadius: 44,
|
|
251
|
-
backgroundColor: "#f0f0f0",
|
|
252
|
-
alignSelf: "center",
|
|
253
|
-
marginBottom: SPACING.XS
|
|
254
|
-
},
|
|
255
|
-
placeholderImage: {
|
|
256
|
-
justifyContent: "center",
|
|
257
|
-
alignItems: "center",
|
|
258
|
-
backgroundColor: "#f0f0f0"
|
|
259
|
-
},
|
|
260
|
-
cardTitle: {
|
|
261
|
-
fontFamily: "sf-semibold",
|
|
262
|
-
fontSize: 14,
|
|
263
|
-
color: "#000",
|
|
264
|
-
textAlign: "center",
|
|
265
|
-
marginBottom: 4
|
|
266
|
-
},
|
|
267
|
-
cardSummary: {
|
|
268
|
-
fontFamily: "sf-regular",
|
|
269
|
-
fontSize: 12,
|
|
270
|
-
color: "#666",
|
|
271
|
-
textAlign: "center"
|
|
272
|
-
},
|
|
273
|
-
// View more card
|
|
274
|
-
viewMoreCard: {
|
|
275
|
-
justifyContent: "center"
|
|
276
|
-
},
|
|
277
|
-
viewMoreContainer: {
|
|
278
|
-
justifyContent: "center",
|
|
279
|
-
alignItems: "center",
|
|
280
|
-
minHeight: values.widget.itemMinWidth
|
|
281
|
-
},
|
|
282
|
-
viewMoreText: {
|
|
283
|
-
fontFamily: "sf-semibold",
|
|
284
|
-
fontSize: 14,
|
|
285
|
-
color: Colours.TEXT_DARK || "#000"
|
|
286
|
-
},
|
|
287
|
-
viewMoreCount: {
|
|
288
|
-
fontFamily: "sf-regular",
|
|
289
|
-
fontSize: 12,
|
|
290
|
-
color: "#666",
|
|
291
|
-
marginTop: 2
|
|
163
|
+
color: '#000'
|
|
292
164
|
}
|
|
293
165
|
});
|
|
294
166
|
const mapStateToProps = state => {
|
|
@@ -297,10 +169,12 @@ const mapStateToProps = state => {
|
|
|
297
169
|
user,
|
|
298
170
|
notifications
|
|
299
171
|
} = state;
|
|
172
|
+
const listings = selectListings(state);
|
|
173
|
+
const featureDefinition = selectFeatureDefinition(state);
|
|
300
174
|
return {
|
|
301
175
|
colourBrandingMain: getMainBrandingColourFromState(state),
|
|
302
|
-
listings:
|
|
303
|
-
featureDefinition:
|
|
176
|
+
listings: listings,
|
|
177
|
+
featureDefinition: featureDefinition,
|
|
304
178
|
site: user.site,
|
|
305
179
|
dataUpdated: notifications.dataUpdated[values.notificationKey],
|
|
306
180
|
strings: ((_state$strings = state.strings) === null || _state$strings === void 0 ? void 0 : _state$strings.config) || {}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Component","Text","View","ScrollView","StyleSheet","TouchableOpacity","Image","connect","_","FontAwesome","Services","Components","Colours","values","selectListings","selectFeatureDefinition","SPACING","getMainBrandingColourFromState","getSummaryFieldValue","loadTargetFeature","WidgetSmall","constructor","props","_defineProperty","options","featureDefinition","isEmpty","Title","title","displayName","featureName","EmptyText","labels","emptyState","onLoadingChanged","dispatch","getState","loading","callback","setState","state","navigation","navigate","screens","featureList","imageField","uri","url","listing","getTitle","featureDetail","featureTitle","_listing$fields","_listing$fields2","colourBrandingMain","fields","mandatoryFields","summary","featureImage","imageSource","getImageSource","createElement","key","id","style","styles","cardContainer","onPress","onListingPress","borderContainer","source","cardImage","resizeMode","placeholderImage","name","size","color","TEXT_LIGHT","cardTitle","numberOfLines","cardSummary","componentDidMount","refresh","componentDidUpdate","prevProps","dataUpdated","renderContent","listings","loadingPadding","LoadingStateWidget","height","listingsToShow","slice","widget","maxItems","horizontal","contentContainerStyle","paddingLeft","XS","paddingRight","SM","showsHorizontalScrollIndicator","map","renderListingCard","length","viewMoreCard","onPressAll","viewMoreContainer","viewMoreText","viewMoreCount","render","content","sectionContainer","sectionPadding","sectionHeading","sectionTitle","InlineButton","touchableStyle","paddingTop","textStyle","viewAll","create","backgroundColor","MD","paddingHorizontal","paddingBottom","marginBottom","flexDirection","alignContent","justifyContent","fontFamily","fontSize","marginRight","width","itemMaxWidth","borderRadius","shadowColor","shadowOffset","shadowOpacity","shadowRadius","elevation","padding","margin","minHeight","itemMinWidth","alignSelf","alignItems","textAlign","TEXT_DARK","marginTop","mapStateToProps","_state$strings","user","notifications","site","notificationKey","strings","config","forwardRef"],"sources":["WidgetSmall.js"],"sourcesContent":["import React, { Component } from \"react\";\nimport {\n\tText,\n\tView,\n\tScrollView,\n\tStyleSheet,\n\tTouchableOpacity,\n\tImage,\n} from \"react-native\";\nimport { connect } from \"react-redux\";\nimport _ from \"lodash\";\nimport { FontAwesome } from \"@expo/vector-icons\";\nimport { Services } from \"../feature.config\";\nimport { Components, Colours } from \"../core.config\";\nimport { values } from \"../values.config\";\nimport { selectListings, selectFeatureDefinition } from \"../utils/selectors\";\nimport { SPACING } from \"../js/spacing\";\nimport { getMainBrandingColourFromState } from \"../js\";\nimport { getSummaryFieldValue } from \"../js/helpers\";\nimport { loadTargetFeature } from \"../actions/featureBuilderActions\";\n\nclass WidgetSmall extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = { loading: false };\n\t}\n\n\tcomponentDidMount() {\n\t\tthis.refresh();\n\t}\n\n\tcomponentDidUpdate(prevProps) {\n\t\tif (!prevProps.dataUpdated && this.props.dataUpdated) {\n\t\t\tthis.refresh();\n\t\t}\n\t}\n\n\tgetTitle = () => {\n\t\tconst { options, featureDefinition } = this.props;\n\t\tif (options && !_.isEmpty(options.Title)) return options.Title;\n\t\t// Use feature definition title\n\t\tif (featureDefinition?.title || featureDefinition?.displayName) {\n\t\t\treturn featureDefinition.title || featureDefinition.displayName;\n\t\t}\n\t\treturn values.featureName || \"Features\";\n\t};\n\n\tgetEmptyStateText = () => {\n\t\tconst { options } = this.props;\n\t\tif (options && !_.isEmpty(options.EmptyText)) return options.EmptyText;\n\t\treturn values.labels.emptyState;\n\t};\n\n\trefresh = () => {\n\t\tthis.onLoadingChanged(true, async () => {\n\t\t\ttry {\n\t\t\t\tawait loadTargetFeature()(\n\t\t\t\t\tthis.props.dispatch,\n\t\t\t\t\t() => this.props.getState,\n\t\t\t\t);\n\t\t\t} finally {\n\t\t\t\tthis.onLoadingChanged(false);\n\t\t\t}\n\t\t});\n\t};\n\n\tonLoadingChanged = (loading, callback) => {\n\t\tthis.setState({ loading }, () => {\n\t\t\tif (this.props.onLoadingChanged)\n\t\t\t\tthis.props.onLoadingChanged(this.state.loading);\n\t\t\tif (callback) callback();\n\t\t});\n\t};\n\n\tonPressAll = () => {\n\t\tServices.navigation.navigate(values.screens.featureList, {\n\t\t\toptions: this.props.options,\n\t\t});\n\t};\n\n\tgetImageSource = (imageField) => {\n\t\tif (!imageField) return null;\n\n\t\tif (typeof imageField === \"string\") {\n\t\t\treturn { uri: imageField };\n\t\t}\n\n\t\tif (typeof imageField === \"object\" && imageField.uri) {\n\t\t\treturn imageField;\n\t\t}\n\n\t\tif (typeof imageField === \"object\" && imageField.url) {\n\t\t\treturn { uri: imageField.url };\n\t\t}\n\n\t\treturn null;\n\t};\n\n\tonListingPress = (listing) => {\n\t\tconst { featureDefinition } = this.props;\n\t\tconst title = this.getTitle();\n\t\tServices.navigation.navigate(values.screens.featureDetail, {\n\t\t\tlisting: listing,\n\t\t\tfeatureDefinition: featureDefinition,\n\t\t\tfeatureTitle: title,\n\t\t});\n\t};\n\n\trenderListingCard = (listing) => {\n\t\tconst { colourBrandingMain, featureDefinition } = this.props;\n\t\tconst title = listing.fields?.[values.mandatoryFields.title] || \"Untitled\";\n\t\tconst summary = getSummaryFieldValue(listing, featureDefinition);\n\t\tconst imageField = listing.fields?.[values.mandatoryFields.featureImage];\n\t\tconst imageSource = this.getImageSource(imageField);\n\n\t\treturn (\n\t\t\t<TouchableOpacity\n\t\t\t\tkey={listing.id}\n\t\t\t\tstyle={styles.cardContainer}\n\t\t\t\tonPress={() => this.onListingPress(listing)}\n\t\t\t>\n\t\t\t\t<View style={styles.borderContainer}>\n\t\t\t\t\t{imageSource ? (\n\t\t\t\t\t\t<Image\n\t\t\t\t\t\t\tsource={imageSource}\n\t\t\t\t\t\t\tstyle={styles.cardImage}\n\t\t\t\t\t\t\tresizeMode=\"cover\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<View style={[styles.cardImage, styles.placeholderImage]}>\n\t\t\t\t\t\t\t<FontAwesome name=\"image\" size={24} color={Colours.TEXT_LIGHT} />\n\t\t\t\t\t\t</View>\n\t\t\t\t\t)}\n\t\t\t\t\t<Text style={styles.cardTitle} numberOfLines={1}>\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</Text>\n\t\t\t\t\t{summary && (\n\t\t\t\t\t\t<Text style={styles.cardSummary} numberOfLines={1}>\n\t\t\t\t\t\t\t{summary}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t)}\n\t\t\t\t</View>\n\t\t\t</TouchableOpacity>\n\t\t);\n\t};\n\n\trenderContent() {\n\t\tconst { listings } = this.props;\n\n\t\t// Don't render widget if no listings are available (and not loading)\n\t\tif (_.isEmpty(listings) && !this.state.loading) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (_.isEmpty(listings)) {\n\t\t\tif (this.state.loading) {\n\t\t\t\treturn (\n\t\t\t\t\t<View style={styles.loadingPadding}>\n\t\t\t\t\t\t<Components.LoadingStateWidget height={180} />\n\t\t\t\t\t</View>\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\t// Show first 3 listings with peeking indicator\n\t\tconst listingsToShow = listings.slice(0, values.widget.maxItems);\n\n\t\treturn (\n\t\t\t<ScrollView\n\t\t\t\thorizontal\n\t\t\t\tcontentContainerStyle={{\n\t\t\t\t\tpaddingLeft: SPACING.XS + 2,\n\t\t\t\t\tpaddingRight: SPACING.SM,\n\t\t\t\t}}\n\t\t\t\tshowsHorizontalScrollIndicator={false}\n\t\t\t>\n\t\t\t\t{listingsToShow.map((listing) => this.renderListingCard(listing))}\n\t\t\t\t{listings.length > values.widget.maxItems && (\n\t\t\t\t\t<TouchableOpacity\n\t\t\t\t\t\tstyle={[styles.cardContainer, styles.viewMoreCard]}\n\t\t\t\t\t\tonPress={this.onPressAll}\n\t\t\t\t\t>\n\t\t\t\t\t\t<View style={[styles.borderContainer, styles.viewMoreContainer]}>\n\t\t\t\t\t\t\t<Text style={styles.viewMoreText}>View all</Text>\n\t\t\t\t\t\t\t<Text style={styles.viewMoreCount}>{listings.length} items</Text>\n\t\t\t\t\t\t</View>\n\t\t\t\t\t</TouchableOpacity>\n\t\t\t\t)}\n\t\t\t</ScrollView>\n\t\t);\n\t}\n\n\trender() {\n\t\tconst { colourBrandingMain } = this.props;\n\n\t\tconst content = this.renderContent();\n\t\t// Don't render widget section if content is null (no features available)\n\t\tif (content === null) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn (\n\t\t\t<View style={styles.sectionContainer}>\n\t\t\t\t<View style={styles.sectionPadding}>\n\t\t\t\t\t<View style={styles.sectionHeading}>\n\t\t\t\t\t\t<Text style={styles.sectionTitle}>{this.getTitle()}</Text>\n\t\t\t\t\t\t<Components.InlineButton\n\t\t\t\t\t\t\tonPress={this.onPressAll}\n\t\t\t\t\t\t\tcolor={colourBrandingMain}\n\t\t\t\t\t\t\ttouchableStyle={{ paddingTop: SPACING.XS + 2 }}\n\t\t\t\t\t\t\ttextStyle={{ color: \"#fff\" }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{values.labels.viewAll}\n\t\t\t\t\t\t</Components.InlineButton>\n\t\t\t\t\t</View>\n\t\t\t\t</View>\n\t\t\t\t{content}\n\t\t\t</View>\n\t\t);\n\t}\n}\n\nconst styles = StyleSheet.create({\n\tsectionContainer: {\n\t\tbackgroundColor: \"#fff\",\n\t\tpaddingTop: SPACING.MD,\n\t},\n\tsectionPadding: {\n\t\tpaddingHorizontal: SPACING.MD,\n\t\tpaddingBottom: SPACING.XS + 2,\n\t},\n\tloadingPadding: {\n\t\tpaddingHorizontal: SPACING.MD,\n\t},\n\tsectionHeading: {\n\t\tmarginBottom: SPACING.XS,\n\t\tflexDirection: \"row\",\n\t\talignContent: \"flex-start\",\n\t\tjustifyContent: \"space-between\",\n\t},\n\tsectionTitle: {\n\t\tfontFamily: \"sf-bold\",\n\t\tfontSize: 24,\n\t\tcolor: \"#000\",\n\t},\n\t// Listing card styles\n\tcardContainer: {\n\t\tmarginRight: SPACING.SM + 4,\n\t\twidth: values.widget.itemMaxWidth,\n\t},\n\tborderContainer: {\n\t\tborderRadius: SPACING.SM,\n\t\tbackgroundColor: \"#fff\",\n\t\tshadowColor: \"#000\",\n\t\tshadowOffset: {\n\t\t\twidth: 0,\n\t\t\theight: 2,\n\t\t},\n\t\tshadowOpacity: 0.1,\n\t\tshadowRadius: 3.84,\n\t\televation: 4,\n\t\tpadding: SPACING.SM,\n\t\tmargin: SPACING.SM,\n\t\tminHeight: values.widget.itemMinWidth,\n\t},\n\tcardImage: {\n\t\twidth: 88,\n\t\theight: 88,\n\t\tborderRadius: 44,\n\t\tbackgroundColor: \"#f0f0f0\",\n\t\talignSelf: \"center\",\n\t\tmarginBottom: SPACING.XS,\n\t},\n\tplaceholderImage: {\n\t\tjustifyContent: \"center\",\n\t\talignItems: \"center\",\n\t\tbackgroundColor: \"#f0f0f0\",\n\t},\n\tcardTitle: {\n\t\tfontFamily: \"sf-semibold\",\n\t\tfontSize: 14,\n\t\tcolor: \"#000\",\n\t\ttextAlign: \"center\",\n\t\tmarginBottom: 4,\n\t},\n\tcardSummary: {\n\t\tfontFamily: \"sf-regular\",\n\t\tfontSize: 12,\n\t\tcolor: \"#666\",\n\t\ttextAlign: \"center\",\n\t},\n\t// View more card\n\tviewMoreCard: {\n\t\tjustifyContent: \"center\",\n\t},\n\tviewMoreContainer: {\n\t\tjustifyContent: \"center\",\n\t\talignItems: \"center\",\n\t\tminHeight: values.widget.itemMinWidth,\n\t},\n\tviewMoreText: {\n\t\tfontFamily: \"sf-semibold\",\n\t\tfontSize: 14,\n\t\tcolor: Colours.TEXT_DARK || \"#000\",\n\t},\n\tviewMoreCount: {\n\t\tfontFamily: \"sf-regular\",\n\t\tfontSize: 12,\n\t\tcolor: \"#666\",\n\t\tmarginTop: 2,\n\t},\n});\n\nconst mapStateToProps = (state) => {\n\tconst { user, notifications } = state;\n\n\treturn {\n\t\tcolourBrandingMain: getMainBrandingColourFromState(state),\n\t\tlistings: selectListings(state),\n\t\tfeatureDefinition: selectFeatureDefinition(state),\n\t\tsite: user.site,\n\t\tdataUpdated: notifications.dataUpdated[values.notificationKey],\n\t\tstrings: state.strings?.config || {},\n\t};\n};\n\nexport default connect(mapStateToProps, null, null, { forwardRef: true })(\n\tWidgetSmall,\n);\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["React","Component","Text","View","StyleSheet","connect","_","Services","Components","Colours","values","selectListings","selectFeatureDefinition","SPACING","getMainBrandingColourFromState","loadTargetFeature","RoundImageList","CondensedList","SquareImageList","FeatureImageList","WidgetSmall","constructor","props","_defineProperty","options","featureDefinition","isEmpty","Title","title","displayName","featureName","EmptyText","layoutType","layoutTypes","round","square","feature","onLoadingChanged","dispatch","loading","callback","setState","state","item","navigation","navigate","screens","featureDetail","listing","featureTitle","componentDidMount","refresh","componentDidUpdate","prevProps","dataUpdated","renderContent","_featureDefinition$la","listings","colourBrandingMain","createElement","style","styles","loadingPadding","LoadingStateWidget","height","emptyPadding","EmptyStateWidget","getTitle","layout","type","LayoutComponent","getLayoutComponent","onItemPress","render","sectionContainer","sectionPadding","sectionTitle","create","backgroundColor","paddingTop","MD","paddingHorizontal","paddingBottom","XS","fontFamily","fontSize","color","mapStateToProps","_state$strings","user","notifications","site","notificationKey","strings","config","forwardRef"],"sources":["WidgetSmall.js"],"sourcesContent":["import React, { Component } from 'react';\nimport { Text, View, StyleSheet } from 'react-native';\nimport { connect } from 'react-redux';\nimport _ from 'lodash';\nimport { Services } from '../feature.config';\nimport { Components, Colours } from '../core.config';\nimport { values } from '../values.config';\nimport { selectListings, selectFeatureDefinition } from '../utils/selectors';\nimport { SPACING } from '../js/spacing';\nimport { getMainBrandingColourFromState } from '../js';\nimport { loadTargetFeature } from '../actions/featureBuilderActions';\n\n// Layouts\nimport RoundImageList from './layouts/RoundImageList';\nimport CondensedList from './layouts/CondensedList';\nimport SquareImageList from './layouts/SquareImageList';\nimport FeatureImageList from './layouts/FeatureImageList';\n\nclass WidgetSmall extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = { loading: false };\n\t}\n\n\tcomponentDidMount() {\n\t\tthis.refresh();\n\t}\n\n\tcomponentDidUpdate(prevProps) {\n\t\tif (!prevProps.dataUpdated && this.props.dataUpdated) {\n\t\t\tthis.refresh();\n\t\t}\n\t}\n\n\tgetTitle = () => {\n\t\tconst { options, featureDefinition } = this.props;\n\t\tif (options && !_.isEmpty(options.Title)) return options.Title;\n\t\t// Use feature definition title\n\t\tif (featureDefinition?.title || featureDefinition?.displayName) {\n\t\t\treturn featureDefinition.title || featureDefinition.displayName;\n\t\t}\n\t\treturn values.featureName || 'Features';\n\t};\n\n\tgetEmptyStateText = () => {\n\t\tconst { options, featureDefinition } = this.props;\n\t\tif (options && !_.isEmpty(options.EmptyText)) return options.EmptyText;\n\n\t\tconst featureName = featureDefinition?.title || featureDefinition?.displayName || values.featureName || 'Feature';\n\t\treturn `No listings for ${featureName}`;\n\t};\n\n\tgetLayoutComponent = layoutType => {\n\t\tswitch (layoutType) {\n\t\t\tcase values.layoutTypes.round:\n\t\t\t\treturn RoundImageList;\n\t\t\tcase values.layoutTypes.square:\n\t\t\t\treturn SquareImageList;\n\t\t\tcase values.layoutTypes.feature:\n\t\t\t\treturn FeatureImageList;\n\t\t\tdefault:\n\t\t\t\treturn CondensedList;\n\t\t}\n\t};\n\n\trefresh = () => {\n\t\tthis.onLoadingChanged(true, async () => {\n\t\t\ttry {\n\t\t\t\tawait this.props.dispatch(loadTargetFeature());\n\t\t\t} finally {\n\t\t\t\tthis.onLoadingChanged(false);\n\t\t\t}\n\t\t});\n\t};\n\n\tonLoadingChanged = (loading, callback) => {\n\t\tthis.setState({ loading }, () => {\n\t\t\tif (this.props.onLoadingChanged) this.props.onLoadingChanged(this.state.loading);\n\t\t\tif (callback) callback();\n\t\t});\n\t};\n\n\tonItemPress = item => {\n\t\tconst { featureDefinition } = this.props;\n\t\tif (featureDefinition) {\n\t\t\tServices.navigation.navigate(values.screens.featureDetail, {\n\t\t\t\tlisting: item,\n\t\t\t\tfeatureDefinition: featureDefinition,\n\t\t\t\tfeatureTitle: featureDefinition.title || featureDefinition.displayName,\n\t\t\t});\n\t\t}\n\t};\n\n\trenderContent() {\n\t\tconst { listings, featureDefinition, colourBrandingMain } = this.props;\n\n\t\t// Show loading state if no definition or loading\n\t\tif (!featureDefinition || this.state.loading) {\n\t\t\treturn (\n\t\t\t\t<View style={styles.loadingPadding}>\n\t\t\t\t\t<Components.LoadingStateWidget height={180} />\n\t\t\t\t</View>\n\t\t\t);\n\t\t}\n\n\t\t// Show empty state if no listings are available\n\t\tif (_.isEmpty(listings)) {\n\t\t\treturn (\n\t\t\t\t<View style={styles.emptyPadding}>\n\t\t\t\t\t<Components.EmptyStateWidget title={this.getTitle()} height={120} />\n\t\t\t\t</View>\n\t\t\t);\n\t\t}\n\n\t\tconst layoutType = featureDefinition.layout?.type || 'condensed';\n\t\tconst LayoutComponent = this.getLayoutComponent(layoutType);\n\t\tconst title = this.getTitle();\n\n\t\treturn (\n\t\t\t<LayoutComponent\n\t\t\t\tlistings={listings}\n\t\t\t\tfeatureDefinition={featureDefinition}\n\t\t\t\tcolourBrandingMain={colourBrandingMain}\n\t\t\t\ttitle={title}\n\t\t\t\tonItemPress={this.onItemPress}\n\t\t\t/>\n\t\t);\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t<View style={styles.sectionContainer}>\n\t\t\t\t<View style={styles.sectionPadding}>\n\t\t\t\t\t<Text style={styles.sectionTitle}>{this.getTitle()}</Text>\n\t\t\t\t</View>\n\t\t\t\t{this.renderContent()}\n\t\t\t</View>\n\t\t);\n\t}\n}\n\nconst styles = StyleSheet.create({\n\tsectionContainer: {\n\t\tbackgroundColor: '#fff',\n\t\tpaddingTop: SPACING.MD,\n\t},\n\tsectionPadding: {\n\t\tpaddingHorizontal: SPACING.MD,\n\t\tpaddingBottom: SPACING.XS + 2,\n\t},\n\tloadingPadding: {\n\t\tpaddingHorizontal: SPACING.MD,\n\t},\n\temptyPadding: {\n\t\tpaddingHorizontal: SPACING.MD,\n\t},\n\tsectionTitle: {\n\t\tfontFamily: 'sf-bold',\n\t\tfontSize: 24,\n\t\tcolor: '#000',\n\t},\n});\n\nconst mapStateToProps = state => {\n\tconst { user, notifications } = state;\n\tconst listings = selectListings(state);\n\tconst featureDefinition = selectFeatureDefinition(state);\n\n\treturn {\n\t\tcolourBrandingMain: getMainBrandingColourFromState(state),\n\t\tlistings: listings,\n\t\tfeatureDefinition: featureDefinition,\n\t\tsite: user.site,\n\t\tdataUpdated: notifications.dataUpdated[values.notificationKey],\n\t\tstrings: state.strings?.config || {},\n\t};\n};\n\nexport default connect(mapStateToProps, null, null, { forwardRef: true })(WidgetSmall);\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -100,9 +100,10 @@ const FeatureConfig = {
|
|
|
100
100
|
PlussCore.Config.init(environment, navigation);
|
|
101
101
|
},
|
|
102
102
|
afterStoreInit: (dispatch, getState) => {
|
|
103
|
-
var
|
|
103
|
+
var _state$user;
|
|
104
104
|
// Get the site from state (guaranteed to be available due to polling)
|
|
105
|
-
const
|
|
105
|
+
const state = getState();
|
|
106
|
+
const site = state === null || state === void 0 || (_state$user = state.user) === null || _state$user === void 0 ? void 0 : _state$user.site;
|
|
106
107
|
if (site) {
|
|
107
108
|
// Show loading state before fetching
|
|
108
109
|
dispatch(updateFeatureBuilderString("Loading..."));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_","PlussCore","values","loadTargetFeature","updateFeatureBuilderString","updateFeatureBuilderIcon","Services","navigation","BaseComponents","NotificationBell","fetchFeatured","getFeatured","state","features","_state$values$reducer","includes","featureKey","listings","reducerKey","length","latestListings","orderBy","item","createdAt","updatedAt","slice","map","listing","_listing$fields","_listing$fields2","title","fields","mandatoryFields","labels","defaultTitle","imageField","featureImage","imageSource","url","uri","id","type","description","image","date","data","FeatureConfig","key","aliases","featureName","gridMenu","icon","viewBox","navigate","options","addMenu","moreMenu","kioskAction","notification","submission","featured","prop","reducer","updateKey","fetch","get","hideTabBar","env","baseStage","baseAPIUrl","hasGradientHeader","defaultProfileImage","tinyChatDefault","baseUploadsUrl","allowMediaDownload","allowMediaSharing","awsUploadsBucket","awsStorageBucket","preferredSite","strings","newEventDefaults","defaultAllowComments","init","environment","notificationBell","Config","afterStoreInit","dispatch","getState","
|
|
1
|
+
{"version":3,"names":["_","PlussCore","values","loadTargetFeature","updateFeatureBuilderString","updateFeatureBuilderIcon","Services","navigation","BaseComponents","NotificationBell","fetchFeatured","getFeatured","state","features","_state$values$reducer","includes","featureKey","listings","reducerKey","length","latestListings","orderBy","item","createdAt","updatedAt","slice","map","listing","_listing$fields","_listing$fields2","title","fields","mandatoryFields","labels","defaultTitle","imageField","featureImage","imageSource","url","uri","id","type","description","image","date","data","FeatureConfig","key","aliases","featureName","gridMenu","icon","viewBox","navigate","options","addMenu","moreMenu","kioskAction","notification","submission","featured","prop","reducer","updateKey","fetch","get","hideTabBar","env","baseStage","baseAPIUrl","hasGradientHeader","defaultProfileImage","tinyChatDefault","baseUploadsUrl","allowMediaDownload","allowMediaSharing","awsUploadsBucket","awsStorageBucket","preferredSite","strings","newEventDefaults","defaultAllowComments","init","environment","notificationBell","Config","afterStoreInit","dispatch","getState","_state$user","site","user"],"sources":["feature.config.js"],"sourcesContent":["import _ from \"lodash\";\n// import * as PlussCore from '../../pluss-core/src';\nimport * as PlussCore from \"@plusscommunities/pluss-core-app\";\nimport { values } from \"./values.config\";\nimport { loadTargetFeature } from \"./actions/featureBuilderActions\";\nimport {\n\tupdateFeatureBuilderString,\n\tupdateFeatureBuilderIcon,\n} from \"./actions/featureBuilderStringsActions\";\n\nexport const Services = {\n\tnavigation: null,\n};\n\nexport const BaseComponents = {\n\tNotificationBell: null,\n};\n\nconst fetchFeatured = async () => {\n\treturn [];\n};\n\nconst getFeatured = (state, features) => {\n\tif (!_.includes(features, values.featureKey)) return null;\n\n\tconst listings = state[values.reducerKey]?.listings || [];\n\tif (!listings || listings.length === 0) return [];\n\n\tconst latestListings = _.orderBy(\n\t\tlistings,\n\t\t[(item) => item.createdAt || item.updatedAt],\n\t\t[\"desc\"],\n\t).slice(0, 4);\n\n\treturn latestListings.map((listing) => {\n\t\tconst title =\n\t\t\tlisting.fields?.[values.mandatoryFields.title] ||\n\t\t\tvalues.labels.defaultTitle;\n\t\tconst imageField = listing.fields?.[values.mandatoryFields.featureImage];\n\t\tlet imageSource = null;\n\n\t\tif (imageField) {\n\t\t\tif (typeof imageField === \"string\") {\n\t\t\t\timageSource = imageField;\n\t\t\t} else if (imageField?.url) {\n\t\t\t\timageSource = imageField.url;\n\t\t\t} else if (imageField?.uri) {\n\t\t\t\timageSource = imageField.uri;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tid: listing.id,\n\t\t\ttype: values.featureKey,\n\t\t\ttitle: title,\n\t\t\tdescription: \"\",\n\t\t\timage: imageSource,\n\t\t\tdate: listing.createdAt || listing.updatedAt || 0,\n\t\t\tdata: listing,\n\t\t};\n\t});\n};\n\nconst FeatureConfig = {\n\tkey: values.featureKey,\n\taliases: [\"feature-builder\", \"custom-features\"],\n\ttitle: values.featureName,\n\n\tgridMenu: {\n\t\ticon: values.navigation.gridMenu.icon,\n\t\tviewBox: values.navigation.gridMenu.viewBox,\n\t\tnavigate: values.navigation.gridMenu.navigate,\n\t\toptions: values.navigation.gridMenu.options,\n\t},\n\n\t// For now, keep other menus minimal since this is primarily a display feature\n\taddMenu: null,\n\tmoreMenu: null,\n\tkioskAction: null,\n\n\tnotification: null, // No notifications for MVP\n\tsubmission: null, // No submissions for MVP\n\n\tfeatured: {\n\t\ttype: values.featureKey,\n\t\tprop: values.featureKey,\n\t\treducer: {\n\t\t\tkey: values.featureKey,\n\t\t\tprop: \"list\",\n\t\t},\n\t\tupdateKey: values.featureKey,\n\t\tfetch: fetchFeatured,\n\t\tget: getFeatured,\n\t},\n\n\thideTabBar: [], // No special tab bar hiding needed\n\n\tenv: {\n\t\tbaseStage: \"\",\n\t\tbaseAPIUrl: \"\",\n\t\thasGradientHeader: false,\n\t\tdefaultProfileImage: \"\",\n\t\ttinyChatDefault: \"\",\n\t\tbaseUploadsUrl: \"\",\n\t\tallowMediaDownload: false,\n\t\tallowMediaSharing: false,\n\t\tawsUploadsBucket: \"\",\n\t\tawsStorageBucket: \"\",\n\t\tpreferredSite: \"\",\n\t\tstrings: {},\n\t\tnewEventDefaults: \"\",\n\t\tdefaultAllowComments: true,\n\t},\n\n\tinit: (environment, navigation, notificationBell) => {\n\t\tFeatureConfig.env = environment;\n\t\tServices.navigation = navigation;\n\t\tBaseComponents.NotificationBell = notificationBell;\n\t\tPlussCore.Config.init(environment, navigation);\n\t},\n\n\tafterStoreInit: (dispatch, getState) => {\n\t\t// Get the site from state (guaranteed to be available due to polling)\n\t\tconst state = getState();\n\t\tconst site = state?.user?.site;\n\n\t\tif (site) {\n\t\t\t// Show loading state before fetching\n\t\t\tdispatch(updateFeatureBuilderString(\"Loading...\"));\n\t\t\tdispatch(updateFeatureBuilderIcon(\"spinner\"));\n\n\t\t\t// Load the target feature definition and listings\n\t\t\t// This will also update the title and icon from the definition\n\t\t\tdispatch(loadTargetFeature());\n\t\t}\n\t},\n};\n\nexport default FeatureConfig;\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED