@plusscommunities/pluss-feature-builder-app-c 1.0.1-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/dist/module/actions/featureBuilderActions.js +106 -0
  2. package/dist/module/actions/featureBuilderActions.js.map +1 -0
  3. package/dist/module/actions/featureBuilderStringsActions.js +106 -0
  4. package/dist/module/actions/featureBuilderStringsActions.js.map +1 -0
  5. package/dist/module/actions/index.js +12 -0
  6. package/dist/module/actions/index.js.map +1 -0
  7. package/dist/module/actions/types.js +7 -0
  8. package/dist/module/actions/types.js.map +1 -0
  9. package/dist/module/components/FeatureDetailScreen.js +725 -0
  10. package/dist/module/components/FeatureDetailScreen.js.map +1 -0
  11. package/dist/module/components/FeatureListItem.js +174 -0
  12. package/dist/module/components/FeatureListItem.js.map +1 -0
  13. package/dist/module/components/FeatureListScreen.js +159 -0
  14. package/dist/module/components/FeatureListScreen.js.map +1 -0
  15. package/dist/module/components/FieldRenderer.js +218 -0
  16. package/dist/module/components/FieldRenderer.js.map +1 -0
  17. package/dist/module/components/FileDownload.js +74 -0
  18. package/dist/module/components/FileDownload.js.map +1 -0
  19. package/dist/module/components/WidgetGrid.js +158 -0
  20. package/dist/module/components/WidgetGrid.js.map +1 -0
  21. package/dist/module/components/WidgetLarge.js +274 -0
  22. package/dist/module/components/WidgetLarge.js.map +1 -0
  23. package/dist/module/components/WidgetSmall.js +315 -0
  24. package/dist/module/components/WidgetSmall.js.map +1 -0
  25. package/dist/module/components/common/index.js +25 -0
  26. package/dist/module/components/common/index.js.map +1 -0
  27. package/dist/module/components/layouts/CondensedList.js +195 -0
  28. package/dist/module/components/layouts/CondensedList.js.map +1 -0
  29. package/dist/module/components/layouts/FeatureImageList.js +172 -0
  30. package/dist/module/components/layouts/FeatureImageList.js.map +1 -0
  31. package/dist/module/components/layouts/RoundImageList.js +198 -0
  32. package/dist/module/components/layouts/RoundImageList.js.map +1 -0
  33. package/dist/module/components/layouts/SquareImageList.js +185 -0
  34. package/dist/module/components/layouts/SquareImageList.js.map +1 -0
  35. package/dist/module/config/index.js +10 -0
  36. package/dist/module/config/index.js.map +1 -0
  37. package/dist/module/core.config.js +17 -0
  38. package/dist/module/core.config.js.map +1 -0
  39. package/dist/module/feature.config.js +113 -0
  40. package/dist/module/feature.config.js.map +1 -0
  41. package/dist/module/index.js +24 -0
  42. package/dist/module/index.js.map +1 -0
  43. package/dist/module/js/Colors.js +25 -0
  44. package/dist/module/js/Colors.js.map +1 -0
  45. package/dist/module/js/FieldTypes.js +123 -0
  46. package/dist/module/js/FieldTypes.js.map +1 -0
  47. package/dist/module/js/NavigationService.js +10 -0
  48. package/dist/module/js/NavigationService.js.map +1 -0
  49. package/dist/module/js/Styles.js +3 -0
  50. package/dist/module/js/Styles.js.map +1 -0
  51. package/dist/module/js/helpers.js +29 -0
  52. package/dist/module/js/helpers.js.map +1 -0
  53. package/dist/module/js/index.js +24 -0
  54. package/dist/module/js/index.js.map +1 -0
  55. package/dist/module/js/spacing.js +29 -0
  56. package/dist/module/js/spacing.js.map +1 -0
  57. package/dist/module/js/types.js +254 -0
  58. package/dist/module/js/types.js.map +1 -0
  59. package/dist/module/reducers/featureBuilderReducer.js +75 -0
  60. package/dist/module/reducers/featureBuilderReducer.js.map +1 -0
  61. package/dist/module/utils/featureSelectors.js +9 -0
  62. package/dist/module/utils/featureSelectors.js.map +1 -0
  63. package/dist/module/values.config.a.js +96 -0
  64. package/dist/module/values.config.a.js.map +1 -0
  65. package/dist/module/values.config.b.js +96 -0
  66. package/dist/module/values.config.b.js.map +1 -0
  67. package/dist/module/values.config.c.js +96 -0
  68. package/dist/module/values.config.c.js.map +1 -0
  69. package/dist/module/values.config.d.js +96 -0
  70. package/dist/module/values.config.d.js.map +1 -0
  71. package/dist/module/values.config.js +96 -0
  72. package/dist/module/values.config.js.map +1 -0
  73. package/dist/module/webapi/featureBuilderAPI.js +59 -0
  74. package/dist/module/webapi/featureBuilderAPI.js.map +1 -0
  75. package/dist/module/webapi/helper.js +4 -0
  76. package/dist/module/webapi/helper.js.map +1 -0
  77. package/dist/module/webapi/index.js +8 -0
  78. package/dist/module/webapi/index.js.map +1 -0
  79. package/package.json +62 -0
  80. package/src/actions/featureBuilderActions.js +112 -0
  81. package/src/actions/featureBuilderStringsActions.js +114 -0
  82. package/src/actions/index.js +12 -0
  83. package/src/actions/types.js +7 -0
  84. package/src/components/FeatureDetailScreen.js +817 -0
  85. package/src/components/FeatureListItem.js +198 -0
  86. package/src/components/FeatureListScreen.js +160 -0
  87. package/src/components/FieldRenderer.js +272 -0
  88. package/src/components/FileDownload.js +79 -0
  89. package/src/components/WidgetGrid.js +181 -0
  90. package/src/components/WidgetLarge.js +305 -0
  91. package/src/components/WidgetSmall.js +344 -0
  92. package/src/components/common/index.js +25 -0
  93. package/src/components/layouts/CondensedList.js +230 -0
  94. package/src/components/layouts/FeatureImageList.js +193 -0
  95. package/src/components/layouts/RoundImageList.js +219 -0
  96. package/src/components/layouts/SquareImageList.js +205 -0
  97. package/src/config/index.js +10 -0
  98. package/src/core.config.js +29 -0
  99. package/src/feature.config.js +127 -0
  100. package/src/index.js +27 -0
  101. package/src/js/Colors.js +30 -0
  102. package/src/js/FieldTypes.js +131 -0
  103. package/src/js/NavigationService.js +12 -0
  104. package/src/js/Styles.js +3 -0
  105. package/src/js/helpers.js +30 -0
  106. package/src/js/index.js +24 -0
  107. package/src/js/spacing.js +30 -0
  108. package/src/js/types.js +253 -0
  109. package/src/reducers/featureBuilderReducer.js +64 -0
  110. package/src/utils/featureSelectors.js +8 -0
  111. package/src/values.config.a.js +104 -0
  112. package/src/values.config.b.js +104 -0
  113. package/src/values.config.c.js +104 -0
  114. package/src/values.config.d.js +104 -0
  115. package/src/values.config.js +104 -0
  116. package/src/webapi/featureBuilderAPI.js +65 -0
  117. package/src/webapi/helper.js +4 -0
  118. package/src/webapi/index.js +8 -0
