@plusscommunities/pluss-maintenance-app 4.0.2 → 4.0.4-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.
Files changed (48) hide show
  1. package/package.json +6 -3
  2. package/src/components/MaintenanceList.js +4 -2
  3. package/src/screens/RequestDetail.js +6 -0
  4. package/dist/module/actions/JobActions.js +0 -20
  5. package/dist/module/actions/JobActions.js.map +0 -1
  6. package/dist/module/actions/index.js +0 -2
  7. package/dist/module/actions/index.js.map +0 -1
  8. package/dist/module/actions/types.js +0 -4
  9. package/dist/module/actions/types.js.map +0 -1
  10. package/dist/module/apis/generalActions.js +0 -189
  11. package/dist/module/apis/generalActions.js.map +0 -1
  12. package/dist/module/apis/index.js +0 -2
  13. package/dist/module/apis/index.js.map +0 -1
  14. package/dist/module/components/FilterPopupMenu.js +0 -235
  15. package/dist/module/components/FilterPopupMenu.js.map +0 -1
  16. package/dist/module/components/MaintenanceList.js +0 -330
  17. package/dist/module/components/MaintenanceList.js.map +0 -1
  18. package/dist/module/components/MaintenanceListItem.js +0 -322
  19. package/dist/module/components/MaintenanceListItem.js.map +0 -1
  20. package/dist/module/components/MaintenanceWidgetItem.js +0 -152
  21. package/dist/module/components/MaintenanceWidgetItem.js.map +0 -1
  22. package/dist/module/components/StatusSelectorPopup.js +0 -88
  23. package/dist/module/components/StatusSelectorPopup.js.map +0 -1
  24. package/dist/module/components/WidgetLarge.js +0 -9
  25. package/dist/module/components/WidgetLarge.js.map +0 -1
  26. package/dist/module/components/WidgetSmall.js +0 -168
  27. package/dist/module/components/WidgetSmall.js.map +0 -1
  28. package/dist/module/core.config.js +0 -17
  29. package/dist/module/core.config.js.map +0 -1
  30. package/dist/module/feature.config.js +0 -90
  31. package/dist/module/feature.config.js.map +0 -1
  32. package/dist/module/helper.js +0 -25
  33. package/dist/module/helper.js.map +0 -1
  34. package/dist/module/images/speechbubble.png +0 -0
  35. package/dist/module/index.js +0 -20
  36. package/dist/module/index.js.map +0 -1
  37. package/dist/module/reducers/JobsReducer.js +0 -64
  38. package/dist/module/reducers/JobsReducer.js.map +0 -1
  39. package/dist/module/screens/JobTypePicker.js +0 -130
  40. package/dist/module/screens/JobTypePicker.js.map +0 -1
  41. package/dist/module/screens/MaintenancePage.js +0 -88
  42. package/dist/module/screens/MaintenancePage.js.map +0 -1
  43. package/dist/module/screens/RequestDetail.js +0 -793
  44. package/dist/module/screens/RequestDetail.js.map +0 -1
  45. package/dist/module/screens/RequestNotes.js +0 -387
  46. package/dist/module/screens/RequestNotes.js.map +0 -1
  47. package/dist/module/screens/ServiceRequest.js +0 -751
  48. package/dist/module/screens/ServiceRequest.js.map +0 -1
