@gpa-gemstone/common-pages 0.0.107 → 0.0.109

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import 'moment';
3
+ import { OpenXDA } from '@gpa-gemstone/application-typings';
4
+ interface IProps {
5
+ SetSelectedTypeIDs: (typeIDs: number[]) => void;
6
+ Height?: number;
7
+ EventTypes: OpenXDA.Types.EventType[];
8
+ SelectedTypeID: number[];
9
+ }
10
+ declare const EventTypeFilter: React.FC<IProps>;
11
+ export default EventTypeFilter;
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
3
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
4
+ if (ar || !(i in from)) {
5
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
6
+ ar[i] = from[i];
7
+ }
8
+ }
9
+ return to.concat(ar || Array.prototype.slice.call(from));
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ //******************************************************************************************************
16
+ // EventTypeFilter.tsx - Gbtc
17
+ //
18
+ // Copyright © 2023, Grid Protection Alliance. All Rights Reserved.
19
+ //
20
+ // Licensed to the Grid Protection Alliance (GPA) under one or more contributor license agreements. See
21
+ // the NOTICE file distributed with this work for additional information regarding copyright ownership.
22
+ // The GPA licenses this file to you under the MIT License (MIT), the "License"; you may not use this
23
+ // file except in compliance with the License. You may obtain a copy of the License at:
24
+ //
25
+ // http://opensource.org/licenses/MIT
26
+ //
27
+ // Unless agreed to in writing, the subject software distributed under the License is distributed on an
28
+ // "AS-IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. Refer to the
29
+ // License for the specific language governing permissions and limitations.
30
+ //
31
+ // Code Modification History:
32
+ // ----------------------------------------------------------------------------------------------------
33
+ // 02/02/2023 - C. Lackner
34
+ // Generated original version of source code.
35
+ // 06/18/2024 - A. Karrar
36
+ // Moved EventTypeFilter to GemStone
37
+ //
38
+ //******************************************************************************************************
39
+ var react_1 = __importDefault(require("react"));
40
+ require("moment");
41
+ var lodash_1 = __importDefault(require("lodash"));
42
+ var EventTypeFilter = function (props) {
43
+ var _a = react_1.default.useState([]), evtTypeCategories = _a[0], setEvtTypeCategories = _a[1];
44
+ var _b = react_1.default.useState(1), nCol = _b[0], setnCol = _b[1];
45
+ react_1.default.useEffect(function () { return setEvtTypeCategories(lodash_1.default.uniq(props.EventTypes.map(function (e) { return e.Category; })).map(function (c) { return ({ label: c !== null && c !== void 0 ? c : '', height: 0 }); })); }, [props.EventTypes]);
46
+ react_1.default.useEffect(function () {
47
+ if (props.Height == undefined) {
48
+ setnCol(1);
49
+ return;
50
+ }
51
+ var navHeight = props.Height;
52
+ var heights = evtTypeCategories.map(function (h) { return h.height; });
53
+ if (heights.some(function (h) { return h > navHeight; })) {
54
+ navHeight = Math.max.apply(Math, heights);
55
+ }
56
+ var nCollumn = 0;
57
+ heights.sort();
58
+ var _loop_1 = function () {
59
+ nCollumn = nCollumn + 1;
60
+ var hc = heights[0];
61
+ heights.splice(0, 1);
62
+ var index = heights.findIndex(function (h) { return h <= (navHeight - hc); });
63
+ while (index >= 0 && heights[index] != 0) {
64
+ hc = hc + heights[index];
65
+ heights.splice(index, 1);
66
+ index = heights.findIndex(function (h) { return h <= (navHeight - hc); });
67
+ }
68
+ };
69
+ while (heights.length > 0) {
70
+ _loop_1();
71
+ }
72
+ setnCol(nCollumn);
73
+ }, [evtTypeCategories, props.Height]);
74
+ function generateCollumn(colIndex) {
75
+ var flts = [];
76
+ if (props.Height != undefined) {
77
+ var navHeight_1 = props.Height;
78
+ if (evtTypeCategories.some(function (h) { return h.height > navHeight_1; }))
79
+ navHeight_1 = Math.max.apply(Math, evtTypeCategories.map(function (h) { return h.height; }));
80
+ var categories = lodash_1.default.orderBy(evtTypeCategories, function (e) { return e.height; });
81
+ var nCollumn = 0;
82
+ var _loop_2 = function () {
83
+ nCollumn = nCollumn + 1;
84
+ if (nCollumn == colIndex + 1)
85
+ flts.push(categories[0]);
86
+ var hc = categories[0].height;
87
+ categories.splice(0, 1);
88
+ var index = categories.findIndex(function (h) { return h.height <= (navHeight_1 - hc); });
89
+ while (index >= 0) {
90
+ hc = hc + categories[index].height;
91
+ if (nCollumn == colIndex + 1)
92
+ flts.push(categories[index]);
93
+ categories.splice(index, 1);
94
+ index = categories.findIndex(function (h) { return h.height <= (navHeight_1 - hc); });
95
+ }
96
+ };
97
+ while (categories.length > 0 && nCollumn <= colIndex) {
98
+ _loop_2();
99
+ }
100
+ }
101
+ else {
102
+ flts = evtTypeCategories;
103
+ }
104
+ return react_1.default.createElement("li", { className: "nav-item", style: { width: (20 / nCol).toFixed(0) + '%', paddingRight: 10, height: evtTypeCategories.some(function (c) { return c.height == 0; }) ? 5 : '100%', overflow: 'hidden' } }, flts.map(function (c) { return (react_1.default.createElement(EventSearchTypeCategory, { key: c.label, Label: c.label, SelectedID: props.SelectedTypeID, SelectAll: function (selected) {
105
+ props.SetSelectedTypeIDs(selected ? props.SelectedTypeID.filter(function (id) { return props.EventTypes.find(function (t) { var _a; return id == t.ID && ((_a = t.Category) !== null && _a !== void 0 ? _a : '') == c.label; }) == null; })
106
+ : lodash_1.default.uniq(__spreadArray(__spreadArray([], props.SelectedTypeID, true), props.EventTypes.filter(function (t) { var _a; return ((_a = t.Category) !== null && _a !== void 0 ? _a : '') == c.label; }).map(function (i) { return i.ID; }), true)));
107
+ }, Data: props.EventTypes.filter(function (et) { var _a; return ((_a = et.Category) !== null && _a !== void 0 ? _a : '') == c.label; }), OnChange: function (record, selected) {
108
+ props.SetSelectedTypeIDs(selected ? __spreadArray(__spreadArray([], props.SelectedTypeID, true), [record.ID], false) : props.SelectedTypeID.filter(function (t) { return t != record.ID; }));
109
+ }, SetHeight: function (h) { return setHeight(c.label, h); } })); }));
110
+ }
111
+ function setHeight(label, h) {
112
+ var index = evtTypeCategories.findIndex(function (c) { return c.label == label; });
113
+ if (index > -1 && evtTypeCategories[index].height != h)
114
+ setEvtTypeCategories(function (d) {
115
+ var u = lodash_1.default.cloneDeep(d);
116
+ u[index].height = h;
117
+ return u;
118
+ });
119
+ }
120
+ return (react_1.default.createElement(react_1.default.Fragment, null, Array.from({ length: nCol }, function (_, i) { return i; }).map(function (c) { return generateCollumn(c); })));
121
+ };
122
+ var EventSearchTypeCategory = function (props) {
123
+ var formRef = react_1.default.useRef(null);
124
+ react_1.default.useLayoutEffect(function () { var _a, _b; return props.SetHeight((_b = (_a = formRef === null || formRef === void 0 ? void 0 : formRef.current) === null || _a === void 0 ? void 0 : _a.offsetHeight) !== null && _b !== void 0 ? _b : 0); });
125
+ return react_1.default.createElement("fieldset", { className: "border", style: { padding: '10px' }, ref: formRef },
126
+ react_1.default.createElement("legend", { className: "w-auto", style: { fontSize: 'large' } },
127
+ (props.Label != null && props.Label.length > 0 ? props.Label : 'Other Types'),
128
+ ":",
129
+ react_1.default.createElement("a", { style: { fontSize: 'small', color: '#0056b3', marginLeft: 2, cursor: 'pointer' }, onClick: function () {
130
+ var isSelected = props.Data.filter(function (item) { return props.SelectedID.find(function (i) { return i == item.ID; }) == null; }).length == 0;
131
+ props.SelectAll(isSelected);
132
+ } },
133
+ "(",
134
+ props.Data.filter(function (item) { return props.SelectedID.find(function (i) { return i == item.ID; }) == null; }).length == 0 ? 'un' : '',
135
+ "select all)")),
136
+ react_1.default.createElement("form", null,
137
+ react_1.default.createElement("ul", { style: { listStyleType: 'none', padding: 0, position: 'relative', float: 'left' } }, props.Data.map(function (item) { return react_1.default.createElement("li", { key: item.ID },
138
+ react_1.default.createElement("label", null,
139
+ react_1.default.createElement("input", { type: "checkbox", onChange: function (e) {
140
+ props.OnChange(item, e.target.checked);
141
+ }, checked: props.SelectedID.find(function (i) { return i == item.ID; }) != null }),
142
+ item.Description)); }))));
143
+ };
144
+ exports.default = EventTypeFilter;
package/lib/index.d.ts CHANGED
@@ -9,4 +9,5 @@ import SelectPopup from './StandardSelectPopup';
9
9
  import { DefaultSelects } from './SelectionPopup';
