@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.
@@ -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, Fonts, Actions, ActionTypes, Config, Components, Styles, Session, Helper, Constants, Colours };
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","Fonts","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\tFonts,\n\tActions,\n\tActionTypes,\n\tConfig,\n\tComponents,\n\tStyles,\n\tSession,\n\tHelper,\n\tConstants,\n\tColours,\n} = PlussCore;\nexport {\n\tApis,\n\tFonts,\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,KAAK;EACLC,OAAO;EACPC,WAAW;EACXC,MAAM;EACNC,UAAU;EACVC,MAAM;EACNC,OAAO;EACPC,MAAM;EACNC,SAAS;EACTC;AACD,CAAC,GAAGX,SAAS;AACb,SACCC,IAAI,EACJC,KAAK,EACLC,OAAO,EACPC,WAAW,EACXC,MAAM,EACNC,UAAU,EACVC,MAAM,EACNC,OAAO,EACPC,MAAM,EACNC,SAAS,EACTC,OAAO","ignoreList":[]}
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 this.props.users.map((user, index) => {
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":";;;AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAQ,OAAO;AACxC,OAAOC,CAAC,MAAM,QAAQ;AACtB,SAASC,gBAAgB,EAAEC,IAAI,EAAEC,UAAU,EAAEC,IAAI,QAAQ,cAAc;AACvE,SAASC,OAAO,QAAQ,aAAa;AACrC,SAASC,IAAI,QAAQ,eAAe;AACpC,SAASC,QAAQ,QAAQ,mBAAmB;AAC5C,SAASC,UAAU,EAAEC,OAAO,QAAQ,gBAAgB;AAEpD,MAAMC,qBAAqB,SAASX,SAAS,CAAC;EAAAY,YAAA,GAAAC,IAAA;IAAA,SAAAA,IAAA;IAAAC,eAAA,gBACrC;MACPC,WAAW,EAAE;IACd,CAAC;EAAA;EAEDC,yBAAyBA,CAAA,EAAG;IAC3B,IAAI,CAACC,QAAQ,CAAC;MAAEF,WAAW,EAAE,IAAI,CAACG,KAAK,CAACH;IAAY,CAAC,CAAC;EACvD;EAEAI,WAAWA,CAAA,EAAG;IACbX,QAAQ,CAACY,UAAU,CAACC,MAAM,CAAC,CAAC;EAC7B;EAEAC,WAAWA,CAACC,IAAI,EAAE;IACjB,IAAI,CAACL,KAAK,CAACM,YAAY,CAACD,IAAI,CAAC;IAC7B,IAAI,CAACN,QAAQ,CAAC;MAAEF,WAAW,EAAEQ;IAAK,CAAC,CAAC;IACpCE,UAAU,CAAC,MAAM;MAChB,IAAI,CAACN,WAAW,CAAC,CAAC;IACnB,CAAC,EAAE,GAAG,CAAC;EACR;EAEAO,UAAUA,CAAA,EAAG;IACZ,IAAIzB,CAAC,CAAC0B,OAAO,CAAC,IAAI,CAACT,KAAK,CAACU,KAAK,CAAC,EAAE;MAChC,oBACC7B,KAAA,CAAA8B,aAAA,CAAC1B,IAAI;QAAC2B,KAAK,EAAE;UAAEC,SAAS,EAAE;QAAG;MAAE,gBAC9BhC,KAAA,CAAA8B,aAAA,CAACpB,UAAU,CAACuB,OAAO,MAAE,CAChB,CAAC;IAET;IAEA,oBACCjC,KAAA,CAAA8B,aAAA,CAACpB,UAAU,CAACwB,QAAQ;MAACH,KAAK,EAAE;QAAEC,SAAS,EAAE;MAAG;IAAE,GAC5C,IAAI,CAACG,aAAa,CAAC,CACA,CAAC;EAExB;EAEAA,aAAaA,CAAA,EAAG;IACf,OAAO,IAAI,CAAChB,KAAK,CAACU,KAAK,CAACO,GAAG,CAAC,CAACZ,IAAI,EAAEa,KAAK,KAAK;MAC5C,oBACCrC,KAAA,CAAA8B,aAAA,CAAC3B,gBAAgB;QAChBmC,GAAG,EAAED,KAAM;QACXE,OAAO,EAAE,IAAI,CAAChB,WAAW,CAACiB,IAAI,CAAC,IAAI,EAAEhB,IAAI;MAAE,gBAE3CxB,KAAA,CAAA8B,aAAA,CAACpB,UAAU,CAAC+B,eAAe;QAC1BC,KAAK,EAAElB,IAAI,CAACmB,WAAY;QACxBC,UAAU,EAAE;UAAEC,MAAM,EAAE,CAAC;UAAEC,MAAM,EAAE;QAAE,CAAE;QACrCC,YAAY;QACZC,UAAU;MAAA,gBAEVhD,KAAA,CAAA8B,aAAA,CAAC1B,IAAI;QAAC2B,KAAK,EAAEkB,MAAM,CAACC;MAAa,gBAChClD,KAAA,CAAA8B,aAAA,CAAC1B,IAAI;QAAC2B,KAAK,EAAEkB,MAAM,CAACE;MAAc,gBACjCnD,KAAA,CAAA8B,aAAA,CAACpB,UAAU,CAAC0C,UAAU;QACrBA,UAAU,EAAE5B,IAAI,CAAC6B,UAAW;QAC5BC,QAAQ,EAAE;MAAG,CACb,CAAC,eACFtD,KAAA,CAAA8B,aAAA,CAACxB,IAAI;QAACyB,KAAK,EAAEkB,MAAM,CAACM;MAAU,GAAE/B,IAAI,CAACmB,WAAkB,CAClD,CAAC,eACP3C,KAAA,CAAA8B,aAAA,CAACtB,IAAI;QACJgD,IAAI,EAAC,cAAc;QACnBC,IAAI,EAAC,cAAc;QACnBC,SAAS,EAAE,CACV;UAAEC,KAAK,EAAE,SAAS;UAAEC,QAAQ,EAAE;QAAG,CAAC,EAClC1D,CAAC,CAAC2D,OAAO,CAACrC,IAAI,EAAE,IAAI,CAACsC,KAAK,CAAC9C,WAAW,CAAC,IAAI;UAC1C2C,KAAK,EAAEhD,OAAO,CAACoD;QAChB,CAAC;MACA,CACF,CACI,CACqB,CACX,CAAC;IAErB,CAAC,CAAC;EACH;EAEAC,MAAMA,CAAA,EAAG;IACR,oBACChE,KAAA,CAAA8B,aAAA,CAAC1B,IAAI;MAAC2B,KAAK,EAAEkB,MAAM,CAACgB;IAAU,gBAC7BjE,KAAA,CAAA8B,aAAA,CAACpB,UAAU,CAACwD,MAAM;MACjBC,QAAQ,EAAC,YAAY;MACrBC,WAAW,EAAE,IAAI,CAAChD,WAAW,CAACoB,IAAI,CAAC,IAAI,CAAE;MACzC6B,IAAI,EAAC;IAAa,CAClB,CAAC,eACFrE,KAAA,CAAA8B,aAAA,CAACzB,UAAU;MAAC0B,KAAK,EAAE;QAAEuC,IAAI,EAAE;MAAE;IAAE,GAAE,IAAI,CAAC3C,UAAU,CAAC,CAAc,CAC1D,CAAC;EAET;AACD;AAEA,MAAMsB,MAAM,GAAG;EACdgB,SAAS,EAAE;IACVK,IAAI,EAAE,CAAC;IACPC,QAAQ,EAAE,UAAU;IACpBC,eAAe,EAAE;EAClB,CAAC;EACDC,GAAG,EAAE;IACJC,aAAa,EAAE,KAAK;IACpBC,UAAU,EAAE,QAAQ;IACpBC,SAAS,EAAE;EACZ,CAAC;EACDP,IAAI,EAAE;IACLC,IAAI,EAAE,CAAC;IACPO,UAAU,EAAE,YAAY;IACxBjB,QAAQ,EAAE,EAAE;IACZD,KAAK,EAAEhD,OAAO,CAACmE;EAChB,CAAC;EACD5B,YAAY,EAAE;IACbwB,aAAa,EAAE,KAAK;IACpBK,cAAc,EAAE;EACjB,CAAC;EACD5B,aAAa,EAAE;IACduB,aAAa,EAAE,KAAK;IACpBC,UAAU,EAAE;EACb,CAAC;EACDpB,SAAS,EAAE;IACVsB,UAAU,EAAE,WAAW;IACvBjB,QAAQ,EAAE,EAAE;IACZD,KAAK,EAAEhD,OAAO,CAACmE,SAAS;IACxBE,UAAU,EAAE;EACb;AACD,CAAC;AAED,eAAezE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAACK,qBAAqB,CAAC","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.8",
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
+ }
@@ -3,7 +3,6 @@ import * as PlussCore from "@plusscommunities/pluss-core-app";
3
3
 
4
4
  const {
5
5
  Apis,
6
- Fonts,
7
6
  Actions,
8
7
  ActionTypes,
9
8
  Config,
@@ -16,7 +15,6 @@ const {
16
15
  } = PlussCore;
17
16
  export {
18
17
  Apis,
19
- Fonts,
20
18
  Actions,
21
19
  ActionTypes,
22
20
  Config,
@@ -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 this.props.users.map((user, index) => {
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
- <ScrollView style={{ flex: 1 }}>{this.renderMain()}</ScrollView>
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);