@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.
- package/dist/module/actions/JobActions.js +20 -0
- package/dist/module/actions/JobActions.js.map +1 -0
- package/dist/module/actions/index.js +2 -0
- package/dist/module/actions/index.js.map +1 -0
- package/dist/module/actions/types.js +5 -0
- package/dist/module/actions/types.js.map +1 -0
- package/dist/module/apis/index.js +2 -0
- package/dist/module/apis/index.js.map +1 -0
- package/dist/module/apis/maintenanceActions.js +171 -0
- package/dist/module/apis/maintenanceActions.js.map +1 -0
- package/dist/module/components/FilterPopupMenu.js +271 -0
- package/dist/module/components/FilterPopupMenu.js.map +1 -0
- package/dist/module/components/MaintenanceList.js +360 -0
- package/dist/module/components/MaintenanceList.js.map +1 -0
- package/dist/module/components/MaintenanceListItem.js +322 -0
- package/dist/module/components/MaintenanceListItem.js.map +1 -0
- package/dist/module/components/MaintenanceWidgetItem.js +149 -0
- package/dist/module/components/MaintenanceWidgetItem.js.map +1 -0
- package/dist/module/components/StatusSelectorPopup.js +89 -0
- package/dist/module/components/StatusSelectorPopup.js.map +1 -0
- package/dist/module/components/WidgetLarge.js +9 -0
- package/dist/module/components/WidgetLarge.js.map +1 -0
- package/dist/module/components/WidgetSmall.js +171 -0
- package/dist/module/components/WidgetSmall.js.map +1 -0
- package/dist/module/core.config.js +17 -0
- package/dist/module/core.config.js.map +1 -0
- package/dist/module/feature.config.js +75 -0
- package/dist/module/feature.config.js.map +1 -0
- package/dist/module/helper.js +33 -0
- package/dist/module/helper.js.map +1 -0
- package/dist/module/images/speechbubble.png +0 -0
- package/dist/module/index.js +25 -0
- package/dist/module/index.js.map +1 -0
- package/dist/module/reducers/JobsReducer.js +63 -0
- package/dist/module/reducers/JobsReducer.js.map +1 -0
- package/dist/module/screens/JobTypePicker.js +130 -0
- package/dist/module/screens/JobTypePicker.js.map +1 -0
- package/dist/module/screens/MaintenancePage.js +92 -0
- package/dist/module/screens/MaintenancePage.js.map +1 -0
- package/dist/module/screens/RequestDetail.js +980 -0
- package/dist/module/screens/RequestDetail.js.map +1 -0
- package/dist/module/screens/RequestNotes.js +390 -0
- package/dist/module/screens/RequestNotes.js.map +1 -0
- package/dist/module/screens/ServiceRequest.js +1243 -0
- package/dist/module/screens/ServiceRequest.js.map +1 -0
- package/dist/module/values.config.a.js +30 -0
- package/dist/module/values.config.a.js.map +1 -0
- package/dist/module/values.config.b.js +30 -0
- package/dist/module/values.config.b.js.map +1 -0
- package/dist/module/values.config.c.js +30 -0
- package/dist/module/values.config.c.js.map +1 -0
- package/dist/module/values.config.d.js +30 -0
- package/dist/module/values.config.d.js.map +1 -0
- package/dist/module/values.config.default.js +35 -0
- package/dist/module/values.config.default.js.map +1 -0
- package/dist/module/values.config.forms.js +35 -0
- package/dist/module/values.config.forms.js.map +1 -0
- package/dist/module/values.config.js +35 -0
- package/dist/module/values.config.js.map +1 -0
- package/package.json +53 -0
- package/src/actions/JobActions.js +22 -0
- package/src/actions/index.js +1 -0
- package/src/actions/types.js +5 -0
- package/src/apis/index.js +1 -0
- package/src/apis/maintenanceActions.js +163 -0
- package/src/components/FilterPopupMenu.js +256 -0
- package/src/components/MaintenanceList.js +335 -0
- package/src/components/MaintenanceListItem.js +289 -0
- package/src/components/MaintenanceWidgetItem.js +132 -0
- package/src/components/StatusSelectorPopup.js +87 -0
- package/src/components/WidgetLarge.js +10 -0
- package/src/components/WidgetSmall.js +152 -0
- package/src/core.config.js +5 -0
- package/src/feature.config.js +73 -0
- package/src/helper.js +39 -0
- package/src/images/speechbubble.png +0 -0
- package/src/index.js +25 -0
- package/src/reducers/JobsReducer.js +51 -0
- package/src/screens/JobTypePicker.js +107 -0
- package/src/screens/MaintenancePage.js +96 -0
- package/src/screens/RequestDetail.js +915 -0
- package/src/screens/RequestNotes.js +418 -0
- package/src/screens/ServiceRequest.js +1219 -0
- package/src/values.config.a.js +30 -0
- package/src/values.config.b.js +30 -0
- package/src/values.config.c.js +30 -0
- package/src/values.config.d.js +30 -0
- package/src/values.config.default.js +35 -0
- package/src/values.config.forms.js +35 -0
- 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":[]}
|