10
10
  import ErrorBoundary from './ErrorBoundary';
11
11
  import TimeFilter from './TimeFilter';
12
- export { Setting, TimeFilter, Note, ValueList, ByValueList, User, ByUser, DefaultSearch, SelectPopup, DefaultSelects, ErrorBoundary };
12
+ import EventTypeFilter from './EventTypeFilter';
13
+ export { EventTypeFilter, Setting, TimeFilter, Note, ValueList, ByValueList, User, ByUser, DefaultSearch, SelectPopup, DefaultSelects, ErrorBoundary };
package/lib/index.js CHANGED
@@ -25,7 +25,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
25
25
  return (mod && mod.__esModule) ? mod : { "default": mod };
26
26
  };
27
27
  Object.defineProperty(exports, "__esModule", { value: true });
28
- exports.ErrorBoundary = exports.DefaultSelects = exports.SelectPopup = exports.DefaultSearch = exports.ByUser = exports.User = exports.ByValueList = exports.ValueList = exports.Note = exports.TimeFilter = exports.Setting = void 0;
28
+ exports.ErrorBoundary = exports.DefaultSelects = exports.SelectPopup = exports.DefaultSearch = exports.ByUser = exports.User = exports.ByValueList = exports.ValueList = exports.Note = exports.TimeFilter = exports.Setting = exports.EventTypeFilter = void 0;
29
29
  var Setting_1 = __importDefault(require("./Setting"));
