@plusscommunities/pluss-maintenance-app-forms 6.0.8-beta.0

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 (90) hide show
  1. package/dist/module/actions/JobActions.js +20 -0
  2. package/dist/module/actions/JobActions.js.map +1 -0
  3. package/dist/module/actions/index.js +2 -0
  4. package/dist/module/actions/index.js.map +1 -0
  5. package/dist/module/actions/types.js +5 -0
  6. package/dist/module/actions/types.js.map +1 -0
  7. package/dist/module/apis/index.js +2 -0
  8. package/dist/module/apis/index.js.map +1 -0
  9. package/dist/module/apis/maintenanceActions.js +171 -0
  10. package/dist/module/apis/maintenanceActions.js.map +1 -0
  11. package/dist/module/components/FilterPopupMenu.js +271 -0
  12. package/dist/module/components/FilterPopupMenu.js.map +1 -0
  13. package/dist/module/components/MaintenanceList.js +360 -0
  14. package/dist/module/components/MaintenanceList.js.map +1 -0
  15. package/dist/module/components/MaintenanceListItem.js +322 -0
  16. package/dist/module/components/MaintenanceListItem.js.map +1 -0
  17. package/dist/module/components/MaintenanceWidgetItem.js +149 -0
  18. package/dist/module/components/MaintenanceWidgetItem.js.map +1 -0
  19. package/dist/module/components/StatusSelectorPopup.js +89 -0
  20. package/dist/module/components/StatusSelectorPopup.js.map +1 -0
  21. package/dist/module/components/WidgetLarge.js +9 -0
  22. package/dist/module/components/WidgetLarge.js.map +1 -0
  23. package/dist/module/components/WidgetSmall.js +171 -0
  24. package/dist/module/components/WidgetSmall.js.map +1 -0
  25. package/dist/module/core.config.js +17 -0
  26. package/dist/module/core.config.js.map +1 -0
  27. package/dist/module/feature.config.js +75 -0
  28. package/dist/module/feature.config.js.map +1 -0
  29. package/dist/module/helper.js +33 -0
  30. package/dist/module/helper.js.map +1 -0
  31. package/dist/module/images/speechbubble.png +0 -0
  32. package/dist/module/index.js +25 -0
  33. package/dist/module/index.js.map +1 -0
  34. package/dist/module/reducers/JobsReducer.js +63 -0
  35. package/dist/module/reducers/JobsReducer.js.map +1 -0
  36. package/dist/module/screens/JobTypePicker.js +130 -0
  37. package/dist/module/screens/JobTypePicker.js.map +1 -0
  38. package/dist/module/screens/MaintenancePage.js +92 -0
  39. package/dist/module/screens/MaintenancePage.js.map +1 -0
  40. package/dist/module/screens/RequestDetail.js +980 -0
  41. package/dist/module/screens/RequestDetail.js.map +1 -0
  42. package/dist/module/screens/RequestNotes.js +390 -0
  43. package/dist/module/screens/RequestNotes.js.map +1 -0
  44. package/dist/module/screens/ServiceRequest.js +1243 -0
  45. package/dist/module/screens/ServiceRequest.js.map +1 -0
  46. package/dist/module/values.config.a.js +30 -0
  47. package/dist/module/values.config.a.js.map +1 -0
  48. package/dist/module/values.config.b.js +30 -0
  49. package/dist/module/values.config.b.js.map +1 -0
  50. package/dist/module/values.config.c.js +30 -0
  51. package/dist/module/values.config.c.js.map +1 -0
  52. package/dist/module/values.config.d.js +30 -0
  53. package/dist/module/values.config.d.js.map +1 -0
  54. package/dist/module/values.config.default.js +35 -0
  55. package/dist/module/values.config.default.js.map +1 -0
  56. package/dist/module/values.config.forms.js +35 -0
  57. package/dist/module/values.config.forms.js.map +1 -0
  58. package/dist/module/values.config.js +35 -0
  59. package/dist/module/values.config.js.map +1 -0
  60. package/package.json +53 -0
  61. package/src/actions/JobActions.js +22 -0
  62. package/src/actions/index.js +1 -0
  63. package/src/actions/types.js +5 -0
  64. package/src/apis/index.js +1 -0
  65. package/src/apis/maintenanceActions.js +163 -0
  66. package/src/components/FilterPopupMenu.js +256 -0
  67. package/src/components/MaintenanceList.js +335 -0
  68. package/src/components/MaintenanceListItem.js +289 -0
  69. package/src/components/MaintenanceWidgetItem.js +132 -0
  70. package/src/components/StatusSelectorPopup.js +87 -0
  71. package/src/components/WidgetLarge.js +10 -0
  72. package/src/components/WidgetSmall.js +152 -0
  73. package/src/core.config.js +5 -0
  74. package/src/feature.config.js +73 -0
  75. package/src/helper.js +39 -0
  76. package/src/images/speechbubble.png +0 -0
  77. package/src/index.js +25 -0
  78. package/src/reducers/JobsReducer.js +51 -0
  79. package/src/screens/JobTypePicker.js +107 -0
  80. package/src/screens/MaintenancePage.js +96 -0
  81. package/src/screens/RequestDetail.js +915 -0
  82. package/src/screens/RequestNotes.js +418 -0
  83. package/src/screens/ServiceRequest.js +1219 -0
  84. package/src/values.config.a.js +30 -0
  85. package/src/values.config.b.js +30 -0
  86. package/src/values.config.c.js +30 -0
  87. package/src/values.config.d.js +30 -0
  88. package/src/values.config.default.js +35 -0
  89. package/src/values.config.forms.js +35 -0
  90. package/src/values.config.js +35 -0
