@plusscommunities/pluss-maintenance-app 8.0.12 → 8.0.13
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/apis/maintenanceActions.js +12 -4
- package/dist/module/apis/maintenanceActions.js.map +1 -1
- package/dist/module/components/MaintenanceList.js +84 -16
- package/dist/module/components/MaintenanceList.js.map +1 -1
- package/dist/module/screens/RequestDetail.js +12 -5
- package/dist/module/screens/RequestDetail.js.map +1 -1
- package/dist/module/screens/ServiceRequest.js +2 -1
- package/dist/module/screens/ServiceRequest.js.map +1 -1
- package/package.json +1 -1
- package/src/apis/maintenanceActions.js +17 -7
- package/src/components/MaintenanceList.js +82 -29
- package/src/screens/RequestDetail.js +9 -3
- package/src/screens/ServiceRequest.js +5 -1
|
@@ -32,7 +32,7 @@ export const maintenanceActions = {
|
|
|
32
32
|
}
|
|
33
33
|
});
|
|
34
34
|
},
|
|
35
|
-
getJobs2: (site, status, priority, type, lastKey) => {
|
|
35
|
+
getJobs2: (site, status, priority, type, lastKey, assignee) => {
|
|
36
36
|
const query = {
|
|
37
37
|
site
|
|
38
38
|
};
|
|
@@ -48,20 +48,28 @@ export const maintenanceActions = {
|
|
|
48
48
|
if (lastKey) {
|
|
49
49
|
query.lastKey = JSON.stringify(lastKey);
|
|
50
50
|
}
|
|
51
|
+
if (assignee) {
|
|
52
|
+
query.assignee = assignee;
|
|
53
|
+
}
|
|
51
54
|
return Session.authedFunction({
|
|
52
55
|
method: "GET",
|
|
53
56
|
url: Helper.getUrl(values.serviceKey, "get/requests", query)
|
|
54
57
|
});
|
|
55
58
|
},
|
|
59
|
+
/**
|
|
60
|
+
* @deprecated Use getJobs2 with pagination instead.
|
|
61
|
+
* This method recursively fetches ALL pages which can be slow for large datasets.
|
|
62
|
+
* For better performance, use getJobs2 directly and implement pagination in the UI.
|
|
63
|
+
*/
|
|
56
64
|
getJobsRecursive: (site, status, priority, type, lastKey, jobs = []) => {
|
|
57
|
-
return new Promise(resolve => {
|
|
65
|
+
return new Promise((resolve, reject) => {
|
|
58
66
|
maintenanceActions.getJobs2(site, status, priority, type, lastKey).then(jobRes => {
|
|
59
67
|
const newJobs = [...jobs, ...jobRes.data.Items];
|
|
60
68
|
if (!jobRes.data.LastKey) {
|
|
61
69
|
return resolve(newJobs);
|
|
62
70
|
}
|
|
63
|
-
|
|
64
|
-
});
|
|
71
|
+
maintenanceActions.getJobsRecursive(site, status, priority, type, jobRes.data.LastKey, newJobs).then(resolve).catch(reject);
|
|
72
|
+
}).catch(reject);
|
|
65
73
|
});
|
|
66
74
|
},
|
|
67
75
|
sendMaintenanceRequest: (userID, userName, phone, room, title, description, date, type, images, location, isHome, homeText, customFields) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Helper","Session","values","maintenanceActions","getJob","site","id","authedFunction","method","url","getUrl","serviceKey","data","getJobByJobId","jobId","getJobs","status","type","getJobs2","priority","lastKey","query","JSON","stringify","getJobsRecursive","jobs","Promise","resolve","then","jobRes","newJobs","Items","LastKey","sendMaintenanceRequest","userID","userName","phone","room","title","description","date","images","location","isHome","homeText","customFields","request","editJob","job","editJobStatus","editJobPriority","assignJob","userId","getAssignees","addNote","note","attachments","action","editNote","noteId","deleteNote","getJobTypes","getExternalSync"],"sources":["maintenanceActions.js"],"sourcesContent":["import { Helper, Session } from \"../core.config\";\nimport { values } from \"../values.config\";\n\nexport const maintenanceActions = {\n\tgetJob: (site, id) => {\n\t\treturn Session.authedFunction({\n\t\t\tmethod: \"POST\",\n\t\t\turl: Helper.getUrl(values.serviceKey, \"getJob\"),\n\t\t\tdata: { site, id },\n\t\t});\n\t},\n\tgetJobByJobId: (site, jobId) => {\n\t\treturn Session.authedFunction({\n\t\t\tmethod: \"POST\",\n\t\t\turl: Helper.getUrl(values.serviceKey, \"getJob\"),\n\t\t\tdata: { site, jobId },\n\t\t});\n\t},\n\tgetJobs: (site, status = \"\", type = \"\") => {\n\t\treturn Session.authedFunction({\n\t\t\tmethod: \"POST\",\n\t\t\turl: Helper.getUrl(values.serviceKey, \"getJobs\"),\n\t\t\tdata: { site, status, type },\n\t\t});\n\t},\n\tgetJobs2: (site, status, priority, type, lastKey) => {\n\t\tconst query = { site };\n\t\tif (status) {\n\t\t\tquery.status = status;\n\t\t}\n\t\tif (priority) {\n\t\t\tquery.priority = priority;\n\t\t}\n\t\tif (type) {\n\t\t\tquery.type = type;\n\t\t}\n\t\tif (lastKey) {\n\t\t\tquery.lastKey = JSON.stringify(lastKey);\n\t\t}\n\t\treturn Session.authedFunction({\n\t\t\tmethod: \"GET\",\n\t\t\turl: Helper.getUrl(values.serviceKey, \"get/requests\", query),\n\t\t});\n\t},\n\tgetJobsRecursive: (site, status, priority, type, lastKey, jobs = []) => {\n\t\treturn new Promise((resolve) => {\n\t\t\tmaintenanceActions\n\t\t\t\t.getJobs2(site, status, priority, type, lastKey)\n\t\t\t\t.then((jobRes) => {\n\t\t\t\t\tconst newJobs = [...jobs, ...jobRes.data.Items];\n\t\t\t\t\tif (!jobRes.data.LastKey) {\n\t\t\t\t\t\treturn resolve(newJobs);\n\t\t\t\t\t}\n\t\t\t\t\treturn resolve(\n\t\t\t\t\t\tmaintenanceActions.getJobsRecursive(\n\t\t\t\t\t\t\tsite,\n\t\t\t\t\t\t\tstatus,\n\t\t\t\t\t\t\tpriority,\n\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\tjobRes.data.LastKey,\n\t\t\t\t\t\t\tnewJobs,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t});\n\t},\n\tsendMaintenanceRequest: (\n\t\tuserID,\n\t\tuserName,\n\t\tphone,\n\t\troom,\n\t\ttitle,\n\t\tdescription,\n\t\tdate,\n\t\ttype,\n\t\timages,\n\t\tlocation,\n\t\tisHome,\n\t\thomeText,\n\t\tcustomFields,\n\t) => {\n\t\tconst request = {\n\t\t\tmethod: \"POST\",\n\t\t\turl: Helper.getUrl(values.serviceKey, \"sendMaintenance\"),\n\t\t\tdata: {\n\t\t\t\tuserID,\n\t\t\t\tuserName,\n\t\t\t\tphone,\n\t\t\t\troom,\n\t\t\t\ttitle,\n\t\t\t\tdescription,\n\t\t\t\tdate,\n\t\t\t\ttype,\n\t\t\t\timages,\n\t\t\t\tlocation,\n\t\t\t\tisHome,\n\t\t\t\thomeText,\n\t\t\t\tcustomFields,\n\t\t\t},\n\t\t};\n\t\treturn Session.authedFunction(request);\n\t},\n\teditJob: (job, site) => {\n\t\treturn Session.authedFunction({\n\t\t\tmethod: \"POST\",\n\t\t\turl: Helper.getUrl(values.serviceKey, \"editJob\"),\n\t\t\tdata: { job, site },\n\t\t});\n\t},\n\teditJobStatus: (id, status) => {\n\t\treturn Session.authedFunction({\n\t\t\tmethod: \"POST\",\n\t\t\turl: Helper.getUrl(values.serviceKey, \"editJobStatus\"),\n\t\t\tdata: { id, status },\n\t\t});\n\t},\n\teditJobPriority: (id, priority) => {\n\t\treturn Session.authedFunction({\n\t\t\tmethod: \"POST\",\n\t\t\turl: Helper.getUrl(values.serviceKey, \"update/priority\"),\n\t\t\tdata: { id, priority },\n\t\t});\n\t},\n\tassignJob: (jobId, userId) => {\n\t\treturn Session.authedFunction({\n\t\t\tmethod: \"POST\",\n\t\t\turl: Helper.getUrl(values.serviceKey, \"update/assign\"),\n\t\t\tdata: {\n\t\t\t\tid: jobId,\n\t\t\t\tuserId,\n\t\t\t},\n\t\t});\n\t},\n\tgetAssignees: (site) => {\n\t\treturn Session.authedFunction({\n\t\t\tmethod: \"GET\",\n\t\t\turl: Helper.getUrl(values.serviceKey, \"get/assignees\", { site }),\n\t\t});\n\t},\n\taddNote: (jobId, note, attachments, images) => {\n\t\treturn Session.authedFunction({\n\t\t\tmethod: \"POST\",\n\t\t\turl: Helper.getUrl(values.serviceKey, \"requests/note\"),\n\t\t\tdata: {\n\t\t\t\tid: jobId,\n\t\t\t\tnote,\n\t\t\t\tattachments,\n\t\t\t\timages,\n\t\t\t\taction: \"AddNote\",\n\t\t\t},\n\t\t});\n\t},\n\teditNote: (jobId, noteId, note, attachments, images) => {\n\t\treturn Session.authedFunction({\n\t\t\tmethod: \"POST\",\n\t\t\turl: Helper.getUrl(values.serviceKey, \"requests/note\"),\n\t\t\tdata: {\n\t\t\t\tid: jobId,\n\t\t\t\tnote,\n\t\t\t\tattachments,\n\t\t\t\timages,\n\t\t\t\tnoteId,\n\t\t\t\taction: \"EditNote\",\n\t\t\t},\n\t\t});\n\t},\n\tdeleteNote: (jobId, noteId) => {\n\t\treturn Session.authedFunction({\n\t\t\tmethod: \"POST\",\n\t\t\turl: Helper.getUrl(values.serviceKey, \"requests/note\"),\n\t\t\tdata: {\n\t\t\t\tid: jobId,\n\t\t\t\tnoteId,\n\t\t\t\taction: \"DeleteNote\",\n\t\t\t},\n\t\t});\n\t},\n\tgetJobTypes: async (site) => {\n\t\tconst url = Helper.getUrl(values.serviceKey, \"getjobtypes\");\n\t\treturn Session.authedFunction({\n\t\t\tmethod: \"POST\",\n\t\t\turl,\n\t\t\tdata: { site },\n\t\t});\n\t},\n\tgetExternalSync: (jobId) => {\n\t\treturn Session.authedFunction({\n\t\t\tmethod: \"GET\",\n\t\t\turl: Helper.getUrl(values.serviceKey, \"get/externalsync\", { id: jobId }),\n\t\t});\n\t},\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["Helper","Session","values","maintenanceActions","getJob","site","id","authedFunction","method","url","getUrl","serviceKey","data","getJobByJobId","jobId","getJobs","status","type","getJobs2","priority","lastKey","assignee","query","JSON","stringify","getJobsRecursive","jobs","Promise","resolve","reject","then","jobRes","newJobs","Items","LastKey","catch","sendMaintenanceRequest","userID","userName","phone","room","title","description","date","images","location","isHome","homeText","customFields","request","editJob","job","editJobStatus","editJobPriority","assignJob","userId","getAssignees","addNote","note","attachments","action","editNote","noteId","deleteNote","getJobTypes","getExternalSync"],"sources":["maintenanceActions.js"],"sourcesContent":["import { Helper, Session } from \"../core.config\";\nimport { values } from \"../values.config\";\n\nexport const maintenanceActions = {\n\tgetJob: (site, id) => {\n\t\treturn Session.authedFunction({\n\t\t\tmethod: \"POST\",\n\t\t\turl: Helper.getUrl(values.serviceKey, \"getJob\"),\n\t\t\tdata: { site, id },\n\t\t});\n\t},\n\tgetJobByJobId: (site, jobId) => {\n\t\treturn Session.authedFunction({\n\t\t\tmethod: \"POST\",\n\t\t\turl: Helper.getUrl(values.serviceKey, \"getJob\"),\n\t\t\tdata: { site, jobId },\n\t\t});\n\t},\n\tgetJobs: (site, status = \"\", type = \"\") => {\n\t\treturn Session.authedFunction({\n\t\t\tmethod: \"POST\",\n\t\t\turl: Helper.getUrl(values.serviceKey, \"getJobs\"),\n\t\t\tdata: { site, status, type },\n\t\t});\n\t},\n\tgetJobs2: (site, status, priority, type, lastKey, assignee) => {\n\t\tconst query = { site };\n\t\tif (status) {\n\t\t\tquery.status = status;\n\t\t}\n\t\tif (priority) {\n\t\t\tquery.priority = priority;\n\t\t}\n\t\tif (type) {\n\t\t\tquery.type = type;\n\t\t}\n\t\tif (lastKey) {\n\t\t\tquery.lastKey = JSON.stringify(lastKey);\n\t\t}\n\t\tif (assignee) {\n\t\t\tquery.assignee = assignee;\n\t\t}\n\t\treturn Session.authedFunction({\n\t\t\tmethod: \"GET\",\n\t\t\turl: Helper.getUrl(values.serviceKey, \"get/requests\", query),\n\t\t});\n\t},\n\t/**\n\t * @deprecated Use getJobs2 with pagination instead.\n\t * This method recursively fetches ALL pages which can be slow for large datasets.\n\t * For better performance, use getJobs2 directly and implement pagination in the UI.\n\t */\n\tgetJobsRecursive: (site, status, priority, type, lastKey, jobs = []) => {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tmaintenanceActions\n\t\t\t\t.getJobs2(site, status, priority, type, lastKey)\n\t\t\t\t.then((jobRes) => {\n\t\t\t\t\tconst newJobs = [...jobs, ...jobRes.data.Items];\n\t\t\t\t\tif (!jobRes.data.LastKey) {\n\t\t\t\t\t\treturn resolve(newJobs);\n\t\t\t\t\t}\n\t\t\t\t\tmaintenanceActions\n\t\t\t\t\t\t.getJobsRecursive(\n\t\t\t\t\t\t\tsite,\n\t\t\t\t\t\t\tstatus,\n\t\t\t\t\t\t\tpriority,\n\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\tjobRes.data.LastKey,\n\t\t\t\t\t\t\tnewJobs,\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.then(resolve)\n\t\t\t\t\t\t.catch(reject);\n\t\t\t\t})\n\t\t\t\t.catch(reject);\n\t\t});\n\t},\n\tsendMaintenanceRequest: (\n\t\tuserID,\n\t\tuserName,\n\t\tphone,\n\t\troom,\n\t\ttitle,\n\t\tdescription,\n\t\tdate,\n\t\ttype,\n\t\timages,\n\t\tlocation,\n\t\tisHome,\n\t\thomeText,\n\t\tcustomFields,\n\t) => {\n\t\tconst request = {\n\t\t\tmethod: \"POST\",\n\t\t\turl: Helper.getUrl(values.serviceKey, \"sendMaintenance\"),\n\t\t\tdata: {\n\t\t\t\tuserID,\n\t\t\t\tuserName,\n\t\t\t\tphone,\n\t\t\t\troom,\n\t\t\t\ttitle,\n\t\t\t\tdescription,\n\t\t\t\tdate,\n\t\t\t\ttype,\n\t\t\t\timages,\n\t\t\t\tlocation,\n\t\t\t\tisHome,\n\t\t\t\thomeText,\n\t\t\t\tcustomFields,\n\t\t\t},\n\t\t};\n\t\treturn Session.authedFunction(request);\n\t},\n\teditJob: (job, site) => {\n\t\treturn Session.authedFunction({\n\t\t\tmethod: \"POST\",\n\t\t\turl: Helper.getUrl(values.serviceKey, \"editJob\"),\n\t\t\tdata: { job, site },\n\t\t});\n\t},\n\teditJobStatus: (id, status) => {\n\t\treturn Session.authedFunction({\n\t\t\tmethod: \"POST\",\n\t\t\turl: Helper.getUrl(values.serviceKey, \"editJobStatus\"),\n\t\t\tdata: { id, status },\n\t\t});\n\t},\n\teditJobPriority: (id, priority) => {\n\t\treturn Session.authedFunction({\n\t\t\tmethod: \"POST\",\n\t\t\turl: Helper.getUrl(values.serviceKey, \"update/priority\"),\n\t\t\tdata: { id, priority },\n\t\t});\n\t},\n\tassignJob: (jobId, userId) => {\n\t\treturn Session.authedFunction({\n\t\t\tmethod: \"POST\",\n\t\t\turl: Helper.getUrl(values.serviceKey, \"update/assign\"),\n\t\t\tdata: {\n\t\t\t\tid: jobId,\n\t\t\t\tuserId,\n\t\t\t},\n\t\t});\n\t},\n\tgetAssignees: (site) => {\n\t\treturn Session.authedFunction({\n\t\t\tmethod: \"GET\",\n\t\t\turl: Helper.getUrl(values.serviceKey, \"get/assignees\", { site }),\n\t\t});\n\t},\n\taddNote: (jobId, note, attachments, images) => {\n\t\treturn Session.authedFunction({\n\t\t\tmethod: \"POST\",\n\t\t\turl: Helper.getUrl(values.serviceKey, \"requests/note\"),\n\t\t\tdata: {\n\t\t\t\tid: jobId,\n\t\t\t\tnote,\n\t\t\t\tattachments,\n\t\t\t\timages,\n\t\t\t\taction: \"AddNote\",\n\t\t\t},\n\t\t});\n\t},\n\teditNote: (jobId, noteId, note, attachments, images) => {\n\t\treturn Session.authedFunction({\n\t\t\tmethod: \"POST\",\n\t\t\turl: Helper.getUrl(values.serviceKey, \"requests/note\"),\n\t\t\tdata: {\n\t\t\t\tid: jobId,\n\t\t\t\tnote,\n\t\t\t\tattachments,\n\t\t\t\timages,\n\t\t\t\tnoteId,\n\t\t\t\taction: \"EditNote\",\n\t\t\t},\n\t\t});\n\t},\n\tdeleteNote: (jobId, noteId) => {\n\t\treturn Session.authedFunction({\n\t\t\tmethod: \"POST\",\n\t\t\turl: Helper.getUrl(values.serviceKey, \"requests/note\"),\n\t\t\tdata: {\n\t\t\t\tid: jobId,\n\t\t\t\tnoteId,\n\t\t\t\taction: \"DeleteNote\",\n\t\t\t},\n\t\t});\n\t},\n\tgetJobTypes: async (site) => {\n\t\tconst url = Helper.getUrl(values.serviceKey, \"getjobtypes\");\n\t\treturn Session.authedFunction({\n\t\t\tmethod: \"POST\",\n\t\t\turl,\n\t\t\tdata: { site },\n\t\t});\n\t},\n\tgetExternalSync: (jobId) => {\n\t\treturn Session.authedFunction({\n\t\t\tmethod: \"GET\",\n\t\t\turl: Helper.getUrl(values.serviceKey, \"get/externalsync\", { id: jobId }),\n\t\t});\n\t},\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -21,13 +21,18 @@ class MaintenanceList extends Component {
|
|
|
21
21
|
const {
|
|
22
22
|
jobfilters
|
|
23
23
|
} = this.props;
|
|
24
|
-
const res = await maintenanceActions.
|
|
25
|
-
//
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
24
|
+
const res = await maintenanceActions.getJobs2(this.props.site, jobfilters.status, jobfilters.priority, jobfilters.type, null,
|
|
25
|
+
// No lastKey = first page
|
|
26
|
+
jobfilters.assignee);
|
|
27
|
+
const jobs = res.data.Items;
|
|
28
|
+
const lastKey = res.data.LastKey;
|
|
29
|
+
|
|
30
|
+
// Always replace jobs on refresh (filters are server-side)
|
|
31
|
+
this.props.jobsLoaded(jobs);
|
|
32
|
+
this.setState({
|
|
33
|
+
lastKey,
|
|
34
|
+
hasMore: !!lastKey
|
|
35
|
+
});
|
|
31
36
|
} catch (error) {
|
|
32
37
|
console.log("refresh error", error);
|
|
33
38
|
} finally {
|
|
@@ -35,6 +40,43 @@ class MaintenanceList extends Component {
|
|
|
35
40
|
}
|
|
36
41
|
});
|
|
37
42
|
});
|
|
43
|
+
_defineProperty(this, "loadMore", () => {
|
|
44
|
+
const {
|
|
45
|
+
loading,
|
|
46
|
+
loadingMore,
|
|
47
|
+
hasMore,
|
|
48
|
+
lastKey,
|
|
49
|
+
searchText
|
|
50
|
+
} = this.state;
|
|
51
|
+
|
|
52
|
+
// Don't load if already loading, no more pages, or during search
|
|
53
|
+
if (loading || loadingMore || !hasMore || !lastKey || searchText) return;
|
|
54
|
+
this.setState({
|
|
55
|
+
loadingMore: true
|
|
56
|
+
}, async () => {
|
|
57
|
+
try {
|
|
58
|
+
const {
|
|
59
|
+
jobfilters
|
|
60
|
+
} = this.props;
|
|
61
|
+
const res = await maintenanceActions.getJobs2(this.props.site, jobfilters.status, jobfilters.priority, jobfilters.type, lastKey, jobfilters.assignee);
|
|
62
|
+
const newJobs = res.data.Items;
|
|
63
|
+
const newLastKey = res.data.LastKey;
|
|
64
|
+
|
|
65
|
+
// Append to existing jobs
|
|
66
|
+
this.props.jobsAdded(newJobs);
|
|
67
|
+
this.setState({
|
|
68
|
+
lastKey: newLastKey,
|
|
69
|
+
hasMore: !!newLastKey
|
|
70
|
+
});
|
|
71
|
+
} catch (error) {
|
|
72
|
+
console.log("loadMore error", error);
|
|
73
|
+
} finally {
|
|
74
|
+
this.setState({
|
|
75
|
+
loadingMore: false
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
});
|
|
38
80
|
_defineProperty(this, "refreshTypes", async () => {
|
|
39
81
|
const {
|
|
40
82
|
data
|
|
@@ -69,9 +111,6 @@ class MaintenanceList extends Component {
|
|
|
69
111
|
});
|
|
70
112
|
});
|
|
71
113
|
_defineProperty(this, "resetDataSource", (source = "") => {
|
|
72
|
-
const {
|
|
73
|
-
jobfilters
|
|
74
|
-
} = this.props;
|
|
75
114
|
const {
|
|
76
115
|
searchText
|
|
77
116
|
} = this.state;
|
|
@@ -80,6 +119,8 @@ class MaintenanceList extends Component {
|
|
|
80
119
|
} = this.props;
|
|
81
120
|
let filteredList = jobs;
|
|
82
121
|
let jobIdMatch = null;
|
|
122
|
+
|
|
123
|
+
// Client-side search filtering (search is not supported server-side)
|
|
83
124
|
if (searchText) {
|
|
84
125
|
jobIdMatch = _.find(jobs, j => j.jobId === searchText);
|
|
85
126
|
filteredList = jobs.filter(j => {
|
|
@@ -90,10 +131,10 @@ class MaintenanceList extends Component {
|
|
|
90
131
|
});
|
|
91
132
|
if (!jobIdMatch) this.fetchJob(searchText);
|
|
92
133
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
134
|
+
|
|
135
|
+
// Note: status, priority, type, and assignee filters are applied server-side
|
|
136
|
+
// via getJobs2, so no client-side filtering needed for those
|
|
137
|
+
|
|
97
138
|
if (jobIdMatch) {
|
|
98
139
|
const jobIndex = filteredList.indexOf(jobIdMatch);
|
|
99
140
|
if (jobIndex > -1) {
|
|
@@ -101,7 +142,8 @@ class MaintenanceList extends Component {
|
|
|
101
142
|
}
|
|
102
143
|
filteredList.unshift(jobIdMatch);
|
|
103
144
|
}
|
|
104
|
-
|
|
145
|
+
// Only refresh on initial load, not on filter changes (pagination handles data)
|
|
146
|
+
if (source !== "search" && source !== "filter") this.refresh();
|
|
105
147
|
this.setState({
|
|
106
148
|
filteredList
|
|
107
149
|
});
|
|
@@ -132,6 +174,14 @@ class MaintenanceList extends Component {
|
|
|
132
174
|
_defineProperty(this, "onSelectFilter", selected => {
|
|
133
175
|
this.props.jobsFilterLoaded(selected);
|
|
134
176
|
this.onToggleFilter();
|
|
177
|
+
// Reset pagination and clear existing list before refresh
|
|
178
|
+
this.setState({
|
|
179
|
+
lastKey: null,
|
|
180
|
+
hasMore: true,
|
|
181
|
+
filteredList: []
|
|
182
|
+
}, () => {
|
|
183
|
+
this.refresh();
|
|
184
|
+
});
|
|
135
185
|
});
|
|
136
186
|
_defineProperty(this, "getFilterButtonText", () => {
|
|
137
187
|
const {
|
|
@@ -155,10 +205,21 @@ class MaintenanceList extends Component {
|
|
|
155
205
|
}
|
|
156
206
|
return `Filtering by ${filterTexts.join(", ")}`;
|
|
157
207
|
});
|
|
208
|
+
_defineProperty(this, "renderListFooter", () => {
|
|
209
|
+
if (!this.state.loadingMore) return null;
|
|
210
|
+
return /*#__PURE__*/React.createElement(View, {
|
|
211
|
+
style: styles.loadingMore
|
|
212
|
+
}, /*#__PURE__*/React.createElement(Components.LoadingIndicator, {
|
|
213
|
+
visible: true
|
|
214
|
+
}));
|
|
215
|
+
});
|
|
158
216
|
this.state = {
|
|
159
217
|
types: [],
|
|
160
218
|
filteredList: props.jobs,
|
|
161
219
|
loading: false,
|
|
220
|
+
loadingMore: false,
|
|
221
|
+
hasMore: true,
|
|
222
|
+
lastKey: null,
|
|
162
223
|
searchText: "",
|
|
163
224
|
showFilterPopup: false
|
|
164
225
|
};
|
|
@@ -246,7 +307,10 @@ class MaintenanceList extends Component {
|
|
|
246
307
|
job: item
|
|
247
308
|
}),
|
|
248
309
|
ListEmptyComponent: this.renderEmptyList(),
|
|
249
|
-
ListHeaderComponent: this.renderListHeader()
|
|
310
|
+
ListHeaderComponent: this.renderListHeader(),
|
|
311
|
+
ListFooterComponent: this.renderListFooter(),
|
|
312
|
+
onEndReached: this.loadMore,
|
|
313
|
+
onEndReachedThreshold: 0.5
|
|
250
314
|
});
|
|
251
315
|
}
|
|
252
316
|
renderFilterPopup() {
|
|
@@ -318,6 +382,10 @@ const styles = StyleSheet.create({
|
|
|
318
382
|
filterButtonText: {
|
|
319
383
|
fontFamily: "sf-semibold",
|
|
320
384
|
fontSize: 16
|
|
385
|
+
},
|
|
386
|
+
loadingMore: {
|
|
387
|
+
paddingVertical: 20,
|
|
388
|
+
alignItems: "center"
|
|
321
389
|
}
|
|
322
390
|
});
|
|
323
391
|
const mapStateToProps = state => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Component","Text","View","StyleSheet","FlatList","TouchableOpacity","_","connect","maintenanceActions","jobsLoaded","jobAdded","jobsAdded","jobStatusesUpdate","jobHideSeenUpdate","jobsFilterLoaded","MaintenanceListItem","FilterPopupMenu","Components","Colours","Helper","values","MaintenanceList","constructor","props","_defineProperty","onLoadingChanged","jobfilters","res","getJobsRecursive","site","status","priority","type","isEmpty","error","console","log","data","getJobTypes","getSite","types","map","t","label","typeName","value","splice","setState","jobId","state","loading","job","getJobByJobId","source","searchText","jobs","filteredList","jobIdMatch","find","j","filter","room","toLowerCase","indexOf","fetchJob","includes","assignee","AssigneeId","jobIndex","unshift","refresh","callback","resetDataSource","showFilterPopup","selected","onToggleFilter","filterTexts","push","statusText","priorityText","assigneeName","join","componentDidMount","refreshTypes","componentDidUpdate","prevProps","dataUpdated","isEqual","getEmptyStateText","options","EmptyText","userCategory","emptyRequestsStaff","emptyRequestsUser","renderEmptyList","createElement","EmptyStateMain","title","style","marginHorizontal","renderFilterButton","onPress","styles","filterButton","filterButtonText","color","colourBrandingMain","getFilterButtonText","renderSearch","hasPermission","searchContainer","GenericInput","placeholder","textEntityName","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","mapStateToProps","user","notifications","reducerKey","jobsOrdered","orderBy","permissions","category","getMainBrandingColourFromState","updateKey","statusTypes","jobstatuses","forwardRef"],"sources":["MaintenanceList.js"],"sourcesContent":["import React, { Component } from \"react\";\nimport { Text } from \"@plusscommunities/pluss-core-app/components\";\nimport { View, StyleSheet, FlatList, TouchableOpacity } from \"react-native\";\nimport _ from \"lodash\";\nimport { connect } from \"react-redux\";\nimport { maintenanceActions } from \"../apis\";\nimport {\n\tjobsLoaded,\n\tjobAdded,\n\tjobsAdded,\n\tjobStatusesUpdate,\n\tjobHideSeenUpdate,\n\tjobsFilterLoaded,\n} from \"../actions\";\nimport MaintenanceListItem from \"../components/MaintenanceListItem\";\nimport FilterPopupMenu from \"./FilterPopupMenu\";\nimport { Components, Colours, Helper } from \"../core.config\";\nimport { values } from \"../values.config\";\n\nclass MaintenanceList extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\ttypes: [],\n\t\t\tfilteredList: props.jobs,\n\t\t\tloading: false,\n\t\t\tsearchText: \"\",\n\t\t\tshowFilterPopup: false,\n\t\t};\n\t}\n\n\tcomponentDidMount() {\n\t\tthis.props.jobStatusesUpdate(this.props.site);\n\t\tthis.props.jobHideSeenUpdate(this.props.site);\n\t\tthis.refresh();\n\t\tthis.refreshTypes();\n\t\tthis.resetDataSource();\n\t}\n\n\tcomponentDidUpdate(prevProps) {\n\t\tif (!prevProps.dataUpdated && this.props.dataUpdated) this.refresh();\n\t\tif (\n\t\t\t!_.isEqual(prevProps.jobs, this.props.jobs) ||\n\t\t\t!_.isEqual(prevProps.jobfilters, this.props.jobfilters)\n\t\t)\n\t\t\tthis.resetDataSource();\n\t}\n\n\trefresh = () => {\n\t\tthis.onLoadingChanged(true, async () => {\n\t\t\ttry {\n\t\t\t\tconst { jobfilters } = this.props;\n\t\t\t\tconst res = await maintenanceActions.getJobsRecursive(\n\t\t\t\t\tthis.props.site,\n\t\t\t\t\tjobfilters.status,\n\t\t\t\t\tjobfilters.priority,\n\t\t\t\t\tjobfilters.type,\n\t\t\t\t);\n\t\t\t\t// console.log('refresh', res ? JSON.stringify(res[0], null, 2) : null);\n\t\t\t\tif (\n\t\t\t\t\t!_.isEmpty(jobfilters.status) ||\n\t\t\t\t\t!_.isEmpty(jobfilters.priority) ||\n\t\t\t\t\t!_.isEmpty(jobfilters.type)\n\t\t\t\t) {\n\t\t\t\t\tthis.props.jobsAdded(res);\n\t\t\t\t} else {\n\t\t\t\t\tthis.props.jobsLoaded(res);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconsole.log(\"refresh error\", error);\n\t\t\t} finally {\n\t\t\t\tthis.onLoadingChanged(false);\n\t\t\t}\n\t\t});\n\t};\n\n\trefreshTypes = async () => {\n\t\tconst { data } = await maintenanceActions.getJobTypes(\n\t\t\tHelper.getSite(this.props.site),\n\t\t);\n\t\tconst types = data.map((t) => {\n\t\t\treturn { label: t.typeName, value: t.typeName };\n\t\t});\n\t\ttypes.splice(0, 0, { label: \"All\", value: \"\" });\n\t\t// console.log('refreshTypes', types);\n\t\tthis.setState({ types });\n\t};\n\n\tfetchJob = (jobId) => {\n\t\tif (this.state.loading) return;\n\n\t\tthis.onLoadingChanged(true, async () => {\n\t\t\ttry {\n\t\t\t\tconst job = await maintenanceActions.getJobByJobId(\n\t\t\t\t\tthis.props.site,\n\t\t\t\t\tjobId,\n\t\t\t\t);\n\t\t\t\t// console.log('fetchJob', job?.data);\n\t\t\t\tthis.props.jobAdded(job.data);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.log(\"fetchJob error\", error);\n\t\t\t} finally {\n\t\t\t\tthis.onLoadingChanged(false);\n\t\t\t}\n\t\t});\n\t};\n\n\tgetEmptyStateText() {\n\t\tif (this.props.options && !_.isEmpty(this.props.options.EmptyText)) {\n\t\t\treturn this.props.options.EmptyText;\n\t\t}\n\t\treturn this.props.userCategory === \"staff\"\n\t\t\t? values.emptyRequestsStaff\n\t\t\t: values.emptyRequestsUser;\n\t}\n\n\tresetDataSource = (source = \"\") => {\n\t\tconst { jobfilters } = this.props;\n\t\tconst { searchText } = this.state;\n\t\tconst { jobs } = this.props;\n\n\t\tlet filteredList = jobs;\n\t\tlet jobIdMatch = null;\n\t\tif (searchText) {\n\t\t\tjobIdMatch = _.find(jobs, (j) => j.jobId === searchText);\n\t\t\tfilteredList = jobs.filter((j) => {\n\t\t\t\tif (\n\t\t\t\t\tj.room &&\n\t\t\t\t\tj.room.toLowerCase().indexOf(searchText.toLowerCase()) > -1\n\t\t\t\t) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t});\n\t\t\tif (!jobIdMatch) this.fetchJob(searchText);\n\t\t}\n\t\tif (jobfilters.status)\n\t\t\tfilteredList = filteredList.filter((j) =>\n\t\t\t\tjobfilters.status.includes(j.status),\n\t\t\t);\n\t\tif (jobfilters.priority)\n\t\t\tfilteredList = filteredList.filter((j) =>\n\t\t\t\tjobfilters.priority.includes(j.priority),\n\t\t\t);\n\t\tif (jobfilters.type)\n\t\t\tfilteredList = filteredList.filter((j) =>\n\t\t\t\tjobfilters.type.includes(j.type),\n\t\t\t);\n\t\tif (jobfilters.assignee)\n\t\t\tfilteredList = filteredList.filter((j) =>\n\t\t\t\tjobfilters.assignee.includes(j.AssigneeId),\n\t\t\t);\n\t\tif (jobIdMatch) {\n\t\t\tconst jobIndex = filteredList.indexOf(jobIdMatch);\n\t\t\tif (jobIndex > -1) {\n\t\t\t\tfilteredList.splice(jobIndex, 1);\n\t\t\t}\n\t\t\tfilteredList.unshift(jobIdMatch);\n\t\t}\n\t\tif (source !== \"search\") this.refresh();\n\n\t\tthis.setState({ filteredList });\n\t};\n\n\tonLoadingChanged = (loading, callback) => {\n\t\tthis.setState({ loading }, () => {\n\t\t\tif (this.props.onLoadingChanged)\n\t\t\t\tthis.props.onLoadingChanged(this.state.loading);\n\t\t\tif (callback) callback();\n\t\t});\n\t};\n\n\tonSearchText = (value) => {\n\t\tthis.setState({ searchText: value }, () => {\n\t\t\tif (_.isEmpty(this.state.searchText)) this.resetDataSource(\"search\");\n\t\t});\n\t};\n\n\tonSearchSubmit = () => {\n\t\tthis.resetDataSource(\"search\");\n\t};\n\n\tonToggleFilter = () => {\n\t\tthis.setState({ showFilterPopup: !this.state.showFilterPopup });\n\t};\n\n\tonSelectFilter = (selected) => {\n\t\tthis.props.jobsFilterLoaded(selected);\n\t\tthis.onToggleFilter();\n\t};\n\n\tgetFilterButtonText = () => {\n\t\tconst { jobfilters } = this.props;\n\t\tconst filterTexts = [];\n\t\tif (!_.isEmpty(jobfilters.status)) {\n\t\t\tfilterTexts.push(jobfilters.statusText);\n\t\t}\n\t\tif (!_.isEmpty(jobfilters.priority)) {\n\t\t\tfilterTexts.push(jobfilters.priorityText);\n\t\t}\n\t\tif (!_.isEmpty(jobfilters.type)) {\n\t\t\tfilterTexts.push(jobfilters.type);\n\t\t}\n\t\tif (!_.isEmpty(jobfilters.assignee)) {\n\t\t\tfilterTexts.push(jobfilters.assigneeName);\n\t\t}\n\t\tif (_.isEmpty(filterTexts)) {\n\t\t\treturn \"Filter\";\n\t\t}\n\t\treturn `Filtering by ${filterTexts.join(\", \")}`;\n\t};\n\n\trenderEmptyList() {\n\t\treturn this.state.loading ? null : (\n\t\t\t<Components.EmptyStateMain\n\t\t\t\ttitle={this.getEmptyStateText()}\n\t\t\t\tstyle={{ marginHorizontal: 16 }}\n\t\t\t/>\n\t\t);\n\t}\n\n\trenderFilterButton() {\n\t\treturn (\n\t\t\t<TouchableOpacity onPress={this.onToggleFilter}>\n\t\t\t\t<View style={styles.filterButton}>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\tstyles.filterButtonText,\n\t\t\t\t\t\t\t{ color: this.props.colourBrandingMain },\n\t\t\t\t\t\t]}\n\t\t\t\t\t>\n\t\t\t\t\t\t{this.getFilterButtonText()}\n\t\t\t\t\t</Text>\n\t\t\t\t</View>\n\t\t\t</TouchableOpacity>\n\t\t);\n\t}\n\n\trenderSearch() {\n\t\tif (!this.props.hasPermission) return null;\n\n\t\treturn (\n\t\t\t<View style={styles.searchContainer}>\n\t\t\t\t<Components.GenericInput\n\t\t\t\t\tplaceholder={`Search by ${values.textEntityName} ID or Address`}\n\t\t\t\t\tvalue={this.state.searchText}\n\t\t\t\t\tonChangeText={this.onSearchText}\n\t\t\t\t\tonSubmitEditing={this.onSearchSubmit}\n\t\t\t\t\tsquaredCorners\n\t\t\t\t\thasClear\n\t\t\t\t\t// keyboardType={'numeric'}\n\t\t\t\t\treturnKeyType={\"done\"}\n\t\t\t\t/>\n\t\t\t</View>\n\t\t);\n\t}\n\n\trenderListHeader() {\n\t\tconst { ListHeaderComponent } = this.props;\n\t\treturn (\n\t\t\t<View>\n\t\t\t\t{ListHeaderComponent ? (\n\t\t\t\t\tListHeaderComponent\n\t\t\t\t) : (\n\t\t\t\t\t<View style={{ height: 8 }} />\n\t\t\t\t)}\n\t\t\t\t{this.renderFilterButton()}\n\t\t\t\t{this.renderSearch()}\n\t\t\t</View>\n\t\t);\n\t}\n\n\trenderList() {\n\t\tconst { filteredList } = this.state;\n\n\t\treturn (\n\t\t\t<FlatList\n\t\t\t\tkeyboardShouldPersistTaps=\"always\"\n\t\t\t\tstyle={{ flex: 1 }}\n\t\t\t\tcontentContainerStyle={{ paddingBottom: 16 }}\n\t\t\t\tdata={filteredList}\n\t\t\t\tkeyExtractor={(item) => item.id}\n\t\t\t\trenderItem={({ item }) => (\n\t\t\t\t\t<MaintenanceListItem style={this.props.itemStyle} job={item} />\n\t\t\t\t)}\n\t\t\t\tListEmptyComponent={this.renderEmptyList()}\n\t\t\t\tListHeaderComponent={this.renderListHeader()}\n\t\t\t/>\n\t\t);\n\t}\n\n\trenderFilterPopup() {\n\t\tconst { jobfilters } = this.props;\n\t\tconst { showFilterPopup, types } = this.state;\n\t\tif (!showFilterPopup) return null;\n\n\t\treturn (\n\t\t\t<FilterPopupMenu\n\t\t\t\tsite={this.props.site}\n\t\t\t\ttypes={types}\n\t\t\t\tstatus={jobfilters.status}\n\t\t\t\tpriority={jobfilters.priority}\n\t\t\t\tassignee={jobfilters.assignee}\n\t\t\t\ttype={jobfilters.type}\n\t\t\t\tonClose={this.onSelectFilter}\n\t\t\t/>\n\t\t);\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t<View style={[styles.container, this.props.style]}>\n\t\t\t\t{this.renderList()}\n\t\t\t\t{this.renderFilterPopup()}\n\t\t\t</View>\n\t\t);\n\t}\n}\n\nconst styles = StyleSheet.create({\n\tcontainer: {\n\t\tflex: 1,\n\t\tbackgroundColor: \"#fff\",\n\t},\n\tfilterContainerOuter: {\n\t\tflexDirection: \"row\",\n\t\tjustifyContent: \"space-between\",\n\t\talignItems: \"center\",\n\t\tpaddingHorizontal: 16,\n\t\tpaddingVertical: 16,\n\t},\n\tfilterTitle: {\n\t\tfontFamily: \"sf-bold\",\n\t\tfontSize: 11,\n\t\tletterSpacing: 0.8,\n\t\tcolor: \"#4d4d4d\",\n\t},\n\tfilterContainer: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t},\n\tfilterText: {\n\t\tfontFamily: \"sf-semibold\",\n\t\tfontSize: 16,\n\t\tmarginRight: 6,\n\t},\n\tfilterIcon: {\n\t\tfontSize: 20,\n\t},\n\tsearchContainer: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tpaddingBottom: 8,\n\t\tpaddingHorizontal: 16,\n\t},\n\tfilterButton: {\n\t\tpaddingBottom: 8,\n\t\tpaddingHorizontal: 16,\n\t\tflexDirection: \"row-reverse\",\n\t},\n\tfilterButtonText: {\n\t\tfontFamily: \"sf-semibold\",\n\t\tfontSize: 16,\n\t},\n});\n\nconst mapStateToProps = (state) => {\n\tconst { user, notifications } = state;\n\tconst jobs = state[values.reducerKey];\n\tconst jobsOrdered = _.orderBy(jobs.jobs, [\"createdUnix\"], [\"desc\"]);\n\tconst hasPermission = _.includes(user.permissions, \"maintenanceTracking\");\n\n\treturn {\n\t\thasPermission,\n\t\tjobs: jobsOrdered,\n\t\tsite: user.site,\n\t\tuserCategory: user.category,\n\t\tcolourBrandingMain: Colours.getMainBrandingColourFromState(state),\n\t\tdataUpdated: notifications.dataUpdated[values.updateKey],\n\t\tstatusTypes: state[values.reducerKey].jobstatuses,\n\t\tjobfilters: state[values.reducerKey].jobfilters || {},\n\t};\n};\n\nexport default connect(\n\tmapStateToProps,\n\t{\n\t\tjobsLoaded,\n\t\tjobAdded,\n\t\tjobsAdded,\n\t\tjobStatusesUpdate,\n\t\tjobHideSeenUpdate,\n\t\tjobsFilterLoaded,\n\t},\n\tnull,\n\t{\n\t\tforwardRef: true,\n\t},\n)(MaintenanceList);\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["React","Component","Text","View","StyleSheet","FlatList","TouchableOpacity","_","connect","maintenanceActions","jobsLoaded","jobAdded","jobsAdded","jobStatusesUpdate","jobHideSeenUpdate","jobsFilterLoaded","MaintenanceListItem","FilterPopupMenu","Components","Colours","Helper","values","MaintenanceList","constructor","props","_defineProperty","onLoadingChanged","jobfilters","res","getJobs2","site","status","priority","type","assignee","jobs","data","Items","lastKey","LastKey","setState","hasMore","error","console","log","loading","loadingMore","searchText","state","newJobs","newLastKey","getJobTypes","getSite","types","map","t","label","typeName","value","splice","jobId","job","getJobByJobId","source","filteredList","jobIdMatch","find","j","filter","room","toLowerCase","indexOf","fetchJob","jobIndex","unshift","refresh","callback","isEmpty","resetDataSource","showFilterPopup","selected","onToggleFilter","filterTexts","push","statusText","priorityText","assigneeName","join","createElement","style","styles","LoadingIndicator","visible","componentDidMount","refreshTypes","componentDidUpdate","prevProps","dataUpdated","isEqual","getEmptyStateText","options","EmptyText","userCategory","emptyRequestsStaff","emptyRequestsUser","renderEmptyList","EmptyStateMain","title","marginHorizontal","renderFilterButton","onPress","filterButton","filterButtonText","color","colourBrandingMain","getFilterButtonText","renderSearch","hasPermission","searchContainer","GenericInput","placeholder","textEntityName","onChangeText","onSearchText","onSubmitEditing","onSearchSubmit","squaredCorners","hasClear","returnKeyType","renderListHeader","ListHeaderComponent","height","renderList","keyboardShouldPersistTaps","flex","contentContainerStyle","paddingBottom","keyExtractor","item","id","renderItem","itemStyle","ListEmptyComponent","ListFooterComponent","renderListFooter","onEndReached","loadMore","onEndReachedThreshold","renderFilterPopup","onClose","onSelectFilter","render","container","create","backgroundColor","filterContainerOuter","flexDirection","justifyContent","alignItems","paddingHorizontal","paddingVertical","filterTitle","fontFamily","fontSize","letterSpacing","filterContainer","filterText","marginRight","filterIcon","mapStateToProps","user","notifications","reducerKey","jobsOrdered","orderBy","includes","permissions","category","getMainBrandingColourFromState","updateKey","statusTypes","jobstatuses","forwardRef"],"sources":["MaintenanceList.js"],"sourcesContent":["import React, { Component } from \"react\";\nimport { Text } from \"@plusscommunities/pluss-core-app/components\";\nimport { View, StyleSheet, FlatList, TouchableOpacity } from \"react-native\";\nimport _ from \"lodash\";\nimport { connect } from \"react-redux\";\nimport { maintenanceActions } from \"../apis\";\nimport {\n\tjobsLoaded,\n\tjobAdded,\n\tjobsAdded,\n\tjobStatusesUpdate,\n\tjobHideSeenUpdate,\n\tjobsFilterLoaded,\n} from \"../actions\";\nimport MaintenanceListItem from \"../components/MaintenanceListItem\";\nimport FilterPopupMenu from \"./FilterPopupMenu\";\nimport { Components, Colours, Helper } from \"../core.config\";\nimport { values } from \"../values.config\";\n\nclass MaintenanceList extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\ttypes: [],\n\t\t\tfilteredList: props.jobs,\n\t\t\tloading: false,\n\t\t\tloadingMore: false,\n\t\t\thasMore: true,\n\t\t\tlastKey: null,\n\t\t\tsearchText: \"\",\n\t\t\tshowFilterPopup: false,\n\t\t};\n\t}\n\n\tcomponentDidMount() {\n\t\tthis.props.jobStatusesUpdate(this.props.site);\n\t\tthis.props.jobHideSeenUpdate(this.props.site);\n\t\tthis.refresh();\n\t\tthis.refreshTypes();\n\t\tthis.resetDataSource();\n\t}\n\n\tcomponentDidUpdate(prevProps) {\n\t\tif (!prevProps.dataUpdated && this.props.dataUpdated) this.refresh();\n\t\tif (\n\t\t\t!_.isEqual(prevProps.jobs, this.props.jobs) ||\n\t\t\t!_.isEqual(prevProps.jobfilters, this.props.jobfilters)\n\t\t)\n\t\t\tthis.resetDataSource();\n\t}\n\n\trefresh = () => {\n\t\tthis.onLoadingChanged(true, async () => {\n\t\t\ttry {\n\t\t\t\tconst { jobfilters } = this.props;\n\t\t\t\tconst res = await maintenanceActions.getJobs2(\n\t\t\t\t\tthis.props.site,\n\t\t\t\t\tjobfilters.status,\n\t\t\t\t\tjobfilters.priority,\n\t\t\t\t\tjobfilters.type,\n\t\t\t\t\tnull, // No lastKey = first page\n\t\t\t\t\tjobfilters.assignee,\n\t\t\t\t);\n\n\t\t\t\tconst jobs = res.data.Items;\n\t\t\t\tconst lastKey = res.data.LastKey;\n\n\t\t\t\t// Always replace jobs on refresh (filters are server-side)\n\t\t\t\tthis.props.jobsLoaded(jobs);\n\n\t\t\t\tthis.setState({\n\t\t\t\t\tlastKey,\n\t\t\t\t\thasMore: !!lastKey,\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tconsole.log(\"refresh error\", error);\n\t\t\t} finally {\n\t\t\t\tthis.onLoadingChanged(false);\n\t\t\t}\n\t\t});\n\t};\n\n\tloadMore = () => {\n\t\tconst { loading, loadingMore, hasMore, lastKey, searchText } = this.state;\n\n\t\t// Don't load if already loading, no more pages, or during search\n\t\tif (loading || loadingMore || !hasMore || !lastKey || searchText) return;\n\n\t\tthis.setState({ loadingMore: true }, async () => {\n\t\t\ttry {\n\t\t\t\tconst { jobfilters } = this.props;\n\t\t\t\tconst res = await maintenanceActions.getJobs2(\n\t\t\t\t\tthis.props.site,\n\t\t\t\t\tjobfilters.status,\n\t\t\t\t\tjobfilters.priority,\n\t\t\t\t\tjobfilters.type,\n\t\t\t\t\tlastKey,\n\t\t\t\t\tjobfilters.assignee,\n\t\t\t\t);\n\n\t\t\t\tconst newJobs = res.data.Items;\n\t\t\t\tconst newLastKey = res.data.LastKey;\n\n\t\t\t\t// Append to existing jobs\n\t\t\t\tthis.props.jobsAdded(newJobs);\n\n\t\t\t\tthis.setState({\n\t\t\t\t\tlastKey: newLastKey,\n\t\t\t\t\thasMore: !!newLastKey,\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tconsole.log(\"loadMore error\", error);\n\t\t\t} finally {\n\t\t\t\tthis.setState({ loadingMore: false });\n\t\t\t}\n\t\t});\n\t};\n\n\trefreshTypes = async () => {\n\t\tconst { data } = await maintenanceActions.getJobTypes(\n\t\t\tHelper.getSite(this.props.site),\n\t\t);\n\t\tconst types = data.map((t) => {\n\t\t\treturn { label: t.typeName, value: t.typeName };\n\t\t});\n\t\ttypes.splice(0, 0, { label: \"All\", value: \"\" });\n\t\t// console.log('refreshTypes', types);\n\t\tthis.setState({ types });\n\t};\n\n\tfetchJob = (jobId) => {\n\t\tif (this.state.loading) return;\n\n\t\tthis.onLoadingChanged(true, async () => {\n\t\t\ttry {\n\t\t\t\tconst job = await maintenanceActions.getJobByJobId(\n\t\t\t\t\tthis.props.site,\n\t\t\t\t\tjobId,\n\t\t\t\t);\n\t\t\t\t// console.log('fetchJob', job?.data);\n\t\t\t\tthis.props.jobAdded(job.data);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.log(\"fetchJob error\", error);\n\t\t\t} finally {\n\t\t\t\tthis.onLoadingChanged(false);\n\t\t\t}\n\t\t});\n\t};\n\n\tgetEmptyStateText() {\n\t\tif (this.props.options && !_.isEmpty(this.props.options.EmptyText)) {\n\t\t\treturn this.props.options.EmptyText;\n\t\t}\n\t\treturn this.props.userCategory === \"staff\"\n\t\t\t? values.emptyRequestsStaff\n\t\t\t: values.emptyRequestsUser;\n\t}\n\n\tresetDataSource = (source = \"\") => {\n\t\tconst { searchText } = this.state;\n\t\tconst { jobs } = this.props;\n\n\t\tlet filteredList = jobs;\n\t\tlet jobIdMatch = null;\n\n\t\t// Client-side search filtering (search is not supported server-side)\n\t\tif (searchText) {\n\t\t\tjobIdMatch = _.find(jobs, (j) => j.jobId === searchText);\n\t\t\tfilteredList = jobs.filter((j) => {\n\t\t\t\tif (\n\t\t\t\t\tj.room &&\n\t\t\t\t\tj.room.toLowerCase().indexOf(searchText.toLowerCase()) > -1\n\t\t\t\t) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t});\n\t\t\tif (!jobIdMatch) this.fetchJob(searchText);\n\t\t}\n\n\t\t// Note: status, priority, type, and assignee filters are applied server-side\n\t\t// via getJobs2, so no client-side filtering needed for those\n\n\t\tif (jobIdMatch) {\n\t\t\tconst jobIndex = filteredList.indexOf(jobIdMatch);\n\t\t\tif (jobIndex > -1) {\n\t\t\t\tfilteredList.splice(jobIndex, 1);\n\t\t\t}\n\t\t\tfilteredList.unshift(jobIdMatch);\n\t\t}\n\t\t// Only refresh on initial load, not on filter changes (pagination handles data)\n\t\tif (source !== \"search\" && source !== \"filter\") this.refresh();\n\n\t\tthis.setState({ filteredList });\n\t};\n\n\tonLoadingChanged = (loading, callback) => {\n\t\tthis.setState({ loading }, () => {\n\t\t\tif (this.props.onLoadingChanged)\n\t\t\t\tthis.props.onLoadingChanged(this.state.loading);\n\t\t\tif (callback) callback();\n\t\t});\n\t};\n\n\tonSearchText = (value) => {\n\t\tthis.setState({ searchText: value }, () => {\n\t\t\tif (_.isEmpty(this.state.searchText)) this.resetDataSource(\"search\");\n\t\t});\n\t};\n\n\tonSearchSubmit = () => {\n\t\tthis.resetDataSource(\"search\");\n\t};\n\n\tonToggleFilter = () => {\n\t\tthis.setState({ showFilterPopup: !this.state.showFilterPopup });\n\t};\n\n\tonSelectFilter = (selected) => {\n\t\tthis.props.jobsFilterLoaded(selected);\n\t\tthis.onToggleFilter();\n\t\t// Reset pagination and clear existing list before refresh\n\t\tthis.setState({ lastKey: null, hasMore: true, filteredList: [] }, () => {\n\t\t\tthis.refresh();\n\t\t});\n\t};\n\n\tgetFilterButtonText = () => {\n\t\tconst { jobfilters } = this.props;\n\t\tconst filterTexts = [];\n\t\tif (!_.isEmpty(jobfilters.status)) {\n\t\t\tfilterTexts.push(jobfilters.statusText);\n\t\t}\n\t\tif (!_.isEmpty(jobfilters.priority)) {\n\t\t\tfilterTexts.push(jobfilters.priorityText);\n\t\t}\n\t\tif (!_.isEmpty(jobfilters.type)) {\n\t\t\tfilterTexts.push(jobfilters.type);\n\t\t}\n\t\tif (!_.isEmpty(jobfilters.assignee)) {\n\t\t\tfilterTexts.push(jobfilters.assigneeName);\n\t\t}\n\t\tif (_.isEmpty(filterTexts)) {\n\t\t\treturn \"Filter\";\n\t\t}\n\t\treturn `Filtering by ${filterTexts.join(\", \")}`;\n\t};\n\n\trenderEmptyList() {\n\t\treturn this.state.loading ? null : (\n\t\t\t<Components.EmptyStateMain\n\t\t\t\ttitle={this.getEmptyStateText()}\n\t\t\t\tstyle={{ marginHorizontal: 16 }}\n\t\t\t/>\n\t\t);\n\t}\n\n\trenderFilterButton() {\n\t\treturn (\n\t\t\t<TouchableOpacity onPress={this.onToggleFilter}>\n\t\t\t\t<View style={styles.filterButton}>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\tstyles.filterButtonText,\n\t\t\t\t\t\t\t{ color: this.props.colourBrandingMain },\n\t\t\t\t\t\t]}\n\t\t\t\t\t>\n\t\t\t\t\t\t{this.getFilterButtonText()}\n\t\t\t\t\t</Text>\n\t\t\t\t</View>\n\t\t\t</TouchableOpacity>\n\t\t);\n\t}\n\n\trenderSearch() {\n\t\tif (!this.props.hasPermission) return null;\n\n\t\treturn (\n\t\t\t<View style={styles.searchContainer}>\n\t\t\t\t<Components.GenericInput\n\t\t\t\t\tplaceholder={`Search by ${values.textEntityName} ID or Address`}\n\t\t\t\t\tvalue={this.state.searchText}\n\t\t\t\t\tonChangeText={this.onSearchText}\n\t\t\t\t\tonSubmitEditing={this.onSearchSubmit}\n\t\t\t\t\tsquaredCorners\n\t\t\t\t\thasClear\n\t\t\t\t\t// keyboardType={'numeric'}\n\t\t\t\t\treturnKeyType={\"done\"}\n\t\t\t\t/>\n\t\t\t</View>\n\t\t);\n\t}\n\n\trenderListHeader() {\n\t\tconst { ListHeaderComponent } = this.props;\n\t\treturn (\n\t\t\t<View>\n\t\t\t\t{ListHeaderComponent ? (\n\t\t\t\t\tListHeaderComponent\n\t\t\t\t) : (\n\t\t\t\t\t<View style={{ height: 8 }} />\n\t\t\t\t)}\n\t\t\t\t{this.renderFilterButton()}\n\t\t\t\t{this.renderSearch()}\n\t\t\t</View>\n\t\t);\n\t}\n\n\trenderList() {\n\t\tconst { filteredList } = this.state;\n\n\t\treturn (\n\t\t\t<FlatList\n\t\t\t\tkeyboardShouldPersistTaps=\"always\"\n\t\t\t\tstyle={{ flex: 1 }}\n\t\t\t\tcontentContainerStyle={{ paddingBottom: 16 }}\n\t\t\t\tdata={filteredList}\n\t\t\t\tkeyExtractor={(item) => item.id}\n\t\t\t\trenderItem={({ item }) => (\n\t\t\t\t\t<MaintenanceListItem style={this.props.itemStyle} job={item} />\n\t\t\t\t)}\n\t\t\t\tListEmptyComponent={this.renderEmptyList()}\n\t\t\t\tListHeaderComponent={this.renderListHeader()}\n\t\t\t\tListFooterComponent={this.renderListFooter()}\n\t\t\t\tonEndReached={this.loadMore}\n\t\t\t\tonEndReachedThreshold={0.5}\n\t\t\t/>\n\t\t);\n\t}\n\n\trenderListFooter = () => {\n\t\tif (!this.state.loadingMore) return null;\n\n\t\treturn (\n\t\t\t<View style={styles.loadingMore}>\n\t\t\t\t<Components.LoadingIndicator visible={true} />\n\t\t\t</View>\n\t\t);\n\t};\n\n\trenderFilterPopup() {\n\t\tconst { jobfilters } = this.props;\n\t\tconst { showFilterPopup, types } = this.state;\n\t\tif (!showFilterPopup) return null;\n\n\t\treturn (\n\t\t\t<FilterPopupMenu\n\t\t\t\tsite={this.props.site}\n\t\t\t\ttypes={types}\n\t\t\t\tstatus={jobfilters.status}\n\t\t\t\tpriority={jobfilters.priority}\n\t\t\t\tassignee={jobfilters.assignee}\n\t\t\t\ttype={jobfilters.type}\n\t\t\t\tonClose={this.onSelectFilter}\n\t\t\t/>\n\t\t);\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t<View style={[styles.container, this.props.style]}>\n\t\t\t\t{this.renderList()}\n\t\t\t\t{this.renderFilterPopup()}\n\t\t\t</View>\n\t\t);\n\t}\n}\n\nconst styles = StyleSheet.create({\n\tcontainer: {\n\t\tflex: 1,\n\t\tbackgroundColor: \"#fff\",\n\t},\n\tfilterContainerOuter: {\n\t\tflexDirection: \"row\",\n\t\tjustifyContent: \"space-between\",\n\t\talignItems: \"center\",\n\t\tpaddingHorizontal: 16,\n\t\tpaddingVertical: 16,\n\t},\n\tfilterTitle: {\n\t\tfontFamily: \"sf-bold\",\n\t\tfontSize: 11,\n\t\tletterSpacing: 0.8,\n\t\tcolor: \"#4d4d4d\",\n\t},\n\tfilterContainer: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t},\n\tfilterText: {\n\t\tfontFamily: \"sf-semibold\",\n\t\tfontSize: 16,\n\t\tmarginRight: 6,\n\t},\n\tfilterIcon: {\n\t\tfontSize: 20,\n\t},\n\tsearchContainer: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tpaddingBottom: 8,\n\t\tpaddingHorizontal: 16,\n\t},\n\tfilterButton: {\n\t\tpaddingBottom: 8,\n\t\tpaddingHorizontal: 16,\n\t\tflexDirection: \"row-reverse\",\n\t},\n\tfilterButtonText: {\n\t\tfontFamily: \"sf-semibold\",\n\t\tfontSize: 16,\n\t},\n\tloadingMore: {\n\t\tpaddingVertical: 20,\n\t\talignItems: \"center\",\n\t},\n});\n\nconst mapStateToProps = (state) => {\n\tconst { user, notifications } = state;\n\tconst jobs = state[values.reducerKey];\n\tconst jobsOrdered = _.orderBy(jobs.jobs, [\"createdUnix\"], [\"desc\"]);\n\tconst hasPermission = _.includes(user.permissions, \"maintenanceTracking\");\n\n\treturn {\n\t\thasPermission,\n\t\tjobs: jobsOrdered,\n\t\tsite: user.site,\n\t\tuserCategory: user.category,\n\t\tcolourBrandingMain: Colours.getMainBrandingColourFromState(state),\n\t\tdataUpdated: notifications.dataUpdated[values.updateKey],\n\t\tstatusTypes: state[values.reducerKey].jobstatuses,\n\t\tjobfilters: state[values.reducerKey].jobfilters || {},\n\t};\n};\n\nexport default connect(\n\tmapStateToProps,\n\t{\n\t\tjobsLoaded,\n\t\tjobAdded,\n\t\tjobsAdded,\n\t\tjobStatusesUpdate,\n\t\tjobHideSeenUpdate,\n\t\tjobsFilterLoaded,\n\t},\n\tnull,\n\t{\n\t\tforwardRef: true,\n\t},\n)(MaintenanceList);\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -32,14 +32,21 @@ class RequestDetail extends Component {
|
|
|
32
32
|
// Refresh external sync data when job is refreshed
|
|
33
33
|
this.getExternalSync();
|
|
34
34
|
} catch (error) {
|
|
35
|
+
var _error$response, _error$response2, _error$response3, _error$response4;
|
|
35
36
|
console.log("getJob error", error.toString());
|
|
36
|
-
//
|
|
37
|
-
|
|
37
|
+
// Log full error details for debugging
|
|
38
|
+
console.log("getJob error details:", {
|
|
39
|
+
message: error.message,
|
|
40
|
+
code: error.code,
|
|
41
|
+
responseStatus: (_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.status,
|
|
42
|
+
responseData: (_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : _error$response2.data
|
|
43
|
+
});
|
|
44
|
+
// check for 403 or 404 error (use optional chaining to prevent crash)
|
|
45
|
+
if (((_error$response3 = error.response) === null || _error$response3 === void 0 ? void 0 : _error$response3.status) === 403 || ((_error$response4 = error.response) === null || _error$response4 === void 0 ? void 0 : _error$response4.status) === 404) {
|
|
38
46
|
this.setState({
|
|
39
47
|
forbidden: true
|
|
40
48
|
});
|
|
41
49
|
}
|
|
42
|
-
console.log("getJob error", error);
|
|
43
50
|
} finally {
|
|
44
51
|
this.setState({
|
|
45
52
|
loading: false
|
|
@@ -73,9 +80,9 @@ class RequestDetail extends Component {
|
|
|
73
80
|
loadingExternalSync: false
|
|
74
81
|
});
|
|
75
82
|
} catch (error) {
|
|
76
|
-
var _error$
|
|
83
|
+
var _error$response5;
|
|
77
84
|
// 404 is expected if no sync - don't show error
|
|
78
|
-
if (((_error$
|
|
85
|
+
if (((_error$response5 = error.response) === null || _error$response5 === void 0 ? void 0 : _error$response5.status) !== 404) {
|
|
79
86
|
console.log("getExternalSync error", error);
|
|
80
87
|
}
|
|
81
88
|
this.setState({
|