@gpa-gemstone/common-pages 0.0.182 → 0.0.184

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.
@@ -0,0 +1,21 @@
1
+ import { Application } from '@gpa-gemstone/application-typings';
2
+ import { Search } from '@gpa-gemstone/react-interactive';
3
+ import { Gemstone } from '../Gemstone';
4
+ /**
5
+ * Custom hook to fetch and paginate searchable data from a read-only controller endpoint.
6
+ * @typeParam T - The type of the records being searched.
7
+ * @param page - The current page number to fetch.
8
+ * @param sortField - The field to sort the results by.
9
+ * @param searchFilter - The search filters to apply to the query.
10
+ * @param ascending - Whether the results should be sorted in ascending order.
11
+ * @param controllerPath - The path to the read-only controller endpoint.
12
+ * @param ReFetchDataCounter - Optional counter that triggers a re-fetch whenever its value changes.
13
+ * @returns An object containing the search results, the search status, the pagination status and the pagination info.
14
+ */
15
+ declare const useSearchData: <T>(page: number, sortField: keyof T, searchFilter: Search.IFilter<T>[], ascending: boolean, controllerPath: string, ReFetchDataCounter?: number) => {
16
+ SearchResults: T[];
17
+ SearchStatus: Application.Types.Status;
18
+ PaginationStatus: Application.Types.Status;
19
+ PageInfo: Gemstone.Types.IPageInfo;
20
+ };
21
+ export default useSearchData;
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ //******************************************************************************************************
3
+ // useSearchData.tsx - Gbtc
4
+ //
5
+ // Copyright (c) 2024, 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 may license 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
+ // 03/24/2025 - Preston Crawford
21
+ // Generated original version of source code.
22
+ //
23
+ //******************************************************************************************************
24
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
25
+ if (k2 === undefined) k2 = k;
26
+ var desc = Object.getOwnPropertyDescriptor(m, k);
27
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
28
+ desc = { enumerable: true, get: function() { return m[k]; } };
29
+ }
30
+ Object.defineProperty(o, k2, desc);
31
+ }) : (function(o, m, k, k2) {
32
+ if (k2 === undefined) k2 = k;
33
+ o[k2] = m[k];
34
+ }));
35
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
36
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
37
+ }) : function(o, v) {
38
+ o["default"] = v;
39
+ });
40
+ var __importStar = (this && this.__importStar) || function (mod) {
41
+ if (mod && mod.__esModule) return mod;
42
+ var result = {};
43
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
44
+ __setModuleDefault(result, mod);
45
+ return result;
46
+ };
47
+ Object.defineProperty(exports, "__esModule", { value: true });
48
+ var React = __importStar(require("react"));
49
+ var ControllerFunctions_1 = require("../ControllerFunctions");
50
+ var Gemstone_1 = require("../Gemstone");
51
+ /**
52
+ * Custom hook to fetch and paginate searchable data from a read-only controller endpoint.
53
+ * @typeParam T - The type of the records being searched.
54
+ * @param page - The current page number to fetch.
55
+ * @param sortField - The field to sort the results by.
56
+ * @param searchFilter - The search filters to apply to the query.
57
+ * @param ascending - Whether the results should be sorted in ascending order.
58
+ * @param controllerPath - The path to the read-only controller endpoint.
59
+ * @param ReFetchDataCounter - Optional counter that triggers a re-fetch whenever its value changes.
60
+ * @returns An object containing the search results, the search status, the pagination status and the pagination info.
61
+ */
62
+ var useSearchData = function (page, sortField, searchFilter, ascending, controllerPath, ReFetchDataCounter) {
63
+ var fetchHandle = React.useRef(null);
64
+ var paginationHandle = React.useRef(null);
65
+ var _a = React.useState([]), results = _a[0], setResults = _a[1];
66
+ var _b = React.useState('uninitiated'), searchStatus = _b[0], setSearchStatus = _b[1];
67
+ var _c = React.useState('uninitiated'), paginationStatus = _c[0], setPaginationStatus = _c[1];
68
+ var _d = React.useState({
69
+ TotalCount: 0,
70
+ PageCount: 0,
71
+ PageSize: 0
72
+ }), pageInfo = _d[0], setPageInfo = _d[1];
73
+ var Queries = React.useMemo(function () { return new ControllerFunctions_1.ReadOnlyControllerFunctions(controllerPath); }, [controllerPath]);
74
+ var stringifiedFilter = React.useMemo(function () { return JSON.stringify(searchFilter); }, [searchFilter]);
75
+ // Memoize the searchFilter to avoid unnecessary re-fetches.
76
+ var memoizedSearchFilter = React.useMemo(function () { return Gemstone_1.Gemstone.HelperFunctions.getSearchFilter(JSON.parse(stringifiedFilter)); }, [stringifiedFilter]);
77
+ var reFetchData = React.useCallback(function () {
78
+ setSearchStatus('loading');
79
+ setPaginationStatus('loading');
80
+ fetchHandle.current = Queries.SearchPage(page, sortField, ascending, memoizedSearchFilter).done(function (data) {
81
+ setResults(data);
82
+ setSearchStatus('idle');
83
+ }).fail(function () { return setSearchStatus('error'); });
84
+ paginationHandle.current = Queries.GetPageInfo(memoizedSearchFilter).done(function (d) {
85
+ setPageInfo(d);
86
+ setPaginationStatus('idle');
87
+ }).fail(function () { return setPaginationStatus('error'); });
88
+ var cleanup = function () {
89
+ var _a, _b;
90
+ if (((_a = fetchHandle.current) === null || _a === void 0 ? void 0 : _a.abort) != null)
91
+ fetchHandle.current.abort();
92
+ if (((_b = paginationHandle.current) === null || _b === void 0 ? void 0 : _b.abort) != null)
93
+ paginationHandle.current.abort();
94
+ };
95
+ return {
96
+ fetchHandle: fetchHandle.current,
97
+ cleanup: cleanup
98
+ };
99
+ }, [Queries, page, sortField, ascending, memoizedSearchFilter]);
100
+ React.useEffect(function () {
101
+ var cleanup = reFetchData().cleanup;
102
+ return cleanup;
103
+ }, [reFetchData, ReFetchDataCounter]);
104
+ return {
105
+ SearchResults: results,
106
+ SearchStatus: searchStatus,
107
+ PaginationStatus: paginationStatus,
108
+ PageInfo: pageInfo
109
+ };
110
+ };
111
+ exports.default = useSearchData;
@@ -0,0 +1,20 @@
1
+ import { Gemstone } from '@gpa-gemstone/application-typings';
2
+ interface IProps {
3
+ /**
4
+ * Function invoked on each interval to check whether the application can still
5
+ * reach the server. Should return an AbortablePromise that resolves when the
6
+ * server is reachable and rejects when it is not.
7
+ * */
8
+ HeartBeat: () => Gemstone.TSX.Interfaces.AbortablePromise<unknown>;
9
+ /**
10
+ * Interval, in milliseconds, between successive HeartBeat checks
11
+ * */
12
+ IntervalMS: number;
13
+ }
14
+ /**
15
+ * Periodically calls HeartBeat to verify connectivity to the server and, when a
16
+ * check fails, displays a blocking modal indicating the application is trying to
17
+ * reconnect. Renders nothing while the server is reachable.
18
+ */
19
+ declare const HeartBeatCheck: (props: IProps) => JSX.Element | null;
20
+ export default HeartBeatCheck;
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ //******************************************************************************************************
27
+ // HeartBeatCheck.tsx - Gbtc
28
+ //
29
+ // Copyright (c) 2024, Grid Protection Alliance. All Rights Reserved.
30
+ //
31
+ // Licensed to the Grid Protection Alliance (GPA) under one or more contributor license agreements. See
32
+ // the NOTICE file distributed with this work for additional information regarding copyright ownership.
33
+ // The GPA may license this file to you under the MIT License (MIT), the "License"; you may not use this
34
+ // file except in compliance with the License. You may obtain a copy of the License at:
35
+ //
36
+ // http://opensource.org/licenses/MIT
37
+ //
38
+ // Unless agreed to in writing, the subject software distributed under the License is distributed on an
39
+ // "AS-IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. Refer to the
40
+ // License for the specific language governing permissions and limitations.
41
+ //
42
+ // Code Modification History:
43
+ // ----------------------------------------------------------------------------------------------------
44
+ // 06/26/2026 - Preston Crawford
45
+ // Generated original version of source code.
46
+ //
47
+ //******************************************************************************************************
48
+ var React = __importStar(require("react"));
49
+ var react_interactive_1 = require("@gpa-gemstone/react-interactive");
50
+ /**
51
+ * Periodically calls HeartBeat to verify connectivity to the server and, when a
52
+ * check fails, displays a blocking modal indicating the application is trying to
53
+ * reconnect. Renders nothing while the server is reachable.
54
+ */
55
+ var HeartBeatCheck = function (props) {
56
+ var _a = React.useState(false), showError = _a[0], setShowError = _a[1];
57
+ //Effect to call heartbeat on consumer defined interval
58
+ React.useEffect(function () {
59
+ var updateServiceStatus = null;
60
+ var checkServiceStatus = function () {
61
+ updateServiceStatus = props.HeartBeat();
62
+ updateServiceStatus.then(function () {
63
+ setShowError(false);
64
+ }, function () {
65
+ setShowError(true);
66
+ });
67
+ };
68
+ checkServiceStatus();
69
+ var interval = setInterval(checkServiceStatus, props.IntervalMS);
70
+ return function () {
71
+ clearInterval(interval);
72
+ if ((updateServiceStatus === null || updateServiceStatus === void 0 ? void 0 : updateServiceStatus.abort) != null)
73
+ updateServiceStatus.abort();
74
+ };
75
+ }, [props.HeartBeat, props.IntervalMS]);
76
+ if (!showError)
77
+ return null;
78
+ return (React.createElement(react_interactive_1.Modal, { Show: true, Title: "Error Communicating with Application", Size: 'sm', ShowCancel: false, ShowConfirm: false, ShowX: false, CallBack: function () { } },
79
+ React.createElement("p", null, " The application is trying to reconnect to the server..."),
80
+ React.createElement(react_interactive_1.LoadingIcon, { Show: true })));
81
+ };
82
+ exports.default = HeartBeatCheck;
package/lib/SearchBar.js CHANGED
@@ -81,6 +81,9 @@ var DefaultSearch;
81
81
  var sortField = (0, react_redux_1.useSelector)(props.Slice.SortField);