30
30
  exports.Setting = Setting_1.default;
31
31
  var Note_1 = __importDefault(require("./Note"));
@@ -48,3 +48,5 @@ var ErrorBoundary_1 = __importDefault(require("./ErrorBoundary"));
48
48
  exports.ErrorBoundary = ErrorBoundary_1.default;
49
49
  var TimeFilter_1 = __importDefault(require("./TimeFilter"));
50
50
  exports.TimeFilter = TimeFilter_1.default;
51
+ var EventTypeFilter_1 = __importDefault(require("./EventTypeFilter"));
52
+ exports.EventTypeFilter = EventTypeFilter_1.default;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gpa-gemstone/common-pages",
3
- "version": "0.0.107",
3
+ "version": "0.0.109",
4
4
  "description": "Common UI pages for GPA products",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",
@@ -45,11 +45,11 @@
45
45
  },
46
46
  "dependencies": {
47
47
  "@gpa-gemstone/application-typings": "0.0.72",
48
- "@gpa-gemstone/gpa-symbols": "0.0.36",
48
+ "@gpa-gemstone/gpa-symbols": "0.0.38",
49
49
  "@gpa-gemstone/helper-functions": "0.0.32",
50
- "@gpa-gemstone/react-forms": "1.1.62",
51
- "@gpa-gemstone/react-interactive": "1.0.121",
52
- "@gpa-gemstone/react-table": "1.2.46",
50
+ "@gpa-gemstone/react-forms": "1.1.64",
51
+ "@gpa-gemstone/react-interactive": "1.0.123",
52
+ "@gpa-gemstone/react-table": "1.2.48",
53
53
  "@reduxjs/toolkit": "1.8.3",
54
54
  "crypto-js": "4.0.0",
55
55
  "moment": "^2.29.4",