@gpa-gemstone/common-pages 0.0.104 → 0.0.106

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. package/lib/ErrorBoundary.d.ts +17 -17
  2. package/lib/ErrorBoundary.js +91 -68
  3. package/lib/Note.d.ts +22 -22
  4. package/lib/Note.js +256 -230
  5. package/lib/SearchBar.d.ts +37 -37
  6. package/lib/SearchBar.js +203 -180
  7. package/lib/SelectionPopup.d.ts +42 -42
  8. package/lib/SelectionPopup.js +93 -90
  9. package/lib/Setting.d.ts +8 -8
  10. package/lib/Setting.js +151 -125
  11. package/lib/SliceInterfaces.d.ts +76 -76
  12. package/lib/SliceInterfaces.js +2 -2
  13. package/lib/StandardSelectPopup.d.ts +20 -20
  14. package/lib/StandardSelectPopup.js +135 -109
  15. package/lib/TimeFilter/QuickSelects.d.ts +7 -0
  16. package/lib/TimeFilter/QuickSelects.js +240 -0
  17. package/lib/TimeFilter.d.ts +26 -0
  18. package/lib/TimeFilter.js +270 -0
  19. package/lib/TimeWindowUtils.d.ts +33 -0
  20. package/lib/TimeWindowUtils.js +121 -0
  21. package/lib/ValueList/ByValueList.d.ts +10 -10
  22. package/lib/ValueList/ByValueList.js +141 -115
  23. package/lib/ValueList/Group.d.ts +11 -11
  24. package/lib/ValueList/Group.js +97 -71
  25. package/lib/ValueList/GroupForm.d.ts +9 -9
  26. package/lib/ValueList/GroupForm.js +74 -51
  27. package/lib/ValueList/GroupInfo.d.ts +8 -8
  28. package/lib/ValueList/GroupInfo.js +95 -69
  29. package/lib/ValueList/GroupItem.d.ts +9 -9
  30. package/lib/ValueList/GroupItem.js +142 -116
  31. package/lib/ValueList/ItemForm.d.ts +9 -9
  32. package/lib/ValueList/ItemForm.js +82 -59
  33. package/lib/index.d.ts +12 -11
  34. package/lib/index.js +50 -45
  35. package/lib/user/AdditionalField.d.ts +26 -26
  36. package/lib/user/AdditionalField.js +290 -264
  37. package/lib/user/ByUser.d.ts +12 -12
  38. package/lib/user/ByUser.js +174 -148
  39. package/lib/user/User.d.ts +14 -14
  40. package/lib/user/User.js +97 -71
  41. package/lib/user/UserForm.d.ts +12 -12
  42. package/lib/user/UserForm.js +166 -143
  43. package/lib/user/UserInfo.d.ts +7 -7
  44. package/lib/user/UserInfo.js +123 -97
  45. package/lib/user/UserPermissions.d.ts +8 -8
  46. package/lib/user/UserPermissions.js +106 -83
  47. package/package.json +11 -10