82
82
  var ascending = (0, react_redux_1.useSelector)(props.Slice.Ascending);
83
83
  var data = (0, react_redux_1.useSelector)(props.Slice.SearchResults);
84
+ var FilterEqualityOverride = React.useCallback(function (a, b) {
85
+ return searchStatus === 'uninitiated' ? false : (0, react_interactive_1.IsSearchBarFiltersEqual)(a, b);
86
+ }, [searchStatus]);
84
87
  React.useEffect(function () {
85
88
  return props.GetAddlFields(setAddlFieldCols);
86
89
  }, []);
@@ -88,7 +91,7 @@ var DefaultSearch;
88
91
  return dispatch(props.Slice.DBSearch({ filter: (addlFilters == null ? filters : __spreadArray(__spreadArray([], filters, true), addlFilters, true)), sortField: sortField, ascending: ascending }));
89
92
  }, [sortField, ascending, addlFilters, props.Slice]);
90
93
  var standardSearch = { label: 'Name', key: 'Name', type: 'string', isPivotField: false };
91
- return React.createElement(react_interactive_1.SearchBar, { CollumnList: __spreadArray(__spreadArray([], defaultSearchcols, true), addlFieldCols, true), SetFilter: setFilters, Direction: 'left', defaultCollumn: standardSearch, Width: '50%', Label: 'Search', ShowLoading: searchStatus === 'loading', ResultNote: searchStatus === 'error' ? 'Could not complete Search' : 'Found ' + data.length + ' Meter(s)', GetEnum: props.GetEnum, StorageID: props.StorageID }, props.children);
94
+ return React.createElement(react_interactive_1.SearchBar, { CollumnList: __spreadArray(__spreadArray([], defaultSearchcols, true), addlFieldCols, true), SetFilter: setFilters, Direction: 'left', defaultCollumn: standardSearch, Width: '50%', Label: 'Search', ShowLoading: searchStatus === 'loading', ResultNote: searchStatus === 'error' ? 'Could not complete Search' : 'Found ' + data.length + ' Meter(s)', GetEnum: props.GetEnum, StorageID: props.StorageID, OverrideFilterEquality: FilterEqualityOverride }, props.children);
92
95
  };
93
96
  /** This Implements a standard Substation Search */
94
97
  DefaultSearch.Location = function (props) {
@@ -109,13 +112,16 @@ var DefaultSearch;
109
112
  { label: 'Number of Meters', key: 'Meters', type: 'integer', isPivotField: false },
110
113
  { label: 'Description', key: 'Description', type: 'string', isPivotField: false },
111
114
  ];
115
+ var FilterEqualityOverride = React.useCallback(function (a, b) {
116
+ return searchStatus === 'uninitiated' ? false : (0, react_interactive_1.IsSearchBarFiltersEqual)(a, b);
117
+ }, [searchStatus]);
112
118
  React.useEffect(function () {
113
119
  return props.GetAddlFields(setAddlFieldCols);
114
120
  }, []);
