@plusscommunities/pluss-maintenance-app 1.1.15 → 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/module/actions/JobActions.js +14 -0
- package/dist/module/actions/JobActions.js.map +1 -0
- package/dist/module/actions/index.js +2 -0
- package/dist/module/actions/index.js.map +1 -0
- package/dist/module/actions/types.js +3 -0
- package/dist/module/actions/types.js.map +1 -0
- package/dist/module/apis/generalActions.js +145 -0
- package/dist/module/apis/generalActions.js.map +1 -0
- package/dist/module/apis/index.js +2 -0
- package/dist/module/apis/index.js.map +1 -0
- package/dist/module/components/MaintenanceList.js +240 -0
- package/dist/module/components/MaintenanceList.js.map +1 -0
- package/dist/module/components/MaintenanceListItem.js +282 -0
- package/dist/module/components/MaintenanceListItem.js.map +1 -0
- package/dist/module/components/MaintenanceWidgetItem.js +161 -0
- package/dist/module/components/MaintenanceWidgetItem.js.map +1 -0
- package/dist/module/components/StatusSelectorPopup.js +93 -0
- package/dist/module/components/StatusSelectorPopup.js.map +1 -0
- package/dist/module/components/WidgetLarge.js +12 -0
- package/dist/module/components/WidgetLarge.js.map +1 -0
- package/dist/module/components/WidgetSmall.js +185 -0
- package/dist/module/components/WidgetSmall.js.map +1 -0
- package/dist/module/core.config.js +17 -0
- package/dist/module/core.config.js.map +1 -0
- package/dist/module/feature.config.js +91 -0
- package/dist/module/feature.config.js.map +1 -0
- package/dist/module/helper.js +28 -0
- package/dist/module/helper.js.map +1 -0
- package/dist/module/images/speechbubble.png +0 -0
- package/dist/module/index.js +20 -0
- package/dist/module/index.js.map +1 -0
- package/dist/module/reducers/JobsReducer.js +59 -0
- package/dist/module/reducers/JobsReducer.js.map +1 -0
- package/dist/module/screens/JobTypePicker.js +139 -0
- package/dist/module/screens/JobTypePicker.js.map +1 -0
- package/dist/module/screens/MaintenancePage.js +99 -0
- package/dist/module/screens/MaintenancePage.js.map +1 -0
- package/dist/module/screens/RequestDetail.js +839 -0
- package/dist/module/screens/RequestDetail.js.map +1 -0
- package/dist/module/screens/RequestNotes.js +420 -0
- package/dist/module/screens/RequestNotes.js.map +1 -0
- package/dist/module/screens/ServiceRequest.js +803 -0
- package/dist/module/screens/ServiceRequest.js.map +1 -0
- package/package.json +25 -12
@@ -0,0 +1,14 @@
|
|
1
|
+
import { JOBS_LOADED, JOB_ADDED } from './types';
|
2
|
+
export const jobsLoaded = jobs => {
|
3
|
+
return {
|
4
|
+
type: JOBS_LOADED,
|
5
|
+
payload: jobs
|
6
|
+
};
|
7
|
+
};
|
8
|
+
export const jobAdded = job => {
|
9
|
+
return {
|
10
|
+
type: JOB_ADDED,
|
11
|
+
payload: job
|
12
|
+
};
|
13
|
+
};
|
14
|
+
//# sourceMappingURL=JobActions.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["JobActions.js"],"names":["JOBS_LOADED","JOB_ADDED","jobsLoaded","jobs","type","payload","jobAdded","job"],"mappings":"AAAA,SAASA,WAAT,EAAsBC,SAAtB,QAAuC,SAAvC;AAEA,OAAO,MAAMC,UAAU,GAAGC,IAAI,IAAI;AAChC,SAAO;AACLC,IAAAA,IAAI,EAAEJ,WADD;AAELK,IAAAA,OAAO,EAAEF;AAFJ,GAAP;AAID,CALM;AAOP,OAAO,MAAMG,QAAQ,GAAGC,GAAG,IAAI;AAC7B,SAAO;AACLH,IAAAA,IAAI,EAAEH,SADD;AAELI,IAAAA,OAAO,EAAEE;AAFJ,GAAP;AAID,CALM","sourcesContent":["import { JOBS_LOADED, JOB_ADDED } from './types';\n\nexport const jobsLoaded = jobs => {\n return {\n type: JOBS_LOADED,\n payload: jobs,\n };\n};\n\nexport const jobAdded = job => {\n return {\n type: JOB_ADDED,\n payload: job,\n };\n};\n"]}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["index.js"],"names":[],"mappings":"AAAA,cAAc,cAAd","sourcesContent":["export * from './JobActions';\n"]}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["types.js"],"names":["JOBS_LOADED","JOB_ADDED"],"mappings":"AAAA,OAAO,MAAMA,WAAW,GAAG,aAApB;AACP,OAAO,MAAMC,SAAS,GAAG,WAAlB","sourcesContent":["export const JOBS_LOADED = 'JOBS_LOADED';\nexport const JOB_ADDED = 'JOB_ADDED';\n"]}
|
@@ -0,0 +1,145 @@
|
|
1
|
+
// import axios from 'axios';
|
2
|
+
// import { getUrl } from './helper';
|
3
|
+
// import { authedFunction } from '../js';
|
4
|
+
import { Helper, Session } from '../core.config';
|
5
|
+
export const generalActions = {
|
6
|
+
getJob: (site, jobId) => {
|
7
|
+
return Session.authedFunction({
|
8
|
+
method: 'POST',
|
9
|
+
url: Helper.getUrl('maintenance', 'getJob'),
|
10
|
+
data: {
|
11
|
+
site,
|
12
|
+
jobId
|
13
|
+
}
|
14
|
+
});
|
15
|
+
},
|
16
|
+
getJobs: site => {
|
17
|
+
return Session.authedFunction({
|
18
|
+
method: 'POST',
|
19
|
+
url: Helper.getUrl('maintenance', 'getJobs'),
|
20
|
+
data: {
|
21
|
+
site
|
22
|
+
}
|
23
|
+
});
|
24
|
+
},
|
25
|
+
sendMaintenanceRequest: (userID, userName, phone, room, title, description, date, type, images, location, isHome, homeText) => {
|
26
|
+
const request = {
|
27
|
+
method: 'POST',
|
28
|
+
url: Helper.getUrl('maintenance', 'sendMaintenance'),
|
29
|
+
data: {
|
30
|
+
userID,
|
31
|
+
userName,
|
32
|
+
phone,
|
33
|
+
room,
|
34
|
+
title,
|
35
|
+
description,
|
36
|
+
date,
|
37
|
+
type,
|
38
|
+
images,
|
39
|
+
location,
|
40
|
+
isHome,
|
41
|
+
homeText
|
42
|
+
}
|
43
|
+
};
|
44
|
+
return Session.authedFunction(request);
|
45
|
+
},
|
46
|
+
editJob: (job, site) => {
|
47
|
+
return Session.authedFunction({
|
48
|
+
method: 'POST',
|
49
|
+
url: Helper.getUrl('maintenance', 'editJob'),
|
50
|
+
data: {
|
51
|
+
job,
|
52
|
+
site
|
53
|
+
}
|
54
|
+
});
|
55
|
+
},
|
56
|
+
editJobStatus: (id, status) => {
|
57
|
+
return Session.authedFunction({
|
58
|
+
method: 'POST',
|
59
|
+
url: Helper.getUrl('maintenance', 'editJobStatus'),
|
60
|
+
data: {
|
61
|
+
id,
|
62
|
+
status
|
63
|
+
}
|
64
|
+
});
|
65
|
+
},
|
66
|
+
addNote: (jobId, note, attachments) => {
|
67
|
+
return Session.authedFunction({
|
68
|
+
method: 'POST',
|
69
|
+
url: Helper.getUrl('maintenance', 'requests/note'),
|
70
|
+
data: {
|
71
|
+
id: jobId,
|
72
|
+
note,
|
73
|
+
attachments,
|
74
|
+
action: 'AddNote'
|
75
|
+
}
|
76
|
+
});
|
77
|
+
},
|
78
|
+
editNote: (jobId, noteId, note, attachments) => {
|
79
|
+
return Session.authedFunction({
|
80
|
+
method: 'POST',
|
81
|
+
url: Helper.getUrl('maintenance', 'requests/note'),
|
82
|
+
data: {
|
83
|
+
id: jobId,
|
84
|
+
note,
|
85
|
+
attachments,
|
86
|
+
noteId,
|
87
|
+
action: 'EditNote'
|
88
|
+
}
|
89
|
+
});
|
90
|
+
},
|
91
|
+
deleteNote: (jobId, noteId) => {
|
92
|
+
return Session.authedFunction({
|
93
|
+
method: 'POST',
|
94
|
+
url: Helper.getUrl('maintenance', 'requests/note'),
|
95
|
+
data: {
|
96
|
+
id: jobId,
|
97
|
+
noteId,
|
98
|
+
action: 'DeleteNote'
|
99
|
+
}
|
100
|
+
});
|
101
|
+
},
|
102
|
+
// getWeeklyMenu: async time => {
|
103
|
+
// //deprecated
|
104
|
+
// return null;
|
105
|
+
// },
|
106
|
+
getJobTypes: async site => {
|
107
|
+
const url = Helper.getUrl('maintenance', 'getjobtypes');
|
108
|
+
return Session.authedFunction({
|
109
|
+
method: 'POST',
|
110
|
+
url,
|
111
|
+
data: {
|
112
|
+
site
|
113
|
+
}
|
114
|
+
});
|
115
|
+
} // sendBookingRequest: async bookingInfo => {
|
116
|
+
// return authedFunction({
|
117
|
+
// method: 'POST',
|
118
|
+
// data: {
|
119
|
+
// bookingInfo,
|
120
|
+
// },
|
121
|
+
// url: getUrl('utility', 'sendBookingRequest'),
|
122
|
+
// });
|
123
|
+
// },
|
124
|
+
// getString: async (site, id, useDefault) => {
|
125
|
+
// return axios({
|
126
|
+
// method: 'GET',
|
127
|
+
// url: getUrl('strings', `get/${site}_${id}`, useDefault ? { useDefault } : undefined),
|
128
|
+
// }).catch(error => {
|
129
|
+
// console.log('getString error', error);
|
130
|
+
// throw error;
|
131
|
+
// });
|
132
|
+
// },
|
133
|
+
// getGeneralTerms: async () => {
|
134
|
+
// return axios({
|
135
|
+
// method: 'GET',
|
136
|
+
// url: 'https://pluss.plussapp.com.au/strings-prd/get/plussSpace_termsofuse',
|
137
|
+
// });
|
138
|
+
// },
|
139
|
+
// declineTerms: async (site, userID) => {
|
140
|
+
// //deprecated
|
141
|
+
// return null;
|
142
|
+
// },
|
143
|
+
|
144
|
+
};
|
145
|
+
//# sourceMappingURL=generalActions.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["generalActions.js"],"names":["Helper","Session","generalActions","getJob","site","jobId","authedFunction","method","url","getUrl","data","getJobs","sendMaintenanceRequest","userID","userName","phone","room","title","description","date","type","images","location","isHome","homeText","request","editJob","job","editJobStatus","id","status","addNote","note","attachments","action","editNote","noteId","deleteNote","getJobTypes"],"mappings":"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","sourcesContent":["// import axios from 'axios';\n// import { getUrl } from './helper';\n// import { authedFunction } from '../js';\nimport { Helper, Session } from '../core.config';\n\nexport const generalActions = {\n getJob: (site, jobId) => {\n return Session.authedFunction({\n method: 'POST',\n url: Helper.getUrl('maintenance', 'getJob'),\n data: { site, jobId },\n });\n },\n getJobs: site => {\n return Session.authedFunction({\n method: 'POST',\n url: Helper.getUrl('maintenance', 'getJobs'),\n data: { site },\n });\n },\n sendMaintenanceRequest: (userID, userName, phone, room, title, description, date, type, images, location, isHome, homeText) => {\n const request = {\n method: 'POST',\n url: Helper.getUrl('maintenance', 'sendMaintenance'),\n data: {\n userID,\n userName,\n phone,\n room,\n title,\n description,\n date,\n type,\n images,\n location,\n isHome,\n homeText,\n },\n };\n return Session.authedFunction(request);\n },\n editJob: (job, site) => {\n return Session.authedFunction({\n method: 'POST',\n url: Helper.getUrl('maintenance', 'editJob'),\n data: { job, site },\n });\n },\n editJobStatus: (id, status) => {\n return Session.authedFunction({\n method: 'POST',\n url: Helper.getUrl('maintenance', 'editJobStatus'),\n data: { id, status },\n });\n },\n addNote: (jobId, note, attachments) => {\n return Session.authedFunction({\n method: 'POST',\n url: Helper.getUrl('maintenance', 'requests/note'),\n data: {\n id: jobId,\n note,\n attachments,\n action: 'AddNote',\n },\n });\n },\n editNote: (jobId, noteId, note, attachments) => {\n return Session.authedFunction({\n method: 'POST',\n url: Helper.getUrl('maintenance', 'requests/note'),\n data: {\n id: jobId,\n note,\n attachments,\n noteId,\n action: 'EditNote',\n },\n });\n },\n deleteNote: (jobId, noteId) => {\n return Session.authedFunction({\n method: 'POST',\n url: Helper.getUrl('maintenance', 'requests/note'),\n data: {\n id: jobId,\n noteId,\n action: 'DeleteNote',\n },\n });\n },\n // getWeeklyMenu: async time => {\n // //deprecated\n // return null;\n // },\n getJobTypes: async site => {\n const url = Helper.getUrl('maintenance', 'getjobtypes');\n return Session.authedFunction({\n method: 'POST',\n url,\n data: { site },\n });\n },\n // sendBookingRequest: async bookingInfo => {\n // return authedFunction({\n // method: 'POST',\n // data: {\n // bookingInfo,\n // },\n // url: getUrl('utility', 'sendBookingRequest'),\n // });\n // },\n // getString: async (site, id, useDefault) => {\n // return axios({\n // method: 'GET',\n // url: getUrl('strings', `get/${site}_${id}`, useDefault ? { useDefault } : undefined),\n // }).catch(error => {\n // console.log('getString error', error);\n // throw error;\n // });\n // },\n // getGeneralTerms: async () => {\n // return axios({\n // method: 'GET',\n // url: 'https://pluss.plussapp.com.au/strings-prd/get/plussSpace_termsofuse',\n // });\n // },\n // declineTerms: async (site, userID) => {\n // //deprecated\n // return null;\n // },\n};\n"]}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["index.js"],"names":[],"mappings":"AAAA,cAAc,kBAAd","sourcesContent":["export * from './generalActions';\n"]}
|
@@ -0,0 +1,240 @@
|
|
1
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
2
|
+
|
3
|
+
import React, { Component } from 'react';
|
4
|
+
import { View, StyleSheet, FlatList, TouchableOpacity, Text } from 'react-native';
|
5
|
+
import { Icon } from 'react-native-elements';
|
6
|
+
import _ from 'lodash';
|
7
|
+
import { connect } from 'react-redux';
|
8
|
+
import { generalActions } from '../apis';
|
9
|
+
import { jobsLoaded } from '../actions';
|
10
|
+
import MaintenanceListItem from '../components/MaintenanceListItem';
|
11
|
+
import StatusSelectorPopup from './StatusSelectorPopup';
|
12
|
+
import { Components, Colours, Config } from '../core.config';
|
13
|
+
const SHOW_ALL_STATUS = 'Show All';
|
14
|
+
|
15
|
+
class MaintenanceList extends Component {
|
16
|
+
constructor(props) {
|
17
|
+
super(props);
|
18
|
+
|
19
|
+
_defineProperty(this, "refresh", () => {
|
20
|
+
this.onLoadingChanged(true, async () => {
|
21
|
+
try {
|
22
|
+
const res = await generalActions.getJobs(this.props.site);
|
23
|
+
this.props.jobsLoaded(res.data);
|
24
|
+
} catch (error) {
|
25
|
+
console.log('refresh error', error);
|
26
|
+
} finally {
|
27
|
+
this.onLoadingChanged(false);
|
28
|
+
}
|
29
|
+
});
|
30
|
+
});
|
31
|
+
|
32
|
+
_defineProperty(this, "onLoadingChanged", (loading, callback) => {
|
33
|
+
this.setState({
|
34
|
+
loading
|
35
|
+
}, () => {
|
36
|
+
if (this.props.onLoadingChanged) this.props.onLoadingChanged(this.state.loading);
|
37
|
+
if (callback) callback();
|
38
|
+
});
|
39
|
+
});
|
40
|
+
|
41
|
+
_defineProperty(this, "onPressFilter", () => {
|
42
|
+
this.setState({
|
43
|
+
showStatusPopup: true
|
44
|
+
});
|
45
|
+
});
|
46
|
+
|
47
|
+
_defineProperty(this, "onCloseFilter", () => {
|
48
|
+
this.setState({
|
49
|
+
showStatusPopup: false
|
50
|
+
});
|
51
|
+
});
|
52
|
+
|
53
|
+
_defineProperty(this, "onSelectStatus", selectedStatus => {
|
54
|
+
this.setState({
|
55
|
+
showStatusPopup: false,
|
56
|
+
selectedStatus
|
57
|
+
});
|
58
|
+
});
|
59
|
+
|
60
|
+
this.state = {
|
61
|
+
loading: false,
|
62
|
+
selectedStatus: SHOW_ALL_STATUS,
|
63
|
+
showStatusPopup: false
|
64
|
+
};
|
65
|
+
}
|
66
|
+
|
67
|
+
componentDidMount() {
|
68
|
+
this.refresh();
|
69
|
+
}
|
70
|
+
|
71
|
+
componentDidUpdate(prevProps) {
|
72
|
+
if (!_.isEqual(prevProps.statuses, this.props.statuses) && !this.props.statuses.includes(this.state.selectedStatus)) {
|
73
|
+
// Reset selected status if not exists
|
74
|
+
this.setState({
|
75
|
+
selectedStatus: SHOW_ALL_STATUS
|
76
|
+
});
|
77
|
+
}
|
78
|
+
|
79
|
+
if (!prevProps.dataUpdated && this.props.dataUpdated) this.refresh();
|
80
|
+
}
|
81
|
+
|
82
|
+
getEmptyStateText() {
|
83
|
+
if (this.props.options && !_.isEmpty(this.props.options.EmptyText)) {
|
84
|
+
return this.props.options.EmptyText;
|
85
|
+
}
|
86
|
+
|
87
|
+
return this.props.userCategory === 'staff' ? Config.env.strings.EMPTY_REQUESTS_STAFF : Config.env.strings.EMPTY_REQUESTS_USER;
|
88
|
+
}
|
89
|
+
|
90
|
+
renderEmptyList() {
|
91
|
+
return this.state.loading ? null : /*#__PURE__*/React.createElement(Components.EmptyStateMain, {
|
92
|
+
title: this.getEmptyStateText(),
|
93
|
+
style: {
|
94
|
+
marginHorizontal: 16
|
95
|
+
}
|
96
|
+
});
|
97
|
+
}
|
98
|
+
|
99
|
+
renderFilter() {
|
100
|
+
var _this$props$statuses;
|
101
|
+
|
102
|
+
if (((_this$props$statuses = this.props.statuses) === null || _this$props$statuses === void 0 ? void 0 : _this$props$statuses.length) <= 1) return;
|
103
|
+
return /*#__PURE__*/React.createElement(View, {
|
104
|
+
style: styles.filterContainerOuter
|
105
|
+
}, /*#__PURE__*/React.createElement(Text, {
|
106
|
+
style: styles.filterTitle
|
107
|
+
}, "FILTER"), /*#__PURE__*/React.createElement(TouchableOpacity, {
|
108
|
+
onPress: this.onPressFilter
|
109
|
+
}, /*#__PURE__*/React.createElement(View, {
|
110
|
+
style: styles.filterContainer
|
111
|
+
}, /*#__PURE__*/React.createElement(Text, {
|
112
|
+
style: [styles.filterText, {
|
113
|
+
color: this.props.colourBrandingMain
|
114
|
+
}]
|
115
|
+
}, this.state.selectedStatus || SHOW_ALL_STATUS), /*#__PURE__*/React.createElement(Icon, {
|
116
|
+
name: "angle-down",
|
117
|
+
type: "font-awesome",
|
118
|
+
iconStyle: [styles.filterIcon, {
|
119
|
+
color: this.props.colourBrandingMain
|
120
|
+
}]
|
121
|
+
}))));
|
122
|
+
}
|
123
|
+
|
124
|
+
renderListHeader() {
|
125
|
+
return /*#__PURE__*/React.createElement(View, null, this.props.ListHeaderComponent, this.renderFilter());
|
126
|
+
}
|
127
|
+
|
128
|
+
renderList() {
|
129
|
+
const {
|
130
|
+
selectedStatus
|
131
|
+
} = this.state;
|
132
|
+
const {
|
133
|
+
jobs
|
134
|
+
} = this.props;
|
135
|
+
const filteredList = selectedStatus === SHOW_ALL_STATUS ? jobs : jobs.filter(job => job.status === selectedStatus);
|
136
|
+
return /*#__PURE__*/React.createElement(FlatList, {
|
137
|
+
keyboardShouldPersistTaps: "always",
|
138
|
+
style: {
|
139
|
+
flex: 1
|
140
|
+
},
|
141
|
+
contentContainerStyle: {
|
142
|
+
paddingBottom: 16
|
143
|
+
},
|
144
|
+
data: filteredList,
|
145
|
+
keyExtractor: item => item.id,
|
146
|
+
renderItem: _ref => {
|
147
|
+
let {
|
148
|
+
item
|
149
|
+
} = _ref;
|
150
|
+
return /*#__PURE__*/React.createElement(MaintenanceListItem, {
|
151
|
+
style: this.props.itemStyle,
|
152
|
+
job: item
|
153
|
+
});
|
154
|
+
},
|
155
|
+
ListEmptyComponent: this.renderEmptyList(),
|
156
|
+
ListHeaderComponent: this.renderListHeader()
|
157
|
+
});
|
158
|
+
} // renderAddButton() {
|
159
|
+
// return this.props.enableAdd ? <Components.AddContentButton /> : null;
|
160
|
+
// }
|
161
|
+
|
162
|
+
|
163
|
+
renderStatusPopup() {
|
164
|
+
if (!this.state.showStatusPopup) return null;
|
165
|
+
return /*#__PURE__*/React.createElement(StatusSelectorPopup, {
|
166
|
+
filter: this.props.statuses,
|
167
|
+
includeAll: true,
|
168
|
+
allText: SHOW_ALL_STATUS,
|
169
|
+
onClose: this.onCloseFilter,
|
170
|
+
onSelect: this.onSelectStatus
|
171
|
+
});
|
172
|
+
}
|
173
|
+
|
174
|
+
render() {
|
175
|
+
return /*#__PURE__*/React.createElement(View, {
|
176
|
+
style: [styles.container, this.props.style]
|
177
|
+
}, this.renderList());
|
178
|
+
}
|
179
|
+
|
180
|
+
}
|
181
|
+
|
182
|
+
const styles = StyleSheet.create({
|
183
|
+
container: {
|
184
|
+
flex: 1,
|
185
|
+
backgroundColor: '#fff'
|
186
|
+
},
|
187
|
+
filterContainerOuter: {
|
188
|
+
flexDirection: 'row',
|
189
|
+
justifyContent: 'space-between',
|
190
|
+
alignItems: 'center',
|
191
|
+
paddingHorizontal: 16,
|
192
|
+
paddingVertical: 16
|
193
|
+
},
|
194
|
+
filterTitle: {
|
195
|
+
fontFamily: 'sf-bold',
|
196
|
+
fontSize: 11,
|
197
|
+
letterSpacing: 0.8,
|
198
|
+
color: '#4d4d4d'
|
199
|
+
},
|
200
|
+
filterContainer: {
|
201
|
+
flexDirection: 'row',
|
202
|
+
alignItems: 'center'
|
203
|
+
},
|
204
|
+
filterText: {
|
205
|
+
fontFamily: 'sf-semibold',
|
206
|
+
fontSize: 16,
|
207
|
+
marginRight: 6
|
208
|
+
},
|
209
|
+
filterIcon: {
|
210
|
+
fontSize: 20
|
211
|
+
}
|
212
|
+
});
|
213
|
+
|
214
|
+
const mapStateToProps = state => {
|
215
|
+
const {
|
216
|
+
user,
|
217
|
+
jobs,
|
218
|
+
notifications
|
219
|
+
} = state;
|
220
|
+
|
221
|
+
const jobsOrdered = _.orderBy(jobs.jobs, ['createdUnix'], ['desc']);
|
222
|
+
|
223
|
+
const statuses = _.uniq(jobsOrdered.map(job => job.status));
|
224
|
+
|
225
|
+
return {
|
226
|
+
jobs: jobsOrdered,
|
227
|
+
statuses,
|
228
|
+
site: user.site,
|
229
|
+
userCategory: user.category,
|
230
|
+
colourBrandingMain: Colours.getMainBrandingColourFromState(state),
|
231
|
+
dataUpdated: notifications.dataUpdated['jobs']
|
232
|
+
};
|
233
|
+
};
|
234
|
+
|
235
|
+
export default connect(mapStateToProps, {
|
236
|
+
jobsLoaded
|
237
|
+
}, null, {
|
238
|
+
forwardRef: true
|
239
|
+
})(MaintenanceList);
|
240
|
+
//# sourceMappingURL=MaintenanceList.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["MaintenanceList.js"],"names":["React","Component","View","StyleSheet","FlatList","TouchableOpacity","Text","Icon","_","connect","generalActions","jobsLoaded","MaintenanceListItem","StatusSelectorPopup","Components","Colours","Config","SHOW_ALL_STATUS","MaintenanceList","constructor","props","onLoadingChanged","res","getJobs","site","data","error","console","log","loading","callback","setState","state","showStatusPopup","selectedStatus","componentDidMount","refresh","componentDidUpdate","prevProps","isEqual","statuses","includes","dataUpdated","getEmptyStateText","options","isEmpty","EmptyText","userCategory","env","strings","EMPTY_REQUESTS_STAFF","EMPTY_REQUESTS_USER","renderEmptyList","marginHorizontal","renderFilter","length","styles","filterContainerOuter","filterTitle","onPressFilter","filterContainer","filterText","color","colourBrandingMain","filterIcon","renderListHeader","ListHeaderComponent","renderList","jobs","filteredList","filter","job","status","flex","paddingBottom","item","id","itemStyle","renderStatusPopup","onCloseFilter","onSelectStatus","render","container","style","create","backgroundColor","flexDirection","justifyContent","alignItems","paddingHorizontal","paddingVertical","fontFamily","fontSize","letterSpacing","marginRight","mapStateToProps","user","notifications","jobsOrdered","orderBy","uniq","map","category","getMainBrandingColourFromState","forwardRef"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\nimport { View, StyleSheet, FlatList, TouchableOpacity, Text } from 'react-native';\nimport { Icon } from 'react-native-elements';\nimport _ from 'lodash';\nimport { connect } from 'react-redux';\nimport { generalActions } from '../apis';\nimport { jobsLoaded } from '../actions';\nimport MaintenanceListItem from '../components/MaintenanceListItem';\nimport StatusSelectorPopup from './StatusSelectorPopup';\nimport { Components, Colours, Config } from '../core.config';\n\nconst SHOW_ALL_STATUS = 'Show All';\n\nclass MaintenanceList extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n loading: false,\n selectedStatus: SHOW_ALL_STATUS,\n showStatusPopup: false,\n };\n }\n\n componentDidMount() {\n this.refresh();\n }\n\n componentDidUpdate(prevProps) {\n if (!_.isEqual(prevProps.statuses, this.props.statuses) && !this.props.statuses.includes(this.state.selectedStatus)) {\n // Reset selected status if not exists\n this.setState({ selectedStatus: SHOW_ALL_STATUS });\n }\n if (!prevProps.dataUpdated && this.props.dataUpdated) this.refresh();\n }\n\n refresh = () => {\n this.onLoadingChanged(true, async () => {\n try {\n const res = await generalActions.getJobs(this.props.site);\n this.props.jobsLoaded(res.data);\n } catch (error) {\n console.log('refresh 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 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 onPressFilter = () => {\n this.setState({ showStatusPopup: true });\n };\n\n onCloseFilter = () => {\n this.setState({ showStatusPopup: false });\n };\n\n onSelectStatus = selectedStatus => {\n this.setState({ showStatusPopup: false, selectedStatus });\n };\n\n renderEmptyList() {\n return this.state.loading ? null : <Components.EmptyStateMain title={this.getEmptyStateText()} style={{ marginHorizontal: 16 }} />;\n }\n\n renderFilter() {\n if (this.props.statuses?.length <= 1) return;\n\n return (\n <View style={styles.filterContainerOuter}>\n <Text style={styles.filterTitle}>FILTER</Text>\n <TouchableOpacity onPress={this.onPressFilter}>\n <View style={styles.filterContainer}>\n <Text style={[styles.filterText, { color: this.props.colourBrandingMain }]}>\n {this.state.selectedStatus || SHOW_ALL_STATUS}\n </Text>\n <Icon name=\"angle-down\" type=\"font-awesome\" iconStyle={[styles.filterIcon, { color: this.props.colourBrandingMain }]} />\n </View>\n </TouchableOpacity>\n </View>\n );\n }\n\n renderListHeader() {\n return (\n <View>\n {this.props.ListHeaderComponent}\n {this.renderFilter()}\n </View>\n );\n }\n\n renderList() {\n const { selectedStatus } = this.state;\n const { jobs } = this.props;\n const filteredList = selectedStatus === SHOW_ALL_STATUS ? jobs : jobs.filter(job => job.status === selectedStatus);\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 // renderAddButton() {\n // return this.props.enableAdd ? <Components.AddContentButton /> : null;\n // }\n\n renderStatusPopup() {\n if (!this.state.showStatusPopup) return null;\n\n return (\n <StatusSelectorPopup\n filter={this.props.statuses}\n includeAll\n allText={SHOW_ALL_STATUS}\n onClose={this.onCloseFilter}\n onSelect={this.onSelectStatus}\n />\n );\n }\n\n render() {\n return (\n <View style={[styles.container, this.props.style]}>\n {this.renderList()}\n {/* {this.renderAddButton()} */}\n {/* {this.renderStatusPopup()} */}\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});\n\nconst mapStateToProps = state => {\n const { user, jobs, notifications } = state;\n const jobsOrdered = _.orderBy(jobs.jobs, ['createdUnix'], ['desc']);\n const statuses = _.uniq(jobsOrdered.map(job => job.status));\n\n return {\n jobs: jobsOrdered,\n statuses,\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 }, null, { forwardRef: true })(MaintenanceList);\n"]}
|