@@ -0,0 +1,240 @@
1
+ "use strict";
2
+ //******************************************************************************************************
3
+ // TimeFilter.tsx - Gbtc
4
+ //
5
+ // Copyright © 2020, Grid Protection Alliance. All Rights Reserved.
6
+ //
7
+ // Licensed to the Grid Protection Alliance (GPA) under one or more contributor license agreements. See
8
+ // the NOTICE file distributed with this work for additional information regarding copyright ownership.
9
+ // The GPA licenses this file to you under the MIT License (MIT), the "License"; you may not use this
10
+ // file except in compliance with the License. You may obtain a copy of the License at:
11
+ //
12
+ // http://opensource.org/licenses/MIT
13
+ //
14
+ // Unless agreed to in writing, the subject software distributed under the License is distributed on an
15
+ // "AS-IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. Refer to the
16
+ // License for the specific language governing permissions and limitations.
17
+ //
18
+ // Code Modification History:
19
+ // ----------------------------------------------------------------------------------------------------
20
+ // 09/16/2021 - Christoph Lackner
21
+ // Generated original version of source code.
22
+ // 06/20/2024 - Ali Karrar
23
+ // Moved QuickSelects from TimeFilter to new file
24
+ //******************************************************************************************************
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.AvailableQuickSelects = void 0;
30
+ var moment_1 = __importDefault(require("moment"));
31
+ var moment_timezone_1 = __importDefault(require("moment-timezone"));
32
+ //update all quick selects to use new timefilters
33
+ exports.AvailableQuickSelects = [
34
+ {
35
+ label: 'This Hour', createFilter: function (tz) {
36
+ var offset = moment_timezone_1.default.tz(moment_1.default.utc().startOf('hour').format('YYYY-MM-DDTHH:mm:ss.SSSSS'), tz).utcOffset();
37
+ var t = moment_1.default.utc().add(offset, 'minutes').startOf('hour');
38
+ return {
39
+ start: t.format('MM/DD/YYYY HH:mm:ss.SSS'),
40
+ unit: 'm',
41
+ duration: 60,
42
+ };
43
+ }
44
+ },
45
+ {
46
+ label: 'Last Hour', createFilter: function (tz) {
47
+ var offset = moment_timezone_1.default.tz(moment_1.default.utc().startOf('hour').subtract(1, 'hour').format('YYYY-MM-DDTHH:mm:ss.SSSSS'), tz).utcOffset();
48
+ var t = moment_1.default.utc().add(offset, 'minutes').startOf('hour');
49
+ return {
50
+ end: t.format('MM/DD/YYYY HH:mm:ss.SSS'),
51
+ unit: 'm',
52
+ duration: 60,
53
+ };
54
+ }
55
+ },
56
+ {
57
+ label: 'Last 60 Minutes', createFilter: function (tz) {
58
+ var offset = moment_timezone_1.default.tz(moment_1.default.utc().startOf('minute').subtract(1, 'hour').format('YYYY-MM-DDTHH:mm:ss.SSSSS'), tz).utcOffset();
59
+ var t = moment_1.default.utc().add(offset, 'minutes').startOf('minute');
60
+ return {
61
+ end: t.format('MM/DD/YYYY HH:mm:ss.SSS'),
62
+ unit: 'm',
63
+ duration: 60,
64
+ };
65
+ }
66
+ },
67
+ {
68
+ label: 'Today', createFilter: function (tz) {
69
+ var offset = moment_timezone_1.default.tz(moment_1.default.utc().startOf('day').format('YYYY-MM-DDTHH:mm:ss.SSSSS'), tz).utcOffset();
70
+ var t = moment_1.default.utc().add(offset, 'minutes').startOf('day');
71
+ return {
72
+ start: t.format('MM/DD/YYYY HH:mm:ss.SSS'),
73
+ unit: 'h',
74
+ duration: 24,
75
+ };
76
+ }
77
+ },
78
+ {
79
+ label: 'Yesterday', createFilter: function (tz) {
80
+ var offset = moment_timezone_1.default.tz(moment_1.default.utc().startOf('day').subtract(1, 'days').format('YYYY-MM-DDTHH:mm:ss.SSSSS'), tz).utcOffset();
81
+ var t = moment_1.default.utc().add(offset, 'minutes').startOf('day');
82
+ return {
83
+ end: t.format('MM/DD/YYYY HH:mm:ss.SSS'),
84
+ unit: 'h',
85
+ duration: 24,
86
+ };
87
+ }
88
+ },
89
+ {
90
+ label: 'Last 24 Hours', createFilter: function (tz) {
91
+ var offset = moment_timezone_1.default.tz(moment_1.default.utc().startOf('hour').subtract(24, 'hours').format('YYYY-MM-DDTHH:mm:ss.SSSSS'), tz).utcOffset();
92
+ var t = moment_1.default.utc().add(offset, 'minutes');
93
+ return {
94
+ end: t.format('MM/DD/YYYY HH:mm:ss.SSS'),
95
+ unit: 'h',
96
+ duration: 24,
97
+ };
98
+ }
99
+ },
100
+ {
101
+ label: 'This Week', createFilter: function (tz) {
102
+ var offset = moment_timezone_1.default.tz(moment_1.default.utc().startOf('week').format('YYYY-MM-DDTHH:mm:ss.SSSSS'), tz).utcOffset();
103
+ var t = moment_1.default.utc().add(offset, 'minutes').startOf('week');
104
+ return {
105
+ start: t.format('MM/DD/YYYY HH:mm:ss.SSS'),
106
+ unit: 'h',
107
+ duration: 7 * 24,
108
+ };
109
+ }
110
+ },
111
+ {
112
+ label: 'Last Week', createFilter: function (tz) {
113
+ var offset = moment_timezone_1.default.tz(moment_1.default.utc().startOf('week').format('YYYY-MM-DDTHH:mm:ss.SSSSS'), tz).utcOffset();
114
+ var t = moment_1.default.utc().add(offset, 'minutes').startOf('week');
115
+ return {
116
+ end: t.format('MM/DD/YYYY HH:mm:ss.SSS'),
117
+ unit: 'h',
118
+ duration: 7 * 24,
119
+ };
120
+ }
121
+ },
122
+ {
123
+ label: 'Last 7 Days', createFilter: function (tz) {
124
+ var offset = moment_timezone_1.default.tz(moment_1.default.utc().startOf('day').format('YYYY-MM-DDTHH:mm:ss.SSSSS'), tz).utcOffset();
125
+ var t = moment_1.default.utc().add(offset, 'minutes').startOf('day');
126
+ return {
127
+ end: t.format('MM/DD/YYYY HH:mm:ss.SSS'),
128
+ unit: 'h',
129
+ duration: 7 * 24,
130
+ };
131
+ }
132
+ },
133
+ {
134
+ label: 'This Month', createFilter: function (tz) {
135
+ var offset = moment_timezone_1.default.tz(moment_1.default.utc().startOf('month').format('YYYY-MM-DDTHH:mm:ss.SSSSS'), tz).utcOffset();
136
+ var t = moment_1.default.utc().add(offset, 'minutes').startOf('month');
137
+ var window = (t.daysInMonth() * 24);
138
+ return {
139
+ start: t.format('MM/DD/YYYY HH:mm:ss.SSS'),
140
+ unit: 'h',
141
+ duration: window,
142
+ };
143
+ }
144
+ },
145
+ {
146
+ label: 'Last Month', createFilter: function (tz) {
147
+ var offset = moment_timezone_1.default.tz(moment_1.default.utc().startOf('month').subtract(1, 'month').format('YYYY-MM-DDTHH:mm:ss.SSSSS'), tz).utcOffset();
148
+ var t = moment_1.default.utc().add(offset, 'minutes').startOf('month').subtract(1, 'month');
149
+ var window = (t.daysInMonth() * 24);
150
+ return {
151
+ start: t.format('MM/DD/YYYY HH:mm:ss.SSS'),
152
+ unit: 'h',
153
+ duration: window,
154
+ };
155
+ }
156
+ },
157
+ {
158
+ label: 'Last 30 Days', createFilter: function (tz) {
159
+ var offset = moment_timezone_1.default.tz(moment_1.default.utc().startOf('day').format('YYYY-MM-DDTHH:mm:ss.SSSSS'), tz).utcOffset();
160
+ var t = moment_1.default.utc().add(offset, 'minutes').startOf('day');
161
+ return {
162
+ end: t.format('MM/DD/YYYY HH:mm:ss.SSS'),
163
+ unit: 'd',
164
+ duration: 30,
165
+ };
166
+ }
167
+ },
168
+ {
169
+ label: 'This Quarter', createFilter: function (tz) {
170
+ var offset = moment_timezone_1.default.tz(moment_1.default.utc().startOf('quarter').add(1, 'quarter').format('YYYY-MM-DDTHH:mm:ss.SSSSS'), tz).utcOffset();
171
+ var offset_tend = moment_timezone_1.default.tz(moment_1.default.utc().startOf('quarter').format('YYYY-MM-DDTHH:mm:ss.SSSSS'), tz).utcOffset();
172
+ var t = moment_1.default.utc().add(offset, 'minutes').startOf('quarter');
173
+ var tend = moment_1.default.utc().add(offset_tend, 'minutes').startOf('quarter');
174
+ tend.add(1, 'quarter');
175
+ var h = moment_1.default.duration(tend.diff(t)).asDays();
176
+ return {
177
+ start: t.format('MM/DD/YYYY HH:mm:ss.SSS'),
178
+ unit: 'd',
179
+ duration: h,
180
+ };
181
+ }
182
+ },
183
+ {
184
+ label: 'Last Quarter', createFilter: function (tz) {
185
+ var offset = moment_timezone_1.default.tz(moment_1.default.utc().startOf('quarter').subtract(1, 'quarter').format('YYYY-MM-DDTHH:mm:ss.SSSSS'), tz).utcOffset();
186
+ var offset_tend = moment_timezone_1.default.tz(moment_1.default.utc().startOf('quarter').format('YYYY-MM-DDTHH:mm:ss.SSSSS'), tz).utcOffset();
187
+ var t = moment_1.default.utc().add(offset, 'minutes').startOf('quarter');
188
+ var tend = moment_1.default.utc().add(offset_tend, 'minutes').startOf('quarter');
189
+ t.subtract(1, 'quarter');
190
+ var h = moment_1.default.duration(tend.diff(t)).asDays();
191
+ return {
192
+ start: t.format('MM/DD/YYYY HH:mm:ss.SSS'),
193
+ unit: 'd',
194
+ duration: h,
195
+ };
196
+ }
197
+ },
198
+ {
199
+ label: 'Last 90 Days', createFilter: function (tz) {
200
+ var offset = moment_timezone_1.default.tz(moment_1.default.utc().startOf('day').subtract(45, 'days').format('YYYY-MM-DDTHH:mm:ss.SSSSS'), tz).utcOffset();
201
+ var t = moment_1.default.utc().add(offset, 'minutes').startOf('day');
202
+ return {
203
+ end: t.format('MM/DD/YYYY HH:mm:ss.SSS'),
204
+ unit: 'd',
205
+ duration: 90,
206
+ };
207
+ }
208
+ },
209
+ {
210
+ label: 'This Year', createFilter: function (tz) {
211
+ var offset = moment_timezone_1.default.tz(moment_1.default.utc().startOf('year').format('YYYY-MM-DDTHH:mm:ss.SSSSS'), tz).utcOffset();
212
+ var t = moment_1.default.utc().add(offset, 'minutes').startOf('year');
213
+ return {
214
+ start: t.format('MM/DD/YYYY HH:mm:ss.SSS'),
215
+ end: t.endOf('year').format('MM/DD/YYYY HH:mm:ss.SSS')
216
+ };
217
+ }
218
+ },
219
+ {
220
+ label: 'Last Year', createFilter: function (tz) {
221
+ var offset = moment_timezone_1.default.tz(moment_1.default.utc().startOf('year').subtract(1, 'year').format('YYYY-MM-DDTHH:mm:ss.SSSSS'), tz).utcOffset();
222
+ var t = moment_1.default.utc().add(offset, 'minute').startOf('year').subtract(1, 'year');
223
+ return {
224
+ start: t.format('MM/DD/YYYY HH:mm:ss.SSS'),
225
+ end: t.endOf('year').format('MM/DD/YYYY HH:mm:ss.SSS'),
226
+ };
227
+ }
228
+ },
229
+ {
230
+ label: 'Last 365 Days', createFilter: function (tz) {
231
+ var offset = moment_timezone_1.default.tz(moment_1.default.utc().startOf('day').subtract(182.5, 'days').format('YYYY-MM-DDTHH:mm:ss.SSSSS'), tz).utcOffset();
232
+ var t = moment_1.default.utc().add(offset, 'minute').startOf('day');
233
+ return {
234
+ end: t.format('MM/DD/YYYY HH:mm:ss.SSS'),
235
+ unit: 'd',
236
+ duration: 365,
237
+ };
238
+ }
239
+ }
240
+ ];
@@ -0,0 +1,26 @@
1
+ import * as React from 'react';
2
+ import { IStartEnd, IStartDuration, IEndDuration, ICenterDuration, TimeUnit } from './TimeWindowUtils';
3
+ export type ITimeFilter = IStartEnd | IStartDuration | IEndDuration | ICenterDuration;
4
+ export declare function getTimeWindow(flt: ITimeFilter): {
5
+ center: string;
6
+ start: string;
7
+ end: string;
8
+ unit: TimeUnit;
9
+ duration: number;
10
+ halfDuration: number;
11
+ };
12
+ /**
13
+ * filter: an interface of IStartEnd | IStartDuration | IEndDuration | ICenterDuration
14
+ * showQuickSelect: displays Quick Select component
15
+ * isHorizontal: displays Quick Selects in horizontal view
16
+ */
17
+ interface IProps {
18
+ filter: ITimeFilter;
19
+ setFilter: (center: string, start: string, end: string, unit: TimeUnit, duration: number) => void;
20
+ showQuickSelect: boolean;
21
+ dateTimeSetting: 'center' | 'startWindow' | 'endWindow' | 'startEnd';
22
+ timeZone: string;
23
+ isHorizontal: boolean;
24
+ }
25
+ declare const TimeFilter: (props: IProps) => React.JSX.Element;
26
+ export default TimeFilter;
@@ -0,0 +1,270 @@
1
+ "use strict";
2
+ //******************************************************************************************************
3
+ // TimeFilter.tsx - Gbtc
4
+ //
5
+ // Copyright © 2020, Grid Protection Alliance. All Rights Reserved.
6
+ //
7
+ // Licensed to the Grid Protection Alliance (GPA) under one or more contributor license agreements. See
8
+ // the NOTICE file distributed with this work for additional information regarding copyright ownership.
9
+ // The GPA licenses this file to you under the MIT License (MIT), the "License"; you may not use this
10
+ // file except in compliance with the License. You may obtain a copy of the License at:
11
+ //
12
+ // http://opensource.org/licenses/MIT
13
+ //
14
+ // Unless agreed to in writing, the subject software distributed under the License is distributed on an
15
+ // "AS-IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. Refer to the
16
+ // License for the specific language governing permissions and limitations.
17
+ //
18
+ // Code Modification History:
19
+ // ----------------------------------------------------------------------------------------------------
20
+ // 09/16/2021 - Christoph Lackner
21
+ // Generated original version of source code.
22
+ // 06/20/2024 - Ali Karrar
23
+ // Moved TimeFilter from SEBrowser to gemstone
24
+ //******************************************************************************************************
25
+ var __assign = (this && this.__assign) || function () {
26
+ __assign = Object.assign || function(t) {
27
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
28
+ s = arguments[i];
29
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
30
+ t[p] = s[p];
31
+ }
32
+ return t;
33
+ };
34
+ return __assign.apply(this, arguments);
35
+ };
36
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
37
+ if (k2 === undefined) k2 = k;
38
+ var desc = Object.getOwnPropertyDescriptor(m, k);
39
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
40
+ desc = { enumerable: true, get: function() { return m[k]; } };
41
+ }
42
+ Object.defineProperty(o, k2, desc);
43
+ }) : (function(o, m, k, k2) {
44
+ if (k2 === undefined) k2 = k;
45
+ o[k2] = m[k];
46
+ }));
47
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
48
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
49
+ }) : function(o, v) {
50
+ o["default"] = v;
51
+ });
52
+ var __importStar = (this && this.__importStar) || function (mod) {
53
+ if (mod && mod.__esModule) return mod;
54
+ var result = {};
55
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
56
+ __setModuleDefault(result, mod);
57
+ return result;
58
+ };
59
+ var __importDefault = (this && this.__importDefault) || function (mod) {
60
+ return (mod && mod.__esModule) ? mod : { "default": mod };
61
+ };
62
+ Object.defineProperty(exports, "__esModule", { value: true });
63
+ exports.getTimeWindow = getTimeWindow;
64
+ var React = __importStar(require("react"));
65
+ var moment_1 = __importDefault(require("moment"));
66
+ var react_forms_1 = require("@gpa-gemstone/react-forms");
67
+ var TimeWindowUtils_1 = require("./TimeWindowUtils");
68
+ var QuickSelects_1 = require("./TimeFilter/QuickSelects");
69
+ // Converts ITimeFilter to an ITimeWindow filter
70
+ function getTimeWindow(flt) {
71
+ var _a, _b;
72
+ var _c, _d, _e;
73
+ var center, start, end, unit, duration, halfDuration;
74
+ if ((0, TimeWindowUtils_1.isCenterDuration)(flt)) {
75
+ center = (0, TimeWindowUtils_1.getMoment)(flt.center);
76
+ _a = (0, TimeWindowUtils_1.getStartEndTime)(center, flt.halfDuration, flt.unit), start = _a[0], end = _a[1];
77
+ unit = flt.unit;
78
+ halfDuration = flt.halfDuration;
79
+ duration = halfDuration * 2;
80
+ }
81
+ else if ((0, TimeWindowUtils_1.isStartDuration)(flt)) {
82
+ start = (0, TimeWindowUtils_1.getMoment)(flt.start);
83
+ var d = moment_1.default.duration(flt.duration / 2.0, flt.unit);
84
+ center = start.clone().add(d);
85
+ end = center.clone().add(d);
86
+ unit = flt.unit;
87
+ duration = flt.duration,
88
+ halfDuration = duration / 2.0;
89
+ }
90
+ else if ((0, TimeWindowUtils_1.isEndDuration)(flt)) {
91
+ end = (0, TimeWindowUtils_1.getMoment)(flt.end);
92
+ var d = moment_1.default.duration(flt.duration / 2.0, flt.unit);
93
+ center = end.clone().subtract(d);
94
+ start = center.clone().subtract(d);
95
+ unit = flt.unit;
96
+ duration = flt.duration,
97
+ halfDuration = duration / 2.0;
98
+ }
99
+ else if ((0, TimeWindowUtils_1.isStartEnd)(flt)) {
100
+ start = (0, TimeWindowUtils_1.getMoment)(flt.start);
101
+ end = (0, TimeWindowUtils_1.getMoment)(flt.end);
102
+ _b = (0, TimeWindowUtils_1.findAppropriateUnit)(start, (0, TimeWindowUtils_1.getMoment)(flt.end), undefined, true), unit = _b[0], halfDuration = _b[1];
103
+ var d = moment_1.default.duration(halfDuration, unit);
104
+ center = start.clone().add(d);
105
+ duration = halfDuration * 2;
106
+ }
107
+ return { center: (_c = center === null || center === void 0 ? void 0 : center.format('MM/DD/YYYY HH:mm:ss.SSS')) !== null && _c !== void 0 ? _c : '',
108
+ start: (_d = start === null || start === void 0 ? void 0 : start.format('MM/DD/YYYY HH:mm:ss.SSS')) !== null && _d !== void 0 ? _d : '',
109
+ end: (_e = end === null || end === void 0 ? void 0 : end.format('MM/DD/YYYY HH:mm:ss.SSS')) !== null && _e !== void 0 ? _e : '',
110
+ unit: unit !== null && unit !== void 0 ? unit : 'ms',
111
+ duration: duration !== null && duration !== void 0 ? duration : 0,
112
+ halfDuration: halfDuration !== null && halfDuration !== void 0 ? halfDuration : 0 };
113
+ }
114
+ // Returns a row div element with props as children of row
115
+ function Row(props) {
116
+ if (props.addRow) {
117
+ return React.createElement("div", { className: 'row' }, props.children);
118
+ }
119
+ return React.createElement(React.Fragment, null, props.children);
120
+ }
121
+ var TimeFilter = function (props) {
122
+ var _a = React.useState(-1), activeQP = _a[0], setActiveQP = _a[1];
123
+ var _b = React.useState(getTimeWindow(props.filter)), filter = _b[0], setFilter = _b[1];
124
+ React.useEffect(function () {
125
+ if (isEqual(filter, props.filter))
126
+ return;
127
+ props.setFilter(filter.center, filter.start, filter.end, filter.unit, filter.duration);
128
+ }, [filter]);
129
+ //Checks typing of ITimeFilter and then compares to ITimeWindow
130
+ function isEqual(flt1, flt2) {
131
+ var flt = getTimeWindow(flt2);
132
+ return flt1.center == flt.center &&
133
+ flt1.unit == flt.unit &&
134
+ flt1.duration == flt.duration;
135
+ }
136
+ React.useEffect(function () {
137
+ if (isEqual(filter, props.filter))
138
+ return;
139
+ var flt = getTimeWindow(props.filter);
140
+ setFilter(flt);
141
+ }, [props.filter]);
142
+ return (React.createElement("fieldset", { className: "border", style: { padding: '10px', height: '100%' } },
143
+ React.createElement("legend", { className: "w-auto", style: { fontSize: 'large' } }, "Date/Time Filter:"),
144
+ React.createElement(Row, { addRow: props.isHorizontal },
145
+ props.dateTimeSetting === 'center' ?
146
+ React.createElement(Row, { addRow: !props.isHorizontal },
147
+ React.createElement("div", { className: props.isHorizontal ? (props.showQuickSelect ? 'col-4' : 'col-6') : 'col-12' },
148
+ React.createElement(react_forms_1.DatePicker, { Record: filter, Field: "center", Help: "All times are in system time. System time is currently set to ".concat(props.timeZone, ". "), Setter: function (r) {
149
+ setFilter(function (prevFilter) { return (__assign(__assign({}, prevFilter), { center: r.center, start: r.start, end: r.end })); });
150
+ setActiveQP(-1);
151
+ }, Label: 'Time Window Center:', Type: 'datetime-local', Valid: function () { return true; }, Format: TimeWindowUtils_1.momentDateFormat + ' ' + TimeWindowUtils_1.momentTimeFormat })))
152
+ : null,
153
+ props.dateTimeSetting === 'startWindow' || props.dateTimeSetting === 'startEnd' ?
154
+ React.createElement(Row, { addRow: !props.isHorizontal },
155
+ React.createElement("div", { className: props.isHorizontal ? (props.showQuickSelect ? 'col-4' : 'col-6') : 'col-12' },
156
+ React.createElement(react_forms_1.DatePicker, { Record: filter, Field: "start", Help: "All times are in system time. System time is currently set to ".concat(props.timeZone, ". "), Setter: function (r) {
157
+ var _a;
158
+ var halfDur = filter.halfDuration;
159
+ var unit = filter.unit;
160
+ if (props.dateTimeSetting === 'startEnd') {
161
+ _a = (0, TimeWindowUtils_1.findAppropriateUnit)((0, TimeWindowUtils_1.getMoment)(r.start), (0, TimeWindowUtils_1.getMoment)(filter.end), undefined, true), unit = _a[0], halfDur = _a[1];
162
+ }
163
+ var flt = getTimeWindow({ start: r.start, duration: halfDur * 2, unit: unit });
164
+ setFilter(flt);
165
+ setActiveQP(-1);
166
+ }, Label: 'Start of Time Window:', Type: 'datetime-local', Valid: function () { return true; }, Format: TimeWindowUtils_1.momentDateFormat + ' ' + TimeWindowUtils_1.momentTimeFormat })))
167
+ : null,
168
+ props.dateTimeSetting === 'endWindow' || props.dateTimeSetting === 'startEnd' ?
169
+ React.createElement(Row, { addRow: !props.isHorizontal },
170
+ React.createElement("div", { className: props.isHorizontal ? (props.showQuickSelect ? 'col-4' : 'col-6') : 'col-12' },
171
+ React.createElement(react_forms_1.DatePicker, { Record: filter, Field: "end", Help: "All times are in system time. System time is currently set to ".concat(props.timeZone, ". "), Setter: function (r) {
172
+ var _a;
173
+ var halfDur = filter.halfDuration;
174
+ var unit = filter.unit;
175
+ if (props.dateTimeSetting === 'startEnd') {
176
+ _a = (0, TimeWindowUtils_1.findAppropriateUnit)((0, TimeWindowUtils_1.getMoment)(filter.start), (0, TimeWindowUtils_1.getMoment)(r.end), undefined, true), unit = _a[0], halfDur = _a[1];
177
+ }
178
+ var flt = getTimeWindow({ end: r.end, duration: halfDur * 2, unit: unit });
179
+ setFilter(flt);
180
+ setActiveQP(-1);
181
+ }, Label: 'End of Time Window :', Type: 'datetime-local', Valid: function () { return true; }, Format: TimeWindowUtils_1.momentDateFormat + ' ' + TimeWindowUtils_1.momentTimeFormat })))
182
+ : null,
183
+ props.dateTimeSetting === 'center' ?
184
+ React.createElement(React.Fragment, null,
185
+ React.createElement("label", { style: { width: '100%', position: 'relative', float: "left" } }, "Time Window(+/-): "),
186
+ React.createElement(Row, { addRow: !props.isHorizontal },
187
+ React.createElement("div", { className: props.isHorizontal ? (props.showQuickSelect ? 'col-2' : 'col-3') : 'col-6' },
188
+ React.createElement(react_forms_1.Input, { Record: filter, Field: 'halfDuration', Setter: function (r) {
189
+ var flt = getTimeWindow({ center: filter.center, halfDuration: r.halfDuration, unit: filter.unit });
190
+ setFilter(function (prevFilter) { return (__assign(__assign({}, prevFilter), { duration: r.duration, halfDuration: r.halfDuration, start: flt.start, end: flt.end })); });
191
+ setActiveQP(-1);
192
+ }, Label: '', Valid: function () { return true; }, Type: 'number' })),
193
+ React.createElement("div", { className: props.isHorizontal ? (props.showQuickSelect ? 'col-2' : 'col-3') : 'col-6' },
194
+ React.createElement(react_forms_1.Select, { Record: filter, Label: '', Field: 'unit', Setter: function (r) {
195
+ var flt = getTimeWindow({ center: filter.center, halfDuration: filter.halfDuration, unit: r.unit });
196
+ setFilter(function (prevFilter) { return (__assign(__assign({}, prevFilter), { unit: r.unit, start: flt.start, end: flt.end })); });
197
+ setActiveQP(-1);
198
+ }, Options: TimeWindowUtils_1.units.map(function (unit) { return ({
199
+ Value: unit,
200
+ Label: (0, TimeWindowUtils_1.readableUnit)(unit)
201
+ }); }) }))))
202
+ : null,
203
+ props.dateTimeSetting === 'startWindow' ?
204
+ React.createElement(React.Fragment, null,
205
+ React.createElement("label", { style: { width: '100%', position: 'relative', float: "left" } }, "Time Window(+): "),
206
+ React.createElement(Row, { addRow: !props.isHorizontal },
207
+ React.createElement("div", { className: props.isHorizontal ? (props.showQuickSelect ? 'col-2' : 'col-3') : 'col-6' },
208
+ React.createElement(react_forms_1.Input, { Record: filter, Field: 'duration', Setter: function (r) {
209
+ var flt = getTimeWindow({ start: filter.start, duration: r.duration, unit: filter.unit });
210
+ setFilter(function (prevFilter) { return (__assign(__assign({}, prevFilter), { duration: r.duration, halfDuration: r.halfDuration, center: flt.center, end: flt.end })); });
211
+ setActiveQP(-1);
212
+ }, Label: '', Valid: function () { return true; }, Type: 'number' })),
213
+ React.createElement("div", { className: props.isHorizontal ? (props.showQuickSelect ? 'col-2' : 'col-3') : 'col-6' },
214
+ React.createElement(react_forms_1.Select, { Record: filter, Label: '', Field: 'unit', Setter: function (r) {
215
+ var flt = getTimeWindow({ start: filter.start, duration: filter.duration, unit: r.unit });
216
+ setFilter(function (prevFilter) { return (__assign(__assign({}, prevFilter), { unit: r.unit, center: flt.center, end: flt.end })); });
217
+ setActiveQP(-1);
218
+ }, Options: TimeWindowUtils_1.units.map(function (unit) { return ({
219
+ Value: unit,
220
+ Label: (0, TimeWindowUtils_1.readableUnit)(unit)
221
+ }); }) }))))
222
+ : null,
223
+ props.dateTimeSetting === 'endWindow' ?
224
+ React.createElement(React.Fragment, null,
225
+ React.createElement("label", { style: { width: '100%', position: 'relative', float: "left" } }, "Time Window(-): "),
226
+ React.createElement(Row, { addRow: !props.isHorizontal },
227
+ React.createElement("div", { className: props.isHorizontal ? (props.showQuickSelect ? 'col-2' : 'col-3') : 'col-6' },
228
+ React.createElement(react_forms_1.Input, { Record: filter, Field: 'duration', Setter: function (r) {
229
+ var flt = getTimeWindow({ end: filter.end, duration: r.duration, unit: filter.unit });
230
+ setFilter(function (prevFilter) { return (__assign(__assign({}, prevFilter), { duration: r.duration, halfDuration: r.halfDuration, center: flt.center, start: flt.start })); });
231
+ setActiveQP(-1);
232
+ }, Label: '', Valid: function () { return true; }, Type: 'number' })),
233
+ React.createElement("div", { className: props.isHorizontal ? (props.showQuickSelect ? 'col-2' : 'col-3') : 'col-6' },
234
+ React.createElement(react_forms_1.Select, { Record: filter, Label: '', Field: 'unit', Setter: function (r) {
235
+ var flt = getTimeWindow({ end: filter.end, duration: filter.duration, unit: r.unit });
236
+ setFilter(function (prevFilter) { return (__assign(__assign({}, prevFilter), { unit: r.unit, center: flt.center, start: flt.start })); });
237
+ setActiveQP(-1);
238
+ }, Options: TimeWindowUtils_1.units.map(function (unit) { return ({
239
+ Value: unit,
240
+ Label: (0, TimeWindowUtils_1.readableUnit)(unit)
241
+ }); }) }))))
242
+ : null,
243
+ props.showQuickSelect ?
244
+ React.createElement("div", { className: props.isHorizontal ? 'col-4' : 'row' },
245
+ React.createElement(Row, { addRow: props.isHorizontal }, QuickSelects_1.AvailableQuickSelects.map(function (qs, i) {
246
+ if (i % 3 !== 0)
247
+ return null;
248
+ return (React.createElement("div", { key: i, className: "col-4", style: { paddingLeft: (props.isHorizontal ? 0 : (i % 9 == 0 ? 15 : 0)), paddingRight: (props.isHorizontal ? 2 : ((i % 18 == 6 || i % 18 == 15) ? 15 : 2)), marginTop: 10 } },
249
+ React.createElement("ul", { className: "list-group", key: i },
250
+ React.createElement("li", { key: i, style: { cursor: 'pointer' }, onClick: function () {
251
+ var flt = getTimeWindow(QuickSelects_1.AvailableQuickSelects[i].createFilter(props.timeZone));
252
+ props.setFilter(flt.center, flt.start, flt.end, flt.unit, flt.duration);
253
+ setActiveQP(i);
254
+ }, className: "item badge badge-" + (i == activeQP ? "primary" : "secondary") }, QuickSelects_1.AvailableQuickSelects[i].label),
255
+ i + 1 < QuickSelects_1.AvailableQuickSelects.length ?
256
+ React.createElement("li", { key: i + 1, style: { marginTop: 3, cursor: 'pointer' }, className: "item badge badge-" + (i + 1 == activeQP ? "primary" : "secondary"), onClick: function () {
257
+ var flt = getTimeWindow(QuickSelects_1.AvailableQuickSelects[i + 1].createFilter(props.timeZone));
258
+ props.setFilter(flt.center, flt.start, flt.end, flt.unit, flt.duration);
259
+ setActiveQP(i + 1);
260
+ } }, QuickSelects_1.AvailableQuickSelects[i + 1].label) : null,
261
+ i + 2 < QuickSelects_1.AvailableQuickSelects.length ?
262
+ React.createElement("li", { key: i + 2, style: { marginTop: 3, cursor: 'pointer' }, className: "item badge badge-" + (i + 2 == activeQP ? "primary" : "secondary"), onClick: function () {
263
+ var flt = getTimeWindow(QuickSelects_1.AvailableQuickSelects[i + 2].createFilter(props.timeZone));
264
+ props.setFilter(flt.center, flt.start, flt.end, flt.unit, flt.duration);
265
+ setActiveQP(i + 2);
266
+ } }, QuickSelects_1.AvailableQuickSelects[i + 2].label) : null)));
267
+ })))
268
+ : null)));
269
+ };
270
+ exports.default = TimeFilter;
@@ -0,0 +1,33 @@
1
+ import moment from 'moment';
2
+ import { ITimeFilter } from './TimeFilter';
3
+ export interface IStartEnd {
4
+ start: string;
5
+ end: string;
6
+ }
7
+ export interface IStartDuration {
8
+ start: string;
9
+ duration: number;
10
+ unit: TimeUnit;
11
+ }
12
+ export interface IEndDuration {
13
+ end: string;
14
+ duration: number;
15
+ unit: TimeUnit;
16
+ }
17
+ export interface ICenterDuration {
18
+ center: string;
19
+ halfDuration: number;
20
+ unit: TimeUnit;
21
+ }
22
+ export type TimeUnit = 'y' | 'M' | 'w' | 'd' | 'h' | 'm' | 's' | 'ms';
23
+ export declare const units: TimeUnit[];
24
+ export declare const momentDateFormat = "MM/DD/YYYY";
25
+ export declare const momentTimeFormat = "HH:mm:ss.SSS";
26
+ export declare const isStartEnd: (filter: ITimeFilter) => filter is IStartEnd;
27
+ export declare const isStartDuration: (filter: ITimeFilter) => filter is IStartDuration;
28
+ export declare const isEndDuration: (filter: ITimeFilter) => filter is IEndDuration;
29
+ export declare const isCenterDuration: (filter: ITimeFilter) => filter is ICenterDuration;
30
+ export declare function findAppropriateUnit(startTime: moment.Moment, endTime: moment.Moment, unit?: TimeUnit, useHalfWindow?: boolean): [TimeUnit, number];
31
+ export declare function getStartEndTime(center: moment.Moment, duration: number, unit: TimeUnit): [moment.Moment, moment.Moment];
32
+ export declare function getMoment(date: string, time?: string): moment.Moment;
33
+ export declare function readableUnit(unit: TimeUnit): "Year(s)" | "Month(s)" | "Week(s)" | "Day(s)" | "Hour(s)" | "Minute(s)" | "Second(s)" | "Millisecond(s)";