@plusscommunities/pluss-maintenance-app 6.0.1-auth.0 → 6.0.1

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 (46) 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 +4 -0
  6. package/dist/module/actions/types.js.map +1 -0
  7. package/dist/module/apis/generalActions.js +186 -0
  8. package/dist/module/apis/generalActions.js.map +1 -0
  9. package/dist/module/apis/index.js +2 -0
  10. package/dist/module/apis/index.js.map +1 -0
  11. package/dist/module/components/FilterPopupMenu.js +235 -0
  12. package/dist/module/components/FilterPopupMenu.js.map +1 -0
  13. package/dist/module/components/MaintenanceList.js +325 -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 +152 -0
  18. package/dist/module/components/MaintenanceWidgetItem.js.map +1 -0
  19. package/dist/module/components/StatusSelectorPopup.js +88 -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 +168 -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 +90 -0
  28. package/dist/module/feature.config.js.map +1 -0
  29. package/dist/module/helper.js +25 -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 +20 -0
  33. package/dist/module/index.js.map +1 -0
  34. package/dist/module/reducers/JobsReducer.js +62 -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 +88 -0
  39. package/dist/module/screens/MaintenancePage.js.map +1 -0
  40. package/dist/module/screens/RequestDetail.js +798 -0
  41. package/dist/module/screens/RequestDetail.js.map +1 -0
  42. package/dist/module/screens/RequestNotes.js +387 -0
  43. package/dist/module/screens/RequestNotes.js.map +1 -0
  44. package/dist/module/screens/ServiceRequest.js +748 -0
  45. package/dist/module/screens/ServiceRequest.js.map +1 -0
  46. package/package.json +2 -5
@@ -0,0 +1,325 @@
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
@@ -0,0 +1 @@
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":"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"}
@@ -0,0 +1,322 @@
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