@plusscommunities/pluss-maintenance-web-forms 1.1.37-beta.4 → 1.2.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/{index.esm.js → index.js} +3331 -3000
  2. package/dist/index.js.map +1 -0
  3. package/package.json +17 -27
  4. package/.babelrc +0 -3
  5. package/dist/index.cjs.js +0 -6364
  6. package/dist/index.umd.js +0 -6357
  7. package/rollup.config.js +0 -59
  8. package/src/actions/JobsActions.js +0 -150
  9. package/src/actions/index.js +0 -1
  10. package/src/actions/types.js +0 -8
  11. package/src/apis/index.js +0 -10
  12. package/src/apis/maintenanceActions.js +0 -203
  13. package/src/apis/reactionActions.js +0 -46
  14. package/src/components/ActivityText.js +0 -57
  15. package/src/components/AnalyticsHub.js +0 -364
  16. package/src/components/Configuration.js +0 -392
  17. package/src/components/JobList.js +0 -1108
  18. package/src/components/JobTypes.js +0 -198
  19. package/src/components/PreviewFull.js +0 -33
  20. package/src/components/PreviewGrid.js +0 -29
  21. package/src/components/PreviewWidget.js +0 -35
  22. package/src/components/ViewFull.js +0 -25
  23. package/src/components/ViewWidget.js +0 -23
  24. package/src/feature.config.js +0 -127
  25. package/src/helper/index.js +0 -26
  26. package/src/images/forms/full.png +0 -0
  27. package/src/images/forms/fullNoTitle.png +0 -0
  28. package/src/images/forms/previewWidget.png +0 -0
  29. package/src/images/forms/widget.png +0 -0
  30. package/src/images/full.png +0 -0
  31. package/src/images/fullNoTitle.png +0 -0
  32. package/src/images/previewWidget.png +0 -0
  33. package/src/images/widget.png +0 -0
  34. package/src/index.js +0 -29
  35. package/src/maintenancePriority.json +0 -5
  36. package/src/maintenanceStatus.json +0 -20
  37. package/src/reducers/MaintenanceReducer.js +0 -49
  38. package/src/screens/AddJob.js +0 -1138
  39. package/src/screens/AddJobType.js +0 -865
  40. package/src/screens/Job.js +0 -1531
  41. package/src/screens/RequestsHub.js +0 -237
  42. package/src/values.config.a.js +0 -63
  43. package/src/values.config.default.js +0 -75
  44. package/src/values.config.enquiry.js +0 -76
  45. package/src/values.config.feedback.js +0 -74
  46. package/src/values.config.food.js +0 -74
  47. package/src/values.config.forms.js +0 -74
  48. package/src/values.config.js +0 -74
