@plusscommunities/pluss-maintenance-app-forms 8.0.8 → 8.0.9-beta.2
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/core.config.js +1 -2
- package/dist/module/core.config.js.map +1 -1
- package/dist/module/screens/MaintenanceUserPicker.js +104 -18
- package/dist/module/screens/MaintenanceUserPicker.js.map +1 -1
- package/package.json +2 -2
- package/src/core.config.js +0 -2
- package/src/screens/MaintenanceUserPicker.js +98 -16
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
import * as PlussCore from "@plusscommunities/pluss-core-app";
|
|
3
3
|
const {
|
|
4
4
|
Apis,
|
|
5
|
-
Fonts,
|
|
6
5
|
Actions,
|
|
7
6
|
ActionTypes,
|
|
8
7
|
Config,
|
|
@@ -13,5 +12,5 @@ const {
|
|
|
13
12
|
Constants,
|
|
14
13
|
Colours
|
|
15
14
|
} = PlussCore;
|
|
16
|
-
export { Apis,
|
|
15
|
+
export { Apis, Actions, ActionTypes, Config, Components, Styles, Session, Helper, Constants, Colours };
|
|
17
16
|
//# sourceMappingURL=core.config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["PlussCore","Apis","
|
|
1
|
+
{"version":3,"names":["PlussCore","Apis","Actions","ActionTypes","Config","Components","Styles","Session","Helper","Constants","Colours"],"sources":["core.config.js"],"sourcesContent":["// import * as PlussCore from '../../pluss-core/src';\nimport * as PlussCore from \"@plusscommunities/pluss-core-app\";\n\nconst {\n\tApis,\n\tActions,\n\tActionTypes,\n\tConfig,\n\tComponents,\n\tStyles,\n\tSession,\n\tHelper,\n\tConstants,\n\tColours,\n} = PlussCore;\nexport {\n\tApis,\n\tActions,\n\tActionTypes,\n\tConfig,\n\tComponents,\n\tStyles,\n\tSession,\n\tHelper,\n\tConstants,\n\tColours,\n};\n"],"mappings":"AAAA;AACA,OAAO,KAAKA,SAAS,MAAM,kCAAkC;AAE7D,MAAM;EACLC,IAAI;EACJC,OAAO;EACPC,WAAW;EACXC,MAAM;EACNC,UAAU;EACVC,MAAM;EACNC,OAAO;EACPC,MAAM;EACNC,SAAS;EACTC;AACD,CAAC,GAAGV,SAAS;AACb,SACCC,IAAI,EACJC,OAAO,EACPC,WAAW,EACXC,MAAM,EACNC,UAAU,EACVC,MAAM,EACNC,OAAO,EACPC,MAAM,EACNC,SAAS,EACTC,OAAO","ignoreList":[]}
|
|
@@ -3,7 +3,7 @@ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol"
|
|
|
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
4
|
import React, { Component } from "react";
|
|
5
5
|
import _ from "lodash";
|
|
6
|
-
import { TouchableOpacity, View, ScrollView, Text } from "react-native";
|
|
6
|
+
import { TouchableOpacity, View, ScrollView, Text, TextInput, Keyboard } from "react-native";
|
|
7
7
|
import { connect } from "react-redux";
|
|
8
8
|
import { Icon } from "@rneui/themed";
|
|
9
9
|
import { Services } from "../feature.config";
|
|
@@ -12,7 +12,29 @@ class MaintenanceUserPicker extends Component {
|
|
|
12
12
|
constructor(...args) {
|
|
13
13
|
super(...args);
|
|
14
14
|
_defineProperty(this, "state", {
|
|
15
|
-
currentUser: null
|
|
15
|
+
currentUser: null,
|
|
16
|
+
searchText: ""
|
|
17
|
+
});
|
|
18
|
+
_defineProperty(this, "onChangeSearch", text => {
|
|
19
|
+
this.setState({
|
|
20
|
+
searchText: text
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
_defineProperty(this, "getFilteredUsers", () => {
|
|
24
|
+
const {
|
|
25
|
+
searchText
|
|
26
|
+
} = this.state;
|
|
27
|
+
const {
|
|
28
|
+
users
|
|
29
|
+
} = this.props;
|
|
30
|
+
if (!users) return [];
|
|
31
|
+
if (!searchText || searchText.length === 0) return users;
|
|
32
|
+
const searchLower = searchText.toLowerCase();
|
|
33
|
+
return users.filter(user => {
|
|
34
|
+
const displayName = (user.displayName || "").toLowerCase();
|
|
35
|
+
const unit = (user.unit || "").toLowerCase();
|
|
36
|
+
return displayName.includes(searchLower) || unit.includes(searchLower);
|
|
37
|
+
});
|
|
16
38
|
});
|
|
17
39
|
}
|
|
18
40
|
UNSAFE_componentWillMount() {
|
|
@@ -24,6 +46,7 @@ class MaintenanceUserPicker extends Component {
|
|
|
24
46
|
Services.navigation.goBack();
|
|
25
47
|
}
|
|
26
48
|
onUserPress(user) {
|
|
49
|
+
Keyboard.dismiss();
|
|
27
50
|
this.props.onSelectUser(user);
|
|
28
51
|
this.setState({
|
|
29
52
|
currentUser: user
|
|
@@ -40,14 +63,22 @@ class MaintenanceUserPicker extends Component {
|
|
|
40
63
|
}
|
|
41
64
|
}, /*#__PURE__*/React.createElement(Components.Spinner, null));
|
|
42
65
|
}
|
|
66
|
+
const filteredUsers = this.getFilteredUsers();
|
|
67
|
+
if (filteredUsers.length === 0 && this.state.searchText.length > 0) {
|
|
68
|
+
return /*#__PURE__*/React.createElement(View, {
|
|
69
|
+
style: styles.noResultsContainer
|
|
70
|
+
}, /*#__PURE__*/React.createElement(Text, {
|
|
71
|
+
style: styles.noResultsText
|
|
72
|
+
}, "No users found"));
|
|
73
|
+
}
|
|
43
74
|
return /*#__PURE__*/React.createElement(Components.FormCard, {
|
|
44
75
|
style: {
|
|
45
76
|
marginTop: 16
|
|
46
77
|
}
|
|
47
|
-
}, this.renderOptions());
|
|
78
|
+
}, this.renderOptions(filteredUsers));
|
|
48
79
|
}
|
|
49
|
-
renderOptions() {
|
|
50
|
-
return
|
|
80
|
+
renderOptions(users) {
|
|
81
|
+
return users.map((user, index) => {
|
|
51
82
|
return /*#__PURE__*/React.createElement(TouchableOpacity, {
|
|
52
83
|
key: index,
|
|
53
84
|
onPress: this.onUserPress.bind(this, user)
|
|
@@ -80,6 +111,31 @@ class MaintenanceUserPicker extends Component {
|
|
|
80
111
|
}))));
|
|
81
112
|
});
|
|
82
113
|
}
|
|
114
|
+
renderSearch() {
|
|
115
|
+
return /*#__PURE__*/React.createElement(View, {
|
|
116
|
+
style: styles.searchContainer
|
|
117
|
+
}, /*#__PURE__*/React.createElement(Icon, {
|
|
118
|
+
name: "search",
|
|
119
|
+
type: "font-awesome",
|
|
120
|
+
iconStyle: styles.searchIcon
|
|
121
|
+
}), /*#__PURE__*/React.createElement(TextInput, {
|
|
122
|
+
placeholder: "Search by name or unit",
|
|
123
|
+
autoCorrect: false,
|
|
124
|
+
placeholderTextColor: Colours.TEXT_MID_ALPHA50,
|
|
125
|
+
onChangeText: this.onChangeSearch,
|
|
126
|
+
value: this.state.searchText,
|
|
127
|
+
style: styles.searchText,
|
|
128
|
+
underlineColorAndroid: Colours.COLOUR_TRANSPARENT,
|
|
129
|
+
returnKeyType: "search"
|
|
130
|
+
}), this.state.searchText.length > 0 && /*#__PURE__*/React.createElement(TouchableOpacity, {
|
|
131
|
+
onPress: () => this.onChangeSearch(""),
|
|
132
|
+
style: styles.clearButton
|
|
133
|
+
}, /*#__PURE__*/React.createElement(Icon, {
|
|
134
|
+
name: "times-circle",
|
|
135
|
+
type: "font-awesome",
|
|
136
|
+
iconStyle: styles.clearIcon
|
|
137
|
+
})));
|
|
138
|
+
}
|
|
83
139
|
render() {
|
|
84
140
|
return /*#__PURE__*/React.createElement(View, {
|
|
85
141
|
style: styles.container
|
|
@@ -87,10 +143,12 @@ class MaintenanceUserPicker extends Component {
|
|
|
87
143
|
leftIcon: "angle-left",
|
|
88
144
|
onPressLeft: this.onPressBack.bind(this),
|
|
89
145
|
text: "Select user"
|
|
90
|
-
}), /*#__PURE__*/React.createElement(ScrollView, {
|
|
146
|
+
}), this.renderSearch(), /*#__PURE__*/React.createElement(ScrollView, {
|
|
91
147
|
style: {
|
|
92
148
|
flex: 1
|
|
93
|
-
}
|
|
149
|
+
},
|
|
150
|
+
keyboardShouldPersistTaps: "handled",
|
|
151
|
+
keyboardDismissMode: "on-drag"
|
|
94
152
|
}, this.renderMain()));
|
|
95
153
|
}
|
|
96
154
|
}
|
|
@@ -100,17 +158,6 @@ const styles = {
|
|
|
100
158
|
position: "relative",
|
|
101
159
|
backgroundColor: "#f0f0f5"
|
|
102
160
|
},
|
|
103
|
-
row: {
|
|
104
|
-
flexDirection: "row",
|
|
105
|
-
alignItems: "center",
|
|
106
|
-
minHeight: 22
|
|
107
|
-
},
|
|
108
|
-
text: {
|
|
109
|
-
flex: 1,
|
|
110
|
-
fontFamily: "sf-regular",
|
|
111
|
-
fontSize: 14,
|
|
112
|
-
color: Colours.TEXT_DARK
|
|
113
|
-
},
|
|
114
161
|
rowContainer: {
|
|
115
162
|
flexDirection: "row",
|
|
116
163
|
justifyContent: "space-between"
|
|
@@ -124,6 +171,45 @@ const styles = {
|
|
|
124
171
|
fontSize: 16,
|
|
125
172
|
color: Colours.TEXT_DARK,
|
|
126
173
|
marginLeft: 8
|
|
174
|
+
},
|
|
175
|
+
searchContainer: {
|
|
176
|
+
flexDirection: "row",
|
|
177
|
+
alignItems: "center",
|
|
178
|
+
margin: 15,
|
|
179
|
+
backgroundColor: "#fff",
|
|
180
|
+
borderRadius: 8,
|
|
181
|
+
paddingHorizontal: 12,
|
|
182
|
+
paddingVertical: 8
|
|
183
|
+
},
|
|
184
|
+
searchIcon: {
|
|
185
|
+
fontSize: 16,
|
|
186
|
+
marginRight: 10,
|
|
187
|
+
color: Colours.TEXT_MID_ALPHA50
|
|
188
|
+
},
|
|
189
|
+
searchText: {
|
|
190
|
+
flex: 1,
|
|
191
|
+
fontSize: 16,
|
|
192
|
+
fontFamily: "sf-regular",
|
|
193
|
+
color: Colours.TEXT_DARK,
|
|
194
|
+
padding: 0
|
|
195
|
+
},
|
|
196
|
+
clearButton: {
|
|
197
|
+
padding: 4
|
|
198
|
+
},
|
|
199
|
+
clearIcon: {
|
|
200
|
+
fontSize: 16,
|
|
201
|
+
color: Colours.TEXT_MID_ALPHA50
|
|
202
|
+
},
|
|
203
|
+
noResultsContainer: {
|
|
204
|
+
alignItems: "center",
|
|
205
|
+
justifyContent: "center",
|
|
206
|
+
paddingVertical: 40
|
|
207
|
+
},
|
|
208
|
+
noResultsText: {
|
|
209
|
+
fontSize: 16,
|
|
210
|
+
fontFamily: "sf-regular",
|
|
211
|
+
color: Colours.TEXT_LIGHT,
|
|
212
|
+
textAlign: "center"
|
|
127
213
|
}
|
|
128
214
|
};
|
|
129
215
|
export default connect(null, {})(MaintenanceUserPicker);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Component","_","TouchableOpacity","View","ScrollView","Text","connect","Icon","Services","Components","Colours","MaintenanceUserPicker","constructor","args","_defineProperty","currentUser","UNSAFE_componentWillMount","setState","props","onPressBack","navigation","goBack","onUserPress","user","onSelectUser","setTimeout","renderMain","isEmpty","users","createElement","style","marginTop","Spinner","FormCard","renderOptions","map","index","key","onPress","bind","FormCardSection","label","displayName","labelStyle","height","margin","hasUnderline","hasContent","styles","rowContainer","userContainer","ProfilePic","profilePic","Diameter","labelText","name","type","iconStyle","color","fontSize","isEqual","state","COLOUR_GREEN","render","container","Header","leftIcon","onPressLeft","text","flex","position","backgroundColor","row","flexDirection","alignItems","minHeight","fontFamily","TEXT_DARK","justifyContent","marginLeft"],"sources":["MaintenanceUserPicker.js"],"sourcesContent":["import React, { Component } from \"react\";\nimport _ from \"lodash\";\nimport { TouchableOpacity, View, ScrollView, Text } from \"react-native\";\nimport { connect } from \"react-redux\";\nimport { Icon } from \"@rneui/themed\";\nimport { Services } from \"../feature.config\";\nimport { Components, Colours } from \"../core.config\";\n\nclass MaintenanceUserPicker extends Component {\n\tstate = {\n\t\tcurrentUser: null,\n\t};\n\n\tUNSAFE_componentWillMount() {\n\t\tthis.setState({ currentUser: this.props.currentUser });\n\t}\n\n\tonPressBack() {\n\t\tServices.navigation.goBack();\n\t}\n\n\tonUserPress(user) {\n\t\tthis.props.onSelectUser(user);\n\t\tthis.setState({ currentUser: user });\n\t\tsetTimeout(() => {\n\t\t\tthis.onPressBack();\n\t\t}, 200);\n\t}\n\n\trenderMain() {\n\t\tif (_.isEmpty(this.props.users)) {\n\t\t\treturn (\n\t\t\t\t<View style={{ marginTop: 16 }}>\n\t\t\t\t\t<Components.Spinner />\n\t\t\t\t</View>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<Components.FormCard style={{ marginTop: 16 }}>\n\t\t\t\t{this.renderOptions()}\n\t\t\t</Components.FormCard>\n\t\t);\n\t}\n\n\trenderOptions() {\n\t\treturn this.props.users.map((user, index) => {\n\t\t\treturn (\n\t\t\t\t<TouchableOpacity\n\t\t\t\t\tkey={index}\n\t\t\t\t\tonPress={this.onUserPress.bind(this, user)}\n\t\t\t\t>\n\t\t\t\t\t<Components.FormCardSection\n\t\t\t\t\t\tlabel={user.displayName}\n\t\t\t\t\t\tlabelStyle={{ height: 0, margin: 0 }}\n\t\t\t\t\t\thasUnderline\n\t\t\t\t\t\thasContent\n\t\t\t\t\t>\n\t\t\t\t\t\t<View style={styles.rowContainer}>\n\t\t\t\t\t\t\t<View style={styles.userContainer}>\n\t\t\t\t\t\t\t\t<Components.ProfilePic\n\t\t\t\t\t\t\t\t\tProfilePic={user.profilePic}\n\t\t\t\t\t\t\t\t\tDiameter={30}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<Text style={styles.labelText}>{user.displayName}</Text>\n\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\tname=\"check-circle\"\n\t\t\t\t\t\t\t\ttype=\"font-awesome\"\n\t\t\t\t\t\t\t\ticonStyle={[\n\t\t\t\t\t\t\t\t\t{ color: \"#d5d9e0\", fontSize: 20 },\n\t\t\t\t\t\t\t\t\t_.isEqual(user, this.state.currentUser) && {\n\t\t\t\t\t\t\t\t\t\tcolor: Colours.COLOUR_GREEN,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</View>\n\t\t\t\t\t</Components.FormCardSection>\n\t\t\t\t</TouchableOpacity>\n\t\t\t);\n\t\t});\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t<View style={styles.container}>\n\t\t\t\t<Components.Header\n\t\t\t\t\tleftIcon=\"angle-left\"\n\t\t\t\t\tonPressLeft={this.onPressBack.bind(this)}\n\t\t\t\t\ttext=\"Select user\"\n\t\t\t\t/>\n\t\t\t\t<ScrollView style={{ flex: 1 }}>{this.renderMain()}</ScrollView>\n\t\t\t</View>\n\t\t);\n\t}\n}\n\nconst styles = {\n\tcontainer: {\n\t\tflex: 1,\n\t\tposition: \"relative\",\n\t\tbackgroundColor: \"#f0f0f5\",\n\t},\n\trow: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tminHeight: 22,\n\t},\n\ttext: {\n\t\tflex: 1,\n\t\tfontFamily: \"sf-regular\",\n\t\tfontSize: 14,\n\t\tcolor: Colours.TEXT_DARK,\n\t},\n\trowContainer: {\n\t\tflexDirection: \"row\",\n\t\tjustifyContent: \"space-between\",\n\t},\n\tuserContainer: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t},\n\tlabelText: {\n\t\tfontFamily: \"sf-medium\",\n\t\tfontSize: 16,\n\t\tcolor: Colours.TEXT_DARK,\n\t\tmarginLeft: 8,\n\t},\n};\n\nexport default connect(null, {})(MaintenanceUserPicker);\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["React","Component","_","TouchableOpacity","View","ScrollView","Text","TextInput","Keyboard","connect","Icon","Services","Components","Colours","MaintenanceUserPicker","constructor","args","_defineProperty","currentUser","searchText","text","setState","state","users","props","length","searchLower","toLowerCase","filter","user","displayName","unit","includes","UNSAFE_componentWillMount","onPressBack","navigation","goBack","onUserPress","dismiss","onSelectUser","setTimeout","renderMain","isEmpty","createElement","style","marginTop","Spinner","filteredUsers","getFilteredUsers","styles","noResultsContainer","noResultsText","FormCard","renderOptions","map","index","key","onPress","bind","FormCardSection","label","labelStyle","height","margin","hasUnderline","hasContent","rowContainer","userContainer","ProfilePic","profilePic","Diameter","labelText","name","type","iconStyle","color","fontSize","isEqual","COLOUR_GREEN","renderSearch","searchContainer","searchIcon","placeholder","autoCorrect","placeholderTextColor","TEXT_MID_ALPHA50","onChangeText","onChangeSearch","value","underlineColorAndroid","COLOUR_TRANSPARENT","returnKeyType","clearButton","clearIcon","render","container","Header","leftIcon","onPressLeft","flex","keyboardShouldPersistTaps","keyboardDismissMode","position","backgroundColor","flexDirection","justifyContent","alignItems","fontFamily","TEXT_DARK","marginLeft","borderRadius","paddingHorizontal","paddingVertical","marginRight","padding","TEXT_LIGHT","textAlign"],"sources":["MaintenanceUserPicker.js"],"sourcesContent":["import React, { Component } from \"react\";\nimport _ from \"lodash\";\nimport { TouchableOpacity, View, ScrollView, Text, TextInput, Keyboard } from \"react-native\";\nimport { connect } from \"react-redux\";\nimport { Icon } from \"@rneui/themed\";\nimport { Services } from \"../feature.config\";\nimport { Components, Colours } from \"../core.config\";\n\nclass MaintenanceUserPicker extends Component {\n\tstate = {\n\t\tcurrentUser: null,\n\t\tsearchText: \"\",\n\t};\n\n\tUNSAFE_componentWillMount() {\n\t\tthis.setState({ currentUser: this.props.currentUser });\n\t}\n\n\tonPressBack() {\n\t\tServices.navigation.goBack();\n\t}\n\n\tonUserPress(user) {\n\t\tKeyboard.dismiss();\n\t\tthis.props.onSelectUser(user);\n\t\tthis.setState({ currentUser: user });\n\t\tsetTimeout(() => {\n\t\t\tthis.onPressBack();\n\t\t}, 200);\n\t}\n\n\tonChangeSearch = (text) => {\n\t\tthis.setState({ searchText: text });\n\t};\n\n\tgetFilteredUsers = () => {\n\t\tconst { searchText } = this.state;\n\t\tconst { users } = this.props;\n\t\tif (!users) return [];\n\t\tif (!searchText || searchText.length === 0) return users;\n\t\tconst searchLower = searchText.toLowerCase();\n\t\treturn users.filter((user) => {\n\t\t\tconst displayName = (user.displayName || \"\").toLowerCase();\n\t\t\tconst unit = (user.unit || \"\").toLowerCase();\n\t\t\treturn displayName.includes(searchLower) || unit.includes(searchLower);\n\t\t});\n\t};\n\n\trenderMain() {\n\t\tif (_.isEmpty(this.props.users)) {\n\t\t\treturn (\n\t\t\t\t<View style={{ marginTop: 16 }}>\n\t\t\t\t\t<Components.Spinner />\n\t\t\t\t</View>\n\t\t\t);\n\t\t}\n\n\t\tconst filteredUsers = this.getFilteredUsers();\n\t\tif (filteredUsers.length === 0 && this.state.searchText.length > 0) {\n\t\t\treturn (\n\t\t\t\t<View style={styles.noResultsContainer}>\n\t\t\t\t\t<Text style={styles.noResultsText}>No users found</Text>\n\t\t\t\t</View>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<Components.FormCard style={{ marginTop: 16 }}>\n\t\t\t\t{this.renderOptions(filteredUsers)}\n\t\t\t</Components.FormCard>\n\t\t);\n\t}\n\n\trenderOptions(users) {\n\t\treturn users.map((user, index) => {\n\t\t\treturn (\n\t\t\t\t<TouchableOpacity\n\t\t\t\t\tkey={index}\n\t\t\t\t\tonPress={this.onUserPress.bind(this, user)}\n\t\t\t\t>\n\t\t\t\t\t<Components.FormCardSection\n\t\t\t\t\t\tlabel={user.displayName}\n\t\t\t\t\t\tlabelStyle={{ height: 0, margin: 0 }}\n\t\t\t\t\t\thasUnderline\n\t\t\t\t\t\thasContent\n\t\t\t\t\t>\n\t\t\t\t\t\t<View style={styles.rowContainer}>\n\t\t\t\t\t\t\t<View style={styles.userContainer}>\n\t\t\t\t\t\t\t\t<Components.ProfilePic\n\t\t\t\t\t\t\t\t\tProfilePic={user.profilePic}\n\t\t\t\t\t\t\t\t\tDiameter={30}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<Text style={styles.labelText}>{user.displayName}</Text>\n\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\tname=\"check-circle\"\n\t\t\t\t\t\t\t\ttype=\"font-awesome\"\n\t\t\t\t\t\t\t\ticonStyle={[\n\t\t\t\t\t\t\t\t\t{ color: \"#d5d9e0\", fontSize: 20 },\n\t\t\t\t\t\t\t\t\t_.isEqual(user, this.state.currentUser) && {\n\t\t\t\t\t\t\t\t\t\tcolor: Colours.COLOUR_GREEN,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</View>\n\t\t\t\t\t</Components.FormCardSection>\n\t\t\t\t</TouchableOpacity>\n\t\t\t);\n\t\t});\n\t}\n\n\trenderSearch() {\n\t\treturn (\n\t\t\t<View style={styles.searchContainer}>\n\t\t\t\t<Icon name=\"search\" type=\"font-awesome\" iconStyle={styles.searchIcon} />\n\t\t\t\t<TextInput\n\t\t\t\t\tplaceholder=\"Search by name or unit\"\n\t\t\t\t\tautoCorrect={false}\n\t\t\t\t\tplaceholderTextColor={Colours.TEXT_MID_ALPHA50}\n\t\t\t\t\tonChangeText={this.onChangeSearch}\n\t\t\t\t\tvalue={this.state.searchText}\n\t\t\t\t\tstyle={styles.searchText}\n\t\t\t\t\tunderlineColorAndroid={Colours.COLOUR_TRANSPARENT}\n\t\t\t\t\treturnKeyType=\"search\"\n\t\t\t\t/>\n\t\t\t\t{this.state.searchText.length > 0 && (\n\t\t\t\t\t<TouchableOpacity onPress={() => this.onChangeSearch(\"\")} style={styles.clearButton}>\n\t\t\t\t\t\t<Icon name=\"times-circle\" type=\"font-awesome\" iconStyle={styles.clearIcon} />\n\t\t\t\t\t</TouchableOpacity>\n\t\t\t\t)}\n\t\t\t</View>\n\t\t);\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t<View style={styles.container}>\n\t\t\t\t<Components.Header\n\t\t\t\t\tleftIcon=\"angle-left\"\n\t\t\t\t\tonPressLeft={this.onPressBack.bind(this)}\n\t\t\t\t\ttext=\"Select user\"\n\t\t\t\t/>\n\t\t\t\t{this.renderSearch()}\n\t\t\t\t<ScrollView style={{ flex: 1 }} keyboardShouldPersistTaps=\"handled\" keyboardDismissMode=\"on-drag\">\n\t\t\t\t\t{this.renderMain()}\n\t\t\t\t</ScrollView>\n\t\t\t</View>\n\t\t);\n\t}\n}\n\nconst styles = {\n\tcontainer: {\n\t\tflex: 1,\n\t\tposition: \"relative\",\n\t\tbackgroundColor: \"#f0f0f5\",\n\t},\n\trowContainer: {\n\t\tflexDirection: \"row\",\n\t\tjustifyContent: \"space-between\",\n\t},\n\tuserContainer: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t},\n\tlabelText: {\n\t\tfontFamily: \"sf-medium\",\n\t\tfontSize: 16,\n\t\tcolor: Colours.TEXT_DARK,\n\t\tmarginLeft: 8,\n\t},\n\tsearchContainer: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tmargin: 15,\n\t\tbackgroundColor: \"#fff\",\n\t\tborderRadius: 8,\n\t\tpaddingHorizontal: 12,\n\t\tpaddingVertical: 8,\n\t},\n\tsearchIcon: {\n\t\tfontSize: 16,\n\t\tmarginRight: 10,\n\t\tcolor: Colours.TEXT_MID_ALPHA50,\n\t},\n\tsearchText: {\n\t\tflex: 1,\n\t\tfontSize: 16,\n\t\tfontFamily: \"sf-regular\",\n\t\tcolor: Colours.TEXT_DARK,\n\t\tpadding: 0,\n\t},\n\tclearButton: {\n\t\tpadding: 4,\n\t},\n\tclearIcon: {\n\t\tfontSize: 16,\n\t\tcolor: Colours.TEXT_MID_ALPHA50,\n\t},\n\tnoResultsContainer: {\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tpaddingVertical: 40,\n\t},\n\tnoResultsText: {\n\t\tfontSize: 16,\n\t\tfontFamily: \"sf-regular\",\n\t\tcolor: Colours.TEXT_LIGHT,\n\t\ttextAlign: \"center\",\n\t},\n};\n\nexport default connect(null, {})(MaintenanceUserPicker);\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plusscommunities/pluss-maintenance-app-forms",
|
|
3
|
-
"version": "8.0.
|
|
3
|
+
"version": "8.0.9-beta.2",
|
|
4
4
|
"description": "Extension package to enable maintenance on Pluss Communities Platform",
|
|
5
5
|
"main": "dist/module/index.js",
|
|
6
6
|
"module": "dist/module/index.js",
|
|
@@ -51,4 +51,4 @@
|
|
|
51
51
|
"module"
|
|
52
52
|
]
|
|
53
53
|
}
|
|
54
|
-
}
|
|
54
|
+
}
|
package/src/core.config.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React, { Component } from "react";
|
|
2
2
|
import _ from "lodash";
|
|
3
|
-
import { TouchableOpacity, View, ScrollView, Text } from "react-native";
|
|
3
|
+
import { TouchableOpacity, View, ScrollView, Text, TextInput, Keyboard } from "react-native";
|
|
4
4
|
import { connect } from "react-redux";
|
|
5
5
|
import { Icon } from "@rneui/themed";
|
|
6
6
|
import { Services } from "../feature.config";
|
|
@@ -9,6 +9,7 @@ import { Components, Colours } from "../core.config";
|
|
|
9
9
|
class MaintenanceUserPicker extends Component {
|
|
10
10
|
state = {
|
|
11
11
|
currentUser: null,
|
|
12
|
+
searchText: "",
|
|
12
13
|
};
|
|
13
14
|
|
|
14
15
|
UNSAFE_componentWillMount() {
|
|
@@ -20,6 +21,7 @@ class MaintenanceUserPicker extends Component {
|
|
|
20
21
|
}
|
|
21
22
|
|
|
22
23
|
onUserPress(user) {
|
|
24
|
+
Keyboard.dismiss();
|
|
23
25
|
this.props.onSelectUser(user);
|
|
24
26
|
this.setState({ currentUser: user });
|
|
25
27
|
setTimeout(() => {
|
|
@@ -27,6 +29,23 @@ class MaintenanceUserPicker extends Component {
|
|
|
27
29
|
}, 200);
|
|
28
30
|
}
|
|
29
31
|
|
|
32
|
+
onChangeSearch = (text) => {
|
|
33
|
+
this.setState({ searchText: text });
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
getFilteredUsers = () => {
|
|
37
|
+
const { searchText } = this.state;
|
|
38
|
+
const { users } = this.props;
|
|
39
|
+
if (!users) return [];
|
|
40
|
+
if (!searchText || searchText.length === 0) return users;
|
|
41
|
+
const searchLower = searchText.toLowerCase();
|
|
42
|
+
return users.filter((user) => {
|
|
43
|
+
const displayName = (user.displayName || "").toLowerCase();
|
|
44
|
+
const unit = (user.unit || "").toLowerCase();
|
|
45
|
+
return displayName.includes(searchLower) || unit.includes(searchLower);
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
|
|
30
49
|
renderMain() {
|
|
31
50
|
if (_.isEmpty(this.props.users)) {
|
|
32
51
|
return (
|
|
@@ -36,15 +55,24 @@ class MaintenanceUserPicker extends Component {
|
|
|
36
55
|
);
|
|
37
56
|
}
|
|
38
57
|
|
|
58
|
+
const filteredUsers = this.getFilteredUsers();
|
|
59
|
+
if (filteredUsers.length === 0 && this.state.searchText.length > 0) {
|
|
60
|
+
return (
|
|
61
|
+
<View style={styles.noResultsContainer}>
|
|
62
|
+
<Text style={styles.noResultsText}>No users found</Text>
|
|
63
|
+
</View>
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
|
|
39
67
|
return (
|
|
40
68
|
<Components.FormCard style={{ marginTop: 16 }}>
|
|
41
|
-
{this.renderOptions()}
|
|
69
|
+
{this.renderOptions(filteredUsers)}
|
|
42
70
|
</Components.FormCard>
|
|
43
71
|
);
|
|
44
72
|
}
|
|
45
73
|
|
|
46
|
-
renderOptions() {
|
|
47
|
-
return
|
|
74
|
+
renderOptions(users) {
|
|
75
|
+
return users.map((user, index) => {
|
|
48
76
|
return (
|
|
49
77
|
<TouchableOpacity
|
|
50
78
|
key={index}
|
|
@@ -81,6 +109,29 @@ class MaintenanceUserPicker extends Component {
|
|
|
81
109
|
});
|
|
82
110
|
}
|
|
83
111
|
|
|
112
|
+
renderSearch() {
|
|
113
|
+
return (
|
|
114
|
+
<View style={styles.searchContainer}>
|
|
115
|
+
<Icon name="search" type="font-awesome" iconStyle={styles.searchIcon} />
|
|
116
|
+
<TextInput
|
|
117
|
+
placeholder="Search by name or unit"
|
|
118
|
+
autoCorrect={false}
|
|
119
|
+
placeholderTextColor={Colours.TEXT_MID_ALPHA50}
|
|
120
|
+
onChangeText={this.onChangeSearch}
|
|
121
|
+
value={this.state.searchText}
|
|
122
|
+
style={styles.searchText}
|
|
123
|
+
underlineColorAndroid={Colours.COLOUR_TRANSPARENT}
|
|
124
|
+
returnKeyType="search"
|
|
125
|
+
/>
|
|
126
|
+
{this.state.searchText.length > 0 && (
|
|
127
|
+
<TouchableOpacity onPress={() => this.onChangeSearch("")} style={styles.clearButton}>
|
|
128
|
+
<Icon name="times-circle" type="font-awesome" iconStyle={styles.clearIcon} />
|
|
129
|
+
</TouchableOpacity>
|
|
130
|
+
)}
|
|
131
|
+
</View>
|
|
132
|
+
);
|
|
133
|
+
}
|
|
134
|
+
|
|
84
135
|
render() {
|
|
85
136
|
return (
|
|
86
137
|
<View style={styles.container}>
|
|
@@ -89,7 +140,10 @@ class MaintenanceUserPicker extends Component {
|
|
|
89
140
|
onPressLeft={this.onPressBack.bind(this)}
|
|
90
141
|
text="Select user"
|
|
91
142
|
/>
|
|
92
|
-
|
|
143
|
+
{this.renderSearch()}
|
|
144
|
+
<ScrollView style={{ flex: 1 }} keyboardShouldPersistTaps="handled" keyboardDismissMode="on-drag">
|
|
145
|
+
{this.renderMain()}
|
|
146
|
+
</ScrollView>
|
|
93
147
|
</View>
|
|
94
148
|
);
|
|
95
149
|
}
|
|
@@ -101,17 +155,6 @@ const styles = {
|
|
|
101
155
|
position: "relative",
|
|
102
156
|
backgroundColor: "#f0f0f5",
|
|
103
157
|
},
|
|
104
|
-
row: {
|
|
105
|
-
flexDirection: "row",
|
|
106
|
-
alignItems: "center",
|
|
107
|
-
minHeight: 22,
|
|
108
|
-
},
|
|
109
|
-
text: {
|
|
110
|
-
flex: 1,
|
|
111
|
-
fontFamily: "sf-regular",
|
|
112
|
-
fontSize: 14,
|
|
113
|
-
color: Colours.TEXT_DARK,
|
|
114
|
-
},
|
|
115
158
|
rowContainer: {
|
|
116
159
|
flexDirection: "row",
|
|
117
160
|
justifyContent: "space-between",
|
|
@@ -126,6 +169,45 @@ const styles = {
|
|
|
126
169
|
color: Colours.TEXT_DARK,
|
|
127
170
|
marginLeft: 8,
|
|
128
171
|
},
|
|
172
|
+
searchContainer: {
|
|
173
|
+
flexDirection: "row",
|
|
174
|
+
alignItems: "center",
|
|
175
|
+
margin: 15,
|
|
176
|
+
backgroundColor: "#fff",
|
|
177
|
+
borderRadius: 8,
|
|
178
|
+
paddingHorizontal: 12,
|
|
179
|
+
paddingVertical: 8,
|
|
180
|
+
},
|
|
181
|
+
searchIcon: {
|
|
182
|
+
fontSize: 16,
|
|
183
|
+
marginRight: 10,
|
|
184
|
+
color: Colours.TEXT_MID_ALPHA50,
|
|
185
|
+
},
|
|
186
|
+
searchText: {
|
|
187
|
+
flex: 1,
|
|
188
|
+
fontSize: 16,
|
|
189
|
+
fontFamily: "sf-regular",
|
|
190
|
+
color: Colours.TEXT_DARK,
|
|
191
|
+
padding: 0,
|
|
192
|
+
},
|
|
193
|
+
clearButton: {
|
|
194
|
+
padding: 4,
|
|
195
|
+
},
|
|
196
|
+
clearIcon: {
|
|
197
|
+
fontSize: 16,
|
|
198
|
+
color: Colours.TEXT_MID_ALPHA50,
|
|
199
|
+
},
|
|
200
|
+
noResultsContainer: {
|
|
201
|
+
alignItems: "center",
|
|
202
|
+
justifyContent: "center",
|
|
203
|
+
paddingVertical: 40,
|
|
204
|
+
},
|
|
205
|
+
noResultsText: {
|
|
206
|
+
fontSize: 16,
|
|
207
|
+
fontFamily: "sf-regular",
|
|
208
|
+
color: Colours.TEXT_LIGHT,
|
|
209
|
+
textAlign: "center",
|
|
210
|
+
},
|
|
129
211
|
};
|
|
130
212
|
|
|
131
213
|
export default connect(null, {})(MaintenanceUserPicker);
|