@onehat/ui 0.4.102 → 0.4.103
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/package.json +1 -1
- package/src/Components/Accordion/Accordion.js +65 -6
- package/src/Components/Container/Container.js +10 -4
- package/src/Components/Form/Form.js +8 -3
- package/src/Components/Grid/Grid.js +230 -154
- package/src/Components/Hoc/withPresetButtons.js +18 -6
- package/src/Components/Icons/ArrowsLeftRight.js +10 -0
- package/src/Components/Icons/Bar.js +10 -0
- package/src/Components/Icons/Box.js +11 -0
- package/src/Components/Icons/BoxOpen.js +11 -0
- package/src/Components/Icons/Bucket.js +10 -0
- package/src/Components/Icons/Bump.js +21 -0
- package/src/Components/Icons/Calculator.js +12 -0
- package/src/Components/Icons/Dots.js +20 -0
- package/src/Components/Icons/Fleets.js +26 -0
- package/src/Components/Icons/Microchip.js +12 -0
- package/src/Components/Icons/Num1.js +10 -0
- package/src/Components/Icons/Num2.js +10 -0
- package/src/Components/Icons/Num3.js +10 -0
- package/src/Components/Icons/Num4.js +10 -0
- package/src/Components/Icons/OilCan.js +11 -0
- package/src/Components/Icons/Operations.js +10 -0
- package/src/Components/Icons/OverduePms.js +10 -0
- package/src/Components/Icons/SackDollar.js +11 -0
- package/src/Components/Icons/ShortBar.js +15 -0
- package/src/Components/Icons/Tower.js +10 -0
- package/src/Components/Icons/UpcomingPms.js +10 -0
- package/src/Components/Layout/ScreenHeader.js +35 -3
- package/src/Components/Layout/SetupButton.js +31 -0
- package/src/Components/Layout/UserIndicator.js +35 -0
- package/src/Components/Pms/Editor/BumpPmsEditor.js +9 -0
- package/src/Components/Pms/Editor/MetersEditor.js +173 -0
- package/src/Components/Pms/Editor/PmEventsEditor.js +291 -0
- package/src/Components/Pms/Grid/UpcomingPmsGrid.js +569 -0
- package/src/Components/Pms/Layout/TreeSpecific/MakeTreeSelection.js +11 -0
- package/src/Components/Pms/Layout/TreeSpecific/TreeSpecific.js +30 -0
- package/src/Components/Pms/Modals/BulkAssignTechnician.js +104 -0
- package/src/Components/Pms/Screens/PmsManager.js +136 -0
- package/src/Components/Pms/Window/BumpPmsEditorWindow.js +25 -0
- package/src/Components/Screens/Manager.js +3 -0
- package/src/Components/Tree/Tree.js +15 -6
- package/src/Components/Viewer/PmCalcDebugViewer.js +164 -146
- package/src/Components/Viewer/TextWithLinks.js +9 -1
- package/src/Components/Viewer/Viewer.js +38 -30
- package/src/Functions/flatten.js +39 -0
- package/src/Functions/verifyCanCrudPmEvents.js +33 -0
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
import { useState, useEffect, } from 'react';
|
|
2
|
+
import Editor from '../../Editor/Editor.js';
|
|
3
|
+
import {
|
|
4
|
+
PM_EVENT_TYPES__INITIAL,
|
|
5
|
+
PM_EVENT_TYPES__WORK_ORDER,
|
|
6
|
+
PM_EVENT_TYPES__ALERT,
|
|
7
|
+
PM_EVENT_TYPES__COMPLETE,
|
|
8
|
+
PM_EVENT_TYPES__RESET,
|
|
9
|
+
PM_EVENT_TYPES__DELAY_BY_DAYS,
|
|
10
|
+
PM_EVENT_TYPES__DELAY_BY_METER,
|
|
11
|
+
PM_EVENT_TYPES__SCHEDULE_PM,
|
|
12
|
+
PM_EVENT_TYPES__WILL_CALL,
|
|
13
|
+
PM_EVENT_TYPES__ASSIGN_TECHNICIAN,
|
|
14
|
+
PM_EVENT_TYPES__COMMENT,
|
|
15
|
+
} from '../../../Constants/PmEventTypes.js';
|
|
16
|
+
import oneHatData from '@onehat/data';
|
|
17
|
+
import _ from 'lodash';
|
|
18
|
+
|
|
19
|
+
export default function PmEventsEditor(props) {
|
|
20
|
+
|
|
21
|
+
const {
|
|
22
|
+
selection,
|
|
23
|
+
isBump = false,
|
|
24
|
+
} = props,
|
|
25
|
+
record = selection[0],
|
|
26
|
+
[isIntervalHidden, setIsIntervalHidden] = useState(false),
|
|
27
|
+
[isDateHidden, setIsDateHidden] = useState(false),
|
|
28
|
+
[isMeterReadingHidden, setIsMeterReadingHidden] = useState(false),
|
|
29
|
+
[isPmTechnicianHidden, setIsPmTechnicianHidden] = useState(false),
|
|
30
|
+
[isDetailsHidden, setIsDetailsHidden] = useState(false),
|
|
31
|
+
[isPmScheduleDisabled, setIsPmScheduleDisabled] = useState(false),
|
|
32
|
+
[Meters] = useState(() => oneHatData.getRepository('Meters', true)),
|
|
33
|
+
[PmSchedules] = useState(() => oneHatData.getRepository('PmSchedules', true)),
|
|
34
|
+
viewerSetup = (values) => {
|
|
35
|
+
const {
|
|
36
|
+
pm_events__pm_event_type_id,
|
|
37
|
+
} = values;
|
|
38
|
+
adjustHiddenFields(pm_events__pm_event_type_id);
|
|
39
|
+
},
|
|
40
|
+
formSetup = (formSetValue, formGetValues, formState) => {
|
|
41
|
+
if (isBump) {
|
|
42
|
+
// normalize the initialValues, so cancel button doesn't show a confirmation dialog box
|
|
43
|
+
const initialValues = formGetValues();
|
|
44
|
+
_.forOwn(initialValues, (value, key) => {
|
|
45
|
+
formSetValue(key, value, {
|
|
46
|
+
shouldDirty: false,
|
|
47
|
+
shouldTouch: false,
|
|
48
|
+
shouldValidate: false,
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
adjustForm(formGetValues);
|
|
53
|
+
},
|
|
54
|
+
onChangeMeter = (newValue, formSetValue, formGetValues, formState, trigger) => {
|
|
55
|
+
// clear the pm_schedule_id field and repository since the meter has changed
|
|
56
|
+
PmSchedules.clearAll();
|
|
57
|
+
formSetValue('pm_events__pm_schedule_id', null);
|
|
58
|
+
trigger('pm_events__pm_schedule_id');
|
|
59
|
+
|
|
60
|
+
adjustForm(formGetValues);
|
|
61
|
+
},
|
|
62
|
+
onChangePmEventType = (newValue, formSetValue, formGetValues, formState, trigger) => {
|
|
63
|
+
adjustForm(formGetValues);
|
|
64
|
+
},
|
|
65
|
+
adjustForm = (formGetValues) => {
|
|
66
|
+
const {
|
|
67
|
+
pm_events__meter_id,
|
|
68
|
+
pm_events__pm_event_type_id,
|
|
69
|
+
} = formGetValues();
|
|
70
|
+
adjustHiddenFields(pm_events__pm_event_type_id);
|
|
71
|
+
setIsPmScheduleDisabled(pm_events__meter_id === null);
|
|
72
|
+
|
|
73
|
+
if (Meters.getBaseParam('onlyOnPmSchedules') !== true) {
|
|
74
|
+
Meters.setBaseParam('onlyOnPmSchedules', true);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Preload or empty the PmSchedules repository based on the selected meter_id
|
|
78
|
+
if (!pm_events__meter_id) {
|
|
79
|
+
PmSchedules.clearAll();
|
|
80
|
+
} else {
|
|
81
|
+
if (PmSchedules.getBaseParam('leftJoinWith') !== 'MetersPmSchedules') {
|
|
82
|
+
PmSchedules.setBaseParam('leftJoinWith', 'MetersPmSchedules');
|
|
83
|
+
}
|
|
84
|
+
if (PmSchedules.getBaseParam('conditions[meters_pm_schedules__meter_id]') !== pm_events__meter_id) {
|
|
85
|
+
PmSchedules.setBaseParam('conditions[meters_pm_schedules__meter_id]', pm_events__meter_id);
|
|
86
|
+
PmSchedules.load();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
adjustHiddenFields = (pm_events__pm_event_type_id) => {
|
|
91
|
+
switch(pm_events__pm_event_type_id) {
|
|
92
|
+
case PM_EVENT_TYPES__INITIAL:
|
|
93
|
+
case PM_EVENT_TYPES__WORK_ORDER:
|
|
94
|
+
case PM_EVENT_TYPES__ALERT:
|
|
95
|
+
setIsIntervalHidden(true);
|
|
96
|
+
setIsDateHidden(true);
|
|
97
|
+
setIsMeterReadingHidden(false);
|
|
98
|
+
setIsDetailsHidden(false);
|
|
99
|
+
setIsPmTechnicianHidden(true);
|
|
100
|
+
break;
|
|
101
|
+
case PM_EVENT_TYPES__COMPLETE:
|
|
102
|
+
case PM_EVENT_TYPES__RESET:
|
|
103
|
+
setIsIntervalHidden(true);
|
|
104
|
+
setIsDateHidden(true);
|
|
105
|
+
setIsMeterReadingHidden(false);
|
|
106
|
+
setIsDetailsHidden(false);
|
|
107
|
+
setIsPmTechnicianHidden(true);
|
|
108
|
+
break;
|
|
109
|
+
case PM_EVENT_TYPES__DELAY_BY_DAYS:
|
|
110
|
+
case PM_EVENT_TYPES__DELAY_BY_METER:
|
|
111
|
+
setIsIntervalHidden(false);
|
|
112
|
+
setIsDateHidden(true);
|
|
113
|
+
setIsMeterReadingHidden(true);
|
|
114
|
+
setIsDetailsHidden(false);
|
|
115
|
+
setIsPmTechnicianHidden(true);
|
|
116
|
+
break;
|
|
117
|
+
case PM_EVENT_TYPES__SCHEDULE_PM:
|
|
118
|
+
setIsIntervalHidden(true);
|
|
119
|
+
setIsDateHidden(false);
|
|
120
|
+
setIsMeterReadingHidden(true);
|
|
121
|
+
setIsDetailsHidden(false);
|
|
122
|
+
setIsPmTechnicianHidden(true);
|
|
123
|
+
break;
|
|
124
|
+
case PM_EVENT_TYPES__WILL_CALL:
|
|
125
|
+
case PM_EVENT_TYPES__COMMENT:
|
|
126
|
+
setIsIntervalHidden(true);
|
|
127
|
+
setIsDateHidden(true);
|
|
128
|
+
setIsMeterReadingHidden(true);
|
|
129
|
+
setIsDetailsHidden(true);
|
|
130
|
+
break;
|
|
131
|
+
case PM_EVENT_TYPES__ASSIGN_TECHNICIAN:
|
|
132
|
+
setIsIntervalHidden(true);
|
|
133
|
+
setIsDateHidden(true);
|
|
134
|
+
setIsMeterReadingHidden(true);
|
|
135
|
+
setIsDetailsHidden(false);
|
|
136
|
+
setIsPmTechnicianHidden(false);
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
overviewItems = [];
|
|
141
|
+
|
|
142
|
+
if (!isBump) {
|
|
143
|
+
overviewItems.push({
|
|
144
|
+
name: 'pm_events__meter_id',
|
|
145
|
+
tooltip: "Eq/Meter associated with this PM Event.\n" +
|
|
146
|
+
"Dropdown list shows only meters with an assigned PM schedule.\n" +
|
|
147
|
+
"Meter name will be omitted if only the Equipment's primary meter exists, otherwise it will be shown.",
|
|
148
|
+
onChange: onChangeMeter,
|
|
149
|
+
Repository: Meters,
|
|
150
|
+
});
|
|
151
|
+
overviewItems.push({
|
|
152
|
+
name: 'pm_events__pm_schedule_id',
|
|
153
|
+
tooltip: 'Dropdown list shows only PM schedules assigned to this meter.',
|
|
154
|
+
isDisabled: isPmScheduleDisabled,
|
|
155
|
+
Repository: PmSchedules,
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
overviewItems.push({
|
|
159
|
+
name: 'pm_events__pm_event_type_id',
|
|
160
|
+
onChange: onChangePmEventType,
|
|
161
|
+
editorType: isBump ? 'BumpPmEventTypesCombo' : 'PmEventManualTypesCombo',
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
const items = [
|
|
165
|
+
{
|
|
166
|
+
"type": "Column",
|
|
167
|
+
"flex": 1,
|
|
168
|
+
"defaults": {},
|
|
169
|
+
"items": [
|
|
170
|
+
{
|
|
171
|
+
"type": "FieldSet",
|
|
172
|
+
"title": "Overview",
|
|
173
|
+
"reference": "overview",
|
|
174
|
+
"defaults": {},
|
|
175
|
+
"items": overviewItems,
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
"type": "FieldSet",
|
|
179
|
+
"title": "Details",
|
|
180
|
+
"reference": "details",
|
|
181
|
+
"defaults": {},
|
|
182
|
+
isHidden: isDetailsHidden,
|
|
183
|
+
"items": [
|
|
184
|
+
{
|
|
185
|
+
"name": "pm_events__interval",
|
|
186
|
+
tooltip: 'Interval to delay by',
|
|
187
|
+
isHidden: isIntervalHidden,
|
|
188
|
+
getIsRequired: (formGetValues, formState) => {
|
|
189
|
+
const {
|
|
190
|
+
pm_events__pm_event_type_id,
|
|
191
|
+
} = formGetValues();
|
|
192
|
+
let ret = false;
|
|
193
|
+
switch(pm_events__pm_event_type_id) {
|
|
194
|
+
case PM_EVENT_TYPES__DELAY_BY_DAYS:
|
|
195
|
+
case PM_EVENT_TYPES__DELAY_BY_METER:
|
|
196
|
+
ret = true;
|
|
197
|
+
break;
|
|
198
|
+
}
|
|
199
|
+
return ret;
|
|
200
|
+
},
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
"name": "pm_events__associated_date",
|
|
204
|
+
tooltip: 'When to schedule the PM for',
|
|
205
|
+
isHidden: isDateHidden,
|
|
206
|
+
getIsRequired: (formGetValues, formState) => {
|
|
207
|
+
const {
|
|
208
|
+
pm_events__pm_event_type_id,
|
|
209
|
+
} = formGetValues();
|
|
210
|
+
let ret = false;
|
|
211
|
+
switch(pm_events__pm_event_type_id) {
|
|
212
|
+
case PM_EVENT_TYPES__SCHEDULE_PM:
|
|
213
|
+
ret = true;
|
|
214
|
+
break;
|
|
215
|
+
}
|
|
216
|
+
return ret;
|
|
217
|
+
},
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
"name": "pm_events__meter_reading",
|
|
221
|
+
tooltip: 'Meter reading at the time of the PM event',
|
|
222
|
+
getIsRequired: (formGetValues, formState) => {
|
|
223
|
+
const {
|
|
224
|
+
pm_events__pm_event_type_id,
|
|
225
|
+
} = formGetValues();
|
|
226
|
+
let ret = false;
|
|
227
|
+
switch(pm_events__pm_event_type_id) {
|
|
228
|
+
case PM_EVENT_TYPES__COMPLETE:
|
|
229
|
+
case PM_EVENT_TYPES__RESET:
|
|
230
|
+
ret = true;
|
|
231
|
+
break;
|
|
232
|
+
}
|
|
233
|
+
return ret;
|
|
234
|
+
},
|
|
235
|
+
isHidden: isMeterReadingHidden,
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
"name": "pm_events__user_id",
|
|
239
|
+
tooltip: 'Technician to assign',
|
|
240
|
+
getIsRequired: (formGetValues, formState) => {
|
|
241
|
+
const {
|
|
242
|
+
pm_events__pm_event_type_id,
|
|
243
|
+
} = formGetValues();
|
|
244
|
+
let ret = false;
|
|
245
|
+
switch(pm_events__pm_event_type_id) {
|
|
246
|
+
case PM_EVENT_TYPES__ASSIGN_TECHNICIAN:
|
|
247
|
+
ret = true;
|
|
248
|
+
break;
|
|
249
|
+
}
|
|
250
|
+
return ret;
|
|
251
|
+
},
|
|
252
|
+
isHidden: isPmTechnicianHidden,
|
|
253
|
+
},
|
|
254
|
+
]
|
|
255
|
+
}
|
|
256
|
+
]
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
"type": "Column",
|
|
260
|
+
"flex": 1,
|
|
261
|
+
"defaults": {},
|
|
262
|
+
"items": [
|
|
263
|
+
{
|
|
264
|
+
"type": "FieldSet",
|
|
265
|
+
"title": "Comments",
|
|
266
|
+
"reference": "comments",
|
|
267
|
+
"defaults": {},
|
|
268
|
+
"items": [
|
|
269
|
+
{
|
|
270
|
+
"name": "pm_events__comments"
|
|
271
|
+
}
|
|
272
|
+
]
|
|
273
|
+
}
|
|
274
|
+
]
|
|
275
|
+
}
|
|
276
|
+
],
|
|
277
|
+
ancillaryItems = [],
|
|
278
|
+
columnDefaults = { // defaults for each column defined in 'items', for use in Form amd Viewer
|
|
279
|
+
};
|
|
280
|
+
return <Editor
|
|
281
|
+
reference="PmEventsEditor"
|
|
282
|
+
title="PmEvents"
|
|
283
|
+
items={items}
|
|
284
|
+
ancillaryItems={ancillaryItems}
|
|
285
|
+
columnDefaults={columnDefaults}
|
|
286
|
+
formSetup={formSetup}
|
|
287
|
+
viewerSetup={viewerSetup}
|
|
288
|
+
{...props}
|
|
289
|
+
/>;
|
|
290
|
+
}
|
|
291
|
+
|