@@ -1,330 +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(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
3
- function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
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
- var _this;
16
- super(props);
17
- _this = this;
18
- _defineProperty(this, "refresh", () => {
19
- this.onLoadingChanged(true, async () => {
20
- try {
21
- const {
22
- selectedStatus,
23
- selectedType
24
- } = this.state;
25
- // console.log('filters', { selectedStatus, selectedType });
26
- const res = await generalActions.getJobsRecursive(this.props.site, selectedStatus, selectedType);
27
- // console.log('refresh', res?.data);
28
- if (selectedStatus || selectedType) {
29
- this.props.jobsAdded(res);
30
- } else {
31
- this.props.jobsLoaded(res);
32
- }
33
- } catch (error) {
34
- console.log('refresh error', error);
35
- } finally {
36
- this.onLoadingChanged(false);
37
- }
38
- });
39
- });
40
- _defineProperty(this, "refreshTypes", async () => {
41
- const {
42
- data
43
- } = await generalActions.getJobTypes(Helper.getSite(this.props.site));
44
- const types = data.map(t => {
45
- return {
46
- label: t.typeName,
47
- value: t.typeName
48
- };
49
- });
50
- types.splice(0, 0, {
51
- label: 'All',
52
- value: ''
53
- });
54
- // console.log('refreshTypes', types);
55
- this.setState({
56
- types
57
- });
58
- });
59
- _defineProperty(this, "fetchJob", jobId => {
60
- if (this.state.loading) return;
61
- this.onLoadingChanged(true, async () => {
62
- try {
63
- const job = await generalActions.getJobByJobId(this.props.site, jobId);
64
- // console.log('fetchJob', job?.data);
65
- this.props.jobAdded(job.data);
66
- } catch (error) {
67
- console.log('fetchJob error', error);
68
- } finally {
69
- this.onLoadingChanged(false);
70
- }
71
- });
72
- });
73
- _defineProperty(this, "resetDataSource", function () {
74
- let source = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
75
- const {
76
- searchText,
77
- selectedStatus,
78
- selectedType
79
- } = _this.state;
80
- const {
81
- jobs
82
- } = _this.props;
83
- let filteredList = jobs;
84
- let jobIdMatch = null;
85
- if (searchText) {
86
- jobIdMatch = _.find(jobs, j => j.jobId === searchText);
87
- filteredList = jobs.filter(j => {
88
- if (j.room && j.room.toLowerCase().indexOf(searchText.toLowerCase()) > -1) {
89
- return true;
90
- }
91
- return false;
92
- });
93
- if (!jobIdMatch) _this.fetchJob(searchText);
94
- }
95
- if (selectedStatus) filteredList = filteredList.filter(j => selectedStatus.includes(j.status));
96
- if (selectedType) filteredList = filteredList.filter(j => selectedType.includes(j.type));
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
- selectedType: selected.type
136
- }, () => {
137
- this.resetDataSource();
138
- this.onToggleFilter();
139
- });
140
- });
141
- this.state = {
142
- types: [],
143
- filteredList: props.jobs,
144
- loading: false,
145
- searchText: '',
146
- showFilterPopup: false,
147
- selectedStatus: props.hasPermission ? 'Unassigned|In Progress' : '',
148
- selectedType: ''
149
- };
150
- }
151
- componentDidMount() {
152
- this.refresh();
153
- this.refreshTypes();
154
- this.resetDataSource();
155
- }
156
- componentDidUpdate(prevProps) {
157
- if (!prevProps.dataUpdated && this.props.dataUpdated) this.refresh();
158
- if (!_.isEqual(prevProps.jobs, this.props.jobs)) this.resetDataSource();
159
- }
160
- getEmptyStateText() {
161
- if (this.props.options && !_.isEmpty(this.props.options.EmptyText)) {
162
- return this.props.options.EmptyText;
163
- }
164
- return this.props.userCategory === 'staff' ? Config.env.strings.EMPTY_REQUESTS_STAFF : Config.env.strings.EMPTY_REQUESTS_USER;
165
- }
166
- renderEmptyList() {
167
- return this.state.loading ? null : /*#__PURE__*/React.createElement(Components.EmptyStateMain, {
168
- title: this.getEmptyStateText(),
169
- style: {
170
- marginHorizontal: 16
171
- }
172
- });
173
- }
174
- renderFilterButton() {
175
- return /*#__PURE__*/React.createElement(TouchableOpacity, {
176
- onPress: this.onToggleFilter
177
- }, /*#__PURE__*/React.createElement(View, {
178
- style: styles.filterButton
179
- }, /*#__PURE__*/React.createElement(Text, {
180
- style: [styles.filterButtonText, {
181
- color: this.props.colourBrandingMain
182
- }]
183
- }, "Filter")));
184
- }
185
- renderSearch() {
186
- if (!this.props.hasPermission) return null;
187
- return /*#__PURE__*/React.createElement(View, {
188
- style: styles.searchContainer
189
- }, /*#__PURE__*/React.createElement(Components.GenericInput, {
190
- placeholder: "Search by Job ID or Location",
191
- value: this.state.searchText,
192
- onChangeText: this.onSearchText,
193
- onSubmitEditing: this.onSearchSubmit,
194
- squaredCorners: true,
195
- hasClear: true
196
- // keyboardType={'numeric'}
197
- ,
198
- returnKeyType: 'done'
199
- }));
200
- }
201
- renderListHeader() {
202
- const {
203
- ListHeaderComponent
204
- } = this.props;
205
- return /*#__PURE__*/React.createElement(View, null, ListHeaderComponent ? ListHeaderComponent : /*#__PURE__*/React.createElement(View, {
206
- style: {
207
- height: 32
208
- }
209
- }), this.renderFilterButton(), this.renderSearch());
210
- }
211
- renderList() {
212
- const {
213
- filteredList
214
- } = this.state;
215
- return /*#__PURE__*/React.createElement(FlatList, {
216
- keyboardShouldPersistTaps: "always",
217
- style: {
218
- flex: 1
219
- },
220
- contentContainerStyle: {
221
- paddingBottom: 16
222
- },
223
- data: filteredList,
224
- keyExtractor: item => item.id,
225
- renderItem: _ref => {
226
- let {
227
- item
228
- } = _ref;
229
- return /*#__PURE__*/React.createElement(MaintenanceListItem, {
230
- style: this.props.itemStyle,
231
- job: item
232
- });
233
- },
234
- ListEmptyComponent: this.renderEmptyList(),
235
- ListHeaderComponent: this.renderListHeader()
236
- });
237
- }
238
- renderFilterPopup() {
239
- const {
240
- showFilterPopup,
241
- types,
242
- selectedStatus,
243
- selectedType
244
- } = this.state;
245
- if (!showFilterPopup) return null;
246
- return /*#__PURE__*/React.createElement(FilterPopupMenu, {
247
- site: this.props.site,
248
- types: types,
249
- status: selectedStatus,
250
- type: selectedType,
251
- onClose: this.onSelectFilter
252
- });
253
- }
254
- render() {
255
- return /*#__PURE__*/React.createElement(View, {
256
- style: [styles.container, this.props.style]
257
- }, this.renderList(), this.renderFilterPopup());
258
- }
259
- }
260
- const styles = StyleSheet.create({
261
- container: {
262
- flex: 1,
263
- backgroundColor: '#fff'
264
- },
265
- filterContainerOuter: {
266
- flexDirection: 'row',
267
- justifyContent: 'space-between',
268
- alignItems: 'center',
269
- paddingHorizontal: 16,
270
- paddingVertical: 16
271
- },
272
- filterTitle: {
273
- fontFamily: 'sf-bold',
274
- fontSize: 11,
275
- letterSpacing: 0.8,
276
- color: '#4d4d4d'
277
- },
278
- filterContainer: {
279
- flexDirection: 'row',
280
- alignItems: 'center'
281
- },
282
- filterText: {
283
- fontFamily: 'sf-semibold',
284
- fontSize: 16,
285
- marginRight: 6
286
- },
287
- filterIcon: {
288
- fontSize: 20
289
- },
290
- searchContainer: {
291
- flexDirection: 'row',
292
- alignItems: 'center',
293
- paddingBottom: 8,
294
- paddingHorizontal: 16
295
- },
296
- filterButton: {
297
- position: 'absolute',
298
- right: 20,
299
- top: -32
300
- },
301
- filterButtonText: {
302
- fontFamily: 'sf-semibold',
303
- fontSize: 16
304
- }
305
- });
306
- const mapStateToProps = state => {
307
- const {
308
- user,
309
- jobs,
310
- notifications
311
- } = state;
312
- const jobsOrdered = _.orderBy(jobs.jobs, ['createdUnix'], ['desc']);
313
- const hasPermission = _.includes(user.permissions, 'maintenanceTracking');
314
- return {
315
- hasPermission,
316
- jobs: jobsOrdered,
317
- site: user.site,
318
- userCategory: user.category,
319
- colourBrandingMain: Colours.getMainBrandingColourFromState(state),
320
- dataUpdated: notifications.dataUpdated['jobs']
321
- };
322
- };
323
- export default connect(mapStateToProps, {
324
- jobsLoaded,
325
- jobAdded,
326
- jobsAdded
327
- }, null, {
328
- forwardRef: true
329
- })(MaintenanceList);
330
- //# 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","_this","this","_defineProperty","onLoadingChanged","selectedStatus","selectedType","state","res","getJobsRecursive","site","error","console","log","data","getJobTypes","getSite","types","map","t","label","typeName","value","splice","setState","jobId","loading","job","getJobByJobId","source","arguments","length","undefined","searchText","jobs","filteredList","jobIdMatch","find","j","filter","room","toLowerCase","indexOf","fetchJob","includes","status","type","jobIndex","unshift","refresh","callback","isEmpty","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","_ref","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.state = {\n types: [],\n filteredList: props.jobs,\n loading: false,\n searchText: '',\n showFilterPopup: false,\n selectedStatus: props.hasPermission ? 'Unassigned|In Progress' : '',\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 || 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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"}
@@ -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(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
3
- function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
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() {
27
- super(...arguments);
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