115
121
  var setFilters = React.useCallback(function (filters) {
116
122
  return dispatch(props.Slice.DBSearch({ filter: (addlFilters == null ? filters : __spreadArray(__spreadArray([], filters, true), addlFilters, true)), sortField: sortField, ascending: ascending }));
117
123
  }, [sortField, ascending, addlFilters, props.Slice.DBSearch]);
118
- return React.createElement(react_interactive_1.SearchBar, { CollumnList: __spreadArray(__spreadArray([], defaultSearchcols, true), addlFieldCols, true), SetFilter: setFilters, Direction: 'left', defaultCollumn: standardSearch, Width: '50%', Label: 'Search', ShowLoading: searchStatus === 'loading', ResultNote: searchStatus === 'error' ? 'Could not complete Search' : 'Found ' + data.length + ' Substation(s)', GetEnum: props.GetEnum, StorageID: props.StorageID }, props.children);
124
+ return React.createElement(react_interactive_1.SearchBar, { CollumnList: __spreadArray(__spreadArray([], defaultSearchcols, true), addlFieldCols, true), SetFilter: setFilters, Direction: 'left', defaultCollumn: standardSearch, Width: '50%', Label: 'Search', ShowLoading: searchStatus === 'loading', ResultNote: searchStatus === 'error' ? 'Could not complete Search' : 'Found ' + data.length + ' Substation(s)', GetEnum: props.GetEnum, StorageID: props.StorageID, OverrideFilterEquality: FilterEqualityOverride }, props.children);
119
125
  };
120
126
  /** This Implements a standard Transmission Asset Search */
121
127
  DefaultSearch.Asset = function (props) {
@@ -138,13 +144,16 @@ var DefaultSearch;
138
144
  { label: 'Number of Substations', key: 'Locations', type: 'integer', isPivotField: false },
139
145
  { label: 'Description', key: 'Description', type: 'string', isPivotField: false },
140
146
  ];
147
+ var FilterEqualityOverride = React.useCallback(function (a, b) {
148
+ return searchStatus === 'uninitiated' ? false : (0, react_interactive_1.IsSearchBarFiltersEqual)(a, b);
149
+ }, [searchStatus]);
141
150
  React.useEffect(function () {
142
151
  return props.GetAddlFields(setAddlFieldCols);
143
152
  }, []);
144
153
  var setFilters = React.useCallback(function (filters) {
145
154
  return dispatch(props.Slice.DBSearch({ filter: (addlFilters == null ? filters : __spreadArray(__spreadArray([], filters, true), addlFilters, true)), sortField: sortField, ascending: ascending }));
146
155
  }, [sortField, ascending, addlFilters, props.Slice]);
147
- return React.createElement(react_interactive_1.SearchBar, { CollumnList: __spreadArray(__spreadArray([], defaultSearchcols, true), addlFieldCols, true), SetFilter: setFilters, Direction: 'left', defaultCollumn: standardSearch, Width: '50%', Label: 'Search', ShowLoading: searchStatus === 'loading', ResultNote: searchStatus === 'error' ? 'Could not complete Search' : 'Found ' + data.length + ' Transmission Asset(s)', GetEnum: props.GetEnum, StorageID: props.StorageID }, props.children);
156
+ return React.createElement(react_interactive_1.SearchBar, { CollumnList: __spreadArray(__spreadArray([], defaultSearchcols, true), addlFieldCols, true), SetFilter: setFilters, Direction: 'left', defaultCollumn: standardSearch, Width: '50%', Label: 'Search', ShowLoading: searchStatus === 'loading', ResultNote: searchStatus === 'error' ? 'Could not complete Search' : 'Found ' + data.length + ' Transmission Asset(s)', GetEnum: props.GetEnum, StorageID: props.StorageID, OverrideFilterEquality: FilterEqualityOverride }, props.children);
148
157
  };
149
158
  /** This Implements a standard AssetGroup Search */
150
159
  DefaultSearch.AssetGroup = function (props) {
@@ -164,13 +173,16 @@ var DefaultSearch;
164
173
  { label: 'Show in PQ Dashboard', key: 'DisplayDashboard', type: 'boolean', isPivotField: false },
165
174
  { label: 'Show in Email Subscription', key: 'DisplayEmail', type: 'boolean', isPivotField: false },
166
175
  ];
176
+ var FilterEqualityOverride = React.useCallback(function (a, b) {
177
+ return searchStatus === 'uninitiated' ? false : (0, react_interactive_1.IsSearchBarFiltersEqual)(a, b);
178
+ }, [searchStatus]);
167
179
  React.useEffect(function () {
168
180
  return props.GetAddlFields(setAddlFieldCols);
169
181
  }, []);
170
182
  var setFilters = React.useCallback(function (filters) {
171
183
  return dispatch(props.Slice.DBSearch({ filter: (addlFilters == null ? filters : __spreadArray(__spreadArray([], filters, true), addlFilters, true)), sortField: sortField, ascending: ascending }));
172
184
  }, [sortField, ascending, addlFilters, props.Slice]);
173
- return React.createElement(react_interactive_1.SearchBar, { CollumnList: __spreadArray(__spreadArray([], defaultSearchcols, true), addlFieldCols, true), SetFilter: setFilters, Direction: 'left', defaultCollumn: standardSearch, Width: '50%', Label: 'Search', ShowLoading: searchStatus === 'loading', ResultNote: searchStatus === 'error' ? 'Could not complete Search' : 'Found ' + data.length + ' Asset Group(s)', GetEnum: props.GetEnum, StorageID: props.StorageID }, props.children);
185
+ return React.createElement(react_interactive_1.SearchBar, { CollumnList: __spreadArray(__spreadArray([], defaultSearchcols, true), addlFieldCols, true), SetFilter: setFilters, Direction: 'left', defaultCollumn: standardSearch, Width: '50%', Label: 'Search', ShowLoading: searchStatus === 'loading', ResultNote: searchStatus === 'error' ? 'Could not complete Search' : 'Found ' + data.length + ' Asset Group(s)', GetEnum: props.GetEnum, StorageID: props.StorageID, OverrideFilterEquality: FilterEqualityOverride }, props.children);
174
186
  };
175
187
  /** This Implements a standard User Search */
176
188
  DefaultSearch.User = function (props) {
@@ -187,13 +199,16 @@ var DefaultSearch;
187
199
  { label: 'Last Name', key: 'LastName', type: 'string', isPivotField: false },
188
200
  { label: 'Email', key: 'Email', type: 'string', isPivotField: false },
189
201
  ];
