@plusscommunities/pluss-maintenance-app 6.0.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.
Files changed (46) hide show
  1. package/package.json +5 -2
  2. package/dist/module/actions/JobActions.js +0 -20
  3. package/dist/module/actions/JobActions.js.map +0 -1
  4. package/dist/module/actions/index.js +0 -2
  5. package/dist/module/actions/index.js.map +0 -1
  6. package/dist/module/actions/types.js +0 -4
  7. package/dist/module/actions/types.js.map +0 -1
  8. package/dist/module/apis/generalActions.js +0 -186
  9. package/dist/module/apis/generalActions.js.map +0 -1
  10. package/dist/module/apis/index.js +0 -2
  11. package/dist/module/apis/index.js.map +0 -1
  12. package/dist/module/components/FilterPopupMenu.js +0 -235
  13. package/dist/module/components/FilterPopupMenu.js.map +0 -1
  14. package/dist/module/components/MaintenanceList.js +0 -325
  15. package/dist/module/components/MaintenanceList.js.map +0 -1
  16. package/dist/module/components/MaintenanceListItem.js +0 -322
  17. package/dist/module/components/MaintenanceListItem.js.map +0 -1
  18. package/dist/module/components/MaintenanceWidgetItem.js +0 -152
  19. package/dist/module/components/MaintenanceWidgetItem.js.map +0 -1
  20. package/dist/module/components/StatusSelectorPopup.js +0 -88
  21. package/dist/module/components/StatusSelectorPopup.js.map +0 -1
  22. package/dist/module/components/WidgetLarge.js +0 -9
  23. package/dist/module/components/WidgetLarge.js.map +0 -1
  24. package/dist/module/components/WidgetSmall.js +0 -168
  25. package/dist/module/components/WidgetSmall.js.map +0 -1
  26. package/dist/module/core.config.js +0 -17
  27. package/dist/module/core.config.js.map +0 -1
  28. package/dist/module/feature.config.js +0 -90
  29. package/dist/module/feature.config.js.map +0 -1
  30. package/dist/module/helper.js +0 -25
  31. package/dist/module/helper.js.map +0 -1
  32. package/dist/module/images/speechbubble.png +0 -0
  33. package/dist/module/index.js +0 -20
  34. package/dist/module/index.js.map +0 -1
  35. package/dist/module/reducers/JobsReducer.js +0 -62
  36. package/dist/module/reducers/JobsReducer.js.map +0 -1
  37. package/dist/module/screens/JobTypePicker.js +0 -130
  38. package/dist/module/screens/JobTypePicker.js.map +0 -1
  39. package/dist/module/screens/MaintenancePage.js +0 -88
  40. package/dist/module/screens/MaintenancePage.js.map +0 -1
  41. package/dist/module/screens/RequestDetail.js +0 -798
  42. package/dist/module/screens/RequestDetail.js.map +0 -1
  43. package/dist/module/screens/RequestNotes.js +0 -387
  44. package/dist/module/screens/RequestNotes.js.map +0 -1
  45. package/dist/module/screens/ServiceRequest.js +0 -748
  46. 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":"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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(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