@@ -1,364 +0,0 @@
1
- import React, { useState, useEffect } from "react";
2
- import moment from "moment";
3
- import {
4
- faCircleCheck,
5
- faComment,
6
- faWrench,
7
- } from "@fortawesome/free-solid-svg-icons";
8
- import { connect } from "react-redux";
9
- import { analyticsActions } from "../apis";
10
- import { PlussCore } from "../feature.config";
11
- import { values } from "../values.config";
12
-
13
- const { Analytics, Session, Components, Helper, Colours } = PlussCore;
14
-
15
- const getInitialState = () => ({
16
- requests: 0,
17
- prevRequests: 0,
18
- completedRequests: 0,
19
- prevCompletedRequests: 0,
20
- comments: 0,
21
- prevComments: 0,
22
- isLoading: true,
23
- });
24
-
25
- // AnalyticsHub Component
26
- const AnalyticsHub = ({
27
- startTime,
28
- endTime,
29
- auth,
30
- prevText,
31
- dayCount,
32
- strings,
33
- userType,
34
- userCategory,
35
- selectedSites,
36
- }) => {
37
- const [analyticsData, setAnalyticsData] = useState(getInitialState());
38
- const [isExportOpen, setIsExportOpen] = useState(false);
39
- const [failedSites, setFailedSites] = useState([]);
40
- const [comparisonData, setComparisonData] = useState({
41
- requests: [],
42
- completedRequests: [],
43
- comments: [],
44
- isLoading: true,
45
- });
46
-
47
- const comparisonMode = selectedSites && selectedSites.length > 1;
48
-
49
- const hasAccess = Session.validateAccess(
50
- auth.site,
51
- values.permissionMaintenanceTracking,
52
- auth,
53
- );
54
- if (!hasAccess) {
55
- return null;
56
- }
57
-
58
- const featureTitle = ((key) => {
59
- if (!strings || !strings.sideNav || !strings.sideNav[key]) {
60
- return values.textMenuTitle;
61
- }
62
- return strings.sideNav[key];
63
- })();
64
-
65
- const exportColumns = [
66
- { label: "Select All", key: "" },
67
- ...(comparisonMode ? [{ label: "Site", key: "site" }] : []),
68
- { label: "Start Date", key: "startDate" },
69
- { label: "End Date", key: "endDate" },
70
- { label: `${values.textSingularName}s`, key: "requests" },
71
- {
72
- label: `Completed ${values.textSingularName}s`,
73
- key: "completedRequests",
74
- },
75
- { label: "Comments", key: "comments" },
76
- ];
77
-
78
- useEffect(() => {
79
- getData();
80
- }, [startTime, endTime, userType, userCategory, selectedSites]);
81
-
82
- const getData = async () => {
83
- try {
84
- setFailedSites([]);
85
- if (comparisonMode) {
86
- setComparisonData({
87
- requests: [],
88
- completedRequests: [],
89
- comments: [],
90
- isLoading: true,
91
- });
92
- const multiSiteResultsObj = await Analytics.fetchMultiSiteData(
93
- selectedSites,
94
- async (site) => {
95
- const { data } = await analyticsActions.getAggregateEntityStats(
96
- site,
97
- values.analyticsKey,
98
- startTime,
99
- endTime,
100
- true,
101
- { userType, userCategory },
102
- );
103
- return data;
104
- },
105
- );
106
- const roles = auth.user.Roles;
107
- const failed = Object.entries(multiSiteResultsObj)
108
- .filter(([, data]) => data === null)
109
- .map(([site]) => Helper.getSiteNameFromRoles(site, roles));
110
- setFailedSites(failed);
111
- const multiSiteResults = Object.entries(multiSiteResultsObj)
112
- .filter(([, data]) => data !== null)
113
- .map(([site, data]) => ({ site, data }));
114
- const buildComparison = (activityKey, countType) =>
115
- multiSiteResults.map((result) => ({
116
- name: Helper.getSiteNameFromRoles(result.site, roles),
117
- value: Analytics.countActivities(
118
- result.data,
119
- activityKey,
120
- countType,
121
- ),
122
- }));
123
- setComparisonData({
124
- requests: buildComparison("Request", "total"),
125
- completedRequests: buildComparison("RequestCompleted", "unique"),
126
- comments: buildComparison("Comment", "total"),
127
- isLoading: false,
128
- });
129
- } else {
130
- setAnalyticsData(getInitialState());
131
- const site =
132
- selectedSites && selectedSites.length === 1
133
- ? selectedSites[0]
134
- : auth.site;
135
- const timeDifference = endTime - startTime;
136
- const [currentStatsResponse, prevStatsResponse] = await Promise.all([
137
- analyticsActions.getAggregateEntityStats(
138
- site,
139
- values.analyticsKey,
140
- startTime,
141
- endTime,
142
- true,
143
- { userType, userCategory },
144
- ),
145
- analyticsActions.getAggregateEntityStats(
146
- site,
147
- values.analyticsKey,
148
- startTime - timeDifference,
149
- startTime,
150
- true,
151
- { userType, userCategory },
152
- ),
153
- ]);
154
-
155
- const data = {
156
- requests: Analytics.countActivities(
157
- currentStatsResponse.data,
158
- "Request",
159
- "total",
160
- ),
161
- prevRequests: Analytics.countActivities(
162
- prevStatsResponse.data,
163
- "Request",
164
- "total",
165
- ),
166
- completedRequests: Analytics.countActivities(
167
- currentStatsResponse.data,
168
- "RequestCompleted",
169
- "unique",
170
- ),
171
- prevCompletedRequests: Analytics.countActivities(
172
- prevStatsResponse.data,
173
- "RequestCompleted",
174
- "unique",
175
- ),
176
- comments: Analytics.countActivities(
177
- currentStatsResponse.data,
178
- "Comment",
179
- "total",
180
- ),
181
- prevComments: Analytics.countActivities(
182
- prevStatsResponse.data,
183
- "Comment",
184
- "total",
185
- ),
186
- isLoading: false,
187
- };
188
- setAnalyticsData(data);
189
- }
190
- } catch (err) {
191
- if (comparisonMode) {
192
- setComparisonData((prev) => ({ ...prev, isLoading: false }));
193
- } else {
194
- setAnalyticsData((prev) => ({ ...prev, isLoading: false }));
195
- }
196
- }
197
- };
198
-
199
- const isReadyToOpenCSV = () => {
200
- return comparisonMode
201
- ? !comparisonData.isLoading
202
- : !analyticsData.isLoading;
203
- };
204
-
205
- const getExportSource = () => {
206
- if (comparisonMode) {
207
- const sites = comparisonData.requests || [];
208
- return sites.map((site, i) => ({
209
- site: site.name,
210
- startDate: moment(startTime + 1).format("D-MM-YYYY"),
211
- endDate: moment(endTime).format("D-MM-YYYY"),
212
- requests: site.value,
213
- completedRequests:
214
- (comparisonData.completedRequests[i] &&
215
- comparisonData.completedRequests[i].value) ||
216
- 0,
217
- comments:
218
- (comparisonData.comments[i] && comparisonData.comments[i].value) || 0,
219
- }));
220
- }
221
- return [
222
- {
223
- startDate: moment(startTime + 1).format("D-MM-YYYY"),
224
- endDate: moment(endTime).format("D-MM-YYYY"),
225
- requests: analyticsData.requests,
226
- completedRequests: analyticsData.completedRequests,
227
- comments: analyticsData.comments,
228
- },
229
- ];
230
- };
231
-
232
- const csvPopup = () => {
233
- if (!isExportOpen) {
234
- return null;
235
- }
236
- const source = getExportSource();
237
- const filterSuffix = [userType, userCategory]
238
- .filter(Boolean)
239
- .map((f) => f.toLowerCase().replace(/\s+/g, "-"))
240
- .join("_");
241
- return (
242
- <Components.ExportCsvPopup
243
- onClose={() => {
244
- setIsExportOpen(false);
245
- }}
246
- columns={exportColumns}
247
- source={source}
248
- filename={`${values.analyticsKey}analytics${comparisonMode ? "_comparison" : ""}${filterSuffix ? `_${filterSuffix}` : ""}_${source[0].startDate}_${source[0].endDate}.csv`}
249
- />
250
- );
251
- };
252
-
253
- return (
254
- <div className="dashboardSection">
255
- {csvPopup()}
256
- <div>
257
- <Components.Text type="h4" className="inlineBlock marginRight-40">
258
- {featureTitle}
259
- </Components.Text>
260
- <Components.Button
261
- inline
262
- buttonType="primaryAction"
263
- onClick={() => {
264
- if (!isReadyToOpenCSV()) return;
265
- setIsExportOpen(true);
266
- }}
267
- isActive={isReadyToOpenCSV()}
268
- leftIcon="file-code-o"
269
- >
270
- Export CSV
271
- </Components.Button>
272
- </div>
273
- {failedSites.length > 0 && (
274
- <Components.Text type="help" style={{ color: Colours.COLOUR_RED, marginTop: 8 }}>
275
- Data unavailable for: {failedSites.join(", ")}
276
- </Components.Text>
277
- )}
278
- <div className="analyticsSection dashboardSection_content">
279
- {(() => {
280
- const chartSuffix = [
281
- selectedSites && selectedSites.length > 0
282
- ? `&sites=${selectedSites.join(",")}`
283
- : "",
284
- userType ? `&userType=${encodeURIComponent(userType)}` : "",
285
- userCategory
286
- ? `&userCategory=${encodeURIComponent(userCategory)}`
287
- : "",
288
- ].join("");
289
- if (comparisonMode) {
290
- return (
291
- <div
292
- style={{ display: "flex", flexDirection: "column", gap: 16 }}
293
- >
294
- <Components.ComparisonStatBox
295
- title={`${featureTitle} Requests`}
296
- data={comparisonData.requests}
297
- prevText={prevText}
298
- viewGraphLink={`/chart?entity=${values.analyticsKey}&startTime=${startTime}&endTime=${endTime}&key=Request&countType=total&dayCount=${dayCount}${chartSuffix}`}
299
- isLoading={comparisonData.isLoading}
300
- />
301
- <Components.ComparisonStatBox
302
- title={`Completed ${featureTitle} Requests`}
303
- data={comparisonData.completedRequests}
304
- prevText={prevText}
305
- viewGraphLink={`/chart?entity=${values.analyticsKey}&startTime=${startTime}&endTime=${endTime}&key=RequestCompleted&countType=unique&dayCount=${dayCount}${chartSuffix}`}
306
- isLoading={comparisonData.isLoading}
307
- />
308
- <Components.ComparisonStatBox
309
- title={`${featureTitle} Comments`}
310
- data={comparisonData.comments}
311
- prevText={prevText}
312
- viewGraphLink={`/chart?entity=${values.analyticsKey}&startTime=${startTime}&endTime=${endTime}&key=Comment&countType=total&dayCount=${dayCount}${chartSuffix}`}
313
- isLoading={comparisonData.isLoading}
314
- />
315
- </div>
316
- );
317
- }
318
- return (
319
- <>
320
- <Components.StatBox
321
- title={`${featureTitle} Requests`}
322
- icon={faWrench}
323
- value={analyticsData.requests}
324
- previousValue={analyticsData.prevRequests}
325
- prevText={prevText}
326
- viewGraphLink={`/chart?entity=${values.analyticsKey}&startTime=${startTime}&endTime=${endTime}&key=Request&countType=total&dayCount=${dayCount}${chartSuffix}`}
327
- isLoading={analyticsData.isLoading}
328
- />
329
- <Components.StatBox
330
- title={`Completed ${featureTitle} Requests`}
331
- icon={faCircleCheck}
332
- value={analyticsData.completedRequests}
333
- previousValue={analyticsData.prevCompletedRequests}
334
- prevText={prevText}
335
- viewGraphLink={`/chart?entity=${values.analyticsKey}&startTime=${startTime}&endTime=${endTime}&key=RequestCompleted&countType=unique&dayCount=${dayCount}${chartSuffix}`}
336
- isLoading={analyticsData.isLoading}
337
- />
338
- <Components.StatBox
339
- title={`${featureTitle} Comments`}
340
- icon={faComment}
341
- value={analyticsData.comments}
342
- previousValue={analyticsData.prevComments}
343
- prevText={prevText}
344
- viewGraphLink={`/chart?entity=${values.analyticsKey}&startTime=${startTime}&endTime=${endTime}&key=Comment&countType=total&dayCount=${dayCount}${chartSuffix}`}
345
- isLoading={analyticsData.isLoading}
346
- />
347
- </>
348
- );
349
- })()}
350
- </div>
351
- </div>
352
- );
353
- };
354
-
355
- const mapStateToProps = (state) => {
356
- const { auth } = state;
357
- return {
358
- auth,
359
- strings: (state.strings && state.strings.config) || {},
360
- };
361
- };
362
-
363
- const toExport = connect(mapStateToProps, {})(AnalyticsHub);
364
- export { toExport as AnalyticsHub };