202
+ var FilterEqualityOverride = React.useCallback(function (a, b) {
203
+ return searchStatus === 'uninitiated' ? false : (0, react_interactive_1.IsSearchBarFiltersEqual)(a, b);
204
+ }, [searchStatus]);
190
205
  React.useEffect(function () {
191
206
  return props.GetAddlFields(setAddlFieldCols);
192
207
  }, []);
193
208
  var setFilters = React.useCallback(function (filters) {
194
209
  return dispatch(props.Slice.DBSearch({ filter: (addlFilters == null ? filters : __spreadArray(__spreadArray([], filters, true), addlFilters, true)), sortField: sortField, ascending: ascending }));
195
210
  }, [sortField, ascending, addlFilters, props.Slice]);
196
- return React.createElement(react_interactive_1.SearchBar, { CollumnList: __spreadArray(__spreadArray([], defaultSearchcols, true), addlFieldCols, true), SetFilter: setFilters, Direction: 'left', defaultCollumn: standardSearch, Width: '50%', Label: 'Search', ShowLoading: searchStatus === 'loading', ResultNote: searchStatus === 'error' ? 'Could not complete Search' : 'Found ' + data.length + ' User(s)', GetEnum: props.GetEnum, StorageID: props.StorageID }, props.children);
211
+ return React.createElement(react_interactive_1.SearchBar, { CollumnList: __spreadArray(__spreadArray([], defaultSearchcols, true), addlFieldCols, true), SetFilter: setFilters, Direction: 'left', defaultCollumn: standardSearch, Width: '50%', Label: 'Search', ShowLoading: searchStatus === 'loading', ResultNote: searchStatus === 'error' ? 'Could not complete Search' : 'Found ' + data.length + ' User(s)', GetEnum: props.GetEnum, StorageID: props.StorageID, OverrideFilterEquality: FilterEqualityOverride }, props.children);
197
212
  };
198
213
  /** This Implements a standard Customer Search */
199
214
  DefaultSearch.Customer = function (props) {
@@ -211,12 +226,15 @@ var DefaultSearch;
211
226
  var sortField = (0, react_redux_1.useSelector)(props.Slice.SortField);
212
227
  var ascending = (0, react_redux_1.useSelector)(props.Slice.Ascending);
213
228
  var data = (0, react_redux_1.useSelector)(props.Slice.SearchResults);
229
+ var FilterEqualityOverride = React.useCallback(function (a, b) {
230
+ return searchStatus === 'uninitiated' ? false : (0, react_interactive_1.IsSearchBarFiltersEqual)(a, b);
231
+ }, [searchStatus]);
214
232
  React.useEffect(function () {
215
233
  return props.GetAddlFields(setAddlFieldCols);
216
234
  }, []);
217
235
  var setFilters = React.useCallback(function (filters) {
218
236
  return dispatch(props.Slice.DBSearch({ filter: (addlFilters == null ? filters : __spreadArray(__spreadArray([], filters, true), addlFilters, true)), sortField: sortField, ascending: ascending }));
219
237
  }, [sortField, ascending, addlFilters, props.Slice]);
220
- return React.createElement(react_interactive_1.SearchBar, { CollumnList: __spreadArray(__spreadArray([], defaultSearchcols, true), addlFieldCols, true), SetFilter: setFilters, Direction: 'left', defaultCollumn: standardSearch, Width: '50%', Label: 'Search', ShowLoading: searchStatus === 'loading', ResultNote: searchStatus === 'error' ? 'Could not complete Search' : 'Found ' + data.length + ' Customer(s)', GetEnum: props.GetEnum, StorageID: props.StorageID }, props.children);
238
+ return React.createElement(react_interactive_1.SearchBar, { CollumnList: __spreadArray(__spreadArray([], defaultSearchcols, true), addlFieldCols, true), SetFilter: setFilters, Direction: 'left', defaultCollumn: standardSearch, Width: '50%', Label: 'Search', ShowLoading: searchStatus === 'loading', ResultNote: searchStatus === 'error' ? 'Could not complete Search' : 'Found ' + data.length + ' Customer(s)', GetEnum: props.GetEnum, StorageID: props.StorageID, OverrideFilterEquality: FilterEqualityOverride }, props.children);
221
239
  };
222
240
  })(DefaultSearch || (exports.DefaultSearch = DefaultSearch = {}));
@@ -1,4 +1,4 @@
1
- import { DateTimeSetting, ITimeFilter } from './TimeFilter';
1
+ import { ITimeFilter } from './TimeFilter';
2
2
  import { Gemstone } from '@gpa-gemstone/application-typings';
3
3
  import { TimeUnit } from './TimeWindowUtils';
