@plusscommunities/pluss-maintenance-app 6.0.0-auth.0 → 6.0.1-auth.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/package.json +2 -2
- package/dist/module/actions/JobActions.js +0 -20
- package/dist/module/actions/JobActions.js.map +0 -1
- package/dist/module/actions/index.js +0 -2
- package/dist/module/actions/index.js.map +0 -1
- package/dist/module/actions/types.js +0 -4
- package/dist/module/actions/types.js.map +0 -1
- package/dist/module/apis/generalActions.js +0 -186
- package/dist/module/apis/generalActions.js.map +0 -1
- package/dist/module/apis/index.js +0 -2
- package/dist/module/apis/index.js.map +0 -1
- package/dist/module/components/FilterPopupMenu.js +0 -235
- package/dist/module/components/FilterPopupMenu.js.map +0 -1
- package/dist/module/components/MaintenanceList.js +0 -325
- package/dist/module/components/MaintenanceList.js.map +0 -1
- package/dist/module/components/MaintenanceListItem.js +0 -322
- package/dist/module/components/MaintenanceListItem.js.map +0 -1
- package/dist/module/components/MaintenanceWidgetItem.js +0 -152
- package/dist/module/components/MaintenanceWidgetItem.js.map +0 -1
- package/dist/module/components/StatusSelectorPopup.js +0 -88
- package/dist/module/components/StatusSelectorPopup.js.map +0 -1
- package/dist/module/components/WidgetLarge.js +0 -9
- package/dist/module/components/WidgetLarge.js.map +0 -1
- package/dist/module/components/WidgetSmall.js +0 -168
- package/dist/module/components/WidgetSmall.js.map +0 -1
- package/dist/module/core.config.js +0 -17
- package/dist/module/core.config.js.map +0 -1
- package/dist/module/feature.config.js +0 -90
- package/dist/module/feature.config.js.map +0 -1
- package/dist/module/helper.js +0 -25
- package/dist/module/helper.js.map +0 -1
- package/dist/module/images/speechbubble.png +0 -0
- package/dist/module/index.js +0 -20
- package/dist/module/index.js.map +0 -1
- package/dist/module/reducers/JobsReducer.js +0 -62
- package/dist/module/reducers/JobsReducer.js.map +0 -1
- package/dist/module/screens/JobTypePicker.js +0 -130
- package/dist/module/screens/JobTypePicker.js.map +0 -1
- package/dist/module/screens/MaintenancePage.js +0 -88
- package/dist/module/screens/MaintenancePage.js.map +0 -1
- package/dist/module/screens/RequestDetail.js +0 -798
- package/dist/module/screens/RequestDetail.js.map +0 -1
- package/dist/module/screens/RequestNotes.js +0 -387
- package/dist/module/screens/RequestNotes.js.map +0 -1
- package/dist/module/screens/ServiceRequest.js +0 -748
- package/dist/module/screens/ServiceRequest.js.map +0 -1
@@ -1,325 +0,0 @@
|
|
1
|
-
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
2
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(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 { generalActions } 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
|
-
class MaintenanceList extends Component {
|
14
|
-
constructor(props) {
|
15
|
-
super(props);
|
16
|
-
_defineProperty(this, "refresh", () => {
|
17
|
-
this.onLoadingChanged(true, async () => {
|
18
|
-
try {
|
19
|
-
const {
|
20
|
-
selectedStatus,
|
21
|
-
selectedType
|
22
|
-
} = this.state;
|
23
|
-
// console.log('filters', { selectedStatus, selectedType });
|
24
|
-
const res = await generalActions.getJobsRecursive(this.props.site, selectedStatus, selectedType);
|
25
|
-
// console.log('refresh', res?.data);
|
26
|
-
if (selectedStatus !== this.initialStatus || !_.isEmpty(selectedType)) {
|
27
|
-
this.props.jobsAdded(res);
|
28
|
-
} else {
|
29
|
-
this.props.jobsLoaded(res);
|
30
|
-
}
|
31
|
-
} catch (error) {
|
32
|
-
console.log('refresh error', error);
|
33
|
-
} finally {
|
34
|
-
this.onLoadingChanged(false);
|
35
|
-
}
|
36
|
-
});
|
37
|
-
});
|
38
|
-
_defineProperty(this, "refreshTypes", async () => {
|
39
|
-
const {
|
40
|
-
data
|
41
|
-
} = await generalActions.getJobTypes(Helper.getSite(this.props.site));
|
42
|
-
const types = data.map(t => {
|
43
|
-
return {
|
44
|
-
label: t.typeName,
|
45
|
-
value: t.typeName
|
46
|
-
};
|
47
|
-
});
|
48
|
-
types.splice(0, 0, {
|
49
|
-
label: 'All',
|
50
|
-
value: ''
|
51
|
-
});
|
52
|
-
// console.log('refreshTypes', types);
|
53
|
-
this.setState({
|
54
|
-
types
|
55
|
-
});
|
56
|
-
});
|
57
|
-
_defineProperty(this, "fetchJob", jobId => {
|
58
|
-
if (this.state.loading) return;
|
59
|
-
this.onLoadingChanged(true, async () => {
|
60
|
-
try {
|
61
|
-
const job = await generalActions.getJobByJobId(this.props.site, jobId);
|
62
|
-
// console.log('fetchJob', job?.data);
|
63
|
-
this.props.jobAdded(job.data);
|
64
|
-
} catch (error) {
|
65
|
-
console.log('fetchJob error', error);
|
66
|
-
} finally {
|
67
|
-
this.onLoadingChanged(false);
|
68
|
-
}
|
69
|
-
});
|
70
|
-
});
|
71
|
-
_defineProperty(this, "resetDataSource", (source = '') => {
|
72
|
-
const {
|
73
|
-
searchText,
|
74
|
-
selectedStatus,
|
75
|
-
selectedType
|
76
|
-
} = this.state;
|
77
|
-
const {
|
78
|
-
jobs
|
79
|
-
} = this.props;
|
80
|
-
let filteredList = jobs;
|
81
|
-
let jobIdMatch = null;
|
82
|
-
if (searchText) {
|
83
|
-
jobIdMatch = _.find(jobs, j => j.jobId === searchText);
|
84
|
-
filteredList = jobs.filter(j => {
|
85
|
-
if (j.room && j.room.toLowerCase().indexOf(searchText.toLowerCase()) > -1) {
|
86
|
-
return true;
|
87
|
-
}
|
88
|
-
return false;
|
89
|
-
});
|
90
|
-
if (!jobIdMatch) this.fetchJob(searchText);
|
91
|
-
}
|
92
|
-
if (selectedStatus) filteredList = filteredList.filter(j => selectedStatus.includes(j.status));
|
93
|
-
if (selectedType) filteredList = filteredList.filter(j => selectedType.includes(j.type));
|
94
|
-
if (jobIdMatch) {
|
95
|
-
const jobIndex = filteredList.indexOf(jobIdMatch);
|
96
|
-
if (jobIndex > -1) {
|
97
|
-
filteredList.splice(jobIndex, 1);
|
98
|
-
}
|
99
|
-
filteredList.unshift(jobIdMatch);
|
100
|
-
}
|
101
|
-
if (source !== 'search') this.refresh();
|
102
|
-
this.setState({
|
103
|
-
filteredList
|
104
|
-
});
|
105
|
-
});
|
106
|
-
_defineProperty(this, "onLoadingChanged", (loading, callback) => {
|
107
|
-
this.setState({
|
108
|
-
loading
|
109
|
-
}, () => {
|
110
|
-
if (this.props.onLoadingChanged) this.props.onLoadingChanged(this.state.loading);
|
111
|
-
if (callback) callback();
|
112
|
-
});
|
113
|
-
});
|
114
|
-
_defineProperty(this, "onSearchText", value => {
|
115
|
-
this.setState({
|
116
|
-
searchText: value
|
117
|
-
}, () => {
|
118
|
-
if (_.isEmpty(this.state.searchText)) this.resetDataSource('search');
|
119
|
-
});
|
120
|
-
});
|
121
|
-
_defineProperty(this, "onSearchSubmit", () => {
|
122
|
-
this.resetDataSource('search');
|
123
|
-
});
|
124
|
-
_defineProperty(this, "onToggleFilter", () => {
|
125
|
-
this.setState({
|
126
|
-
showFilterPopup: !this.state.showFilterPopup
|
127
|
-
});
|
128
|
-
});
|
129
|
-
_defineProperty(this, "onSelectFilter", selected => {
|
130
|
-
this.setState({
|
131
|
-
selectedStatus: selected.status,
|
132
|
-
selectedType: selected.type
|
133
|
-
}, () => {
|
134
|
-
this.resetDataSource();
|
135
|
-
this.onToggleFilter();
|
136
|
-
});
|
137
|
-
});
|
138
|
-
this.initialStatus = props.hasPermission ? 'Unassigned|In Progress' : '';
|
139
|
-
this.state = {
|
140
|
-
types: [],
|
141
|
-
filteredList: props.jobs,
|
142
|
-
loading: false,
|
143
|
-
searchText: '',
|
144
|
-
showFilterPopup: false,
|
145
|
-
selectedStatus: this.initialStatus,
|
146
|
-
selectedType: ''
|
147
|
-
};
|
148
|
-
}
|
149
|
-
componentDidMount() {
|
150
|
-
this.refresh();
|
151
|
-
this.refreshTypes();
|
152
|
-
this.resetDataSource();
|
153
|
-
}
|
154
|
-
componentDidUpdate(prevProps) {
|
155
|
-
if (!prevProps.dataUpdated && this.props.dataUpdated) this.refresh();
|
156
|
-
if (!_.isEqual(prevProps.jobs, this.props.jobs)) this.resetDataSource();
|
157
|
-
}
|
158
|
-
getEmptyStateText() {
|
159
|
-
if (this.props.options && !_.isEmpty(this.props.options.EmptyText)) {
|
160
|
-
return this.props.options.EmptyText;
|
161
|
-
}
|
162
|
-
return this.props.userCategory === 'staff' ? Config.env.strings.EMPTY_REQUESTS_STAFF : Config.env.strings.EMPTY_REQUESTS_USER;
|
163
|
-
}
|
164
|
-
renderEmptyList() {
|
165
|
-
return this.state.loading ? null : /*#__PURE__*/React.createElement(Components.EmptyStateMain, {
|
166
|
-
title: this.getEmptyStateText(),
|
167
|
-
style: {
|
168
|
-
marginHorizontal: 16
|
169
|
-
}
|
170
|
-
});
|
171
|
-
}
|
172
|
-
renderFilterButton() {
|
173
|
-
return /*#__PURE__*/React.createElement(TouchableOpacity, {
|
174
|
-
onPress: this.onToggleFilter
|
175
|
-
}, /*#__PURE__*/React.createElement(View, {
|
176
|
-
style: styles.filterButton
|
177
|
-
}, /*#__PURE__*/React.createElement(Text, {
|
178
|
-
style: [styles.filterButtonText, {
|
179
|
-
color: this.props.colourBrandingMain
|
180
|
-
}]
|
181
|
-
}, "Filter")));
|
182
|
-
}
|
183
|
-
renderSearch() {
|
184
|
-
if (!this.props.hasPermission) return null;
|
185
|
-
return /*#__PURE__*/React.createElement(View, {
|
186
|
-
style: styles.searchContainer
|
187
|
-
}, /*#__PURE__*/React.createElement(Components.GenericInput, {
|
188
|
-
placeholder: "Search by Job ID or Location",
|
189
|
-
value: this.state.searchText,
|
190
|
-
onChangeText: this.onSearchText,
|
191
|
-
onSubmitEditing: this.onSearchSubmit,
|
192
|
-
squaredCorners: true,
|
193
|
-
hasClear: true
|
194
|
-
// keyboardType={'numeric'}
|
195
|
-
,
|
196
|
-
returnKeyType: 'done'
|
197
|
-
}));
|
198
|
-
}
|
199
|
-
renderListHeader() {
|
200
|
-
const {
|
201
|
-
ListHeaderComponent
|
202
|
-
} = this.props;
|
203
|
-
return /*#__PURE__*/React.createElement(View, null, ListHeaderComponent ? ListHeaderComponent : /*#__PURE__*/React.createElement(View, {
|
204
|
-
style: {
|
205
|
-
height: 32
|
206
|
-
}
|
207
|
-
}), this.renderFilterButton(), this.renderSearch());
|
208
|
-
}
|
209
|
-
renderList() {
|
210
|
-
const {
|
211
|
-
filteredList
|
212
|
-
} = this.state;
|
213
|
-
return /*#__PURE__*/React.createElement(FlatList, {
|
214
|
-
keyboardShouldPersistTaps: "always",
|
215
|
-
style: {
|
216
|
-
flex: 1
|
217
|
-
},
|
218
|
-
contentContainerStyle: {
|
219
|
-
paddingBottom: 16
|
220
|
-
},
|
221
|
-
data: filteredList,
|
222
|
-
keyExtractor: item => item.id,
|
223
|
-
renderItem: ({
|
224
|
-
item
|
225
|
-
}) => /*#__PURE__*/React.createElement(MaintenanceListItem, {
|
226
|
-
style: this.props.itemStyle,
|
227
|
-
job: item
|
228
|
-
}),
|
229
|
-
ListEmptyComponent: this.renderEmptyList(),
|
230
|
-
ListHeaderComponent: this.renderListHeader()
|
231
|
-
});
|
232
|
-
}
|
233
|
-
renderFilterPopup() {
|
234
|
-
const {
|
235
|
-
showFilterPopup,
|
236
|
-
types,
|
237
|
-
selectedStatus,
|
238
|
-
selectedType
|
239
|
-
} = this.state;
|
240
|
-
if (!showFilterPopup) return null;
|
241
|
-
return /*#__PURE__*/React.createElement(FilterPopupMenu, {
|
242
|
-
site: this.props.site,
|
243
|
-
types: types,
|
244
|
-
status: selectedStatus,
|
245
|
-
type: selectedType,
|
246
|
-
onClose: this.onSelectFilter
|
247
|
-
});
|
248
|
-
}
|
249
|
-
render() {
|
250
|
-
return /*#__PURE__*/React.createElement(View, {
|
251
|
-
style: [styles.container, this.props.style]
|
252
|
-
}, this.renderList(), this.renderFilterPopup());
|
253
|
-
}
|
254
|
-
}
|
255
|
-
const styles = StyleSheet.create({
|
256
|
-
container: {
|
257
|
-
flex: 1,
|
258
|
-
backgroundColor: '#fff'
|
259
|
-
},
|
260
|
-
filterContainerOuter: {
|
261
|
-
flexDirection: 'row',
|
262
|
-
justifyContent: 'space-between',
|
263
|
-
alignItems: 'center',
|
264
|
-
paddingHorizontal: 16,
|
265
|
-
paddingVertical: 16
|
266
|
-
},
|
267
|
-
filterTitle: {
|
268
|
-
fontFamily: 'sf-bold',
|
269
|
-
fontSize: 11,
|
270
|
-
letterSpacing: 0.8,
|
271
|
-
color: '#4d4d4d'
|
272
|
-
},
|
273
|
-
filterContainer: {
|
274
|
-
flexDirection: 'row',
|
275
|
-
alignItems: 'center'
|
276
|
-
},
|
277
|
-
filterText: {
|
278
|
-
fontFamily: 'sf-semibold',
|
279
|
-
fontSize: 16,
|
280
|
-
marginRight: 6
|
281
|
-
},
|
282
|
-
filterIcon: {
|
283
|
-
fontSize: 20
|
284
|
-
},
|
285
|
-
searchContainer: {
|
286
|
-
flexDirection: 'row',
|
287
|
-
alignItems: 'center',
|
288
|
-
paddingBottom: 8,
|
289
|
-
paddingHorizontal: 16
|
290
|
-
},
|
291
|
-
filterButton: {
|
292
|
-
position: 'absolute',
|
293
|
-
right: 20,
|
294
|
-
top: -32
|
295
|
-
},
|
296
|
-
filterButtonText: {
|
297
|
-
fontFamily: 'sf-semibold',
|
298
|
-
fontSize: 16
|
299
|
-
}
|
300
|
-
});
|
301
|
-
const mapStateToProps = state => {
|
302
|
-
const {
|
303
|
-
user,
|
304
|
-
jobs,
|
305
|
-
notifications
|
306
|
-
} = state;
|
307
|
-
const jobsOrdered = _.orderBy(jobs.jobs, ['createdUnix'], ['desc']);
|
308
|
-
const hasPermission = _.includes(user.permissions, 'maintenanceTracking');
|
309
|
-
return {
|
310
|
-
hasPermission,
|
311
|
-
jobs: jobsOrdered,
|
312
|
-
site: user.site,
|
313
|
-
userCategory: user.category,
|
314
|
-
colourBrandingMain: Colours.getMainBrandingColourFromState(state),
|
315
|
-
dataUpdated: notifications.dataUpdated['jobs']
|
316
|
-
};
|
317
|
-
};
|
318
|
-
export default connect(mapStateToProps, {
|
319
|
-
jobsLoaded,
|
320
|
-
jobAdded,
|
321
|
-
jobsAdded
|
322
|
-
}, null, {
|
323
|
-
forwardRef: true
|
324
|
-
})(MaintenanceList);
|
325
|
-
//# sourceMappingURL=MaintenanceList.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"names":["React","Component","View","StyleSheet","FlatList","TouchableOpacity","Text","_","connect","generalActions","jobsLoaded","jobAdded","jobsAdded","MaintenanceListItem","FilterPopupMenu","Components","Colours","Config","Helper","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","jobs","filteredList","jobIdMatch","find","j","filter","room","toLowerCase","indexOf","fetchJob","includes","status","type","jobIndex","unshift","refresh","callback","resetDataSource","showFilterPopup","selected","onToggleFilter","hasPermission","componentDidMount","refreshTypes","componentDidUpdate","prevProps","dataUpdated","isEqual","getEmptyStateText","options","EmptyText","userCategory","env","strings","EMPTY_REQUESTS_STAFF","EMPTY_REQUESTS_USER","renderEmptyList","createElement","EmptyStateMain","title","style","marginHorizontal","renderFilterButton","onPress","styles","filterButton","filterButtonText","color","colourBrandingMain","renderSearch","searchContainer","GenericInput","placeholder","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","position","right","top","mapStateToProps","user","notifications","jobsOrdered","orderBy","permissions","category","getMainBrandingColourFromState","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 { generalActions } 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';\n\nclass MaintenanceList extends Component {\n constructor(props) {\n super(props);\n\n this.initialStatus = props.hasPermission ? 'Unassigned|In Progress' : '';\n\n this.state = {\n types: [],\n filteredList: props.jobs,\n loading: false,\n searchText: '',\n showFilterPopup: false,\n selectedStatus: this.initialStatus,\n selectedType: '',\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 generalActions.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 generalActions.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 generalActions.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' ? Config.env.strings.EMPTY_REQUESTS_STAFF : Config.env.strings.EMPTY_REQUESTS_USER;\n }\n\n resetDataSource = (source = '') => {\n const { searchText, selectedStatus, selectedType } = 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 (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({ selectedStatus: selected.status, selectedType: selected.type }, () => {\n this.resetDataSource();\n this.onToggleFilter();\n });\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 }]}>Filter</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 Job ID or Location\"\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: 32 }} />}\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 } = this.state;\n if (!showFilterPopup) return null;\n\n return (\n <FilterPopupMenu site={this.props.site} types={types} status={selectedStatus} type={selectedType} onClose={this.onSelectFilter} />\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 position: 'absolute',\n right: 20,\n top: -32,\n },\n filterButtonText: {\n fontFamily: 'sf-semibold',\n fontSize: 16,\n },\n});\n\nconst mapStateToProps = state => {\n const { user, jobs, notifications } = state;\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['jobs'],\n };\n};\n\nexport default connect(mapStateToProps, { jobsLoaded, jobAdded, jobsAdded }, null, { forwardRef: true })(MaintenanceList);\n"],"mappings":";;;AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAQ,OAAO;AACxC,SAASC,IAAI,EAAEC,UAAU,EAAEC,QAAQ,EAAEC,gBAAgB,EAAEC,IAAI,QAAQ,cAAc;AACjF,OAAOC,CAAC,MAAM,QAAQ;AACtB,SAASC,OAAO,QAAQ,aAAa;AACrC,SAASC,cAAc,QAAQ,SAAS;AACxC,SAASC,UAAU,EAAEC,QAAQ,EAAEC,SAAS,QAAQ,YAAY;AAC5D,OAAOC,mBAAmB,MAAM,mCAAmC;AACnE,OAAOC,eAAe,MAAM,mBAAmB;AAC/C,SAASC,UAAU,EAAEC,OAAO,EAAEC,MAAM,EAAEC,MAAM,QAAQ,gBAAgB;AAEpE,MAAMC,eAAe,SAASlB,SAAS,CAAC;EACtCmB,WAAWA,CAACC,KAAK,EAAE;IACjB,KAAK,CAACA,KAAK,CAAC;IAACC,eAAA,kBA2BL,MAAM;MACd,IAAI,CAACC,gBAAgB,CAAC,IAAI,EAAE,YAAY;QACtC,IAAI;UACF,MAAM;YAAEC,cAAc;YAAEC;UAAa,CAAC,GAAG,IAAI,CAACC,KAAK;UACnD;UACA,MAAMC,GAAG,GAAG,MAAMlB,cAAc,CAACmB,gBAAgB,CAAC,IAAI,CAACP,KAAK,CAACQ,IAAI,EAAEL,cAAc,EAAEC,YAAY,CAAC;UAChG;UACA,IAAID,cAAc,KAAK,IAAI,CAACM,aAAa,IAAI,CAACvB,CAAC,CAACwB,OAAO,CAACN,YAAY,CAAC,EAAE;YACrE,IAAI,CAACJ,KAAK,CAACT,SAAS,CAACe,GAAG,CAAC;UAC3B,CAAC,MAAM;YACL,IAAI,CAACN,KAAK,CAACX,UAAU,CAACiB,GAAG,CAAC;UAC5B;QACF,CAAC,CAAC,OAAOK,KAAK,EAAE;UACdC,OAAO,CAACC,GAAG,CAAC,eAAe,EAAEF,KAAK,CAAC;QACrC,CAAC,SAAS;UACR,IAAI,CAACT,gBAAgB,CAAC,KAAK,CAAC;QAC9B;MACF,CAAC,CAAC;IACJ,CAAC;IAAAD,eAAA,uBAEc,YAAY;MACzB,MAAM;QAAEa;MAAK,CAAC,GAAG,MAAM1B,cAAc,CAAC2B,WAAW,CAAClB,MAAM,CAACmB,OAAO,CAAC,IAAI,CAAChB,KAAK,CAACQ,IAAI,CAAC,CAAC;MAClF,MAAMS,KAAK,GAAGH,IAAI,CAACI,GAAG,CAACC,CAAC,IAAI;QAC1B,OAAO;UAAEC,KAAK,EAAED,CAAC,CAACE,QAAQ;UAAEC,KAAK,EAAEH,CAAC,CAACE;QAAS,CAAC;MACjD,CAAC,CAAC;MACFJ,KAAK,CAACM,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE;QAAEH,KAAK,EAAE,KAAK;QAAEE,KAAK,EAAE;MAAG,CAAC,CAAC;MAC/C;MACA,IAAI,CAACE,QAAQ,CAAC;QAAEP;MAAM,CAAC,CAAC;IAC1B,CAAC;IAAAhB,eAAA,mBAEUwB,KAAK,IAAI;MAClB,IAAI,IAAI,CAACpB,KAAK,CAACqB,OAAO,EAAE;MAExB,IAAI,CAACxB,gBAAgB,CAAC,IAAI,EAAE,YAAY;QACtC,IAAI;UACF,MAAMyB,GAAG,GAAG,MAAMvC,cAAc,CAACwC,aAAa,CAAC,IAAI,CAAC5B,KAAK,CAACQ,IAAI,EAAEiB,KAAK,CAAC;UACtE;UACA,IAAI,CAACzB,KAAK,CAACV,QAAQ,CAACqC,GAAG,CAACb,IAAI,CAAC;QAC/B,CAAC,CAAC,OAAOH,KAAK,EAAE;UACdC,OAAO,CAACC,GAAG,CAAC,gBAAgB,EAAEF,KAAK,CAAC;QACtC,CAAC,SAAS;UACR,IAAI,CAACT,gBAAgB,CAAC,KAAK,CAAC;QAC9B;MACF,CAAC,CAAC;IACJ,CAAC;IAAAD,eAAA,0BASiB,CAAC4B,MAAM,GAAG,EAAE,KAAK;MACjC,MAAM;QAAEC,UAAU;QAAE3B,cAAc;QAAEC;MAAa,CAAC,GAAG,IAAI,CAACC,KAAK;MAC/D,MAAM;QAAE0B;MAAK,CAAC,GAAG,IAAI,CAAC/B,KAAK;MAE3B,IAAIgC,YAAY,GAAGD,IAAI;MACvB,IAAIE,UAAU,GAAG,IAAI;MACrB,IAAIH,UAAU,EAAE;QACdG,UAAU,GAAG/C,CAAC,CAACgD,IAAI,CAACH,IAAI,EAAEI,CAAC,IAAIA,CAAC,CAACV,KAAK,KAAKK,UAAU,CAAC;QACtDE,YAAY,GAAGD,IAAI,CAACK,MAAM,CAACD,CAAC,IAAI;UAC9B,IAAIA,CAAC,CAACE,IAAI,IAAIF,CAAC,CAACE,IAAI,CAACC,WAAW,CAAC,CAAC,CAACC,OAAO,CAACT,UAAU,CAACQ,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;YACzE,OAAO,IAAI;UACb;UACA,OAAO,KAAK;QACd,CAAC,CAAC;QACF,IAAI,CAACL,UAAU,EAAE,IAAI,CAACO,QAAQ,CAACV,UAAU,CAAC;MAC5C;MACA,IAAI3B,cAAc,EAAE6B,YAAY,GAAGA,YAAY,CAACI,MAAM,CAACD,CAAC,IAAIhC,cAAc,CAACsC,QAAQ,CAACN,CAAC,CAACO,MAAM,CAAC,CAAC;MAC9F,IAAItC,YAAY,EAAE4B,YAAY,GAAGA,YAAY,CAACI,MAAM,CAACD,CAAC,IAAI/B,YAAY,CAACqC,QAAQ,CAACN,CAAC,CAACQ,IAAI,CAAC,CAAC;MACxF,IAAIV,UAAU,EAAE;QACd,MAAMW,QAAQ,GAAGZ,YAAY,CAACO,OAAO,CAACN,UAAU,CAAC;QACjD,IAAIW,QAAQ,GAAG,CAAC,CAAC,EAAE;UACjBZ,YAAY,CAACT,MAAM,CAACqB,QAAQ,EAAE,CAAC,CAAC;QAClC;QACAZ,YAAY,CAACa,OAAO,CAACZ,UAAU,CAAC;MAClC;MACA,IAAIJ,MAAM,KAAK,QAAQ,EAAE,IAAI,CAACiB,OAAO,CAAC,CAAC;MAEvC,IAAI,CAACtB,QAAQ,CAAC;QAAEQ;MAAa,CAAC,CAAC;IACjC,CAAC;IAAA/B,eAAA,2BAEkB,CAACyB,OAAO,EAAEqB,QAAQ,KAAK;MACxC,IAAI,CAACvB,QAAQ,CAAC;QAAEE;MAAQ,CAAC,EAAE,MAAM;QAC/B,IAAI,IAAI,CAAC1B,KAAK,CAACE,gBAAgB,EAAE,IAAI,CAACF,KAAK,CAACE,gBAAgB,CAAC,IAAI,CAACG,KAAK,CAACqB,OAAO,CAAC;QAChF,IAAIqB,QAAQ,EAAEA,QAAQ,CAAC,CAAC;MAC1B,CAAC,CAAC;IACJ,CAAC;IAAA9C,eAAA,uBAEcqB,KAAK,IAAI;MACtB,IAAI,CAACE,QAAQ,CAAC;QAAEM,UAAU,EAAER;MAAM,CAAC,EAAE,MAAM;QACzC,IAAIpC,CAAC,CAACwB,OAAO,CAAC,IAAI,CAACL,KAAK,CAACyB,UAAU,CAAC,EAAE,IAAI,CAACkB,eAAe,CAAC,QAAQ,CAAC;MACtE,CAAC,CAAC;IACJ,CAAC;IAAA/C,eAAA,yBAEgB,MAAM;MACrB,IAAI,CAAC+C,eAAe,CAAC,QAAQ,CAAC;IAChC,CAAC;IAAA/C,eAAA,yBAEgB,MAAM;MACrB,IAAI,CAACuB,QAAQ,CAAC;QAAEyB,eAAe,EAAE,CAAC,IAAI,CAAC5C,KAAK,CAAC4C;MAAgB,CAAC,CAAC;IACjE,CAAC;IAAAhD,eAAA,yBAEgBiD,QAAQ,IAAI;MAC3B,IAAI,CAAC1B,QAAQ,CAAC;QAAErB,cAAc,EAAE+C,QAAQ,CAACR,MAAM;QAAEtC,YAAY,EAAE8C,QAAQ,CAACP;MAAK,CAAC,EAAE,MAAM;QACpF,IAAI,CAACK,eAAe,CAAC,CAAC;QACtB,IAAI,CAACG,cAAc,CAAC,CAAC;MACvB,CAAC,CAAC;IACJ,CAAC;IAtIC,IAAI,CAAC1C,aAAa,GAAGT,KAAK,CAACoD,aAAa,GAAG,wBAAwB,GAAG,EAAE;IAExE,IAAI,CAAC/C,KAAK,GAAG;MACXY,KAAK,EAAE,EAAE;MACTe,YAAY,EAAEhC,KAAK,CAAC+B,IAAI;MACxBL,OAAO,EAAE,KAAK;MACdI,UAAU,EAAE,EAAE;MACdmB,eAAe,EAAE,KAAK;MACtB9C,cAAc,EAAE,IAAI,CAACM,aAAa;MAClCL,YAAY,EAAE;IAChB,CAAC;EACH;EAEAiD,iBAAiBA,CAAA,EAAG;IAClB,IAAI,CAACP,OAAO,CAAC,CAAC;IACd,IAAI,CAACQ,YAAY,CAAC,CAAC;IAEnB,IAAI,CAACN,eAAe,CAAC,CAAC;EACxB;EAEAO,kBAAkBA,CAACC,SAAS,EAAE;IAC5B,IAAI,CAACA,SAAS,CAACC,WAAW,IAAI,IAAI,CAACzD,KAAK,CAACyD,WAAW,EAAE,IAAI,CAACX,OAAO,CAAC,CAAC;IACpE,IAAI,CAAC5D,CAAC,CAACwE,OAAO,CAACF,SAAS,CAACzB,IAAI,EAAE,IAAI,CAAC/B,KAAK,CAAC+B,IAAI,CAAC,EAAE,IAAI,CAACiB,eAAe,CAAC,CAAC;EACzE;EAgDAW,iBAAiBA,CAAA,EAAG;IAClB,IAAI,IAAI,CAAC3D,KAAK,CAAC4D,OAAO,IAAI,CAAC1E,CAAC,CAACwB,OAAO,CAAC,IAAI,CAACV,KAAK,CAAC4D,OAAO,CAACC,SAAS,CAAC,EAAE;MAClE,OAAO,IAAI,CAAC7D,KAAK,CAAC4D,OAAO,CAACC,SAAS;IACrC;IACA,OAAO,IAAI,CAAC7D,KAAK,CAAC8D,YAAY,KAAK,OAAO,GAAGlE,MAAM,CAACmE,GAAG,CAACC,OAAO,CAACC,oBAAoB,GAAGrE,MAAM,CAACmE,GAAG,CAACC,OAAO,CAACE,mBAAmB;EAC/H;EA4DAC,eAAeA,CAAA,EAAG;IAChB,OAAO,IAAI,CAAC9D,KAAK,CAACqB,OAAO,GAAG,IAAI,gBAAG/C,KAAA,CAAAyF,aAAA,CAAC1E,UAAU,CAAC2E,cAAc;MAACC,KAAK,EAAE,IAAI,CAACX,iBAAiB,CAAC,CAAE;MAACY,KAAK,EAAE;QAAEC,gBAAgB,EAAE;MAAG;IAAE,CAAE,CAAC;EACpI;EAEAC,kBAAkBA,CAAA,EAAG;IACnB,oBACE9F,KAAA,CAAAyF,aAAA,CAACpF,gBAAgB;MAAC0F,OAAO,EAAE,IAAI,CAACvB;IAAe,gBAC7CxE,KAAA,CAAAyF,aAAA,CAACvF,IAAI;MAAC0F,KAAK,EAAEI,MAAM,CAACC;IAAa,gBAC/BjG,KAAA,CAAAyF,aAAA,CAACnF,IAAI;MAACsF,KAAK,EAAE,CAACI,MAAM,CAACE,gBAAgB,EAAE;QAAEC,KAAK,EAAE,IAAI,CAAC9E,KAAK,CAAC+E;MAAmB,CAAC;IAAE,GAAC,QAAY,CAC1F,CACU,CAAC;EAEvB;EAEAC,YAAYA,CAAA,EAAG;IACb,IAAI,CAAC,IAAI,CAAChF,KAAK,CAACoD,aAAa,EAAE,OAAO,IAAI;IAE1C,oBACEzE,KAAA,CAAAyF,aAAA,CAACvF,IAAI;MAAC0F,KAAK,EAAEI,MAAM,CAACM;IAAgB,gBAClCtG,KAAA,CAAAyF,aAAA,CAAC1E,UAAU,CAACwF,YAAY;MACtBC,WAAW,EAAC,8BAA8B;MAC1C7D,KAAK,EAAE,IAAI,CAACjB,KAAK,CAACyB,UAAW;MAC7BsD,YAAY,EAAE,IAAI,CAACC,YAAa;MAChCC,eAAe,EAAE,IAAI,CAACC,cAAe;MACrCC,cAAc;MACdC,QAAQ;MACR;MAAA;MACAC,aAAa,EAAE;IAAO,CACvB,CACG,CAAC;EAEX;EAEAC,gBAAgBA,CAAA,EAAG;IACjB,MAAM;MAAEC;IAAoB,CAAC,GAAG,IAAI,CAAC5F,KAAK;IAC1C,oBACErB,KAAA,CAAAyF,aAAA,CAACvF,IAAI,QACF+G,mBAAmB,GAAGA,mBAAmB,gBAAGjH,KAAA,CAAAyF,aAAA,CAACvF,IAAI;MAAC0F,KAAK,EAAE;QAAEsB,MAAM,EAAE;MAAG;IAAE,CAAE,CAAC,EAC3E,IAAI,CAACpB,kBAAkB,CAAC,CAAC,EACzB,IAAI,CAACO,YAAY,CAAC,CACf,CAAC;EAEX;EAEAc,UAAUA,CAAA,EAAG;IACX,MAAM;MAAE9D;IAAa,CAAC,GAAG,IAAI,CAAC3B,KAAK;IAEnC,oBACE1B,KAAA,CAAAyF,aAAA,CAACrF,QAAQ;MACPgH,yBAAyB,EAAC,QAAQ;MAClCxB,KAAK,EAAE;QAAEyB,IAAI,EAAE;MAAE,CAAE;MACnBC,qBAAqB,EAAE;QAAEC,aAAa,EAAE;MAAG,CAAE;MAC7CpF,IAAI,EAAEkB,YAAa;MACnBmE,YAAY,EAAEC,IAAI,IAAIA,IAAI,CAACC,EAAG;MAC9BC,UAAU,EAAEA,CAAC;QAAEF;MAAK,CAAC,kBAAKzH,KAAA,CAAAyF,aAAA,CAAC5E,mBAAmB;QAAC+E,KAAK,EAAE,IAAI,CAACvE,KAAK,CAACuG,SAAU;QAAC5E,GAAG,EAAEyE;MAAK,CAAE,CAAE;MAC1FI,kBAAkB,EAAE,IAAI,CAACrC,eAAe,CAAC,CAAE;MAC3CyB,mBAAmB,EAAE,IAAI,CAACD,gBAAgB,CAAC;IAAE,CAC9C,CAAC;EAEN;EAEAc,iBAAiBA,CAAA,EAAG;IAClB,MAAM;MAAExD,eAAe;MAAEhC,KAAK;MAAEd,cAAc;MAAEC;IAAa,CAAC,GAAG,IAAI,CAACC,KAAK;IAC3E,IAAI,CAAC4C,eAAe,EAAE,OAAO,IAAI;IAEjC,oBACEtE,KAAA,CAAAyF,aAAA,CAAC3E,eAAe;MAACe,IAAI,EAAE,IAAI,CAACR,KAAK,CAACQ,IAAK;MAACS,KAAK,EAAEA,KAAM;MAACyB,MAAM,EAAEvC,cAAe;MAACwC,IAAI,EAAEvC,YAAa;MAACsG,OAAO,EAAE,IAAI,CAACC;IAAe,CAAE,CAAC;EAEtI;EAEAC,MAAMA,CAAA,EAAG;IACP,oBACEjI,KAAA,CAAAyF,aAAA,CAACvF,IAAI;MAAC0F,KAAK,EAAE,CAACI,MAAM,CAACkC,SAAS,EAAE,IAAI,CAAC7G,KAAK,CAACuE,KAAK;IAAE,GAC/C,IAAI,CAACuB,UAAU,CAAC,CAAC,EACjB,IAAI,CAACW,iBAAiB,CAAC,CACpB,CAAC;EAEX;AACF;AAEA,MAAM9B,MAAM,GAAG7F,UAAU,CAACgI,MAAM,CAAC;EAC/BD,SAAS,EAAE;IACTb,IAAI,EAAE,CAAC;IACPe,eAAe,EAAE;EACnB,CAAC;EACDC,oBAAoB,EAAE;IACpBC,aAAa,EAAE,KAAK;IACpBC,cAAc,EAAE,eAAe;IAC/BC,UAAU,EAAE,QAAQ;IACpBC,iBAAiB,EAAE,EAAE;IACrBC,eAAe,EAAE;EACnB,CAAC;EACDC,WAAW,EAAE;IACXC,UAAU,EAAE,SAAS;IACrBC,QAAQ,EAAE,EAAE;IACZC,aAAa,EAAE,GAAG;IAClB3C,KAAK,EAAE;EACT,CAAC;EACD4C,eAAe,EAAE;IACfT,aAAa,EAAE,KAAK;IACpBE,UAAU,EAAE;EACd,CAAC;EACDQ,UAAU,EAAE;IACVJ,UAAU,EAAE,aAAa;IACzBC,QAAQ,EAAE,EAAE;IACZI,WAAW,EAAE;EACf,CAAC;EACDC,UAAU,EAAE;IACVL,QAAQ,EAAE;EACZ,CAAC;EACDvC,eAAe,EAAE;IACfgC,aAAa,EAAE,KAAK;IACpBE,UAAU,EAAE,QAAQ;IACpBjB,aAAa,EAAE,CAAC;IAChBkB,iBAAiB,EAAE;EACrB,CAAC;EACDxC,YAAY,EAAE;IACZkD,QAAQ,EAAE,UAAU;IACpBC,KAAK,EAAE,EAAE;IACTC,GAAG,EAAE,CAAC;EACR,CAAC;EACDnD,gBAAgB,EAAE;IAChB0C,UAAU,EAAE,aAAa;IACzBC,QAAQ,EAAE;EACZ;AACF,CAAC,CAAC;AAEF,MAAMS,eAAe,GAAG5H,KAAK,IAAI;EAC/B,MAAM;IAAE6H,IAAI;IAAEnG,IAAI;IAAEoG;EAAc,CAAC,GAAG9H,KAAK;EAC3C,MAAM+H,WAAW,GAAGlJ,CAAC,CAACmJ,OAAO,CAACtG,IAAI,CAACA,IAAI,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;EACnE,MAAMqB,aAAa,GAAGlE,CAAC,CAACuD,QAAQ,CAACyF,IAAI,CAACI,WAAW,EAAE,qBAAqB,CAAC;EAEzE,OAAO;IACLlF,aAAa;IACbrB,IAAI,EAAEqG,WAAW;IACjB5H,IAAI,EAAE0H,IAAI,CAAC1H,IAAI;IACfsD,YAAY,EAAEoE,IAAI,CAACK,QAAQ;IAC3BxD,kBAAkB,EAAEpF,OAAO,CAAC6I,8BAA8B,CAACnI,KAAK,CAAC;IACjEoD,WAAW,EAAE0E,aAAa,CAAC1E,WAAW,CAAC,MAAM;EAC/C,CAAC;AACH,CAAC;AAED,eAAetE,OAAO,CAAC8I,eAAe,EAAE;EAAE5I,UAAU;EAAEC,QAAQ;EAAEC;AAAU,CAAC,EAAE,IAAI,EAAE;EAAEkJ,UAAU,EAAE;AAAK,CAAC,CAAC,CAAC3I,eAAe,CAAC"}
|
@@ -1,322 +0,0 @@
|
|
1
|
-
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
2
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(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 { Image, Text, TouchableOpacity, View, StyleSheet } from 'react-native';
|
6
|
-
import _ from 'lodash';
|
7
|
-
import { Icon } from 'react-native-elements';
|
8
|
-
import { connect } from 'react-redux';
|
9
|
-
import moment from 'moment';
|
10
|
-
// import {
|
11
|
-
// getShadowStyle,
|
12
|
-
// LINEGREY,
|
13
|
-
// TEXT_DARK,
|
14
|
-
// TEXT_LIGHT,
|
15
|
-
// COLOUR_GREEN,
|
16
|
-
// getMainBrandingColourFromState,
|
17
|
-
// hexToRGBAstring,
|
18
|
-
// getJobStatusProps,
|
19
|
-
// jobStatusOptions,
|
20
|
-
// } from '../../js';
|
21
|
-
// import NavigationService from '../../js/NavigationService';
|
22
|
-
import { getJobStatusProps, jobStatusOptions } from '../helper';
|
23
|
-
import { Services } from '../feature.config';
|
24
|
-
import { Helper, Colours } from '../core.config';
|
25
|
-
class MaintenanceListItem extends Component {
|
26
|
-
constructor(...args) {
|
27
|
-
super(...args);
|
28
|
-
_defineProperty(this, "onPressJob", () => {
|
29
|
-
Services.navigation.navigate('requestDetail', {
|
30
|
-
job: this.props.job
|
31
|
-
});
|
32
|
-
});
|
33
|
-
}
|
34
|
-
renderCommentCount() {
|
35
|
-
const {
|
36
|
-
job
|
37
|
-
} = this.props;
|
38
|
-
if (!job.commentCount) {
|
39
|
-
return null;
|
40
|
-
}
|
41
|
-
return /*#__PURE__*/React.createElement(View, {
|
42
|
-
style: styles.commentCountContainer
|
43
|
-
}, /*#__PURE__*/React.createElement(Text, {
|
44
|
-
style: styles.commentCountText
|
45
|
-
}, job.commentCount > 99 ? '99' : job.commentCount));
|
46
|
-
}
|
47
|
-
renderDescription() {
|
48
|
-
const {
|
49
|
-
job
|
50
|
-
} = this.props;
|
51
|
-
if (_.isEmpty(job.description)) {
|
52
|
-
return null;
|
53
|
-
}
|
54
|
-
return /*#__PURE__*/React.createElement(Text, {
|
55
|
-
style: styles.jobDescriptionText
|
56
|
-
}, job.description);
|
57
|
-
}
|
58
|
-
renderSeen() {
|
59
|
-
const {
|
60
|
-
job
|
61
|
-
} = this.props;
|
62
|
-
const showSeen = !job.status || job.status === jobStatusOptions[0].name;
|
63
|
-
if (!showSeen || !job.seen) {
|
64
|
-
return null;
|
65
|
-
}
|
66
|
-
return /*#__PURE__*/React.createElement(View, {
|
67
|
-
style: styles.jobSeenContainer
|
68
|
-
}, /*#__PURE__*/React.createElement(Icon, {
|
69
|
-
name: "check",
|
70
|
-
type: "font-awesome",
|
71
|
-
iconStyle: [styles.jobSeenIcon, {
|
72
|
-
color: this.props.colourBrandingMain
|
73
|
-
}]
|
74
|
-
}), /*#__PURE__*/React.createElement(Text, {
|
75
|
-
style: [styles.jobSeenText, {
|
76
|
-
color: this.props.colourBrandingMain
|
77
|
-
}]
|
78
|
-
}, "Seen"));
|
79
|
-
}
|
80
|
-
render() {
|
81
|
-
const {
|
82
|
-
job
|
83
|
-
} = this.props;
|
84
|
-
const createdTime = moment(job.createdUnix);
|
85
|
-
const createdTimeText = `${createdTime.format('ddd, D MMMM')} • ${createdTime.format('h:mma')}`;
|
86
|
-
const activityTimeText = job.expectedDate ? moment(job.expectedDate).format('D MMMM') : '--';
|
87
|
-
const {
|
88
|
-
statusText,
|
89
|
-
statusColor
|
90
|
-
} = getJobStatusProps(job.status);
|
91
|
-
return /*#__PURE__*/React.createElement(TouchableOpacity, {
|
92
|
-
onPress: this.onPressJob
|
93
|
-
}, /*#__PURE__*/React.createElement(View, {
|
94
|
-
style: [styles.jobContainer, this.props.style]
|
95
|
-
}, /*#__PURE__*/React.createElement(View, {
|
96
|
-
style: styles.jobInnerContainer
|
97
|
-
}, /*#__PURE__*/React.createElement(View, {
|
98
|
-
style: styles.jobTopSection
|
99
|
-
}, /*#__PURE__*/React.createElement(View, {
|
100
|
-
style: styles.jobTopLeft
|
101
|
-
}, job.jobId ? /*#__PURE__*/React.createElement(Text, {
|
102
|
-
style: [styles.jobIdText, {
|
103
|
-
color: this.props.colourBrandingMain
|
104
|
-
}]
|
105
|
-
}, `Job #${job.jobId}`) : null, /*#__PURE__*/React.createElement(Text, {
|
106
|
-
style: styles.jobTitleText
|
107
|
-
}, job.title), job.room ? /*#__PURE__*/React.createElement(Text, {
|
108
|
-
style: styles.jobLocationText
|
109
|
-
}, job.room) : null, /*#__PURE__*/React.createElement(View, {
|
110
|
-
style: styles.jobTypeSeenContainer
|
111
|
-
}, /*#__PURE__*/React.createElement(View, {
|
112
|
-
style: [styles.jobTypeContainer, {
|
113
|
-
backgroundColor: Colours.hexToRGBAstring(this.props.colourBrandingMain, 0.2)
|
114
|
-
}]
|
115
|
-
}, /*#__PURE__*/React.createElement(Text, {
|
116
|
-
style: [styles.jobTypeText, {
|
117
|
-
color: this.props.colourBrandingMain
|
118
|
-
}]
|
119
|
-
}, job.type)), this.renderSeen())), /*#__PURE__*/React.createElement(View, {
|
120
|
-
style: styles.jobTopRight
|
121
|
-
}, /*#__PURE__*/React.createElement(Image, {
|
122
|
-
style: styles.jobCommentImage,
|
123
|
-
source: require('../images/speechbubble.png')
|
124
|
-
}), this.renderCommentCount())), /*#__PURE__*/React.createElement(View, {
|
125
|
-
style: styles.jobBottomSection
|
126
|
-
}, /*#__PURE__*/React.createElement(Text, {
|
127
|
-
style: styles.jobCreatedText
|
128
|
-
}, createdTimeText), /*#__PURE__*/React.createElement(View, {
|
129
|
-
style: styles.jobActivityContainer
|
130
|
-
}, /*#__PURE__*/React.createElement(View, {
|
131
|
-
style: [styles.jobStatusContainer, {
|
132
|
-
backgroundColor: statusColor
|
133
|
-
}]
|
134
|
-
}, /*#__PURE__*/React.createElement(Icon, {
|
135
|
-
name: "wrench",
|
136
|
-
type: "font-awesome",
|
137
|
-
iconStyle: styles.jobStatusIcon
|
138
|
-
}), /*#__PURE__*/React.createElement(Text, {
|
139
|
-
style: styles.jobStatusText
|
140
|
-
}, statusText)), /*#__PURE__*/React.createElement(View, {
|
141
|
-
style: [styles.jobStatusLine, {
|
142
|
-
borderColor: statusColor
|
143
|
-
}]
|
144
|
-
}, /*#__PURE__*/React.createElement(View, {
|
145
|
-
style: styles.jobStatusLineMask
|
146
|
-
})), /*#__PURE__*/React.createElement(View, {
|
147
|
-
style: [styles.jobStatusCircle, {
|
148
|
-
backgroundColor: statusColor
|
149
|
-
}]
|
150
|
-
}), /*#__PURE__*/React.createElement(Text, {
|
151
|
-
style: styles.jobStatusDateText
|
152
|
-
}, activityTimeText))))));
|
153
|
-
}
|
154
|
-
}
|
155
|
-
const styles = StyleSheet.create({
|
156
|
-
jobContainer: {
|
157
|
-
marginVertical: 8,
|
158
|
-
paddingHorizontal: 16
|
159
|
-
},
|
160
|
-
jobInnerContainer: {
|
161
|
-
...Helper.getShadowStyle()
|
162
|
-
},
|
163
|
-
jobTopSection: {
|
164
|
-
flexDirection: 'row',
|
165
|
-
alignItems: 'flex-end',
|
166
|
-
paddingHorizontal: 10,
|
167
|
-
paddingVertical: 10,
|
168
|
-
borderBottomWidth: 1,
|
169
|
-
borderBottomColor: Colours.LINEGREY
|
170
|
-
},
|
171
|
-
jobTopLeft: {
|
172
|
-
flex: 1
|
173
|
-
},
|
174
|
-
jobIdText: {
|
175
|
-
fontFamily: 'sf-medium',
|
176
|
-
fontSize: 12,
|
177
|
-
marginBottom: 4
|
178
|
-
},
|
179
|
-
jobTitleText: {
|
180
|
-
fontFamily: 'sf-semibold',
|
181
|
-
fontSize: 18,
|
182
|
-
color: Colours.TEXT_DARK,
|
183
|
-
marginBottom: 4
|
184
|
-
},
|
185
|
-
jobLocationText: {
|
186
|
-
fontFamily: 'sf-medium',
|
187
|
-
fontSize: 12,
|
188
|
-
color: Colours.TEXT_LIGHT,
|
189
|
-
marginBottom: 4
|
190
|
-
},
|
191
|
-
jobTypeSeenContainer: {
|
192
|
-
marginTop: 4,
|
193
|
-
flexDirection: 'row',
|
194
|
-
alignItems: 'center'
|
195
|
-
},
|
196
|
-
jobTypeContainer: {
|
197
|
-
height: 20,
|
198
|
-
width: 80,
|
199
|
-
borderRadius: 4,
|
200
|
-
justifyContent: 'center'
|
201
|
-
},
|
202
|
-
jobTypeText: {
|
203
|
-
fontFamily: 'sf-semibold',
|
204
|
-
fontSize: 12,
|
205
|
-
textAlign: 'center'
|
206
|
-
},
|
207
|
-
jobSeenContainer: {
|
208
|
-
flexDirection: 'row',
|
209
|
-
alignItems: 'center',
|
210
|
-
marginLeft: 10
|
211
|
-
},
|
212
|
-
jobSeenIcon: {
|
213
|
-
fontSize: 12
|
214
|
-
},
|
215
|
-
jobSeenText: {
|
216
|
-
fontFamily: 'sf-semibold',
|
217
|
-
fontSize: 12,
|
218
|
-
marginLeft: 4
|
219
|
-
},
|
220
|
-
jobTopRight: {
|
221
|
-
alignItems: 'center',
|
222
|
-
justifyContent: 'center',
|
223
|
-
paddingHorizontal: 10,
|
224
|
-
paddingTop: 10
|
225
|
-
},
|
226
|
-
jobCommentImage: {
|
227
|
-
width: 34,
|
228
|
-
height: 34,
|
229
|
-
resizeMode: 'contain'
|
230
|
-
},
|
231
|
-
commentCountContainer: {
|
232
|
-
position: 'absolute',
|
233
|
-
top: 0,
|
234
|
-
right: 0,
|
235
|
-
borderRadius: 10,
|
236
|
-
borderWidth: 2,
|
237
|
-
borderColor: '#fff',
|
238
|
-
width: 20,
|
239
|
-
height: 20,
|
240
|
-
backgroundColor: Colours.COLOUR_GREEN,
|
241
|
-
justifyContent: 'center',
|
242
|
-
alignItems: 'center'
|
243
|
-
},
|
244
|
-
commentCountText: {
|
245
|
-
textAlign: 'center',
|
246
|
-
fontFamily: 'sf-bold',
|
247
|
-
fontSize: 10,
|
248
|
-
color: '#fff'
|
249
|
-
},
|
250
|
-
jobBottomSection: {
|
251
|
-
paddingHorizontal: 10,
|
252
|
-
paddingVertical: 16
|
253
|
-
},
|
254
|
-
jobDescriptionText: {
|
255
|
-
fontFamily: 'sf-medium',
|
256
|
-
fontSize: 14,
|
257
|
-
color: Colours.TEXT_DARK,
|
258
|
-
marginBottom: 8
|
259
|
-
},
|
260
|
-
jobCreatedText: {
|
261
|
-
fontFamily: 'sf-medium',
|
262
|
-
fontSize: 12,
|
263
|
-
color: Colours.TEXT_LIGHT,
|
264
|
-
marginBottom: 10
|
265
|
-
},
|
266
|
-
jobActivityContainer: {
|
267
|
-
flexDirection: 'row',
|
268
|
-
alignItems: 'center'
|
269
|
-
},
|
270
|
-
jobStatusContainer: {
|
271
|
-
flexDirection: 'row',
|
272
|
-
alignItems: 'center',
|
273
|
-
justifyContent: 'space-between',
|
274
|
-
width: 105,
|
275
|
-
height: 30,
|
276
|
-
paddingHorizontal: 8,
|
277
|
-
borderRadius: 4
|
278
|
-
},
|
279
|
-
jobStatusIcon: {
|
280
|
-
color: '#fff',
|
281
|
-
fontSize: 14
|
282
|
-
},
|
283
|
-
jobStatusText: {
|
284
|
-
color: '#fff',
|
285
|
-
textAlign: 'center',
|
286
|
-
fontFamily: 'sf-semibold',
|
287
|
-
fontSize: 13
|
288
|
-
},
|
289
|
-
jobStatusLine: {
|
290
|
-
borderWidth: 1,
|
291
|
-
borderStyle: 'dashed',
|
292
|
-
width: 30
|
293
|
-
},
|
294
|
-
jobStatusLineMask: {
|
295
|
-
position: 'absolute',
|
296
|
-
left: -1,
|
297
|
-
top: -1,
|
298
|
-
width: '100%',
|
299
|
-
height: 1,
|
300
|
-
backgroundColor: '#fff',
|
301
|
-
zIndex: 1
|
302
|
-
},
|
303
|
-
jobStatusCircle: {
|
304
|
-
width: 18,
|
305
|
-
height: 18,
|
306
|
-
borderRadius: 9
|
307
|
-
},
|
308
|
-
jobStatusDateText: {
|
309
|
-
flex: 1,
|
310
|
-
textAlign: 'right',
|
311
|
-
fontFamily: 'sf-bold',
|
312
|
-
fontSize: 14,
|
313
|
-
color: Colours.TEXT_DARK
|
314
|
-
}
|
315
|
-
});
|
316
|
-
const mapStateToProps = state => {
|
317
|
-
return {
|
318
|
-
colourBrandingMain: Colours.getMainBrandingColourFromState(state)
|
319
|
-
};
|
320
|
-
};
|
321
|
-
export default connect(mapStateToProps, {})(MaintenanceListItem);
|
322
|
-
//# sourceMappingURL=MaintenanceListItem.js.map
|