@gpa-gemstone/common-pages 0.0.151 → 0.0.153

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/lib/BulkUpload.d.ts +1 -11
  2. package/lib/ErrorBoundary.d.ts +2 -2
  3. package/lib/EventCharacteristicFilter.d.ts +1 -2
  4. package/lib/EventTypeFilter.d.ts +1 -2
  5. package/lib/Gemstone/ControllerFunctions.d.ts +22 -0
  6. package/lib/Gemstone/ControllerFunctions.js +266 -0
  7. package/lib/Gemstone/Gemstone.d.ts +18 -0
  8. package/lib/Gemstone/Gemstone.js +41 -0
  9. package/lib/Gemstone/GenericSlices/ReadOnlyGenericSlice.d.ts +51 -0
  10. package/lib/Gemstone/GenericSlices/ReadOnlyGenericSlice.js +230 -0
  11. package/lib/Gemstone/GenericSlices/ReadWriteGenericSlice.d.ts +19 -0
  12. package/lib/Gemstone/GenericSlices/ReadWriteGenericSlice.js +241 -0
  13. package/lib/Gemstone/GenericSlices/useInitializeData.d.ts +10 -0
  14. package/lib/Gemstone/GenericSlices/useInitializeData.js +65 -0
  15. package/lib/NavBarFilterButton.d.ts +1 -2
  16. package/lib/Note.d.ts +1 -1
  17. package/lib/Note.js +1 -1
  18. package/lib/RoleAcessErrorPage.d.ts +1 -1
  19. package/lib/SearchBar.d.ts +6 -6
  20. package/lib/SelectionPopup.d.ts +6 -6
  21. package/lib/StandardSelectPopup.d.ts +1 -1
  22. package/lib/TimeFilter/QuickSelects.d.ts +1 -2
  23. package/lib/TimeFilter/StartEndFilter/DateFilter.d.ts +1 -2
  24. package/lib/TimeFilter/StartEndFilter/DateTimeLocalFilter.d.ts +1 -2
  25. package/lib/TimeFilter/StartEndFilter/StartEndFilter.d.ts +1 -1
  26. package/lib/TimeFilter/StartEndFilter/TimeFilter.d.ts +1 -2
  27. package/lib/TimeFilter/TimeFilter.d.ts +9 -2
  28. package/lib/TimeFilter/TimeFilter.js +30 -15
  29. package/lib/TimeFilter/WindowFilter/WindowFilter.d.ts +1 -2
  30. package/lib/TimeFilter/WindowFilter/WindowForm.d.ts +1 -2
  31. package/lib/index.d.ts +8 -1
  32. package/lib/index.js +12 -1
  33. package/package.json +13 -8
@@ -1,41 +1,33 @@
1
- import * as React from 'react';
2
1
  import { Gemstone } from '@gpa-gemstone/application-typings';
3
2
  interface IProps<T> {
4
3
  /**
5
4
  * Attribute used to control what type of files are filtered by default in file explorer
6
- * @type {string}
7
5
  * */
8
6
  FileTypeAttribute: string;
9
7
  /**
10
8
  * Array of available pipelines to use
11
- * @type {IPipeline[]}
12
9
  * */
13
10
  Pipelines: Gemstone.TSX.Interfaces.IPipeline<T, any>[];
14
11
  /**
15
12
  * React Component to be used in the Review Step
16
- * @type {React.FC<IReviewProps<T>>}
17
13
  * */
18
14
  ReviewUI: (props: {
19
15
  Data: T[];
20
16
  }) => JSX.Element;
21
17
  /**
22
18
  * React Component to be used in the Complete Step
23
- * @type {React.FC<IReviewProps<T>>}
24
19
  * */
25
20
  CompleteUI?: JSX.Element;
26
21
  /**
27
22
  * Index of the steps array in the current pipline
28
- * @type {React.FC<IReviewProps<T>>}
29
23
  * */
30
24
  CurrentPipelineStep: number;
31
25
  /**
32
26
  * Setter to pass into the pipeline UI Components
33
- * @type {React.FC<IReviewProps<T>>}
34
27
  * */
35
28
  SetCurrentPipelineStep: (step: number) => void;
36
29
  /**
37
30
  * Step to represent current stage of component
38
- * @type {'Upload' | 'Process' | 'Review' | 'Complete'}
39
31
  * */
40
32
  Step: Gemstone.TSX.Types.BulkUploadStep;
41
33
  /**
@@ -50,14 +42,12 @@ interface IProps<T> {
50
42
  SetErrors: (errors: string[]) => void;
51
43
  /**
52
44
  * Optional Progress Bar component to replace internal Progress Bar.
53
- * @type {JSX.Element}
54
45
  */
55
46
  ProgressBar?: JSX.Element;
56
47
  /**
57
48
  * Optional flag to call OnComplete handler when the review step is hit.
58
- * @type {boolean}
59
49
  */
60
50
  CompleteOnReview?: boolean;
61
51
  }