@@ -0,0 +1,193 @@
1
+ import React, { useState, useRef, useEffect } from "react";
2
+ import {
3
+ View,
4
+ Text,
5
+ StyleSheet,
6
+ FlatList,
7
+ TouchableOpacity,
8
+ Image,
9
+ Dimensions,
10
+ Animated,
11
+ } from "react-native";
12
+ import { Icon } from "react-native-elements";
13
+ import { Components, Colours } from "../../core.config";
14
+ import { values } from "../../values.config";
15
+ import { getSummaryFieldValue } from "../../js/helpers";
16
+
17
+ const { width: screenWidth } = Dimensions.get("window");
18
+ const CARD_WIDTH = screenWidth - 32; // 16px padding on each side
19
+ const IMAGE_HEIGHT = (CARD_WIDTH * 9) / 16; // 16:9 aspect ratio
20
+
21
+ const getEmptyStateMessage = (title) => {
22
+ const featureName = title || "Feature";
23
+ return `${featureName} listings will appear here once they're available.\nCome back soon to see what's new!`;
24
+ };
25
+
26
+ const FeatureImageList = ({
27
+ listings,
28
+ onItemPress,
29
+ colourBrandingMain,
30
+ refreshing,
31
+ onRefresh,
32
+ featureDefinition,
33
+ title,
34
+ }) => {
35
+ const getImageSource = (imageField) => {
36
+ if (!imageField) return null;
37
+
38
+ // Handle different image field formats
39
+ if (typeof imageField === "string") {
40
+ return { uri: imageField };
41
+ }
42
+
43
+ if (typeof imageField === "object" && imageField.uri) {
44
+ return imageField;
45
+ }
46
+
47
+ if (typeof imageField === "object" && imageField.url) {
48
+ return { uri: imageField.url };
49
+ }
50
+
51
+ return null;
52
+ };
53
+
54
+ const renderListingItem = ({ item: listing }) => {
55
+ const title = listing.fields?.[values.mandatoryFields.title] || "Untitled";
56
+ const summary = getSummaryFieldValue(listing, featureDefinition);
57
+ const imageField = listing.fields?.[values.mandatoryFields.featureImage];
58
+ const imageSource = getImageSource(imageField);
59
+
60
+ return (
61
+ <TouchableOpacity
62
+ style={styles.cardContainer}
63
+ onPress={() => onItemPress && onItemPress(listing)}
64
+ >
65
+ <View style={styles.imageContainer}>
66
+ {imageSource ? (
67
+ <Image source={imageSource} style={styles.featureImage} />
68
+ ) : (
69
+ <View style={[styles.featureImage, styles.placeholderImage]}>
70
+ <Text style={styles.placeholderText}>No Image</Text>
71
+ </View>
72
+ )}
73
+ </View>
74
+ <View style={styles.contentContainer}>
75
+ <Text style={styles.cardTitle} numberOfLines={2}>
76
+ {title}
77
+ </Text>
78
+ {summary && (
79
+ <Text style={styles.cardSummary} numberOfLines={2}>
80
+ {summary}
81
+ </Text>
82
+ )}
83
+ </View>
84
+ </TouchableOpacity>
85
+ );
86
+ };
87
+
88
+ if (!listings || listings.length === 0) {
89
+ return (
90
+ <View style={styles.emptyContainer}>
91
+ <Components.EmptyStateWidget
92
+ title={getEmptyStateMessage(title)}
93
+ height={120}
94
+ />
95
+ </View>
96
+ );
97
+ }
98
+
99
+ if (onRefresh) {
100
+ return (
101
+ <View style={styles.container}>
102
+ <Components.LoadingIndicator visible={refreshing} />
103
+ <FlatList
104
+ data={listings}
105
+ keyExtractor={(item) => item.id}
106
+ renderItem={renderListingItem}
107
+ contentContainerStyle={styles.listContainer}
108
+ showsVerticalScrollIndicator={false}
109
+ />
110
+ </View>
111
+ );
112
+ }
113
+
114
+ return (
115
+ <View style={styles.container}>
116
+ <FlatList
117
+ data={listings}
118
+ keyExtractor={(item) => item.id}
119
+ renderItem={renderListingItem}
120
+ contentContainerStyle={styles.listContainer}
121
+ showsVerticalScrollIndicator={false}
122
+ />
123
+ </View>
124
+ );
125
+ };
126
+
127
+ const styles = StyleSheet.create({
128
+ container: {
129
+ flex: 1,
130
+ backgroundColor: "#f5f5f5",
131
+ },
132
+ listContainer: {
133
+ padding: 16,
134
+ },
135
+ cardContainer: {
136
+ backgroundColor: "#fff",
137
+ borderRadius: 8,
138
+ marginBottom: 16,
139
+ shadowColor: "#000",
140
+ shadowOffset: {
141
+ width: 0,
142
+ height: 2,
143
+ },
144
+ shadowOpacity: 0.1,
145
+ shadowRadius: 4,
146
+ elevation: 3,
147
+ overflow: "hidden",
148
+ },
149
+ imageContainer: {
150
+ width: CARD_WIDTH,
151
+ height: IMAGE_HEIGHT,
152
+ },
153
+ featureImage: {
154
+ width: "100%",
155
+ height: "100%",
156
+ backgroundColor: "#f0f0f0",
157
+ },
158
+ placeholderImage: {
159
+ justifyContent: "center",
160
+ alignItems: "center",
161
+ backgroundColor: "#e0e0e0",
162
+ },
163
+ placeholderText: {
164
+ fontSize: 16,
165
+ color: "#999",
166
+ fontFamily: "sf-medium",
167
+ },
168
+ contentContainer: {
169
+ padding: 16,
170
+ },
171
+ cardTitle: {
172
+ fontSize: 18,
173
+ fontWeight: "600",
174
+ fontFamily: "sf-semibold",
175
+ color: "#333",
176
+ marginBottom: 8,
177
+ lineHeight: 24,
178
+ },
179
+ cardSummary: {
180
+ fontSize: 14,
181
+ fontFamily: "sf-regular",
182
+ color: "#666",
183
+ lineHeight: 18,
184
+ },
185
+ emptyContainer: {
186
+ flex: 1,
187
+ justifyContent: "center",
188
+ alignItems: "center",
189
+ paddingVertical: 32,
190
+ },
191
+ });
192
+
193
+ export default FeatureImageList;
@@ -0,0 +1,219 @@
1
+ import React from "react";
2
+ import {
3
+ View,
4
+ Text,
5
+ Image,
6
+ StyleSheet,
7
+ TouchableOpacity,
8
+ FlatList,
9
+ } from "react-native";
10
+ import { Icon } from "react-native-elements";
11
+ import { Components } from "../../core.config";
12
+ import { values } from "../../values.config";
13
+ import { SPACING } from "../../js/spacing";
14
+ import { getSummaryFieldValue } from "../../js/helpers";
15
+
16
+ const getEmptyStateMessage = (title) => {
17
+ const featureName = title || "Feature";
18
+ return `${featureName} listings will appear here once they're available.\nCome back soon to see what's new!`;
19
+ };
20
+
21
+ const RoundImageList = ({
22
+ listings,
23
+ onItemPress,
24
+ colourBrandingMain,
25
+ refreshing,
26
+ onRefresh,
27
+ title,
28
+ featureDefinition,
29
+ }) => {
30
+ const getImageSource = (imageField) => {
31
+ if (!imageField) {
32
+ return null;
33
+ }
34
+
35
+ // Handle different image field formats
36
+ if (typeof imageField === "string") {
37
+ return { uri: imageField };
38
+ }
39
+
40
+ if (typeof imageField === "object" && imageField.uri) {
41
+ return imageField;
42
+ }
43
+
44
+ if (typeof imageField === "object" && imageField.url) {
45
+ return { uri: imageField.url };
46
+ }
47
+
48
+ return null;
49
+ };
50
+
51
+ const renderListingItem = ({ item: listing }) => {
52
+ const title = listing.fields?.[values.mandatoryFields.title] || "Untitled";
53
+ const summary = getSummaryFieldValue(listing, featureDefinition);
54
+ const imageField = listing.fields?.[values.mandatoryFields.featureImage];
55
+
56
+ const imageSource = getImageSource(imageField);
57
+
58
+ return (
59
+ <TouchableOpacity
60
+ style={styles.cardContainer}
61
+ onPress={() => onItemPress && onItemPress(listing)}
62
+ >
63
+ <View style={styles.borderContainer}>
64
+ {imageSource ? (
65
+ <Image source={imageSource} style={styles.roundImage} />
66
+ ) : (
67
+ <View style={[styles.roundImage, styles.placeholderImage]}></View>
68
+ )}
69
+ <View style={styles.contentContainer}>
70
+ <View style={styles.textContainer}>
71
+ <Text style={styles.titleText} numberOfLines={1}>
72
+ {title}
73
+ </Text>
74
+ <Text style={styles.descriptionText} numberOfLines={2}>
75
+ {summary}
76
+ </Text>
77
+ </View>
78
+ <View style={styles.chevronContainer}>
79
+ <Icon
80
+ type="font-awesome"
81
+ name="chevron-right"
82
+ size={16}
83
+ color="#ccc"
84
+ style={styles.chevron}
85
+ />
86
+ </View>
87
+ </View>
88
+ </View>
89
+ </TouchableOpacity>
90
+ );
91
+ };
92
+
93
+ if (!listings || listings.length === 0) {
94
+ return (
95
+ <View style={styles.emptyContainer}>
96
+ <Components.EmptyStateWidget
97
+ title={getEmptyStateMessage(title)}
98
+ height={120}
99
+ />
100
+ </View>
101
+ );
102
+ }
103
+
104
+ if (onRefresh) {
105
+ return (
106
+ <View style={styles.container}>
107
+ <Components.LoadingIndicator visible={refreshing} />
108
+ <FlatList
109
+ data={listings}
110
+ keyExtractor={(item) => item.id}
111
+ renderItem={renderListingItem}
112
+ contentContainerStyle={styles.scrollContainer}
113
+ showsVerticalScrollIndicator={false}
114
+ />
115
+ </View>
116
+ );
117
+ }
118
+
119
+ return (
120
+ <FlatList
121
+ data={listings}
122
+ keyExtractor={(item) => item.id}
123
+ renderItem={renderListingItem}
124
+ contentContainerStyle={styles.scrollContainer}
125
+ showsVerticalScrollIndicator={false}
126
+ />
127
+ );
128
+ };
129
+
130
+ const styles = StyleSheet.create({
131
+ container: {
132
+ flex: 1,
133
+ },
134
+ scrollContainer: {
135
+ paddingLeft: SPACING.XL + 16,
136
+ paddingRight: SPACING.MD,
137
+ paddingVertical: SPACING.SM,
138
+ },
139
+ cardContainer: {
140
+ paddingHorizontal: SPACING.SM + 2,
141
+ paddingVertical: SPACING.SM,
142
+ },
143
+ borderContainer: {
144
+ borderRadius: SPACING.SM * 1,
145
+ backgroundColor: "#ffffff",
146
+ shadowColor: "#000",
147
+ shadowOffset: {
148
+ width: 0,
149
+ height: 2,
150
+ },
151
+ shadowOpacity: 0.1,
152
+ shadowRadius: 3.84,
153
+ elevation: 5,
154
+ position: "relative",
155
+ minHeight: 100,
156
+ justifyContent: "center",
157
+ paddingLeft: SPACING.XL + 8,
158
+ paddingRight: SPACING.SM,
159
+ },
160
+ roundImage: {
161
+ width: 88,
162
+ height: 88,
163
+ borderRadius: 44,
164
+ backgroundColor: "#f0f0f0",
165
+ position: "absolute",
166
+ borderWidth: 2,
167
+ borderColor: "#fff",
168
+ left: -44,
169
+ top: "50%",
170
+ marginTop: -44,
171
+ shadowColor: "#000",
172
+ shadowOffset: {
173
+ width: 0,
174
+ height: 2,
175
+ },
176
+ shadowOpacity: 0.1,
177
+ shadowRadius: 3.84,
178
+ elevation: 6,
179
+ },
180
+ placeholderImage: {
181
+ backgroundColor: "#808080",
182
+ justifyContent: "center",
183
+ alignItems: "center",
184
+ },
185
+ contentContainer: {
186
+ flex: 1,
187
+ flexDirection: "row",
188
+ alignItems: "center",
189
+ },
190
+ textContainer: {
191
+ flex: 1,
192
+ paddingLeft: SPACING.MD,
193
+ paddingVertical: SPACING.SM + 4,
194
+ },
195
+ titleText: {
196
+ fontSize: 20,
197
+ fontFamily: "sf-medium",
198
+ color: "#333",
199
+ marginBottom: SPACING.XS,
200
+ },
201
+ descriptionText: {
202
+ fontFamily: "sf-regular",
203
+ fontSize: 14,
204
+ color: "#666",
205
+ lineHeight: 18,
206
+ },
207
+ emptyContainer: {
208
+ paddingVertical: SPACING.MD,
209
+ },
210
+ chevronContainer: {
211
+ justifyContent: "center",
212
+ paddingHorizontal: SPACING.SM,
213
+ },
214
+ chevron: {
215
+ opacity: 0.6,
216
+ },
217
+ });
218
+
219
+ export default RoundImageList;
@@ -0,0 +1,205 @@
1
+ import React from "react";
2
+ import {
3
+ View,
4
+ Text,
5
+ Image,
6
+ StyleSheet,
7
+ TouchableOpacity,
8
+ FlatList,
9
+ } from "react-native";
10
+ import { Icon } from "react-native-elements";
11
+ import { Components } from "../../core.config";
12
+ import { values } from "../../values.config";
13
+ import { SPACING } from "../../js/spacing";
14
+ import { getSummaryFieldValue } from "../../js/helpers";
15
+
16
+ const getEmptyStateMessage = (title) => {
17
+ const featureName = title || "Feature";
18
+ return `${featureName} listings will appear here once they're available.\nCome back soon to see what's new!`;
19
+ };
20
+
21
+ const SquareImageList = ({
22
+ listings,
23
+ onItemPress,
24
+ colourBrandingMain,
25
+ refreshing,
26
+ onRefresh,
27
+ title,
28
+ featureDefinition,
29
+ }) => {
30
+ const getImageSource = (imageField) => {
31
+ if (!imageField) return null;
32
+
33
+ // Handle different image field formats
34
+ if (typeof imageField === "string") {
35
+ return { uri: imageField };
36
+ }
37
+
38
+ if (typeof imageField === "object" && imageField.uri) {
39
+ return imageField;
40
+ }
41
+
42
+ if (typeof imageField === "object" && imageField.url) {
43
+ return { uri: imageField.url };
44
+ }
45
+
46
+ return null;
47
+ };
48
+
49
+ const renderListingItem = ({ item: listing }) => {
50
+ const title = listing.fields?.[values.mandatoryFields.title] || "Untitled";
51
+ const summary = getSummaryFieldValue(listing, featureDefinition);
52
+ const imageField = listing.fields?.[values.mandatoryFields.featureImage];
53
+ const imageSource = getImageSource(imageField);
54
+
55
+ return (
56
+ <TouchableOpacity
57
+ style={styles.cardContainer}
58
+ onPress={() => onItemPress && onItemPress(listing)}
59
+ >
60
+ <View style={styles.borderContainer}>
61
+ {imageSource ? (
62
+ <Image source={imageSource} style={styles.squareImage} />
63
+ ) : (
64
+ <View style={[styles.squareImage, styles.placeholderImage]}></View>
65
+ )}
66
+ <View style={styles.contentContainer}>
67
+ <View style={styles.textContainer}>
68
+ <Text style={styles.titleText} numberOfLines={1}>
69
+ {title}
70
+ </Text>
71
+ <Text style={styles.descriptionText} numberOfLines={2}>
72
+ {summary}
73
+ </Text>
74
+ </View>
75
+ <View style={styles.chevronContainer}>
76
+ <Icon
77
+ type="font-awesome"
78
+ name="chevron-right"
79
+ size={16}
80
+ color="#ccc"
81
+ style={styles.chevron}
82
+ />
83
+ </View>
84
+ </View>
85
+ </View>
86
+ </TouchableOpacity>
87
+ );
88
+ };
89
+
90
+ if (!listings || listings.length === 0) {
91
+ return (
92
+ <View style={styles.emptyContainer}>
93
+ <Components.EmptyStateWidget
94
+ title={getEmptyStateMessage(title)}
95
+ height={120}
96
+ />
97
+ </View>
98
+ );
99
+ }
100
+
101
+ if (onRefresh) {
102
+ return (
103
+ <View style={styles.container}>
104
+ <Components.LoadingIndicator visible={refreshing} />
105
+ <FlatList
106
+ data={listings}
107
+ keyExtractor={(item) => item.id}
108
+ renderItem={renderListingItem}
109
+ contentContainerStyle={styles.scrollContainer}
110
+ showsVerticalScrollIndicator={false}
111
+ />
112
+ </View>
113
+ );
114
+ }
115
+
116
+ return (
117
+ <FlatList
118
+ data={listings}
119
+ keyExtractor={(item) => item.id}
120
+ renderItem={renderListingItem}
121
+ contentContainerStyle={styles.scrollContainer}
122
+ showsVerticalScrollIndicator={false}
123
+ />
124
+ );
125
+ };
126
+
127
+ const styles = StyleSheet.create({
128
+ container: {
129
+ flex: 1,
130
+ },
131
+ scrollContainer: {
132
+ paddingHorizontal: SPACING.MD,
133
+ paddingVertical: SPACING.MD,
134
+ },
135
+ cardContainer: {
136
+ marginBottom: SPACING.MD,
137
+ backgroundColor: "#ffffff",
138
+ shadowColor: "#000",
139
+ shadowOffset: {
140
+ width: 0,
141
+ height: 2,
142
+ },
143
+ shadowOpacity: 0.1,
144
+ shadowRadius: 3.84,
145
+ },
146
+ borderContainer: {
147
+ borderRadius: SPACING.XS,
148
+ backgroundColor: "#ffffff",
149
+ shadowColor: "#000",
150
+ shadowOffset: {
151
+ width: 0,
152
+ height: 4,
153
+ },
154
+ shadowOpacity: 0.15,
155
+ shadowRadius: 8,
156
+ elevation: 4,
157
+ flexDirection: "row",
158
+ alignItems: "center",
159
+ overflow: "hidden",
160
+ minHeight: 100,
161
+ paddingRight: SPACING.SM,
162
+ },
163
+ squareImage: {
164
+ height: 100,
165
+ aspectRatio: 1,
166
+ backgroundColor: "#f0f0f0",
167
+ marginRight: SPACING.MD,
168
+ },
169
+ placeholderImage: {
170
+ backgroundColor: "#808080",
171
+ justifyContent: "center",
172
+ },
173
+ contentContainer: {
174
+ flex: 1,
175
+ flexDirection: "row",
176
+ alignItems: "center",
177
+ },
178
+ textContainer: {
179
+ flex: 1,
180
+ },
181
+ titleText: {
182
+ fontSize: 18,
183
+ fontFamily: "sf-medium",
184
+ color: "#333",
185
+ marginBottom: SPACING.XS,
186
+ },
187
+ descriptionText: {
188
+ fontFamily: "sf-regular",
189
+ fontSize: 14,
190
+ color: "#666",
191
+ lineHeight: 18,
192
+ },
193
+ emptyContainer: {
194
+ paddingVertical: SPACING.MD,
195
+ },
196
+ chevronContainer: {
197
+ justifyContent: "center",
198
+ paddingHorizontal: SPACING.SM,
199
+ },
200
+ chevron: {
201
+ opacity: 0.6,
202
+ },
203
+ });
204
+
205
+ export default SquareImageList;
@@ -0,0 +1,10 @@
1
+ import { Config } from "../core.config";
2
+
3
+ export const CONST_STRINGS = {
4
+ EMPTY_GROUPS: "You aren't in any Circles",
5
+ EMPTY_PEOPLE: "Contacts will show here",
6
+ };
7
+ export const getTinyChatDefault = () => Config.env.tinyChatDefault;
8
+ export const getNewEventDefaults = () => Config.env.newEventDefaults;
9
+
10
+ // TODO: Add configurations as required
@@ -0,0 +1,29 @@
1
+ // import * as PlussCore from '../../pluss-core/src';
2
+ import * as PlussCore from "@plusscommunities/pluss-core-app";
3
+
4
+ const {
5
+ Apis,
6
+ Fonts,
7
+ Actions,
8
+ ActionTypes,
9
+ Config,
10
+ Components,
11
+ Styles,
12
+ Session,
13
+ Helper,
14
+ Constants,
15
+ Colours,
16
+ } = PlussCore;
17
+ export {
18
+ Apis,
19
+ Fonts,
20
+ Actions,
21
+ ActionTypes,
22
+ Config,
23
+ Components,
24
+ Styles,
25
+ Session,
26
+ Helper,
27
+ Constants,
28
+ Colours,
29
+ };