@@ -0,0 +1,360 @@
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
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
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 'react';
5
+ import { View, StyleSheet, FlatList, TouchableOpacity, Text } from 'react-native';
6
+ import _ from 'lodash';
7
+ import { connect } from 'react-redux';
8
+ import { maintenanceActions } from '../apis';
9
+ import { jobsLoaded, jobAdded, jobsAdded } from '../actions';
10
+ import MaintenanceListItem from '../components/MaintenanceListItem';
11
+ import FilterPopupMenu from './FilterPopupMenu';
12
+ import { Components, Colours, Config, Helper } from '../core.config';
13
+ import { values } from '../values.config';
14
+ class MaintenanceList extends Component {
15
+ constructor(props) {
16
+ super(props);
17
+ _defineProperty(this, "refresh", () => {
18
+ this.onLoadingChanged(true, async () => {
19
+ try {
20
+ const {
21
+ selectedStatus,
22
+ selectedType
23
+ } = this.state;
24
+ // console.log('filters', { selectedStatus, selectedType });
25
+ const res = await maintenanceActions.getJobsRecursive(this.props.site, selectedStatus, selectedType);
26
+ // console.log('refresh', res?.data);
27
+ if (selectedStatus !== this.initialStatus || !_.isEmpty(selectedType)) {
28
+ this.props.jobsAdded(res);
29
+ } else {
30
+ this.props.jobsLoaded(res);
31
+ }
32
+ } catch (error) {
33
+ console.log('refresh error', error);
34
+ } finally {
35
+ this.onLoadingChanged(false);
36
+ }
37
+ });
38
+ });
39
+ _defineProperty(this, "refreshTypes", async () => {
40
+ const {
41
+ data
42
+ } = await maintenanceActions.getJobTypes(Helper.getSite(this.props.site));
43
+ const types = data.map(t => {
44
+ return {
45
+ label: t.typeName,
46
+ value: t.typeName
47
+ };
48
+ });
49
+ types.splice(0, 0, {
50
+ label: 'All',
51
+ value: ''
52
+ });
53
+ // console.log('refreshTypes', types);
54
+ this.setState({
55
+ types
56
+ });
57
+ });
58
+ _defineProperty(this, "fetchJob", jobId => {
59
+ if (this.state.loading) return;
60
+ this.onLoadingChanged(true, async () => {
61
+ try {
62
+ const job = await maintenanceActions.getJobByJobId(this.props.site, jobId);
63
+ // console.log('fetchJob', job?.data);
64
+ this.props.jobAdded(job.data);
65
+ } catch (error) {
66
+ console.log('fetchJob error', error);
67
+ } finally {
68
+ this.onLoadingChanged(false);
69
+ }
70
+ });
71
+ });
72
+ _defineProperty(this, "resetDataSource", (source = '') => {
73
+ const {
74
+ searchText,
75
+ selectedStatus,
76
+ selectedType,
77
+ selectedAssignee
78
+ } = this.state;
79
+ const {
80
+ jobs
81
+ } = this.props;
82
+ let filteredList = jobs;
83
+ let jobIdMatch = null;
84
+ if (searchText) {
85
+ jobIdMatch = _.find(jobs, j => j.jobId === searchText);
86
+ filteredList = jobs.filter(j => {
87
+ if (j.room && j.room.toLowerCase().indexOf(searchText.toLowerCase()) > -1) {
88
+ return true;
89
+ }
90
+ return false;
91
+ });
92
+ if (!jobIdMatch) this.fetchJob(searchText);
93
+ }
94
+ if (selectedStatus) filteredList = filteredList.filter(j => selectedStatus.includes(j.status));
95
+ if (selectedType) filteredList = filteredList.filter(j => selectedType.includes(j.type));
96
+ if (selectedAssignee) filteredList = filteredList.filter(j => selectedAssignee.includes(j.AssigneeId));
97
+ if (jobIdMatch) {
98
+ const jobIndex = filteredList.indexOf(jobIdMatch);
99
+ if (jobIndex > -1) {
100
+ filteredList.splice(jobIndex, 1);
101
+ }
102
+ filteredList.unshift(jobIdMatch);
103
+ }
104
+ if (source !== 'search') this.refresh();
105
+ this.setState({
106
+ filteredList
107
+ });
108
+ });
109
+ _defineProperty(this, "onLoadingChanged", (loading, callback) => {
110
+ this.setState({
111
+ loading
112
+ }, () => {
113
+ if (this.props.onLoadingChanged) this.props.onLoadingChanged(this.state.loading);
114
+ if (callback) callback();
115
+ });
116
+ });
117
+ _defineProperty(this, "onSearchText", value => {
118
+ this.setState({
119
+ searchText: value
120
+ }, () => {
121
+ if (_.isEmpty(this.state.searchText)) this.resetDataSource('search');
122
+ });
123
+ });
124
+ _defineProperty(this, "onSearchSubmit", () => {
125
+ this.resetDataSource('search');
126
+ });
127
+ _defineProperty(this, "onToggleFilter", () => {
128
+ this.setState({
129
+ showFilterPopup: !this.state.showFilterPopup
130
+ });
131
+ });
132
+ _defineProperty(this, "onSelectFilter", selected => {
133
+ this.setState({
134
+ selectedStatus: selected.status,
135
+ selectedStatusText: selected.statusText,
136
+ selectedType: selected.type,
137
+ selectedAssignee: selected.assignee,
138
+ selectedAssigneeName: selected.assigneeName
139
+ }, () => {
140
+ this.resetDataSource();
141
+ this.onToggleFilter();
142
+ });
143
+ });
144
+ _defineProperty(this, "getFilterButtonText", () => {
145
+ const {
146
+ selectedStatus,
147
+ selectedStatusText,
148
+ selectedType,
149
+ selectedAssignee,
150
+ selectedAssigneeName
151
+ } = this.state;
152
+ const filterTexts = [];
153
+ if (!_.isEmpty(selectedStatus)) {
154
+ filterTexts.push(selectedStatusText);
155
+ }
156
+ if (!_.isEmpty(selectedType)) {
157
+ filterTexts.push(selectedType);
158
+ }
159
+ if (!_.isEmpty(selectedAssignee)) {
160
+ filterTexts.push(selectedAssigneeName);
161
+ }
162
+ if (_.isEmpty(filterTexts)) {
163
+ return 'Filter';
164
+ }
165
+ return `Filtering by ${filterTexts.join(', ')}`;
166
+ });
167
+ this.initialStatus = props.hasPermission ? 'Unassigned|In Progress' : '';
168
+ this.initialStatusText = props.hasPermission ? 'Incomplete' : '';
169
+ this.state = {
170
+ types: [],
171
+ filteredList: props.jobs,
172
+ loading: false,
173
+ searchText: '',
174
+ showFilterPopup: false,
175
+ selectedStatus: this.initialStatus,
176
+ selectedStatusText: this.initialStatusText,
177
+ selectedType: '',
178
+ selectedAssignee: '',
179
+ selectedAssigneeName: ''
180
+ };
181
+ }
182
+ componentDidMount() {
183
+ this.refresh();
184
+ this.refreshTypes();
185
+ this.resetDataSource();
186
+ }
187
+ componentDidUpdate(prevProps) {
188
+ if (!prevProps.dataUpdated && this.props.dataUpdated) this.refresh();
189
+ if (!_.isEqual(prevProps.jobs, this.props.jobs)) this.resetDataSource();
190
+ }
191
+ getEmptyStateText() {
192
+ if (this.props.options && !_.isEmpty(this.props.options.EmptyText)) {
193
+ return this.props.options.EmptyText;
194
+ }
195
+ return this.props.userCategory === 'staff' ? values.emptyRequestsStaff : values.emptyRequestsUser;
196
+ }
197
+ renderEmptyList() {
198
+ return this.state.loading ? null : /*#__PURE__*/React.createElement(Components.EmptyStateMain, {
199
+ title: this.getEmptyStateText(),
200
+ style: {
201
+ marginHorizontal: 16
202
+ }
203
+ });
204
+ }
205
+ renderFilterButton() {
206
+ return /*#__PURE__*/React.createElement(TouchableOpacity, {
207
+ onPress: this.onToggleFilter
208
+ }, /*#__PURE__*/React.createElement(View, {
209
+ style: styles.filterButton
210
+ }, /*#__PURE__*/React.createElement(Text, {
211
+ style: [styles.filterButtonText, {
212
+ color: this.props.colourBrandingMain
213
+ }]
214
+ }, this.getFilterButtonText())));
215
+ }
216
+ renderSearch() {
217
+ if (!this.props.hasPermission) return null;
218
+ return /*#__PURE__*/React.createElement(View, {
219
+ style: styles.searchContainer
220
+ }, /*#__PURE__*/React.createElement(Components.GenericInput, {
221
+ placeholder: `Search by ${values.textEntityName} ID or Address`,
222
+ value: this.state.searchText,
223
+ onChangeText: this.onSearchText,
224
+ onSubmitEditing: this.onSearchSubmit,
225
+ squaredCorners: true,
226
+ hasClear: true
227
+ // keyboardType={'numeric'}
228
+ ,
229
+ returnKeyType: 'done'
230
+ }));
231
+ }
232
+ renderListHeader() {
233
+ const {
234
+ ListHeaderComponent
235
+ } = this.props;
236
+ return /*#__PURE__*/React.createElement(View, null, ListHeaderComponent ? ListHeaderComponent : /*#__PURE__*/React.createElement(View, {
237
+ style: {
238
+ height: 8
239
+ }
240
+ }), this.renderFilterButton(), this.renderSearch());
241
+ }
242
+ renderList() {
243
+ const {
244
+ filteredList
245
+ } = this.state;
246
+ return /*#__PURE__*/React.createElement(FlatList, {
247
+ keyboardShouldPersistTaps: "always",
248
+ style: {
249
+ flex: 1
250
+ },
251
+ contentContainerStyle: {
252
+ paddingBottom: 16
253
+ },
254
+ data: filteredList,
255
+ keyExtractor: item => item.id,
256
+ renderItem: ({
257
+ item
258
+ }) => /*#__PURE__*/React.createElement(MaintenanceListItem, {
259
+ style: this.props.itemStyle,
260
+ job: item
261
+ }),
262
+ ListEmptyComponent: this.renderEmptyList(),
263
+ ListHeaderComponent: this.renderListHeader()
264
+ });
265
+ }
266
+ renderFilterPopup() {
267
+ const {
268
+ showFilterPopup,
269
+ types,
270
+ selectedStatus,
271
+ selectedType,
272
+ selectedAssignee
273
+ } = this.state;
274
+ if (!showFilterPopup) return null;
275
+ return /*#__PURE__*/React.createElement(FilterPopupMenu, {
276
+ site: this.props.site,
277
+ types: types,
278
+ status: selectedStatus,
279
+ assignee: selectedAssignee,
280
+ type: selectedType,
281
+ onClose: this.onSelectFilter
282
+ });
283
+ }
284
+ render() {
285
+ return /*#__PURE__*/React.createElement(View, {
286
+ style: [styles.container, this.props.style]
287
+ }, this.renderList(), this.renderFilterPopup());
288
+ }
289
+ }
290
+ const styles = StyleSheet.create({
291
+ container: {
292
+ flex: 1,
293
+ backgroundColor: '#fff'
294
+ },
295
+ filterContainerOuter: {
296
+ flexDirection: 'row',
297
+ justifyContent: 'space-between',
298
+ alignItems: 'center',
299
+ paddingHorizontal: 16,
300
+ paddingVertical: 16
301
+ },
302
+ filterTitle: {
303
+ fontFamily: 'sf-bold',
304
+ fontSize: 11,
305
+ letterSpacing: 0.8,
306
+ color: '#4d4d4d'
307
+ },
308
+ filterContainer: {
309
+ flexDirection: 'row',
310
+ alignItems: 'center'
311
+ },
312
+ filterText: {
313
+ fontFamily: 'sf-semibold',
314
+ fontSize: 16,
315
+ marginRight: 6
316
+ },
317
+ filterIcon: {
318
+ fontSize: 20
319
+ },
320
+ searchContainer: {
321
+ flexDirection: 'row',
322
+ alignItems: 'center',
323
+ paddingBottom: 8,
324
+ paddingHorizontal: 16
325
+ },
326
+ filterButton: {
327
+ paddingBottom: 8,
328
+ paddingHorizontal: 16,
329
+ flexDirection: 'row-reverse'
330
+ },
331
+ filterButtonText: {
332
+ fontFamily: 'sf-semibold',
333
+ fontSize: 16
334
+ }
335
+ });
336
+ const mapStateToProps = state => {
337
+ const {
338
+ user,
339
+ notifications
340
+ } = state;
341
+ const jobs = state[values.reducerKey];
342
+ const jobsOrdered = _.orderBy(jobs.jobs, ['createdUnix'], ['desc']);
343
+ const hasPermission = _.includes(user.permissions, 'maintenanceTracking');
344
+ return {
345
+ hasPermission,
346
+ jobs: jobsOrdered,
347
+ site: user.site,
348
+ userCategory: user.category,
349
+ colourBrandingMain: Colours.getMainBrandingColourFromState(state),
350
+ dataUpdated: notifications.dataUpdated[values.updateKey]
351
+ };
352
+ };
353
+ export default connect(mapStateToProps, {
354
+ jobsLoaded,
355
+ jobAdded,
356
+ jobsAdded
357
+ }, null, {
358
+ forwardRef: true
359
+ })(MaintenanceList);
360
+ //# sourceMappingURL=MaintenanceList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","Component","View","StyleSheet","FlatList","TouchableOpacity","Text","_","connect","maintenanceActions","jobsLoaded","jobAdded","jobsAdded","MaintenanceListItem","FilterPopupMenu","Components","Colours","Config","Helper","values","MaintenanceList","constructor","props","_defineProperty","onLoadingChanged","selectedStatus","selectedType","state","res","getJobsRecursive","site","initialStatus","isEmpty","error","console","log","data","getJobTypes","getSite","types","map","t","label","typeName","value","splice","setState","jobId","loading","job","getJobByJobId","source","searchText","selectedAssignee","jobs","filteredList","jobIdMatch","find","j","filter","room","toLowerCase","indexOf","fetchJob","includes","status","type","AssigneeId","jobIndex","unshift","refresh","callback","resetDataSource","showFilterPopup","selected","selectedStatusText","statusText","assignee","selectedAssigneeName","assigneeName","onToggleFilter","filterTexts","push","join","hasPermission","initialStatusText","componentDidMount","refreshTypes","componentDidUpdate","prevProps","dataUpdated","isEqual","getEmptyStateText","options","EmptyText","userCategory","emptyRequestsStaff","emptyRequestsUser","renderEmptyList","createElement","EmptyStateMain","title","style","marginHorizontal","renderFilterButton","onPress","styles","filterButton","filterButtonText","color","colourBrandingMain","getFilterButtonText","renderSearch","searchContainer","GenericInput","placeholder","textEntityName","onChangeText","onSearchText","onSubmitEditing","onSearchSubmit","squaredCorners","hasClear","returnKeyType","renderListHeader","ListHeaderComponent","height","renderList","keyboardShouldPersistTaps","flex","contentContainerStyle","paddingBottom","keyExtractor","item","id","renderItem","itemStyle","ListEmptyComponent","renderFilterPopup","onClose","onSelectFilter","render","container","create","backgroundColor","filterContainerOuter","flexDirection","justifyContent","alignItems","paddingHorizontal","paddingVertical","filterTitle","fontFamily","fontSize","letterSpacing","filterContainer","filterText","marginRight","filterIcon","mapStateToProps","user","notifications","reducerKey","jobsOrdered","orderBy","permissions","category","getMainBrandingColourFromState","updateKey","forwardRef"],"sources":["MaintenanceList.js"],"sourcesContent":["import React, { Component } from 'react';\nimport { View, StyleSheet, FlatList, TouchableOpacity, Text } from 'react-native';\nimport _ from 'lodash';\nimport { connect } from 'react-redux';\nimport { maintenanceActions } from '../apis';\nimport { jobsLoaded, jobAdded, jobsAdded } from '../actions';\nimport MaintenanceListItem from '../components/MaintenanceListItem';\nimport FilterPopupMenu from './FilterPopupMenu';\nimport { Components, Colours, Config, Helper } from '../core.config';\nimport { values } from '../values.config';\n\nclass MaintenanceList extends Component {\n constructor(props) {\n super(props);\n\n this.initialStatus = props.hasPermission ? 'Unassigned|In Progress' : '';\n this.initialStatusText = props.hasPermission ? 'Incomplete' : '';\n\n this.state = {\n types: [],\n filteredList: props.jobs,\n loading: false,\n searchText: '',\n showFilterPopup: false,\n selectedStatus: this.initialStatus,\n selectedStatusText: this.initialStatusText,\n selectedType: '',\n selectedAssignee: '',\n selectedAssigneeName: '',\n };\n }\n\n componentDidMount() {\n this.refresh();\n this.refreshTypes();\n\n this.resetDataSource();\n }\n\n componentDidUpdate(prevProps) {\n if (!prevProps.dataUpdated && this.props.dataUpdated) this.refresh();\n if (!_.isEqual(prevProps.jobs, this.props.jobs)) this.resetDataSource();\n }\n\n refresh = () => {\n this.onLoadingChanged(true, async () => {\n try {\n const { selectedStatus, selectedType } = this.state;\n // console.log('filters', { selectedStatus, selectedType });\n const res = await maintenanceActions.getJobsRecursive(this.props.site, selectedStatus, selectedType);\n // console.log('refresh', res?.data);\n if (selectedStatus !== this.initialStatus || !_.isEmpty(selectedType)) {\n this.props.jobsAdded(res);\n } else {\n this.props.jobsLoaded(res);\n }\n } catch (error) {\n console.log('refresh error', error);\n } finally {\n this.onLoadingChanged(false);\n }\n });\n };\n\n refreshTypes = async () => {\n const { data } = await maintenanceActions.getJobTypes(Helper.getSite(this.props.site));\n const types = data.map(t => {\n return { label: t.typeName, value: t.typeName };\n });\n types.splice(0, 0, { label: 'All', value: '' });\n // console.log('refreshTypes', types);\n this.setState({ types });\n };\n\n fetchJob = jobId => {\n if (this.state.loading) return;\n\n this.onLoadingChanged(true, async () => {\n try {\n const job = await maintenanceActions.getJobByJobId(this.props.site, jobId);\n // console.log('fetchJob', job?.data);\n this.props.jobAdded(job.data);\n } catch (error) {\n console.log('fetchJob error', error);\n } finally {\n this.onLoadingChanged(false);\n }\n });\n };\n\n getEmptyStateText() {\n if (this.props.options && !_.isEmpty(this.props.options.EmptyText)) {\n return this.props.options.EmptyText;\n }\n return this.props.userCategory === 'staff' ? values.emptyRequestsStaff : values.emptyRequestsUser;\n }\n\n resetDataSource = (source = '') => {\n const { searchText, selectedStatus, selectedType, selectedAssignee } = this.state;\n const { jobs } = this.props;\n\n let filteredList = jobs;\n let jobIdMatch = null;\n if (searchText) {\n jobIdMatch = _.find(jobs, j => j.jobId === searchText);\n filteredList = jobs.filter(j => {\n if (j.room && j.room.toLowerCase().indexOf(searchText.toLowerCase()) > -1) {\n return true;\n }\n return false;\n });\n if (!jobIdMatch) this.fetchJob(searchText);\n }\n if (selectedStatus) filteredList = filteredList.filter(j => selectedStatus.includes(j.status));\n if (selectedType) filteredList = filteredList.filter(j => selectedType.includes(j.type));\n if (selectedAssignee) filteredList = filteredList.filter(j => selectedAssignee.includes(j.AssigneeId));\n if (jobIdMatch) {\n const jobIndex = filteredList.indexOf(jobIdMatch);\n if (jobIndex > -1) {\n filteredList.splice(jobIndex, 1);\n }\n filteredList.unshift(jobIdMatch);\n }\n if (source !== 'search') this.refresh();\n\n this.setState({ filteredList });\n };\n\n onLoadingChanged = (loading, callback) => {\n this.setState({ loading }, () => {\n if (this.props.onLoadingChanged) this.props.onLoadingChanged(this.state.loading);\n if (callback) callback();\n });\n };\n\n onSearchText = value => {\n this.setState({ searchText: value }, () => {\n if (_.isEmpty(this.state.searchText)) this.resetDataSource('search');\n });\n };\n\n onSearchSubmit = () => {\n this.resetDataSource('search');\n };\n\n onToggleFilter = () => {\n this.setState({ showFilterPopup: !this.state.showFilterPopup });\n };\n\n onSelectFilter = selected => {\n this.setState(\n {\n selectedStatus: selected.status,\n selectedStatusText: selected.statusText,\n selectedType: selected.type,\n selectedAssignee: selected.assignee,\n selectedAssigneeName: selected.assigneeName,\n },\n () => {\n this.resetDataSource();\n this.onToggleFilter();\n },\n );\n };\n\n getFilterButtonText = () => {\n const { selectedStatus, selectedStatusText, selectedType, selectedAssignee, selectedAssigneeName } = this.state;\n const filterTexts = [];\n if (!_.isEmpty(selectedStatus)) {\n filterTexts.push(selectedStatusText);\n }\n\n if (!_.isEmpty(selectedType)) {\n filterTexts.push(selectedType);\n }\n if (!_.isEmpty(selectedAssignee)) {\n filterTexts.push(selectedAssigneeName);\n }\n if (_.isEmpty(filterTexts)) {\n return 'Filter';\n }\n return `Filtering by ${filterTexts.join(', ')}`;\n };\n\n renderEmptyList() {\n return this.state.loading ? null : <Components.EmptyStateMain title={this.getEmptyStateText()} style={{ marginHorizontal: 16 }} />;\n }\n\n renderFilterButton() {\n return (\n <TouchableOpacity onPress={this.onToggleFilter}>\n <View style={styles.filterButton}>\n <Text style={[styles.filterButtonText, { color: this.props.colourBrandingMain }]}>{this.getFilterButtonText()}</Text>\n </View>\n </TouchableOpacity>\n );\n }\n\n renderSearch() {\n if (!this.props.hasPermission) return null;\n\n return (\n <View style={styles.searchContainer}>\n <Components.GenericInput\n placeholder={`Search by ${values.textEntityName} ID or Address`}\n value={this.state.searchText}\n onChangeText={this.onSearchText}\n onSubmitEditing={this.onSearchSubmit}\n squaredCorners\n hasClear\n // keyboardType={'numeric'}\n returnKeyType={'done'}\n />\n </View>\n );\n }\n\n renderListHeader() {\n const { ListHeaderComponent } = this.props;\n return (\n <View>\n {ListHeaderComponent ? ListHeaderComponent : <View style={{ height: 8 }} />}\n {this.renderFilterButton()}\n {this.renderSearch()}\n </View>\n );\n }\n\n renderList() {\n const { filteredList } = this.state;\n\n return (\n <FlatList\n keyboardShouldPersistTaps=\"always\"\n style={{ flex: 1 }}\n contentContainerStyle={{ paddingBottom: 16 }}\n data={filteredList}\n keyExtractor={item => item.id}\n renderItem={({ item }) => <MaintenanceListItem style={this.props.itemStyle} job={item} />}\n ListEmptyComponent={this.renderEmptyList()}\n ListHeaderComponent={this.renderListHeader()}\n />\n );\n }\n\n renderFilterPopup() {\n const { showFilterPopup, types, selectedStatus, selectedType, selectedAssignee } = this.state;\n if (!showFilterPopup) return null;\n\n return (\n <FilterPopupMenu\n site={this.props.site}\n types={types}\n status={selectedStatus}\n assignee={selectedAssignee}\n type={selectedType}\n onClose={this.onSelectFilter}\n />\n );\n }\n\n render() {\n return (\n <View style={[styles.container, this.props.style]}>\n {this.renderList()}\n {this.renderFilterPopup()}\n </View>\n );\n }\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n backgroundColor: '#fff',\n },\n filterContainerOuter: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n paddingHorizontal: 16,\n paddingVertical: 16,\n },\n filterTitle: {\n fontFamily: 'sf-bold',\n fontSize: 11,\n letterSpacing: 0.8,\n color: '#4d4d4d',\n },\n filterContainer: {\n flexDirection: 'row',\n alignItems: 'center',\n },\n filterText: {\n fontFamily: 'sf-semibold',\n fontSize: 16,\n marginRight: 6,\n },\n filterIcon: {\n fontSize: 20,\n },\n searchContainer: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingBottom: 8,\n paddingHorizontal: 16,\n },\n filterButton: {\n paddingBottom: 8,\n paddingHorizontal: 16,\n flexDirection: 'row-reverse',\n },\n filterButtonText: {\n fontFamily: 'sf-semibold',\n fontSize: 16,\n },\n});\n\nconst mapStateToProps = state => {\n const { user, notifications } = state;\n const jobs = state[values.reducerKey];\n const jobsOrdered = _.orderBy(jobs.jobs, ['createdUnix'], ['desc']);\n const hasPermission = _.includes(user.permissions, 'maintenanceTracking');\n\n return {\n hasPermission,\n jobs: jobsOrdered,\n site: user.site,\n userCategory: user.category,\n colourBrandingMain: Colours.getMainBrandingColourFromState(state),\n dataUpdated: notifications.dataUpdated[values.updateKey],\n };\n};\n\nexport default connect(mapStateToProps, { jobsLoaded, jobAdded, jobsAdded }, null, { forwardRef: true })(MaintenanceList);\n"],"mappings":"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","ignoreList":[]}