62
- export default function BulkUpload<T>(props: IProps<T>): React.JSX.Element;
52
+ export default function BulkUpload<T>(props: IProps<T>): JSX.Element;
63
53
  export {};
@@ -10,9 +10,9 @@ interface IProps {
10
10
  ClassName?: string;
11
11
  ErrorIconSize?: number;
12
12
  }
13
- export default class ErrorBoundary extends React.Component<IProps, IError> {
13
+ export default class ErrorBoundary extends React.Component<React.PropsWithChildren<IProps>, IError> {
14
14
  constructor(props: IProps);
15
15
  componentDidCatch(error: IError): void;
16
- render(): React.JSX.Element;
16
+ render(): JSX.Element;
17
17
  }
18
18
  export {};
@@ -1,4 +1,3 @@
1
- import React from 'react';
2
1
  import { OpenXDA } from '@gpa-gemstone/application-typings';
3
2
  interface IProps {
4
3
  setEventFilters: (characteristics?: IEventCharacteristicFilters, types?: number[]) => void;
@@ -36,5 +35,5 @@ interface IEventCharacteristicFilters {
36
35
  curveInside: boolean;
37
36
  curveOutside: boolean;
38
37
  }
39
- declare const EventCharacteristicFilter: (props: IProps) => React.JSX.Element | null;
38
+ declare const EventCharacteristicFilter: (props: IProps) => JSX.Element | null;
40
39
  export default EventCharacteristicFilter;
@@ -1,4 +1,3 @@
1
- import React from 'react';
2
1
  import 'moment';
3
2
  import { OpenXDA } from '@gpa-gemstone/application-typings';
4
3
  interface IProps {
@@ -7,5 +6,5 @@ interface IProps {
7
6
  EventTypes: OpenXDA.Types.EventType[];
8
7
  SelectedTypeID: number[];
9
8
  }
10
- declare const EventTypeFilter: React.FC<IProps>;
9
+ declare const EventTypeFilter: (props: IProps) => JSX.Element;
11
10
  export default EventTypeFilter;
@@ -0,0 +1,22 @@
1
+ import { Gemstone } from "./Gemstone";
2
+ export declare class ReadOnlyControllerFunctions<T> {
3
+ protected APIPath: string;
4
+ constructor(APIPath: string);
5
+ GetPageInfo: (filter?: Gemstone.Types.ISearchFilter<T>[], parentID?: string | number) => JQuery.jqXHR<Gemstone.Types.IPageInfo>;
6
+ GetOne: (id: string | number) => JQuery.jqXHR<T>;
7
+ GetPage: (page: number, sortField?: keyof T, asc?: boolean, parentID?: string | number) => JQuery.jqXHR<T[]>;
8
+ /**
9
+ * Use with caution as this could be VERY network resource intensive.
10
+ */
11
+ GetAll: (sortField: keyof T, asc: boolean, filter?: Gemstone.Types.ISearchFilter<T>[], parentID?: string | number) => JQuery.jqXHR<T[]>;
12
+ SearchPage: (page: number, sortField: keyof T, asc: boolean, filter: Gemstone.Types.ISearchFilter<T>[], parentID?: number | string) => JQuery.jqXHR<T[]>;
13
+ New: () => JQuery.jqXHR<T>;
14
+ GetMaxValue: (fieldName: keyof T) => JQuery.jqXHR<number>;
15
+ }
16
+ export declare class ReadWriteControllerFunctions<T> extends ReadOnlyControllerFunctions<T> {
17
+ constructor(APIPath: string);
18
+ Add: (record: T) => JQuery.jqXHR<T>;
19
+ Update: (record: T) => JQuery.jqXHR<T>;
20
+ Delete: (record: T) => JQuery.jqXHR<T>;
21
+ DeleteByID: (id: string | number) => JQuery.jqXHR<T>;
22
+ }
@@ -0,0 +1,266 @@
1
+ "use strict";
2
+ //******************************************************************************************************
3
+ // ControllerFunctions.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
+ // 04/02/2024 - C. Lackner
21
+ // Generated original version of source code.
22
+ //
23
+ //******************************************************************************************************
24
+ var __extends = (this && this.__extends) || (function () {
25
+ var extendStatics = function (d, b) {
26
+ extendStatics = Object.setPrototypeOf ||
27
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
28
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
29
+ return extendStatics(d, b);
30
+ };
31
+ return function (d, b) {
32
+ if (typeof b !== "function" && b !== null)
33
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
34
+ extendStatics(d, b);
35
+ function __() { this.constructor = d; }
36
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
37
+ };
38
+ })();
39
+ var __importDefault = (this && this.__importDefault) || function (mod) {
40
+ return (mod && mod.__esModule) ? mod : { "default": mod };
41
+ };
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.ReadWriteControllerFunctions = exports.ReadOnlyControllerFunctions = void 0;
44
+ var jquery_1 = __importDefault(require("jquery"));
45
+ var ReadOnlyControllerFunctions = /** @class */ (function () {
46
+ function ReadOnlyControllerFunctions(APIPath) {
47
+ var _this = this;
48
+ this.GetPageInfo = function (filter, parentID) {
49
+ var route = parentID == null ? "".concat(_this.APIPath, "/PageInfo") : "".concat(_this.APIPath, "/PageInfo/").concat(parentID);
50
+ if (filter === undefined || filter.length === 0)
51
+ return jquery_1.default.ajax({
52
+ type: 'GET',
53
+ url: "".concat(route),
54
+ contentType: "application/json; charset=utf-8",
55
+ dataType: 'json',
56
+ cache: false,
57
+ async: true
58
+ });
59
+ return jquery_1.default.ajax({
60
+ type: 'POST',
61
+ url: "".concat(route),
62
+ contentType: "application/json; charset=utf-8",
63
+ dataType: 'json',
64
+ data: JSON.stringify({ Searches: filter, OrderBy: '', Ascending: false }),
65
+ cache: false,
66
+ async: true
67
+ });
68
+ };
69
+ this.GetOne = function (id) {
70
+ return jquery_1.default.ajax({
71
+ type: 'GET',
72
+ url: "".concat(_this.APIPath, "/One/").concat(id),
73
+ contentType: "application/json; charset=utf-8",
74
+ dataType: 'json',
75
+ cache: false,
76
+ async: true
77
+ });
78
+ };
79
+ this.GetPage = function (page, sortField, asc, parentID) {
80
+ if (sortField == null || asc == null) {
81
+ if (parentID != null) {
82
+ return jquery_1.default.ajax({
83
+ type: 'GET',
84
+ url: "".concat(_this.APIPath, "/").concat(page, "/").concat(parentID),
85
+ contentType: "application/json; charset=utf-8",
86
+ dataType: 'json',
87
+ cache: false,
88
+ async: true
89
+ });
90
+ }
91
+ return jquery_1.default.ajax({
92
+ type: 'GET',
93
+ url: "".concat(_this.APIPath, "/").concat(page),
94
+ contentType: "application/json; charset=utf-8",
95
+ dataType: 'json',
96
+ cache: false,
97
+ async: true
98
+ });
99
+ }
100
+ if (parentID != null)
101
+ return jquery_1.default.ajax({
102
+ type: 'GET',
103
+ url: "".concat(_this.APIPath, "/").concat(page, "/").concat(parentID, "/").concat(sortField.toString(), "/").concat(asc),
104
+ contentType: "application/json; charset=utf-8",
105
+ dataType: 'json',
106
+ cache: false,
107
+ async: true
108
+ });
109
+ return jquery_1.default.ajax({
110
+ type: 'GET',
111
+ url: "".concat(_this.APIPath, "/").concat(page, "/").concat(sortField.toString(), "/").concat(asc),
112
+ contentType: "application/json; charset=utf-8",
113
+ dataType: 'json',
114
+ cache: false,
115
+ async: true
116
+ });
117
+ };
118
+ /**
119
+ * Use with caution as this could be VERY network resource intensive.
120
+ */
121
+ this.GetAll = function (sortField, asc, filter, parentID) {
122
+ var deferred = jquery_1.default.Deferred();
123
+ var pending = [];
124
+ // First, determine the number of pages.
125
+ var pagReq = _this.GetPageInfo(filter !== null && filter !== void 0 ? filter : [], parentID).done(function (pageInfo) {
126
+ var pageCount = pageInfo.PageCount;
127
+ if (pageCount <= 0) {
128
+ deferred.resolve([]);
129
+ return;
130
+ }
131
+ // Build an array of page requests.
132
+ var pageRequests = [];
133
+ for (var i = 0; i < pageCount; i++) {
134
+ var req = _this.SearchPage(i, sortField, asc, filter !== null && filter !== void 0 ? filter : [], parentID);
135
+ pageRequests.push(req);
136
+ pending.push(req);
137
+ }
138
+ // Combine all page requests.
139
+ jquery_1.default.when.apply(jquery_1.default, pageRequests).done(function () {
140
+ var _a;
141
+ var results = [];
142
+ for (var _i = 0; _i < arguments.length; _i++) {
143
+ results[_i] = arguments[_i];
144
+ }
145
+ // If there's only one page, 'arguments' is not an array of arrays.
146
+ var responses = pageRequests.length === 1 ? [results] : jquery_1.default.makeArray(results);
147
+ var pages = responses.map(function (result) { return result[0]; });
148
+ var allData = (_a = []).concat.apply(_a, pages);
149
+ deferred.resolve(allData);
150
+ }).fail(function (err) { return deferred.reject(err); });
151
+ }).fail(function (err) { return deferred.reject(err); });
152
+ pending.push(pagReq);
153
+ // Attach an abort handler to cancel all pending requests.
154
+ var promise = deferred.promise();
155
+ promise.abort = function () {
156
+ pending.forEach(function (req) { return req.abort(); });
157
+ deferred.reject('Aborted');
158
+ };
159
+ return promise;
160
+ };
161
+ this.SearchPage = function (page, sortField, asc, filter, parentID) {
162
+ if (parentID != null)
163
+ return jquery_1.default.ajax({
164
+ type: 'POST',
165
+ url: "".concat(_this.APIPath, "/Search/").concat(page, "/").concat(parentID),
166
+ contentType: "application/json; charset=utf-8",
167
+ dataType: 'json',
168
+ data: JSON.stringify({
169
+ Searches: filter,
170
+ OrderBy: sortField,
171
+ Ascending: asc
172
+ }),
173
+ cache: false,
174
+ async: true
175
+ });
176
+ return jquery_1.default.ajax({
177
+ type: 'POST',
178
+ url: "".concat(_this.APIPath, "/Search/").concat(page),
179
+ contentType: "application/json; charset=utf-8",
180
+ dataType: 'json',
181
+ data: JSON.stringify({
182
+ Searches: filter,
183
+ OrderBy: sortField,
184
+ Ascending: asc
185
+ }),
186
+ cache: false,
187
+ async: true
188
+ });
189
+ };
190
+ this.New = function () {
191
+ return jquery_1.default.ajax({
192
+ type: 'GET',
193
+ url: "".concat(_this.APIPath, "/New"),
194
+ contentType: "application/json; charset=utf-8",
195
+ dataType: 'json',
196
+ cache: false,
197
+ async: true
198
+ });
199
+ };
200
+ this.GetMaxValue = function (fieldName) {
201
+ return jquery_1.default.ajax({
202
+ type: 'GET',
203
+ url: "".concat(_this.APIPath, "/Max/").concat(fieldName),
204
+ contentType: "application/json; charset=utf-8",
205
+ dataType: 'json',
206
+ cache: false,
207
+ async: true
208
+ });
209
+ };
210
+ this.APIPath = APIPath;
211
+ }
212
+ return ReadOnlyControllerFunctions;
213
+ }());
214
+ exports.ReadOnlyControllerFunctions = ReadOnlyControllerFunctions;
215
+ var ReadWriteControllerFunctions = /** @class */ (function (_super) {
216
+ __extends(ReadWriteControllerFunctions, _super);
217
+ function ReadWriteControllerFunctions(APIPath) {
218
+ var _this = _super.call(this, APIPath) || this;
219
+ _this.Add = function (record) {
220
+ return jquery_1.default.ajax({
221
+ type: 'POST',
222
+ url: "".concat(_this.APIPath),
223
+ contentType: "application/json; charset=utf-8",
224
+ dataType: 'json',
225
+ data: JSON.stringify(record),
226
+ cache: false,
227
+ async: true
228
+ });
229
+ };
230
+ _this.Update = function (record) {
231
+ return jquery_1.default.ajax({
232
+ type: 'PATCH',
233
+ url: "".concat(_this.APIPath),
234
+ contentType: "application/json; charset=utf-8",
235
+ dataType: 'json',
236
+ data: JSON.stringify(record),
237
+ cache: false,
238
+ async: true
239
+ });
240
+ };
241
+ _this.Delete = function (record) {
242
+ return jquery_1.default.ajax({
243
+ type: 'DELETE',
244
+ url: "".concat(_this.APIPath),
245
+ contentType: "application/json; charset=utf-8",
246
+ dataType: 'json',
247
+ data: JSON.stringify(record),
248
+ cache: false,
249
+ async: true
250
+ });
251
+ };
252
+ _this.DeleteByID = function (id) {
253
+ return jquery_1.default.ajax({
254
+ type: 'DELETE',
255
+ url: "".concat(_this.APIPath, "/").concat(id),
256
+ contentType: "application/json; charset=utf-8",
257
+ dataType: 'json',
258
+ cache: false,
259
+ async: true
260
+ });
261
+ };
262
+ return _this;
263
+ }
264
+ return ReadWriteControllerFunctions;
265
+ }(ReadOnlyControllerFunctions));
266
+ exports.ReadWriteControllerFunctions = ReadWriteControllerFunctions;
@@ -0,0 +1,18 @@
1
+ import { Search } from "@gpa-gemstone/react-interactive";
2
+ export declare namespace Gemstone {
3
+ namespace Types {
4
+ interface ISearchFilter<T> {
5
+ FieldName: keyof T;
6
+ SearchParameter: string | boolean | number | string[] | number[] | boolean[];
7
+ Operator: Search.OperatorType;
8
+ }
9
+ interface IPageInfo {
10
+ PageSize: number;
11
+ PageCount: number;
12
+ TotalCount: number;
13
+ }
14
+ }
15
+ namespace HelperFunctions {
16
+ const getSearchFilter: <T>(searchFilter: Search.IFilter<T>[]) => Types.ISearchFilter<T>[];
17
+ }
18
+ }
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ //******************************************************************************************************
3
+ // Gemstone.tsx - Gbtc
4
+ //
5
+ // Copyright (c) 2025, 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
+ // 09/12/2025 - Preston Crawford
21
+ // Generated original version of source code.
22
+ //
23
+ //******************************************************************************************************
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.Gemstone = void 0;
26
+ var Gemstone;
27
+ (function (Gemstone) {
28
+ var HelperFunctions;
29
+ (function (HelperFunctions) {
30
+ HelperFunctions.getSearchFilter = function (searchFilter) {
31
+ return searchFilter.map(function (s) {
32
+ var searchText = s.SearchText;
33
+ if (s.Operator === 'IN' || s.Operator === 'NOT IN') {
34
+ if (searchText.startsWith('(') && searchText.endsWith(')'))
35
+ searchText = searchText.slice(1, -1).split(',').map(function (v) { return v.trim(); });
36
+ }
37
+ return { FieldName: s.FieldName, SearchParameter: searchText, Operator: s.Operator };
38
+ });
39
+ };
40
+ })(HelperFunctions = Gemstone.HelperFunctions || (Gemstone.HelperFunctions = {}));
41
+ })(Gemstone || (exports.Gemstone = Gemstone = {}));
@@ -0,0 +1,51 @@
1
+ import { AsyncThunk, Slice, ActionReducerMapBuilder, Reducer } from '@reduxjs/toolkit';
2
+ import { ReadOnlyControllerFunctions } from '../ControllerFunctions';
3
+ import { Application } from '@gpa-gemstone/application-typings';
4
+ import { Gemstone } from '../Gemstone';
5
+ export interface IError {
6
+ Message: string;
7
+ Action: 'FETCH' | 'UPDATE' | 'ADD' | 'DELETE';
8
+ Time: string;
9
+ }
10
+ export interface IState<T> {
11
+ FetchStatus: Application.Types.Status;
12
+ Data: T[];
13
+ SortField: keyof T;
14
+ Ascending: boolean;
15
+ Filter: Gemstone.Types.ISearchFilter<T>[];
16
+ PageInfo: Gemstone.Types.IPageInfo;
17
+ ParentID: string | number | null;
18
+ ActiveID: string[];
19
+ Error: (IError | null);
20
+ }
21
+ export interface IFetchThunkArg<T> {
22
+ sortField?: keyof T;
23
+ ascending?: boolean;
24
+ parentID?: string | number;
25
+ filter?: Gemstone.Types.ISearchFilter<T>[];
26
+ }
27
+ export interface IReadOnlyThunkReturn<T> {
28
+ Data: T[];
29
+ }
30
+ /**
31
+ * A generic class providing functionalities related to a slice of data.
32
+ */
33
+ export default class ReadOnlyGenericSlice<T> {
34
+ protected Name: string;
35
+ protected Slice: Slice<any>;
36
+ Fetch: AsyncThunk<IReadOnlyThunkReturn<T>, IFetchThunkArg<T>, {}>;
37
+ SetStatusToChanged: AsyncThunk<void, void, {}>;
38
+ Reducer: Reducer<IState<T>>;
39
+ private fetchHandle;
40
+ protected controller: ReadOnlyControllerFunctions<T>;
41
+ constructor(name: string, defaultSortField: keyof T, ascending: boolean, apiPath: string);
42
+ constructor(name: string, defaultSortField: keyof T, ascending: boolean, readonlyController: ReadOnlyControllerFunctions<T>);
43
+ protected initializeSlice(defaultSortField: keyof T, ascending?: boolean): void;
44
+ protected addExtraReducers(builder: ActionReducerMapBuilder<IState<T>>): void;
45
+ Data: (state: any) => T[];
46
+ Error: (state: any) => IError | null;
47
+ FetchStatus: (state: any) => Application.Types.Status;
48
+ SortField: (state: any) => keyof T;
49
+ Ascending: (state: any) => boolean;
50
+ ParentID: (state: any) => string | number | null;
51
+ }