4
4
  interface IQuickSelect {
@@ -7,7 +7,6 @@ interface IQuickSelect {
7
7
  createFilter: (timeZone: string, format?: Gemstone.TSX.Types.DateUnit) => ITimeFilter;
8
8
  }
9
9
  interface IProps {
10
- DateTimeSetting: DateTimeSetting;
11
10
  Format?: "YYYY-MM-DD" | "HH:mm:ss.SSS" | "MM/DD/YYYY HH:mm:ss.SSS";
12
11
  DateUnit?: Gemstone.TSX.Types.DateUnit;
13
12
  QuickSelectRange?: Gemstone.TSX.Types.QuickSelectRange;
@@ -63,9 +63,9 @@ var QuickSelects = function (props) {
63
63
  var _a;
64
64
  if (i % 3 !== 0)
65
65
  return null;
66
- return (React.createElement("div", { key: i, className: getColSize(props.DateTimeSetting, (_a = props.SplitSelects) !== null && _a !== void 0 ? _a : false), style: {
67
- paddingLeft: (props.DateTimeSetting === 'startEnd' ? 0 : (i % 9 == 0 ? 15 : 0)),
68
- paddingRight: (props.DateTimeSetting === 'startEnd' ? 2 : ((i % 18 == 6 || i % 18 == 15) ? 15 : 2)),
66
+ return (React.createElement("div", { key: i, className: ((_a = props.SplitSelects) !== null && _a !== void 0 ? _a : false) ? 'col-4' : 'col-2', style: {
67
+ paddingLeft: 0,
68
+ paddingRight: 2,
69
69
  marginTop: 10
70
70
  } },
71
71
  React.createElement("ul", { className: "list-group", key: i },
@@ -107,18 +107,6 @@ function getQuickSelectRange(dateUnit) {
107
107
  if (dateUnit === 'date')
108
108
  return 'long';
109
109
  }
110
- var getColSize = function (dateTimeSetting, splitSelects) {
111
- if (dateTimeSetting === 'startEnd') {
112
- if (splitSelects)
113
- return 'col-4';
114
- else
115
- return 'col-2';
116
- }
117
- if (splitSelects)
118
- return 'col-8';
119
- else
120
- return 'col-4';
121
- };
122
110
  //update all quick selects to use new timefilters
123
111
  exports.AvailableQuickSelects = [
124
112
  {
@@ -51,7 +51,6 @@ var QuickSelects_1 = __importStar(require("../QuickSelects"));
51
51
  var DateFilter = function (props) {
52
52
  var _a, _b;
53
53
  var FirstFallbackBreakpoint = 1050;
54
- var SecondFallbackBreakpoint = 541;
55
54
  var FirstFallbackBreakpointNoQS = 375;
56
55
  var handleSetTimeWindowFilter = React.useCallback(function (record) {
57
56
  var flt = (0, TimeFilter_1.getTimeWindowFromFilter)({ start: record.start, end: record.end }, props.Format);
@@ -80,7 +79,7 @@ var DateFilter = function (props) {
80
79
  React.createElement(react_forms_1.DatePicker, { Record: props.TimeWindowFilter, Field: "end", Help: props.HelpMessage, Setter: handleSetTimeWindowFilter, Label: 'End', Type: props.DateUnit, Valid: function () { return true; }, Format: props.Format, Accuracy: props.Accuracy })),
81
80
  props.ShowQuickSelects ?
82
81
  React.createElement("div", { className: quickSelectClass },
83
- React.createElement(QuickSelects_1.default, { DateTimeSetting: 'startEnd', Timezone: props.Timezone, ActiveQP: props.ActiveQP, SetActiveQP: props.SetActiveQP, SetFilter: props.SetFilter, Format: props.Format, DateUnit: props.DateUnit, QuickSelectRange: (_a = props.QuickSelectRange) !== null && _a !== void 0 ? _a : (0, QuickSelects_1.getQuickSelectRange)(props.DateUnit) })) : null));
82
+ React.createElement(QuickSelects_1.default, { Timezone: props.Timezone, ActiveQP: props.ActiveQP, SetActiveQP: props.SetActiveQP, SetFilter: props.SetFilter, Format: props.Format, DateUnit: props.DateUnit, QuickSelectRange: (_a = props.QuickSelectRange) !== null && _a !== void 0 ? _a : (0, QuickSelects_1.getQuickSelectRange)(props.DateUnit) })) : null));
84
83
  else
85
84
  return (React.createElement(React.Fragment, null,
86
85
  React.createElement("div", { className: 'row m-0' },
@@ -90,6 +89,6 @@ var DateFilter = function (props) {
90
89
  React.createElement(react_forms_1.DatePicker, { Record: props.TimeWindowFilter, Field: "end", Help: props.HelpMessage, Setter: handleSetTimeWindowFilter, Label: 'End', Type: props.DateUnit, Valid: function () { return true; }, Format: props.Format, Accuracy: props.Accuracy }))),
91
90
  props.ShowQuickSelects ?
92
91
  React.createElement("div", { className: quickSelectClass },
93
- React.createElement(QuickSelects_1.default, { DateTimeSetting: 'startEnd', Timezone: props.Timezone, ActiveQP: props.ActiveQP, SetActiveQP: props.SetActiveQP, SetFilter: props.SetFilter, Format: props.Format, DateUnit: props.DateUnit, SplitSelects: props.ContainerWidth < SecondFallbackBreakpoint, QuickSelectRange: (_b = props.QuickSelectRange) !== null && _b !== void 0 ? _b : (0, QuickSelects_1.getQuickSelectRange)(props.DateUnit) })) : null));
92
+ React.createElement(QuickSelects_1.default, { Timezone: props.Timezone, ActiveQP: props.ActiveQP, SetActiveQP: props.SetActiveQP, SetFilter: props.SetFilter, Format: props.Format, DateUnit: props.DateUnit, SplitSelects: true, QuickSelectRange: (_b = props.QuickSelectRange) !== null && _b !== void 0 ? _b : (0, QuickSelects_1.getQuickSelectRange)(props.DateUnit) })) : null));
94
93
  };
95
94
  exports.default = DateFilter;
@@ -53,6 +53,7 @@ var DateTimeLocalFilter = function (props) {
53
53
  var _a, _b, _c, _d, _e, _f, _g, _h, _j;
54
54
  var FirstFallbackBreakpointQS = 1768;
55
55
  var SecondFallbackBreakpointQS = 612, FirstFallbacKBreakpointNoQS = 612;
56
+ var ModalBreakpointQS = 450;
56
57
  var _k = React.useState(false), showQuickPickModal = _k[0], setShowQuickPickModal = _k[1];
57
58
  var handleSetTimeWindowFilter = React.useCallback(function (record) {
58
59
  var flt = (0, TimeFilter_1.getTimeWindowFromFilter)({ start: record.start, end: record.end }, props.Format);
@@ -86,9 +87,9 @@ var DateTimeLocalFilter = function (props) {
86
87
  React.createElement(react_forms_1.DatePicker, { Record: props.TimeWindowFilter, Field: "end", Help: props.HelpMessage, Setter: handleSetTimeWindowFilter, Label: 'End', Type: (_b = props.DateUnit) !== null && _b !== void 0 ? _b : 'datetime-local', Valid: function () { return true; }, Format: props.Format, Accuracy: props.Accuracy })),
87
88
  props.ShowQuickSelects ?
88
89
  React.createElement("div", { className: quickSelectCol },
89
- React.createElement(QuickSelects_1.default, { DateTimeSetting: 'startEnd', Timezone: props.Timezone, ActiveQP: props.ActiveQP, SetActiveQP: props.SetActiveQP, SetFilter: props.SetFilter, Format: props.Format, DateUnit: props.DateUnit, QuickSelectRange: (_c = props.QuickSelectRange) !== null && _c !== void 0 ? _c : (0, QuickSelects_1.getQuickSelectRange)(props.DateUnit) })) : null));
90
+ React.createElement(QuickSelects_1.default, { Timezone: props.Timezone, ActiveQP: props.ActiveQP, SetActiveQP: props.SetActiveQP, SetFilter: props.SetFilter, Format: props.Format, DateUnit: props.DateUnit, QuickSelectRange: (_c = props.QuickSelectRange) !== null && _c !== void 0 ? _c : (0, QuickSelects_1.getQuickSelectRange)(props.DateUnit) })) : null));
90
91
  }
91
- else if (props.ContainerWidth > SecondFallbackBreakpointQS) {
92
+ else if (props.ContainerWidth > ModalBreakpointQS) {
92
93
  return (React.createElement("div", { className: 'row m-0' },
93
94
  React.createElement("div", { className: startEndCol },
94
95
  React.createElement(react_forms_1.DatePicker, { Record: props.TimeWindowFilter, Field: "start", Help: props.HelpMessage, Setter: handleSetTimeWindowFilter, Label: 'Start', Type: (_d = props.DateUnit) !== null && _d !== void 0 ? _d : 'datetime-local', Valid: function () { return true; }, Format: props.Format, Accuracy: props.Accuracy })),
@@ -96,7 +97,7 @@ var DateTimeLocalFilter = function (props) {
96
97
  React.createElement(react_forms_1.DatePicker, { Record: props.TimeWindowFilter, Field: "end", Help: props.HelpMessage, Setter: handleSetTimeWindowFilter, Label: 'End', Type: (_e = props.DateUnit) !== null && _e !== void 0 ? _e : 'datetime-local', Valid: function () { return true; }, Format: props.Format, Accuracy: props.Accuracy })),
97
98
  React.createElement("div", { className: 'row m-0 w-100' }, props.ShowQuickSelects ?
98
99
  React.createElement("div", { className: quickSelectCol },
99
- React.createElement(QuickSelects_1.default, { DateTimeSetting: 'startEnd', Timezone: props.Timezone, ActiveQP: props.ActiveQP, SetActiveQP: props.SetActiveQP, SetFilter: props.SetFilter, Format: props.Format, DateUnit: props.DateUnit, QuickSelectRange: (_f = props.QuickSelectRange) !== null && _f !== void 0 ? _f : (0, QuickSelects_1.getQuickSelectRange)(props.DateUnit) }))
100
+ React.createElement(QuickSelects_1.default, { SplitSelects: true, Timezone: props.Timezone, ActiveQP: props.ActiveQP, SetActiveQP: props.SetActiveQP, SetFilter: props.SetFilter, Format: props.Format, DateUnit: props.DateUnit, QuickSelectRange: (_f = props.QuickSelectRange) !== null && _f !== void 0 ? _f : (0, QuickSelects_1.getQuickSelectRange)(props.DateUnit) }))
100
101
  : null)));
101
102
  }
102
103
  else {
@@ -111,7 +112,7 @@ var DateTimeLocalFilter = function (props) {
111
112
  React.createElement("button", { className: 'btn btn-primary w-100', onClick: function () { return setShowQuickPickModal(true); } }, "Quick Selects")),
112
113
  React.createElement(react_interactive_1.Modal, { Show: showQuickPickModal, Title: 'Quick Selects', CallBack: function () { return setShowQuickPickModal(false); }, ShowX: true, ShowCancel: false, ShowConfirm: false, Size: 'xlg' },
113
114
  React.createElement("div", { className: quickSelectCol },
114
- React.createElement(QuickSelects_1.default, { DateTimeSetting: 'startEnd', Timezone: props.Timezone, ActiveQP: props.ActiveQP, SetActiveQP: props.SetActiveQP, SetFilter: props.SetFilter, Format: props.Format, DateUnit: props.DateUnit, QuickSelectRange: (_j = props.QuickSelectRange) !== null && _j !== void 0 ? _j : (0, QuickSelects_1.getQuickSelectRange)(props.DateUnit) }))))
115
+ React.createElement(QuickSelects_1.default, { SplitSelects: true, Timezone: props.Timezone, ActiveQP: props.ActiveQP, SetActiveQP: props.SetActiveQP, SetFilter: props.SetFilter, Format: props.Format, DateUnit: props.DateUnit, QuickSelectRange: (_j = props.QuickSelectRange) !== null && _j !== void 0 ? _j : (0, QuickSelects_1.getQuickSelectRange)(props.DateUnit) }))))
115
116
  : null));
116
117
  }
117
118
  };
@@ -75,7 +75,7 @@ var TimeFilter = function (props) {
75
75
  React.createElement("div", { className: startEndCol },
76
76
  React.createElement(react_forms_1.DatePicker, { Record: props.TimeWindowFilter, Field: "end", Help: props.HelpMessage, Setter: handleSetTimeWindowFilter, Label: 'End', Type: props.DateUnit, Valid: function () { return true; }, Format: props.Format, Accuracy: props.Accuracy })),
77
77
  props.ShowQuickSelects ?
78
- React.createElement(QuickSelects_1.default, { DateTimeSetting: 'startEnd', Timezone: props.Timezone, ActiveQP: props.ActiveQP, SetActiveQP: props.SetActiveQP, SetFilter: props.SetFilter, Format: props.Format, DateUnit: props.DateUnit, AddRowContainer: false, QuickSelectRange: (_a = props.QuickSelectRange) !== null && _a !== void 0 ? _a : (0, QuickSelects_1.getQuickSelectRange)(props.DateUnit) })
78
+ React.createElement(QuickSelects_1.default, { Timezone: props.Timezone, ActiveQP: props.ActiveQP, SetActiveQP: props.SetActiveQP, SetFilter: props.SetFilter, Format: props.Format, DateUnit: props.DateUnit, AddRowContainer: false, QuickSelectRange: (_a = props.QuickSelectRange) !== null && _a !== void 0 ? _a : (0, QuickSelects_1.getQuickSelectRange)(props.DateUnit) })
79
79
  : null));
80
80
  else
81
81
  return (React.createElement(React.Fragment, null,
@@ -85,7 +85,7 @@ var TimeFilter = function (props) {
85
85
  React.createElement("div", { className: startEndCol },
86
86
  React.createElement(react_forms_1.DatePicker, { Record: props.TimeWindowFilter, Field: "end", Help: props.HelpMessage, Setter: handleSetTimeWindowFilter, Label: 'End', Type: props.DateUnit, Valid: function () { return true; }, Format: props.Format, Accuracy: props.Accuracy }))),
87
87
  props.ShowQuickSelects ?
88
- React.createElement(QuickSelects_1.default, { DateTimeSetting: 'startEnd', Timezone: props.Timezone, ActiveQP: props.ActiveQP, SetActiveQP: props.SetActiveQP, SetFilter: props.SetFilter, Format: props.Format, DateUnit: props.DateUnit, QuickSelectRange: (_b = props.QuickSelectRange) !== null && _b !== void 0 ? _b : (0, QuickSelects_1.getQuickSelectRange)(props.DateUnit) })
88
+ React.createElement(QuickSelects_1.default, { Timezone: props.Timezone, ActiveQP: props.ActiveQP, SetActiveQP: props.SetActiveQP, SetFilter: props.SetFilter, Format: props.Format, DateUnit: props.DateUnit, SplitSelects: true, QuickSelectRange: (_b = props.QuickSelectRange) !== null && _b !== void 0 ? _b : (0, QuickSelects_1.getQuickSelectRange)(props.DateUnit) })
89
89
  : null));
90
90
  };
91
91
  exports.default = TimeFilter;
@@ -58,7 +58,6 @@ var WindowFilter = function (props) {
58
58
  var _a, _b, _c, _d, _e, _f, _g;
59
59
  var DatePickerField = props.Window;
60
60
  var DatePickerLabel = props.Window.charAt(0).toUpperCase() + props.Window.slice(1);
61
- var filterType = props.Window === 'start' ? 'startWindow' : 'endWindow';
62
61
  var setter = React.useCallback(function (record) {
63
62
  if (props.Window === 'start') {
64
63
  var flt = (0, TimeFilter_1.getTimeWindowFromFilter)({ start: record.start, duration: record.duration, unit: record.unit }, props.Format);
@@ -83,7 +82,7 @@ var WindowFilter = function (props) {
83
82
  React.createElement(react_forms_1.DatePicker, { Record: props.TimeWindowFilter, Field: DatePickerField, Help: props.HelpMessage, Setter: setter, Label: DatePickerLabel, Type: (_b = props.DateUnit) !== null && _b !== void 0 ? _b : 'datetime-local', Valid: function () { return true; }, Format: props.Format, Accuracy: props.Accuracy }),
84
83
  React.createElement(WindowForm_1.default, { Filter: props.TimeWindowFilter, SetFilter: props.SetTimeWindowFilter, SetActiveQP: props.SetActiveQP, Format: props.Format, ShowQuickSelect: props.ShowQuickSelects, Window: props.Window })),
85
84
  React.createElement("div", { className: 'col-8 pt-3' },
86
- React.createElement(QuickSelects_1.default, { DateTimeSetting: filterType, Timezone: props.Timezone, ActiveQP: props.ActiveQP, SetActiveQP: props.SetActiveQP, SetFilter: props.SetFilter, Format: props.Format, DateUnit: props.DateUnit, QuickSelectRange: (_c = props.QuickSelectRange) !== null && _c !== void 0 ? _c : (0, QuickSelects_1.getQuickSelectRange)(props.DateUnit) }))));
85
+ React.createElement(QuickSelects_1.default, { SplitSelects: true, Timezone: props.Timezone, ActiveQP: props.ActiveQP, SetActiveQP: props.SetActiveQP, SetFilter: props.SetFilter, Format: props.Format, DateUnit: props.DateUnit, QuickSelectRange: (_c = props.QuickSelectRange) !== null && _c !== void 0 ? _c : (0, QuickSelects_1.getQuickSelectRange)(props.DateUnit) }))));
87
86
  else if (props.ContainerWidth > WINDOW_SecondFallbackBreakpoint) {
88
87
  return (React.createElement(React.Fragment, null,
89
88
  React.createElement("div", { className: 'row m-0' },
@@ -93,7 +92,7 @@ var WindowFilter = function (props) {
93
92
  React.createElement(WindowForm_1.default, { Filter: props.TimeWindowFilter, SetFilter: props.SetTimeWindowFilter, SetActiveQP: props.SetActiveQP, Format: props.Format, ShowQuickSelect: props.ShowQuickSelects, Window: props.Window }))),
94
93
  React.createElement("div", { className: 'row m-0' },
95
94
  React.createElement("div", { className: 'col-12' },
96
- React.createElement(QuickSelects_1.default, { DateTimeSetting: filterType, Timezone: props.Timezone, ActiveQP: props.ActiveQP, SetActiveQP: props.SetActiveQP, SetFilter: props.SetFilter, Format: props.Format, DateUnit: props.DateUnit, QuickSelectRange: (_e = props.QuickSelectRange) !== null && _e !== void 0 ? _e : (0, QuickSelects_1.getQuickSelectRange)(props.DateUnit) })))));
95
+ React.createElement(QuickSelects_1.default, { SplitSelects: true, Timezone: props.Timezone, ActiveQP: props.ActiveQP, SetActiveQP: props.SetActiveQP, SetFilter: props.SetFilter, Format: props.Format, DateUnit: props.DateUnit, QuickSelectRange: (_e = props.QuickSelectRange) !== null && _e !== void 0 ? _e : (0, QuickSelects_1.getQuickSelectRange)(props.DateUnit) })))));
97
96
  }
98
97
  else {
99
98
  return (React.createElement(React.Fragment, null,
@@ -105,7 +104,7 @@ var WindowFilter = function (props) {
105
104
  React.createElement(WindowForm_1.default, { Filter: props.TimeWindowFilter, SetFilter: props.SetTimeWindowFilter, SetActiveQP: props.SetActiveQP, Format: props.Format, ShowQuickSelect: props.ShowQuickSelects, Window: props.Window }))),
106
105
  React.createElement("div", { className: 'row m-0' },
107
106
  React.createElement("div", { className: 'col-12' },
108
- React.createElement(QuickSelects_1.default, { DateTimeSetting: filterType, Timezone: props.Timezone, ActiveQP: props.ActiveQP, SetActiveQP: props.SetActiveQP, SetFilter: props.SetFilter, Format: props.Format, DateUnit: props.DateUnit, QuickSelectRange: (_g = props.QuickSelectRange) !== null && _g !== void 0 ? _g : (0, QuickSelects_1.getQuickSelectRange)(props.DateUnit) })))));
107
+ React.createElement(QuickSelects_1.default, { SplitSelects: true, Timezone: props.Timezone, ActiveQP: props.ActiveQP, SetActiveQP: props.SetActiveQP, SetFilter: props.SetFilter, Format: props.Format, DateUnit: props.DateUnit, QuickSelectRange: (_g = props.QuickSelectRange) !== null && _g !== void 0 ? _g : (0, QuickSelects_1.getQuickSelectRange)(props.DateUnit) })))));
109
108
  }
110
109
  };
111
110
  exports.default = WindowFilter;
@@ -59,7 +59,7 @@ var WindowForm = function (props) {
59
59
  props.SetActiveQP(-1);
60
60
  }
61
61
  }, [props.Window, props.Format, props.SetActiveQP, props.SetActiveQP]);
62
- return (React.createElement("div", { className: 'form-group' },
62
+ return (React.createElement("div", { className: 'form-group', style: { marginBottom: 0 } },
63
63
  React.createElement("label", { style: { width: '100%', position: 'relative', float: "left" } },
64
64
  "Span(",
65
65
  props.Window === 'start' ? '+' : '-',
package/lib/index.d.ts CHANGED
@@ -19,7 +19,9 @@ import ReadOnlyGenericSlice from './Gemstone/GenericSlices/ReadOnlyGenericSlice'
19
19
  import ReadWriteGenericSlice from './Gemstone/GenericSlices/ReadWriteGenericSlice';
20
20
  import { useInitializeWithFetch } from './Gemstone/GenericSlices/useInitializeData';
21
21
  import { ReadOnlyControllerFunctions, ReadWriteControllerFunctions } from './Gemstone/ControllerFunctions';
22
+ import HeartBeatCheck from './HeartBeatCheck';
23
+ import useSearchData from './Gemstone/Hooks/useSearchData';
22
24
  declare const Pipelines: {
23
25
  CSV: typeof useCSVPipeline;
24
26
  };
25
- export { TimeFilter, TimeWindowUtils, EventTypeFilter, EventCharacteristicFilter, NavBarFilterButton, Note, DefaultSearch, SelectPopup, DefaultSelects, ErrorBoundary, Pipelines, useCSVFieldEditContext, CSVFieldEditContext, BulkUpload, RoleAccessErrorPage, ITimeFilter, IStartEnd, IStartDuration, IEndDuration, Gemstone, ReadOnlyGenericSlice as ReadOnlyGenericSlice_Gemstone, ReadWriteGenericSlice as ReadWriteGenericSlice_Gemstone, useInitializeWithFetch as useInitializeWithFetch_Gemstone, ReadOnlyControllerFunctions as ReadOnlyControllerFunctions_Gemstone, ReadWriteControllerFunctions as ReadWriteControllerFunctions_Gemstone };
27
+ export { TimeFilter, TimeWindowUtils, EventTypeFilter, EventCharacteristicFilter, NavBarFilterButton, Note, DefaultSearch, SelectPopup, DefaultSelects, ErrorBoundary, Pipelines, useCSVFieldEditContext, CSVFieldEditContext, BulkUpload, RoleAccessErrorPage, ITimeFilter, IStartEnd, IStartDuration, IEndDuration, Gemstone, HeartBeatCheck, ReadOnlyGenericSlice as ReadOnlyGenericSlice_Gemstone, ReadWriteGenericSlice as ReadWriteGenericSlice_Gemstone, useInitializeWithFetch as useInitializeWithFetch_Gemstone, ReadOnlyControllerFunctions as ReadOnlyControllerFunctions_Gemstone, ReadWriteControllerFunctions as ReadWriteControllerFunctions_Gemstone, useSearchData as useSearchData_Gemstone };
package/lib/index.js CHANGED
@@ -48,7 +48,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
48
48
  return (mod && mod.__esModule) ? mod : { "default": mod };
49
49
  };
50
50
  Object.defineProperty(exports, "__esModule", { value: true });
51
- exports.ReadWriteControllerFunctions_Gemstone = exports.ReadOnlyControllerFunctions_Gemstone = exports.useInitializeWithFetch_Gemstone = exports.ReadWriteGenericSlice_Gemstone = exports.ReadOnlyGenericSlice_Gemstone = exports.Gemstone = exports.RoleAccessErrorPage = exports.BulkUpload = exports.CSVFieldEditContext = exports.useCSVFieldEditContext = exports.Pipelines = exports.ErrorBoundary = exports.DefaultSelects = exports.SelectPopup = exports.DefaultSearch = exports.Note = exports.NavBarFilterButton = exports.EventCharacteristicFilter = exports.EventTypeFilter = exports.TimeWindowUtils = exports.TimeFilter = void 0;
51
+ exports.useSearchData_Gemstone = exports.ReadWriteControllerFunctions_Gemstone = exports.ReadOnlyControllerFunctions_Gemstone = exports.useInitializeWithFetch_Gemstone = exports.ReadWriteGenericSlice_Gemstone = exports.ReadOnlyGenericSlice_Gemstone = exports.HeartBeatCheck = exports.Gemstone = exports.RoleAccessErrorPage = exports.BulkUpload = exports.CSVFieldEditContext = exports.useCSVFieldEditContext = exports.Pipelines = exports.ErrorBoundary = exports.DefaultSelects = exports.SelectPopup = exports.DefaultSearch = exports.Note = exports.NavBarFilterButton = exports.EventCharacteristicFilter = exports.EventTypeFilter = exports.TimeWindowUtils = exports.TimeFilter = void 0;
52
52
  var Note_1 = __importDefault(require("./Note"));
53
53
  exports.Note = Note_1.default;
54
54
  var SearchBar_1 = require("./SearchBar");
@@ -88,6 +88,10 @@ Object.defineProperty(exports, "useInitializeWithFetch_Gemstone", { enumerable:
88
88
  var ControllerFunctions_1 = require("./Gemstone/ControllerFunctions");
89
89
  Object.defineProperty(exports, "ReadOnlyControllerFunctions_Gemstone", { enumerable: true, get: function () { return ControllerFunctions_1.ReadOnlyControllerFunctions; } });
90
90
  Object.defineProperty(exports, "ReadWriteControllerFunctions_Gemstone", { enumerable: true, get: function () { return ControllerFunctions_1.ReadWriteControllerFunctions; } });
91
+ var HeartBeatCheck_1 = __importDefault(require("./HeartBeatCheck"));
92
+ exports.HeartBeatCheck = HeartBeatCheck_1.default;
93
+ var useSearchData_1 = __importDefault(require("./Gemstone/Hooks/useSearchData"));
94
+ exports.useSearchData_Gemstone = useSearchData_1.default;
91
95
  var Pipelines = {
92
96
  CSV: CSVPipeline_1.useCSVPipeline
93
97
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gpa-gemstone/common-pages",
3
- "version": "0.0.182",
3
+ "version": "0.0.184",
4
4
  "description": "Common UI pages for GPA products",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",
@@ -47,12 +47,12 @@
47
47
  "typescript": "5.5.3"
48
48
  },
49
49
  "dependencies": {
50
- "@gpa-gemstone/application-typings": "0.0.98",
51
- "@gpa-gemstone/gpa-symbols": "0.0.63",
52
- "@gpa-gemstone/helper-functions": "0.0.60",
53
- "@gpa-gemstone/react-forms": "1.1.124",
54
- "@gpa-gemstone/react-interactive": "1.0.191",
55
- "@gpa-gemstone/react-table": "1.2.115",
50
+ "@gpa-gemstone/application-typings": "0.0.99",
51
+ "@gpa-gemstone/gpa-symbols": "0.0.64",
52
+ "@gpa-gemstone/helper-functions": "0.0.61",
53
+ "@gpa-gemstone/react-forms": "1.1.125",
54
+ "@gpa-gemstone/react-interactive": "1.0.193",
55
+ "@gpa-gemstone/react-table": "1.2.117",
56
56
  "@reduxjs/toolkit": "1.8.3",
57
57
  "crypto-js": "^4.2.0",
58
58
  "moment": "^2.29.4",