@skyux/data-manager 8.6.0 → 9.0.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/documentation.json +2 -2
- package/{esm2020 → esm2022}/lib/modules/data-manager/data-manager-column-picker/data-manager-column-picker-impl.service.mjs +4 -4
- package/esm2022/lib/modules/data-manager/data-manager-column-picker/data-manager-column-picker.component.mjs +161 -0
- package/{esm2020 → esm2022}/lib/modules/data-manager/data-manager-column-picker/data-manager-column-picker.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modules/data-manager/data-manager-toolbar/data-manager-toolbar-left-item.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modules/data-manager/data-manager-toolbar/data-manager-toolbar-primary-item.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modules/data-manager/data-manager-toolbar/data-manager-toolbar-right-item.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modules/data-manager/data-manager-toolbar/data-manager-toolbar-section.component.mjs +4 -4
- package/esm2022/lib/modules/data-manager/data-manager-toolbar/data-manager-toolbar.component.mjs +198 -0
- package/esm2022/lib/modules/data-manager/data-manager.component.mjs +89 -0
- package/esm2022/lib/modules/data-manager/data-manager.module.mjs +123 -0
- package/esm2022/lib/modules/data-manager/data-manager.service.mjs +285 -0
- package/esm2022/lib/modules/data-manager/data-view.component.mjs +49 -0
- package/esm2022/lib/modules/shared/sky-data-manager-resources.module.mjs +60 -0
- package/fesm2022/skyux-data-manager.mjs +1138 -0
- package/{fesm2020 → fesm2022}/skyux-data-manager.mjs.map +1 -1
- package/lib/modules/data-manager/data-view.component.d.ts +1 -1
- package/package.json +16 -22
- package/esm2020/lib/modules/data-manager/data-manager-column-picker/data-manager-column-picker.component.mjs +0 -162
- package/esm2020/lib/modules/data-manager/data-manager-toolbar/data-manager-toolbar.component.mjs +0 -201
- package/esm2020/lib/modules/data-manager/data-manager.component.mjs +0 -87
- package/esm2020/lib/modules/data-manager/data-manager.module.mjs +0 -123
- package/esm2020/lib/modules/data-manager/data-manager.service.mjs +0 -281
- package/esm2020/lib/modules/data-manager/data-view.component.mjs +0 -52
- package/esm2020/lib/modules/shared/sky-data-manager-resources.module.mjs +0 -60
- package/fesm2015/skyux-data-manager.mjs +0 -1142
- package/fesm2015/skyux-data-manager.mjs.map +0 -1
- package/fesm2020/skyux-data-manager.mjs +0 -1135
- /package/{esm2020 → esm2022}/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/data-manager/data-manager-column-picker/data-manager-column-picker-context.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/data-manager/data-manager-filter-context.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/data-manager/models/data-manager-column-picker-option.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/data-manager/models/data-manager-column-picker-sort-strategy.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/data-manager/models/data-manager-config.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/data-manager/models/data-manager-filter-data.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/data-manager/models/data-manager-init-args.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/data-manager/models/data-manager-sort-option.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/data-manager/models/data-manager-state-change.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/data-manager/models/data-manager-state-options.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/data-manager/models/data-manager-state-update-filter-args.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/data-manager/models/data-manager-state.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/data-manager/models/data-view-config.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/data-manager/models/data-view-state-options.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/data-manager/models/data-view-state.mjs +0 -0
- /package/{esm2020 → esm2022}/skyux-data-manager.mjs +0 -0
@@ -0,0 +1,285 @@
|
|
1
|
+
import { Injectable } from '@angular/core';
|
2
|
+
import { BehaviorSubject, ReplaySubject, Subject } from 'rxjs';
|
3
|
+
import { distinctUntilChanged, filter, map, take, takeUntil, } from 'rxjs/operators';
|
4
|
+
import { SkyDataManagerState } from './models/data-manager-state';
|
5
|
+
import { SkyDataManagerStateChange } from './models/data-manager-state-change';
|
6
|
+
import { SkyDataViewState } from './models/data-view-state';
|
7
|
+
import * as i0 from "@angular/core";
|
8
|
+
import * as i1 from "@skyux/core";
|
9
|
+
/**
|
10
|
+
* The data manager service provides ways for data views, toolbar items, and more to stay up to date
|
11
|
+
* with the active view ID, data manager config, registered views and their configs, and data state.
|
12
|
+
* There are methods to get current values, update values, and get subscriptions to the changing values.<br/> <br/>
|
13
|
+
* Provide this service at the component level for each instance of a data manager. Do not
|
14
|
+
* provide it at the module level or in `app-extras`. This allows multiple data
|
15
|
+
* managers to be used and self-contained.
|
16
|
+
*/
|
17
|
+
export class SkyDataManagerService {
|
18
|
+
#activeViewId;
|
19
|
+
#dataManagerConfig;
|
20
|
+
#views;
|
21
|
+
#dataStateChange;
|
22
|
+
#isInitialized;
|
23
|
+
#ngUnsubscribe;
|
24
|
+
#initSource;
|
25
|
+
#uiConfigService;
|
26
|
+
constructor(uiConfigService) {
|
27
|
+
this.viewkeeperClasses = new BehaviorSubject({});
|
28
|
+
this.#activeViewId = new ReplaySubject(1);
|
29
|
+
this.#dataManagerConfig = new BehaviorSubject({});
|
30
|
+
this.#views = new BehaviorSubject([]);
|
31
|
+
this.#dataStateChange = new ReplaySubject(1);
|
32
|
+
this.#ngUnsubscribe = new Subject();
|
33
|
+
this.#initSource = 'dataManagerServiceInit';
|
34
|
+
this.#uiConfigService = uiConfigService;
|
35
|
+
}
|
36
|
+
ngOnDestroy() {
|
37
|
+
this.#activeViewId.complete();
|
38
|
+
this.#dataManagerConfig.complete();
|
39
|
+
this.#views.complete();
|
40
|
+
this.#dataStateChange.complete();
|
41
|
+
this.#ngUnsubscribe.next();
|
42
|
+
this.#ngUnsubscribe.complete();
|
43
|
+
}
|
44
|
+
/**
|
45
|
+
* Initializes the data manager with the given settings and sets `isInitialized` to `true`.
|
46
|
+
* This must be called for the data manager to render.
|
47
|
+
* @param args The initial active view ID, data manager config, and state to use for the data manager.
|
48
|
+
* If a settings key is provided, it checks for a saved data state in the SKY UI config service before using the default data state
|
49
|
+
* and saves any state changes to the service.
|
50
|
+
*/
|
51
|
+
initDataManager(args) {
|
52
|
+
if (this.#isInitialized) {
|
53
|
+
console.warn('This data manager instance has already been initialized.');
|
54
|
+
return;
|
55
|
+
}
|
56
|
+
this.#isInitialized = true;
|
57
|
+
const defaultDataState = args.defaultDataState;
|
58
|
+
const settingsKey = args.settingsKey;
|
59
|
+
this.updateActiveViewId(args.activeViewId);
|
60
|
+
this.updateDataManagerConfig(args.dataManagerConfig);
|
61
|
+
if (settingsKey) {
|
62
|
+
this.#uiConfigService
|
63
|
+
.getConfig(settingsKey, defaultDataState.getStateOptions())
|
64
|
+
.pipe(take(1))
|
65
|
+
.subscribe((config) => {
|
66
|
+
this.updateDataState(new SkyDataManagerState(config), this.#initSource);
|
67
|
+
});
|
68
|
+
}
|
69
|
+
else {
|
70
|
+
this.updateDataState(defaultDataState, this.#initSource);
|
71
|
+
}
|
72
|
+
if (settingsKey) {
|
73
|
+
this.getDataStateUpdates(this.#initSource)
|
74
|
+
.pipe(takeUntil(this.#ngUnsubscribe))
|
75
|
+
.subscribe((state) => {
|
76
|
+
this.#uiConfigService
|
77
|
+
.setConfig(settingsKey, state.getStateOptions())
|
78
|
+
.pipe(takeUntil(this.#ngUnsubscribe))
|
79
|
+
.subscribe(
|
80
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
81
|
+
() => { }, (err) => {
|
82
|
+
console.warn('Could not save data manager settings.');
|
83
|
+
console.warn(err);
|
84
|
+
});
|
85
|
+
});
|
86
|
+
}
|
87
|
+
}
|
88
|
+
/**
|
89
|
+
* Initializes a view within the data manager. This must be called for each view for the views to appear within the data manager.
|
90
|
+
* @param viewConfig The SkyDataViewConfig settings for the view being registered.
|
91
|
+
*/
|
92
|
+
initDataView(viewConfig) {
|
93
|
+
const currentViews = this.#views.value;
|
94
|
+
if (this.getViewById(viewConfig.id)) {
|
95
|
+
console.warn(`A data manager view with the id ${viewConfig.id} has already been initialized.`);
|
96
|
+
return;
|
97
|
+
}
|
98
|
+
currentViews.push(viewConfig);
|
99
|
+
this.#views.next(currentViews);
|
100
|
+
// When the initial activeViewId is set there are no views registered. We have to re-emit
|
101
|
+
// the activeId so the newly registered view is notified that it is active.
|
102
|
+
this.#activeViewId.pipe(take(1)).subscribe((id) => {
|
103
|
+
this.#activeViewId.next(id);
|
104
|
+
});
|
105
|
+
this.#dataStateChange
|
106
|
+
.pipe(take(1))
|
107
|
+
.subscribe((change) => {
|
108
|
+
const dataState = change.dataState;
|
109
|
+
const currentViewState = dataState.getViewStateById(viewConfig.id);
|
110
|
+
if (!currentViewState) {
|
111
|
+
const newViewState = new SkyDataViewState({ viewId: viewConfig.id });
|
112
|
+
// Ensure that the view state's available columns match with the view config. Also,
|
113
|
+
// add columns to the `displayedColumnIds` as long as they are not `initialHide`
|
114
|
+
if (viewConfig.columnOptions) {
|
115
|
+
const columnIds = viewConfig.columnOptions.map((columnOptions) => {
|
116
|
+
return columnOptions.id;
|
117
|
+
});
|
118
|
+
const displayedColumnIds = viewConfig.columnOptions
|
119
|
+
.filter((columnOption) => {
|
120
|
+
return !columnOption.initialHide;
|
121
|
+
})
|
122
|
+
.map((columnOption) => {
|
123
|
+
return columnOption.id;
|
124
|
+
});
|
125
|
+
newViewState.columnIds = columnIds;
|
126
|
+
newViewState.displayedColumnIds = displayedColumnIds;
|
127
|
+
}
|
128
|
+
const newDataState = dataState.addOrUpdateView(viewConfig.id, newViewState);
|
129
|
+
this.updateDataState(newDataState, this.#initSource);
|
130
|
+
}
|
131
|
+
else {
|
132
|
+
const currentAvailableColumnIds = viewConfig.columnOptions?.map((columnOptions) => {
|
133
|
+
return columnOptions.id;
|
134
|
+
}) || [];
|
135
|
+
// Ensure that the view state's available columns match with the view config. Also,
|
136
|
+
// add new columns to the `displayedColumnIds` as long as they are not `initialHide`.
|
137
|
+
// We only add columns to `displayedColumnsIds` if we had previously tracked
|
138
|
+
// `columnIds` to avoid breaking changes.
|
139
|
+
if (currentViewState.columnIds.length > 0) {
|
140
|
+
let newColumnIds = currentAvailableColumnIds?.filter((id) => currentViewState.columnIds.indexOf(id) < 0);
|
141
|
+
newColumnIds = newColumnIds?.filter((columnId) => {
|
142
|
+
return viewConfig.columnOptions?.find((columnOption) => columnOption.id === columnId && !columnOption.initialHide);
|
143
|
+
});
|
144
|
+
// Add the column IDs that now exist to the data manager state both as available
|
145
|
+
// and as shown.
|
146
|
+
currentViewState.displayedColumnIds =
|
147
|
+
currentViewState.displayedColumnIds.concat(newColumnIds);
|
148
|
+
}
|
149
|
+
// Add the column IDs that now exist to the data manager state both as available
|
150
|
+
// and as shown.
|
151
|
+
currentViewState.columnIds = currentAvailableColumnIds;
|
152
|
+
const newDataState = dataState.addOrUpdateView(viewConfig.id, currentViewState);
|
153
|
+
this.updateDataState(newDataState, this.#initSource);
|
154
|
+
}
|
155
|
+
})
|
156
|
+
.unsubscribe();
|
157
|
+
}
|
158
|
+
/**
|
159
|
+
* Returns an observable of data state changes that views and other data manager entities can subscribe to.
|
160
|
+
* It excludes updates originating from the provided source. This allows subscribers to only respond to
|
161
|
+
* changes they did not create and helps prevent infinite loops of updates and responses.
|
162
|
+
* @param sourceId The ID of the entity subscribing to data state updates. This can be any value you choose
|
163
|
+
* but should be unique within the data manager instance and should also be used when that entity updates the state.
|
164
|
+
*/
|
165
|
+
getDataStateUpdates(sourceId, updateFilter) {
|
166
|
+
// filter out events from the provided source and emit just the dataState
|
167
|
+
if (updateFilter) {
|
168
|
+
return this.#dataStateChange.pipe(filter((stateChange) => sourceId !== stateChange.source), map((stateChange) => stateChange.dataState), updateFilter.comparator
|
169
|
+
? distinctUntilChanged(updateFilter.comparator)
|
170
|
+
: distinctUntilChanged(this.#getDefaultStateComparator(updateFilter.properties)));
|
171
|
+
}
|
172
|
+
else {
|
173
|
+
return this.#dataStateChange.pipe(filter((stateChange) => sourceId !== stateChange.source), map((stateChange) => stateChange.dataState));
|
174
|
+
}
|
175
|
+
}
|
176
|
+
/**
|
177
|
+
* Updates the data state and emits a new value to entities subscribed to data state changes.
|
178
|
+
* @param state The new `SkyDataManagerState` value.
|
179
|
+
* @param sourceId The ID of the entity updating the state. This can be any value you choose,
|
180
|
+
* but should be unique within the data manager instance and should also be used when that entity
|
181
|
+
* subscribes to state changes from `getDataStateUpdates`.
|
182
|
+
*/
|
183
|
+
updateDataState(state, sourceId) {
|
184
|
+
const newState = new SkyDataManagerState(state.getStateOptions());
|
185
|
+
const newStateChange = new SkyDataManagerStateChange(newState, sourceId);
|
186
|
+
this.#dataStateChange.next(newStateChange);
|
187
|
+
}
|
188
|
+
/**
|
189
|
+
* Returns the current `SkyDataManagerConfig`.
|
190
|
+
*/
|
191
|
+
getCurrentDataManagerConfig() {
|
192
|
+
return this.#dataManagerConfig.value;
|
193
|
+
}
|
194
|
+
/**
|
195
|
+
* Returns an observable of data manager config changes that views and other data manager entities can subscribe to.
|
196
|
+
*/
|
197
|
+
getDataManagerConfigUpdates() {
|
198
|
+
return this.#dataManagerConfig;
|
199
|
+
}
|
200
|
+
/**
|
201
|
+
* Updates the data manager config and emits a new value to entities subscribed to data config changes.
|
202
|
+
* @param value The new `SkyDataManagerConfig` value.
|
203
|
+
*/
|
204
|
+
updateDataManagerConfig(value) {
|
205
|
+
this.#dataManagerConfig.next(value);
|
206
|
+
}
|
207
|
+
/**
|
208
|
+
* Returns an observable of data view config changes that views and other data manager entities can subscribe to.
|
209
|
+
*/
|
210
|
+
getDataViewsUpdates() {
|
211
|
+
return this.#views;
|
212
|
+
}
|
213
|
+
/**
|
214
|
+
* Returns an observable of the active view ID that views and other data manager entities can subscribe to.
|
215
|
+
*/
|
216
|
+
getActiveViewIdUpdates() {
|
217
|
+
return this.#activeViewId;
|
218
|
+
}
|
219
|
+
/**
|
220
|
+
* Updates the active view ID. The data manager changes the displayed view.
|
221
|
+
* @param id The new active view ID.
|
222
|
+
*/
|
223
|
+
updateActiveViewId(id) {
|
224
|
+
this.#activeViewId.next(id);
|
225
|
+
}
|
226
|
+
/**
|
227
|
+
* Returns the `SkyDataViewConfig` for the given view ID.
|
228
|
+
* @param viewId The ID of the view config to get.
|
229
|
+
*/
|
230
|
+
getViewById(viewId) {
|
231
|
+
const currentViews = this.#views.value;
|
232
|
+
const viewConfig = currentViews.find((view) => view.id === viewId);
|
233
|
+
return viewConfig;
|
234
|
+
}
|
235
|
+
/**
|
236
|
+
* Updates the given view config. The registered view with the same ID is updated to the
|
237
|
+
* provided config, so include all properties regardless of whether they changed. If the
|
238
|
+
* view was not initialized already, no update happens.
|
239
|
+
* @param view The new `SkyDataViewConfig` containing all properties.
|
240
|
+
*/
|
241
|
+
updateViewConfig(view) {
|
242
|
+
const currentViews = this.#views.value;
|
243
|
+
const existingViewIndex = currentViews.findIndex((currentView) => currentView.id === view.id);
|
244
|
+
if (existingViewIndex === -1) {
|
245
|
+
console.error('A view with the id {id} does not exist.', view.id);
|
246
|
+
}
|
247
|
+
else {
|
248
|
+
currentViews[existingViewIndex] = view;
|
249
|
+
this.#views.next(currentViews);
|
250
|
+
}
|
251
|
+
}
|
252
|
+
/**
|
253
|
+
* @internal
|
254
|
+
*/
|
255
|
+
setViewkeeperClasses(viewId, classes) {
|
256
|
+
const viewkeeperClasses = this.viewkeeperClasses.value;
|
257
|
+
viewkeeperClasses[viewId] = classes;
|
258
|
+
this.viewkeeperClasses.next(viewkeeperClasses);
|
259
|
+
}
|
260
|
+
#filterDataStateProperties(state, properties) {
|
261
|
+
const stateProperties = state.getStateOptions();
|
262
|
+
const filteredStateProperties = {};
|
263
|
+
if (properties) {
|
264
|
+
for (const property of properties) {
|
265
|
+
if (property in stateProperties) {
|
266
|
+
filteredStateProperties[property] = stateProperties[property];
|
267
|
+
}
|
268
|
+
}
|
269
|
+
}
|
270
|
+
return filteredStateProperties;
|
271
|
+
}
|
272
|
+
#getDefaultStateComparator(properties) {
|
273
|
+
return (state1, state2) => {
|
274
|
+
const filteredState1 = this.#filterDataStateProperties(state1, properties);
|
275
|
+
const filteredState2 = this.#filterDataStateProperties(state2, properties);
|
276
|
+
return JSON.stringify(filteredState1) === JSON.stringify(filteredState2);
|
277
|
+
};
|
278
|
+
}
|
279
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyDataManagerService, deps: [{ token: i1.SkyUIConfigService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
280
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyDataManagerService }); }
|
281
|
+
}
|
282
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyDataManagerService, decorators: [{
|
283
|
+
type: Injectable
|
284
|
+
}], ctorParameters: function () { return [{ type: i1.SkyUIConfigService }]; } });
|
285
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1tYW5hZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0YS1tYW5hZ2VyL3NyYy9saWIvbW9kdWxlcy9kYXRhLW1hbmFnZXIvZGF0YS1tYW5hZ2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUd0RCxPQUFPLEVBQUUsZUFBZSxFQUFjLGFBQWEsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0UsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sR0FBRyxFQUNILElBQUksRUFDSixTQUFTLEdBQ1YsTUFBTSxnQkFBZ0IsQ0FBQztBQUl4QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNsRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUkvRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7O0FBRTVEOzs7Ozs7O0dBT0c7QUFFSCxNQUFNLE9BQU8scUJBQXFCO0lBR3ZCLGFBQWEsQ0FBZ0M7SUFDN0Msa0JBQWtCLENBQWlEO0lBQ25FLE1BQU0sQ0FBZ0Q7SUFDdEQsZ0JBQWdCLENBQW1EO0lBRTVFLGNBQWMsQ0FBc0I7SUFDcEMsY0FBYyxDQUF1QjtJQUNyQyxXQUFXLENBQTRCO0lBQ3ZDLGdCQUFnQixDQUFxQjtJQUVyQyxZQUFZLGVBQW1DO1FBWnhDLHNCQUFpQixHQUFHLElBQUksZUFBZSxDQUEyQixFQUFFLENBQUMsQ0FBQztRQUVwRSxrQkFBYSxHQUFHLElBQUksYUFBYSxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzdDLHVCQUFrQixHQUFHLElBQUksZUFBZSxDQUF1QixFQUFFLENBQUMsQ0FBQztRQUNuRSxXQUFNLEdBQUcsSUFBSSxlQUFlLENB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Q3hCLEtBQTBCLEVBQzFCLFVBQTREO1FBRTVELE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNoRCxNQUFNLHVCQUF1QixHQUE0QixFQUFFLENBQUM7UUFFNUQsSUFBSSxVQUFVLEVBQUU7WUFDZCxLQUFLLE1BQU0sUUFBUSxJQUFJLFVBQVUsRUFBRTtnQkFDakMsSUFBSSxRQUFRLElBQUksZUFBZSxFQUFFO29CQUMvQix1QkFBdUIsQ0FBQyxRQUFRLENBQUMsR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQy9EO2FBQ0Y7U0FDRjtRQUVELE9BQU8sdUJBQXVCLENBQUM7SUFDakMsQ0FBQztJQUVELDBCQUEwQixDQUN4QixVQUE0RDtRQUU1RCxPQUFPLENBQ0wsTUFBMkIsRUFDM0IsTUFBMkIsRUFDbEIsRUFBRTtZQUNYLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FDcEQsTUFBTSxFQUNOLFVBQVUsQ0FDWCxDQUFDO1lBQ0YsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUNwRCxNQUFNLEVBQ04sVUFBVSxDQUNYLENBQUM7WUFDRixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMzRSxDQUFDLENBQUM7SUFDSixDQUFDOzhHQXhWVSxxQkFBcUI7a0hBQXJCLHFCQUFxQjs7MkZBQXJCLHFCQUFxQjtrQkFEakMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2t5VUlDb25maWdTZXJ2aWNlIH0gZnJvbSAnQHNreXV4L2NvcmUnO1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIG1hcCxcbiAgdGFrZSxcbiAgdGFrZVVudGlsLFxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreURhdGFNYW5hZ2VyQ29uZmlnIH0gZnJvbSAnLi9tb2RlbHMvZGF0YS1tYW5hZ2VyLWNvbmZpZyc7XG5pbXBvcnQgeyBTa3lEYXRhTWFuYWdlckluaXRBcmdzIH0gZnJvbSAnLi9tb2RlbHMvZGF0YS1tYW5hZ2VyLWluaXQtYXJncyc7XG5pbXBvcnQgeyBTa3lEYXRhTWFuYWdlclN0YXRlIH0gZnJvbSAnLi9tb2RlbHMvZGF0YS1tYW5hZ2VyLXN0YXRlJztcbmltcG9ydCB7IFNreURhdGFNYW5hZ2VyU3RhdGVDaGFuZ2UgfSBmcm9tICcuL21vZGVscy9kYXRhLW1hbmFnZXItc3RhdGUtY2hhbmdlJztcbmltcG9ydCB7IFNreURhdGFNYW5hZ2VyU3RhdGVPcHRpb25zIH0gZnJvbSAnLi9tb2RlbHMvZGF0YS1tYW5hZ2VyLXN0YXRlLW9wdGlvbnMnO1xuaW1wb3J0IHsgU2t5RGF0YU1hbmFnZXJTdGF0ZVVwZGF0ZUZpbHRlckFyZ3MgfSBmcm9tICcuL21vZGVscy9kYXRhLW1hbmFnZXItc3RhdGUtdXBkYXRlLWZpbHRlci1hcmdzJztcbmltcG9ydCB7IFNreURhdGFWaWV3Q29uZmlnIH0gZnJvbSAnLi9tb2RlbHMvZGF0YS12aWV3LWNvbmZpZyc7XG5pbXBvcnQgeyBTa3lEYXRhVmlld1N0YXRlIH0gZnJvbSAnLi9tb2RlbHMvZGF0YS12aWV3LXN0YXRlJztcblxuLyoqXG4gKiBUaGUgZGF0YSBtYW5hZ2VyIHNlcnZpY2UgcHJvdmlkZXMgd2F5cyBmb3IgZGF0YSB2aWV3cywgdG9vbGJhciBpdGVtcywgYW5kIG1vcmUgdG8gc3RheSB1cCB0byBkYXRlXG4gKiB3aXRoIHRoZSBhY3RpdmUgdmlldyBJRCwgZGF0YSBtYW5hZ2VyIGNvbmZpZywgcmVnaXN0ZXJlZCB2aWV3cyBhbmQgdGhlaXIgY29uZmlncywgYW5kIGRhdGEgc3RhdGUuXG4gKiBUaGVyZSBhcmUgbWV0aG9kcyB0byBnZXQgY3VycmVudCB2YWx1ZXMsIHVwZGF0ZSB2YWx1ZXMsIGFuZCBnZXQgc3Vic2NyaXB0aW9ucyB0byB0aGUgY2hhbmdpbmcgdmFsdWVzLjxici8+IDxici8+XG4gKiBQcm92aWRlIHRoaXMgc2VydmljZSBhdCB0aGUgY29tcG9uZW50IGxldmVsIGZvciBlYWNoIGluc3RhbmNlIG9mIGEgZGF0YSBtYW5hZ2VyLiBEbyBub3RcbiAqIHByb3ZpZGUgaXQgYXQgdGhlIG1vZHVsZSBsZXZlbCBvciBpbiBgYXBwLWV4dHJhc2AuIFRoaXMgYWxsb3dzIG11bHRpcGxlIGRhdGFcbiAqIG1hbmFnZXJzIHRvIGJlIHVzZWQgYW5kIHNlbGYtY29udGFpbmVkLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2t5RGF0YU1hbmFnZXJTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHVibGljIHZpZXdrZWVwZXJDbGFzc2VzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4+KHt9KTtcblxuICByZWFkb25seSAjYWN0aXZlVmlld0lkID0gbmV3IFJlcGxheVN1YmplY3Q8c3RyaW5nPigxKTtcbiAgcmVhZG9ubHkgI2RhdGFNYW5hZ2VyQ29uZmlnID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTa3lEYXRhTWFuYWdlckNvbmZpZz4oe30pO1xuICByZWFkb25seSAjdmlld3MgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNreURhdGFWaWV3Q29uZmlnW10+KFtdKTtcbiAgcmVhZG9ubHkgI2RhdGFTdGF0ZUNoYW5nZSA9IG5ldyBSZXBsYXlTdWJqZWN0PFNreURhdGFNYW5hZ2VyU3RhdGVDaGFuZ2U+KDEpO1xuXG4gICNpc0luaXRpYWxpemVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAjbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICNpbml0U291cmNlID0gJ2RhdGFNYW5hZ2VyU2VydmljZUluaXQnO1xuICAjdWlDb25maWdTZXJ2aWNlOiBTa3lVSUNvbmZpZ1NlcnZpY2U7XG5cbiAgY29uc3RydWN0b3IodWlDb25maWdTZXJ2aWNlOiBTa3lVSUNvbmZpZ1NlcnZpY2UpIHtcbiAgICB0aGlzLiN1aUNvbmZpZ1NlcnZpY2UgPSB1aUNvbmZpZ1NlcnZpY2U7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy4jYWN0aXZlVmlld0lkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy4jZGF0YU1hbmFnZXJDb25maWcuY29tcGxldGUoKTtcbiAgICB0aGlzLiN2aWV3cy5jb21wbGV0ZSgpO1xuICAgIHRoaXMuI2RhdGFTdGF0ZUNoYW5nZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgZGF0YSBtYW5hZ2VyIHdpdGggdGhlIGdpdmVuIHNldHRpbmdzIGFuZCBzZXRzIGBpc0luaXRpYWxpemVkYCB0byBgdHJ1ZWAuXG4gICAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgZm9yIHRoZSBkYXRhIG1hbmFnZXIgdG8gcmVuZGVyLlxuICAgKiBAcGFyYW0gYXJncyBUaGUgaW5pdGlhbCBhY3RpdmUgdmlldyBJRCwgZGF0YSBtYW5hZ2VyIGNvbmZpZywgYW5kIHN0YXRlIHRvIHVzZSBmb3IgdGhlIGRhdGEgbWFuYWdlci5cbiAgICogSWYgYSBzZXR0aW5ncyBrZXkgaXMgcHJvdmlkZWQsIGl0IGNoZWNrcyBmb3IgYSBzYXZlZCBkYXRhIHN0YXRlIGluIHRoZSBTS1kgVUkgY29uZmlnIHNlcnZpY2UgYmVmb3JlIHVzaW5nIHRoZSBkZWZhdWx0IGRhdGEgc3RhdGVcbiAgICogYW5kIHNhdmVzIGFueSBzdGF0ZSBjaGFuZ2VzIHRvIHRoZSBzZXJ2aWNlLlxuICAgKi9cbiAgcHVibGljIGluaXREYXRhTWFuYWdlcihhcmdzOiBTa3lEYXRhTWFuYWdlckluaXRBcmdzKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI2lzSW5pdGlhbGl6ZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybignVGhpcyBkYXRhIG1hbmFnZXIgaW5zdGFuY2UgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLiNpc0luaXRpYWxpemVkID0gdHJ1ZTtcblxuICAgIGNvbnN0IGRlZmF1bHREYXRhU3RhdGUgPSBhcmdzLmRlZmF1bHREYXRhU3RhdGU7XG4gICAgY29uc3Qgc2V0dGluZ3NLZXkgPSBhcmdzLnNldHRpbmdzS2V5O1xuXG4gICAgdGhpcy51cGRhdGVBY3RpdmVWaWV3SWQoYXJncy5hY3RpdmVWaWV3SWQpO1xuICAgIHRoaXMudXBkYXRlRGF0YU1hbmFnZXJDb25maWcoYXJncy5kYXRhTWFuYWdlckNvbmZpZyk7XG5cbiAgICBpZiAoc2V0dGluZ3NLZXkpIHtcbiAgICAgIHRoaXMuI3VpQ29uZmlnU2VydmljZVxuICAgICAgICAuZ2V0Q29uZmlnKHNldHRpbmdzS2V5LCBkZWZhdWx0RGF0YVN0YXRlLmdldFN0YXRlT3B0aW9ucygpKVxuICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAuc3Vic2NyaWJlKChjb25maWc6IFNreURhdGFNYW5hZ2VyU3RhdGVPcHRpb25zKSA9PiB7XG4gICAgICAgICAgdGhpcy51cGRhdGVEYXRhU3RhdGUoXG4gICAgICAgICAgICBuZXcgU2t5RGF0YU1hbmFnZXJTdGF0ZShjb25maWcpLFxuICAgICAgICAgICAgdGhpcy4jaW5pdFNvdXJjZVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZURhdGFTdGF0ZShkZWZhdWx0RGF0YVN0YXRlLCB0aGlzLiNpbml0U291cmNlKTtcbiAgICB9XG5cbiAgICBpZiAoc2V0dGluZ3NLZXkpIHtcbiAgICAgIHRoaXMuZ2V0RGF0YVN0YXRlVXBkYXRlcyh0aGlzLiNpbml0U291cmNlKVxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHN0YXRlOiBTa3lEYXRhTWFuYWdlclN0YXRlKSA9PiB7XG4gICAgICAgICAgdGhpcy4jdWlDb25maWdTZXJ2aWNlXG4gICAgICAgICAgICAuc2V0Q29uZmlnKHNldHRpbmdzS2V5LCBzdGF0ZS5nZXRTdGF0ZU9wdGlvbnMoKSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgICAgICAgICAgICAgKCkgPT4ge30sXG4gICAgICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0NvdWxkIG5vdCBzYXZlIGRhdGEgbWFuYWdlciBzZXR0aW5ncy4nKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oZXJyKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIGEgdmlldyB3aXRoaW4gdGhlIGRhdGEgbWFuYWdlci4gVGhpcyBtdXN0IGJlIGNhbGxlZCBmb3IgZWFjaCB2aWV3IGZvciB0aGUgdmlld3MgdG8gYXBwZWFyIHdpdGhpbiB0aGUgZGF0YSBtYW5hZ2VyLlxuICAgKiBAcGFyYW0gdmlld0NvbmZpZyBUaGUgU2t5RGF0YVZpZXdDb25maWcgc2V0dGluZ3MgZm9yIHRoZSB2aWV3IGJlaW5nIHJlZ2lzdGVyZWQuXG4gICAqL1xuICBwdWJsaWMgaW5pdERhdGFWaWV3KHZpZXdDb25maWc6IFNreURhdGFWaWV3Q29uZmlnKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudFZpZXdzID0gdGhpcy4jdmlld3MudmFsdWU7XG5cbiAgICBpZiAodGhpcy5nZXRWaWV3QnlJZCh2aWV3Q29uZmlnLmlkKSkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgQSBkYXRhIG1hbmFnZXIgdmlldyB3aXRoIHRoZSBpZCAke3ZpZXdDb25maWcuaWR9IGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuYFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjdXJyZW50Vmlld3MucHVzaCh2aWV3Q29uZmlnKTtcbiAgICB0aGlzLiN2aWV3cy5uZXh0KGN1cnJlbnRWaWV3cyk7XG5cbiAgICAvLyBXaGVuIHRoZSBpbml0aWFsIGFjdGl2ZVZpZXdJZCBpcyBzZXQgdGhlcmUgYXJlIG5vIHZpZXdzIHJlZ2lzdGVyZWQuIFdlIGhhdmUgdG8gcmUtZW1pdFxuICAgIC8vIHRoZSBhY3RpdmVJZCBzbyB0aGUgbmV3bHkgcmVnaXN0ZXJlZCB2aWV3IGlzIG5vdGlmaWVkIHRoYXQgaXQgaXMgYWN0aXZlLlxuICAgIHRoaXMuI2FjdGl2ZVZpZXdJZC5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoaWQpID0+IHtcbiAgICAgIHRoaXMuI2FjdGl2ZVZpZXdJZC5uZXh0KGlkKTtcbiAgICB9KTtcblxuICAgIHRoaXMuI2RhdGFTdGF0ZUNoYW5nZVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKGNoYW5nZSkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhU3RhdGUgPSBjaGFuZ2UuZGF0YVN0YXRlO1xuICAgICAgICBjb25zdCBjdXJyZW50Vmlld1N0YXRlID0gZGF0YVN0YXRlLmdldFZpZXdTdGF0ZUJ5SWQodmlld0NvbmZpZy5pZCk7XG5cbiAgICAgICAgaWYgKCFjdXJyZW50Vmlld1N0YXRlKSB7XG4gICAgICAgICAgY29uc3QgbmV3Vmlld1N0YXRlID0gbmV3IFNreURhdGFWaWV3U3RhdGUoeyB2aWV3SWQ6IHZpZXdDb25maWcuaWQgfSk7XG5cbiAgICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgdmlldyBzdGF0ZSdzIGF2YWlsYWJsZSBjb2x1bW5zIG1hdGNoIHdpdGggdGhlIHZpZXcgY29uZmlnLiBBbHNvLFxuICAgICAgICAgIC8vIGFkZCBjb2x1bW5zIHRvIHRoZSBgZGlzcGxheWVkQ29sdW1uSWRzYCBhcyBsb25nIGFzIHRoZXkgYXJlIG5vdCBgaW5pdGlhbEhpZGVgXG4gICAgICAgICAgaWYgKHZpZXdDb25maWcuY29sdW1uT3B0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgY29sdW1uSWRzID0gdmlld0NvbmZpZy5jb2x1bW5PcHRpb25zLm1hcCgoY29sdW1uT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gY29sdW1uT3B0aW9ucy5pZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgZGlzcGxheWVkQ29sdW1uSWRzID0gdmlld0NvbmZpZy5jb2x1bW5PcHRpb25zXG4gICAgICAgICAgICAgIC5maWx0ZXIoKGNvbHVtbk9wdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAhY29sdW1uT3B0aW9uLmluaXRpYWxIaWRlO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAubWFwKChjb2x1bW5PcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29sdW1uT3B0aW9uLmlkO1xuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgbmV3Vmlld1N0YXRlLmNvbHVtbklkcyA9IGNvbHVtbklkcztcbiAgICAgICAgICAgIG5ld1ZpZXdTdGF0ZS5kaXNwbGF5ZWRDb2x1bW5JZHMgPSBkaXNwbGF5ZWRDb2x1bW5JZHM7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IG5ld0RhdGFTdGF0ZSA9IGRhdGFTdGF0ZS5hZGRPclVwZGF0ZVZpZXcoXG4gICAgICAgICAgICB2aWV3Q29uZmlnLmlkLFxuICAgICAgICAgICAgbmV3Vmlld1N0YXRlXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHRoaXMudXBkYXRlRGF0YVN0YXRlKG5ld0RhdGFTdGF0ZSwgdGhpcy4jaW5pdFNvdXJjZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY3VycmVudEF2YWlsYWJsZUNvbHVtbklkcyA9XG4gICAgICAgICAgICB2aWV3Q29uZmlnLmNvbHVtbk9wdGlvbnM/Lm1hcCgoY29sdW1uT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gY29sdW1uT3B0aW9ucy5pZDtcbiAgICAgICAgICAgIH0pIHx8IFtdO1xuXG4gICAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIHZpZXcgc3RhdGUncyBhdmFpbGFibGUgY29sdW1ucyBtYXRjaCB3aXRoIHRoZSB2aWV3IGNvbmZpZy4gQWxzbyxcbiAgICAgICAgICAvLyBhZGQgbmV3IGNvbHVtbnMgdG8gdGhlIGBkaXNwbGF5ZWRDb2x1bW5JZHNgIGFzIGxvbmcgYXMgdGhleSBhcmUgbm90IGBpbml0aWFsSGlkZWAuXG4gICAgICAgICAgLy8gV2Ugb25seSBhZGQgY29sdW1ucyB0byBgZGlzcGxheWVkQ29sdW1uc0lkc2AgaWYgd2UgaGFkIHByZXZpb3VzbHkgdHJhY2tlZFxuICAgICAgICAgIC8vIGBjb2x1bW5JZHNgIHRvIGF2b2lkIGJyZWFraW5nIGNoYW5nZXMuXG4gICAgICAgICAgaWYgKGN1cnJlbnRWaWV3U3RhdGUuY29sdW1uSWRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGxldCBuZXdDb2x1bW5JZHMgPSBjdXJyZW50QXZhaWxhYmxlQ29sdW1uSWRzPy5maWx0ZXIoXG4gICAgICAgICAgICAgIChpZCkgPT4gY3VycmVudFZpZXdTdGF0ZS5jb2x1bW5JZHMuaW5kZXhPZihpZCkgPCAwXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbmV3Q29sdW1uSWRzID0gbmV3Q29sdW1uSWRzPy5maWx0ZXIoKGNvbHVtbklkKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB2aWV3Q29uZmlnLmNvbHVtbk9wdGlvbnM/LmZpbmQoXG4gICAgICAgICAgICAgICAgKGNvbHVtbk9wdGlvbikgPT5cbiAgICAgICAgICAgICAgICAgIGNvbHVtbk9wdGlvbi5pZCA9PT0gY29sdW1uSWQgJiYgIWNvbHVtbk9wdGlvbi5pbml0aWFsSGlkZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIEFkZCB0aGUgY29sdW1uIElEcyB0aGF0IG5vdyBleGlzdCB0byB0aGUgZGF0YSBtYW5hZ2VyIHN0YXRlIGJvdGggYXMgYXZhaWxhYmxlXG4gICAgICAgICAgICAvLyBhbmQgYXMgc2hvd24uXG4gICAgICAgICAgICBjdXJyZW50Vmlld1N0YXRlLmRpc3BsYXllZENvbHVtbklkcyA9XG4gICAgICAgICAgICAgIGN1cnJlbnRWaWV3U3RhdGUuZGlzcGxheWVkQ29sdW1uSWRzLmNvbmNhdChuZXdDb2x1bW5JZHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBBZGQgdGhlIGNvbHVtbiBJRHMgdGhhdCBub3cgZXhpc3QgdG8gdGhlIGRhdGEgbWFuYWdlciBzdGF0ZSBib3RoIGFzIGF2YWlsYWJsZVxuICAgICAgICAgIC8vIGFuZCBhcyBzaG93bi5cbiAgICAgICAgICBjdXJyZW50Vmlld1N0YXRlLmNvbHVtbklkcyA9IGN1cnJlbnRBdmFpbGFibGVDb2x1bW5JZHM7XG5cbiAgICAgICAgICBjb25zdCBuZXdEYXRhU3RhdGUgPSBkYXRhU3RhdGUuYWRkT3JVcGRhdGVWaWV3KFxuICAgICAgICAgICAgdmlld0NvbmZpZy5pZCxcbiAgICAgICAgICAgIGN1cnJlbnRWaWV3U3RhdGVcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdGhpcy51cGRhdGVEYXRhU3RhdGUobmV3RGF0YVN0YXRlLCB0aGlzLiNpbml0U291cmNlKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gb2JzZXJ2YWJsZSBvZiBkYXRhIHN0YXRlIGNoYW5nZXMgdGhhdCB2aWV3cyBhbmQgb3RoZXIgZGF0YSBtYW5hZ2VyIGVudGl0aWVzIGNhbiBzdWJzY3JpYmUgdG8uXG4gICAqIEl0IGV4Y2x1ZGVzIHVwZGF0ZXMgb3JpZ2luYXRpbmcgZnJvbSB0aGUgcHJvdmlkZWQgc291cmNlLiBUaGlzIGFsbG93cyBzdWJzY3JpYmVycyB0byBvbmx5IHJlc3BvbmQgdG9cbiAgICogY2hhbmdlcyB0aGV5IGRpZCBub3QgY3JlYXRlIGFuZCBoZWxwcyBwcmV2ZW50IGluZmluaXRlIGxvb3BzIG9mIHVwZGF0ZXMgYW5kIHJlc3BvbnNlcy5cbiAgICogQHBhcmFtIHNvdXJjZUlkIFRoZSBJRCBvZiB0aGUgZW50aXR5IHN1YnNjcmliaW5nIHRvIGRhdGEgc3RhdGUgdXBkYXRlcy4gVGhpcyBjYW4gYmUgYW55IHZhbHVlIHlvdSBjaG9vc2VcbiAgICogYnV0IHNob3VsZCBiZSB1bmlxdWUgd2l0aGluIHRoZSBkYXRhIG1hbmFnZXIgaW5zdGFuY2UgYW5kIHNob3VsZCBhbHNvIGJlIHVzZWQgd2hlbiB0aGF0IGVudGl0eSB1cGRhdGVzIHRoZSBzdGF0ZS5cbiAgICovXG4gIHB1YmxpYyBnZXREYXRhU3RhdGVVcGRhdGVzKFxuICAgIHNvdXJjZUlkOiBzdHJpbmcsXG4gICAgdXBkYXRlRmlsdGVyPzogU2t5RGF0YU1hbmFnZXJTdGF0ZVVwZGF0ZUZpbHRlckFyZ3NcbiAgKTogT2JzZXJ2YWJsZTxTa3lEYXRhTWFuYWdlclN0YXRlPiB7XG4gICAgLy8gZmlsdGVyIG91dCBldmVudHMgZnJvbSB0aGUgcHJvdmlkZWQgc291cmNlIGFuZCBlbWl0IGp1c3QgdGhlIGRhdGFTdGF0ZVxuICAgIGlmICh1cGRhdGVGaWx0ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLiNkYXRhU3RhdGVDaGFuZ2UucGlwZShcbiAgICAgICAgZmlsdGVyKChzdGF0ZUNoYW5nZSkgPT4gc291cmNlSWQgIT09IHN0YXRlQ2hhbmdlLnNvdXJjZSksXG4gICAgICAgIG1hcCgoc3RhdGVDaGFuZ2UpID0+IHN0YXRlQ2hhbmdlLmRhdGFTdGF0ZSksXG4gICAgICAgIHVwZGF0ZUZpbHRlci5jb21wYXJhdG9yXG4gICAgICAgICAgPyBkaXN0aW5jdFVudGlsQ2hhbmdlZCh1cGRhdGVGaWx0ZXIuY29tcGFyYXRvcilcbiAgICAgICAgICA6IGRpc3RpbmN0VW50aWxDaGFuZ2VkKFxuICAgICAgICAgICAgICB0aGlzLiNnZXREZWZhdWx0U3RhdGVDb21wYXJhdG9yKFxuICAgICAgICAgICAgICAgIHVwZGF0ZUZpbHRlci5wcm9wZXJ0aWVzIGFzIChrZXlvZiBTa3lEYXRhTWFuYWdlclN0YXRlT3B0aW9ucylbXVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy4jZGF0YVN0YXRlQ2hhbmdlLnBpcGUoXG4gICAgICAgIGZpbHRlcigoc3RhdGVDaGFuZ2UpID0+IHNvdXJjZUlkICE9PSBzdGF0ZUNoYW5nZS5zb3VyY2UpLFxuICAgICAgICBtYXAoKHN0YXRlQ2hhbmdlKSA9PiBzdGF0ZUNoYW5nZS5kYXRhU3RhdGUpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBkYXRhIHN0YXRlIGFuZCBlbWl0cyBhIG5ldyB2YWx1ZSB0byBlbnRpdGllcyBzdWJzY3JpYmVkIHRvIGRhdGEgc3RhdGUgY2hhbmdlcy5cbiAgICogQHBhcmFtIHN0YXRlIFRoZSBuZXcgYFNreURhdGFNYW5hZ2VyU3RhdGVgIHZhbHVlLlxuICAgKiBAcGFyYW0gc291cmNlSWQgVGhlIElEIG9mIHRoZSBlbnRpdHkgdXBkYXRpbmcgdGhlIHN0YXRlLiBUaGlzIGNhbiBiZSBhbnkgdmFsdWUgeW91IGNob29zZSxcbiAgICogYnV0IHNob3VsZCBiZSB1bmlxdWUgd2l0aGluIHRoZSBkYXRhIG1hbmFnZXIgaW5zdGFuY2UgYW5kIHNob3VsZCBhbHNvIGJlIHVzZWQgd2hlbiB0aGF0IGVudGl0eVxuICAgKiBzdWJzY3JpYmVzIHRvIHN0YXRlIGNoYW5nZXMgZnJvbSBgZ2V0RGF0YVN0YXRlVXBkYXRlc2AuXG4gICAqL1xuICBwdWJsaWMgdXBkYXRlRGF0YVN0YXRlKHN0YXRlOiBTa3lEYXRhTWFuYWdlclN0YXRlLCBzb3VyY2VJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbmV3U3RhdGUgPSBuZXcgU2t5RGF0YU1hbmFnZXJTdGF0ZShzdGF0ZS5nZXRTdGF0ZU9wdGlvbnMoKSk7XG4gICAgY29uc3QgbmV3U3RhdGVDaGFuZ2UgPSBuZXcgU2t5RGF0YU1hbmFnZXJTdGF0ZUNoYW5nZShuZXdTdGF0ZSwgc291cmNlSWQpO1xuXG4gICAgdGhpcy4jZGF0YVN0YXRlQ2hhbmdlLm5leHQobmV3U3RhdGVDaGFuZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgYFNreURhdGFNYW5hZ2VyQ29uZmlnYC5cbiAgICovXG4gIHB1YmxpYyBnZXRDdXJyZW50RGF0YU1hbmFnZXJDb25maWcoKTogU2t5RGF0YU1hbmFnZXJDb25maWcge1xuICAgIHJldHVybiB0aGlzLiNkYXRhTWFuYWdlckNvbmZpZy52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIG9ic2VydmFibGUgb2YgZGF0YSBtYW5hZ2VyIGNvbmZpZyBjaGFuZ2VzIHRoYXQgdmlld3MgYW5kIG90aGVyIGRhdGEgbWFuYWdlciBlbnRpdGllcyBjYW4gc3Vic2NyaWJlIHRvLlxuICAgKi9cbiAgcHVibGljIGdldERhdGFNYW5hZ2VyQ29uZmlnVXBkYXRlcygpOiBPYnNlcnZhYmxlPFNreURhdGFNYW5hZ2VyQ29uZmlnPiB7XG4gICAgcmV0dXJuIHRoaXMuI2RhdGFNYW5hZ2VyQ29uZmlnO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGRhdGEgbWFuYWdlciBjb25maWcgYW5kIGVtaXRzIGEgbmV3IHZhbHVlIHRvIGVudGl0aWVzIHN1YnNjcmliZWQgdG8gZGF0YSBjb25maWcgY2hhbmdlcy5cbiAgICogQHBhcmFtIHZhbHVlIFRoZSBuZXcgYFNreURhdGFNYW5hZ2VyQ29uZmlnYCB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyB1cGRhdGVEYXRhTWFuYWdlckNvbmZpZyh2YWx1ZTogU2t5RGF0YU1hbmFnZXJDb25maWcpOiB2b2lkIHtcbiAgICB0aGlzLiNkYXRhTWFuYWdlckNvbmZpZy5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIG9ic2VydmFibGUgb2YgZGF0YSB2aWV3IGNvbmZpZyBjaGFuZ2VzIHRoYXQgdmlld3MgYW5kIG90aGVyIGRhdGEgbWFuYWdlciBlbnRpdGllcyBjYW4gc3Vic2NyaWJlIHRvLlxuICAgKi9cbiAgcHVibGljIGdldERhdGFWaWV3c1VwZGF0ZXMoKTogT2JzZXJ2YWJsZTxTa3lEYXRhVmlld0NvbmZpZ1tdPiB7XG4gICAgcmV0dXJuIHRoaXMuI3ZpZXdzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gb2JzZXJ2YWJsZSBvZiB0aGUgYWN0aXZlIHZpZXcgSUQgdGhhdCB2aWV3cyBhbmQgb3RoZXIgZGF0YSBtYW5hZ2VyIGVudGl0aWVzIGNhbiBzdWJzY3JpYmUgdG8uXG4gICAqL1xuICBwdWJsaWMgZ2V0QWN0aXZlVmlld0lkVXBkYXRlcygpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLiNhY3RpdmVWaWV3SWQ7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgYWN0aXZlIHZpZXcgSUQuIFRoZSBkYXRhIG1hbmFnZXIgY2hhbmdlcyB0aGUgZGlzcGxheWVkIHZpZXcuXG4gICAqIEBwYXJhbSBpZCBUaGUgbmV3IGFjdGl2ZSB2aWV3IElELlxuICAgKi9cbiAgcHVibGljIHVwZGF0ZUFjdGl2ZVZpZXdJZChpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy4jYWN0aXZlVmlld0lkLm5leHQoaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGBTa3lEYXRhVmlld0NvbmZpZ2AgZm9yIHRoZSBnaXZlbiB2aWV3IElELlxuICAgKiBAcGFyYW0gdmlld0lkIFRoZSBJRCBvZiB0aGUgdmlldyBjb25maWcgdG8gZ2V0LlxuICAgKi9cbiAgcHVibGljIGdldFZpZXdCeUlkKHZpZXdJZDogc3RyaW5nKTogU2t5RGF0YVZpZXdDb25maWcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGN1cnJlbnRWaWV3czogU2t5RGF0YVZpZXdDb25maWdbXSA9IHRoaXMuI3ZpZXdzLnZhbHVlO1xuICAgIGNvbnN0IHZpZXdDb25maWc6IFNreURhdGFWaWV3Q29uZmlnIHwgdW5kZWZpbmVkID0gY3VycmVudFZpZXdzLmZpbmQoXG4gICAgICAodmlldykgPT4gdmlldy5pZCA9PT0gdmlld0lkXG4gICAgKTtcblxuICAgIHJldHVybiB2aWV3Q29uZmlnO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGdpdmVuIHZpZXcgY29uZmlnLiBUaGUgcmVnaXN0ZXJlZCB2aWV3IHdpdGggdGhlIHNhbWUgSUQgaXMgdXBkYXRlZCB0byB0aGVcbiAgICogcHJvdmlkZWQgY29uZmlnLCBzbyBpbmNsdWRlIGFsbCBwcm9wZXJ0aWVzIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGV5IGNoYW5nZWQuIElmIHRoZVxuICAgKiB2aWV3IHdhcyBub3QgaW5pdGlhbGl6ZWQgYWxyZWFkeSwgbm8gdXBkYXRlIGhhcHBlbnMuXG4gICAqIEBwYXJhbSB2aWV3IFRoZSBuZXcgYFNreURhdGFWaWV3Q29uZmlnYCBjb250YWluaW5nIGFsbCBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgcHVibGljIHVwZGF0ZVZpZXdDb25maWcodmlldzogU2t5RGF0YVZpZXdDb25maWcpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50Vmlld3M6IFNreURhdGFWaWV3Q29uZmlnW10gPSB0aGlzLiN2aWV3cy52YWx1ZTtcbiAgICBjb25zdCBleGlzdGluZ1ZpZXdJbmRleCA9IGN1cnJlbnRWaWV3cy5maW5kSW5kZXgoXG4gICAgICAoY3VycmVudFZpZXcpID0+IGN1cnJlbnRWaWV3LmlkID09PSB2aWV3LmlkXG4gICAgKTtcblxuICAgIGlmIChleGlzdGluZ1ZpZXdJbmRleCA9PT0gLTEpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0EgdmlldyB3aXRoIHRoZSBpZCB7aWR9IGRvZXMgbm90IGV4aXN0LicsIHZpZXcuaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50Vmlld3NbZXhpc3RpbmdWaWV3SW5kZXhdID0gdmlldztcbiAgICAgIHRoaXMuI3ZpZXdzLm5leHQoY3VycmVudFZpZXdzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgc2V0Vmlld2tlZXBlckNsYXNzZXModmlld0lkOiBzdHJpbmcsIGNsYXNzZXM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgY29uc3Qgdmlld2tlZXBlckNsYXNzZXMgPSB0aGlzLnZpZXdrZWVwZXJDbGFzc2VzLnZhbHVlO1xuICAgIHZpZXdrZWVwZXJDbGFzc2VzW3ZpZXdJZF0gPSBjbGFzc2VzO1xuXG4gICAgdGhpcy52aWV3a2VlcGVyQ2xhc3Nlcy5uZXh0KHZpZXdrZWVwZXJDbGFzc2VzKTtcbiAgfVxuXG4gICNmaWx0ZXJEYXRhU3RhdGVQcm9wZXJ0aWVzKFxuICAgIHN0YXRlOiBTa3lEYXRhTWFuYWdlclN0YXRlLFxuICAgIHByb3BlcnRpZXM6IChrZXlvZiBTa3lEYXRhTWFuYWdlclN0YXRlT3B0aW9ucylbXSB8IHVuZGVmaW5lZFxuICApOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3Qgc3RhdGVQcm9wZXJ0aWVzID0gc3RhdGUuZ2V0U3RhdGVPcHRpb25zKCk7XG4gICAgY29uc3QgZmlsdGVyZWRTdGF0ZVByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgICBpZiAocHJvcGVydGllcykge1xuICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBwcm9wZXJ0aWVzKSB7XG4gICAgICAgIGlmIChwcm9wZXJ0eSBpbiBzdGF0ZVByb3BlcnRpZXMpIHtcbiAgICAgICAgICBmaWx0ZXJlZFN0YXRlUHJvcGVydGllc1twcm9wZXJ0eV0gPSBzdGF0ZVByb3BlcnRpZXNbcHJvcGVydHldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbHRlcmVkU3RhdGVQcm9wZXJ0aWVzO1xuICB9XG5cbiAgI2dldERlZmF1bHRTdGF0ZUNvbXBhcmF0b3IoXG4gICAgcHJvcGVydGllczogKGtleW9mIFNreURhdGFNYW5hZ2VyU3RhdGVPcHRpb25zKVtdIHwgdW5kZWZpbmVkXG4gICk6IChzdGF0ZTE6IFNreURhdGFNYW5hZ2VyU3RhdGUsIHN0YXRlMjogU2t5RGF0YU1hbmFnZXJTdGF0ZSkgPT4gYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHN0YXRlMTogU2t5RGF0YU1hbmFnZXJTdGF0ZSxcbiAgICAgIHN0YXRlMjogU2t5RGF0YU1hbmFnZXJTdGF0ZVxuICAgICk6IGJvb2xlYW4gPT4ge1xuICAgICAgY29uc3QgZmlsdGVyZWRTdGF0ZTEgPSB0aGlzLiNmaWx0ZXJEYXRhU3RhdGVQcm9wZXJ0aWVzKFxuICAgICAgICBzdGF0ZTEsXG4gICAgICAgIHByb3BlcnRpZXNcbiAgICAgICk7XG4gICAgICBjb25zdCBmaWx0ZXJlZFN0YXRlMiA9IHRoaXMuI2ZpbHRlckRhdGFTdGF0ZVByb3BlcnRpZXMoXG4gICAgICAgIHN0YXRlMixcbiAgICAgICAgcHJvcGVydGllc1xuICAgICAgKTtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShmaWx0ZXJlZFN0YXRlMSkgPT09IEpTT04uc3RyaW5naWZ5KGZpbHRlcmVkU3RhdGUyKTtcbiAgICB9O1xuICB9XG59XG4iXX0=
|
@@ -0,0 +1,49 @@
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Input, } from '@angular/core';
|
2
|
+
import { Subject } from 'rxjs';
|
3
|
+
import { takeUntil } from 'rxjs/operators';
|
4
|
+
import * as i0 from "@angular/core";
|
5
|
+
import * as i1 from "./data-manager.service";
|
6
|
+
import * as i2 from "@angular/common";
|
7
|
+
/**
|
8
|
+
* A data view is rendered within a data manager component.
|
9
|
+
* It can subscribe to data state changes from `SkyDataManagerService` and apply the filters,
|
10
|
+
* search text, and more to the data it displays.
|
11
|
+
*/
|
12
|
+
export class SkyDataViewComponent {
|
13
|
+
get isActive() {
|
14
|
+
return this.#_isActive;
|
15
|
+
}
|
16
|
+
set isActive(value) {
|
17
|
+
this.#_isActive = value;
|
18
|
+
this.#changeDetector.markForCheck();
|
19
|
+
}
|
20
|
+
#_isActive = false;
|
21
|
+
#ngUnsubscribe = new Subject();
|
22
|
+
#dataManagerService;
|
23
|
+
#changeDetector;
|
24
|
+
constructor(dataManagerService, changeDetector) {
|
25
|
+
this.#dataManagerService = dataManagerService;
|
26
|
+
this.#changeDetector = changeDetector;
|
27
|
+
}
|
28
|
+
ngOnInit() {
|
29
|
+
this.#dataManagerService
|
30
|
+
.getActiveViewIdUpdates()
|
31
|
+
.pipe(takeUntil(this.#ngUnsubscribe))
|
32
|
+
.subscribe((activeViewId) => {
|
33
|
+
this.isActive = this.viewId === activeViewId;
|
34
|
+
});
|
35
|
+
}
|
36
|
+
ngOnDestroy() {
|
37
|
+
this.#ngUnsubscribe.next();
|
38
|
+
this.#ngUnsubscribe.complete();
|
39
|
+
}
|
40
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyDataViewComponent, deps: [{ token: i1.SkyDataManagerService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
41
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: SkyDataViewComponent, selector: "sky-data-view", inputs: { viewId: "viewId" }, ngImport: i0, template: "<ng-container *ngIf=\"isActive\">\n <ng-content></ng-content>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
42
|
+
}
|
43
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyDataViewComponent, decorators: [{
|
44
|
+
type: Component,
|
45
|
+
args: [{ selector: 'sky-data-view', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"isActive\">\n <ng-content></ng-content>\n</ng-container>\n" }]
|
46
|
+
}], ctorParameters: function () { return [{ type: i1.SkyDataManagerService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { viewId: [{
|
47
|
+
type: Input
|
48
|
+
}] } });
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9kYXRhLW1hbmFnZXIvc3JjL2xpYi9tb2R1bGVzL2RhdGEtbWFuYWdlci9kYXRhLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGEtbWFuYWdlci9zcmMvbGliL21vZHVsZXMvZGF0YS1tYW5hZ2VyL2RhdGEtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxLQUFLLEdBR04sTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFJM0M7Ozs7R0FJRztBQU1ILE1BQU0sT0FBTyxvQkFBb0I7SUFRL0IsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBVyxRQUFRLENBQUMsS0FBYztRQUNoQyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBRW5CLGNBQWMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBQ3JDLG1CQUFtQixDQUF3QjtJQUMzQyxlQUFlLENBQW9CO0lBRW5DLFlBQ0Usa0JBQXlDLEVBQ3pDLGNBQWlDO1FBRWpDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxrQkFBa0IsQ0FBQztRQUM5QyxJQUFJLENBQUMsZUFBZSxHQUFHLGNBQWMsQ0FBQztJQUN4QyxDQUFDO0lBRU0sUUFBUTtRQUNiLElBQUksQ0FBQyxtQkFBbUI7YUFDckIsc0JBQXNCLEVBQUU7YUFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7YUFDcEMsU0FBUyxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxLQUFLLFlBQVksQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNqQyxDQUFDOzhHQTNDVSxvQkFBb0I7a0dBQXBCLG9CQUFvQixtRkN4QmpDLG1GQUdBOzsyRkRxQmEsb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLGVBQWUsbUJBRVIsdUJBQXVCLENBQUMsTUFBTTs0SUFReEMsTUFBTTtzQkFEWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgU2t5RGF0YU1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi9kYXRhLW1hbmFnZXIuc2VydmljZSc7XG5cbi8qKlxuICogQSBkYXRhIHZpZXcgaXMgcmVuZGVyZWQgd2l0aGluIGEgZGF0YSBtYW5hZ2VyIGNvbXBvbmVudC5cbiAqIEl0IGNhbiBzdWJzY3JpYmUgdG8gZGF0YSBzdGF0ZSBjaGFuZ2VzIGZyb20gYFNreURhdGFNYW5hZ2VyU2VydmljZWAgYW5kIGFwcGx5IHRoZSBmaWx0ZXJzLFxuICogc2VhcmNoIHRleHQsIGFuZCBtb3JlIHRvIHRoZSBkYXRhIGl0IGRpc3BsYXlzLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktZGF0YS12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGEtdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lEYXRhVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25Jbml0IHtcbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgdmlldy4gU2VlIHRoZSBgU2t5RGF0YVZpZXdDb25maWdgIGludGVyZmFjZS5cbiAgICogQHJlcXVpcmVkXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgdmlld0lkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGdldCBpc0FjdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy4jX2lzQWN0aXZlO1xuICB9XG5cbiAgcHVibGljIHNldCBpc0FjdGl2ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuI19pc0FjdGl2ZSA9IHZhbHVlO1xuICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgI19pc0FjdGl2ZSA9IGZhbHNlO1xuXG4gICNuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgI2RhdGFNYW5hZ2VyU2VydmljZTogU2t5RGF0YU1hbmFnZXJTZXJ2aWNlO1xuICAjY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGRhdGFNYW5hZ2VyU2VydmljZTogU2t5RGF0YU1hbmFnZXJTZXJ2aWNlLFxuICAgIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICB0aGlzLiNkYXRhTWFuYWdlclNlcnZpY2UgPSBkYXRhTWFuYWdlclNlcnZpY2U7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IgPSBjaGFuZ2VEZXRlY3RvcjtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLiNkYXRhTWFuYWdlclNlcnZpY2VcbiAgICAgIC5nZXRBY3RpdmVWaWV3SWRVcGRhdGVzKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGFjdGl2ZVZpZXdJZCkgPT4ge1xuICAgICAgICB0aGlzLmlzQWN0aXZlID0gdGhpcy52aWV3SWQgPT09IGFjdGl2ZVZpZXdJZDtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzQWN0aXZlXCI+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvbmctY29udGFpbmVyPlxuIl19
|
@@ -0,0 +1,60 @@
|
|
1
|
+
/**
|
2
|
+
* NOTICE: DO NOT MODIFY THIS FILE!
|
3
|
+
* The contents of this file were automatically generated by
|
4
|
+
* the 'ng generate @skyux/i18n:lib-resources-module lib/modules/shared/sky-data-manager' schematic.
|
5
|
+
* To update this file, simply rerun the command.
|
6
|
+
*/
|
7
|
+
import { NgModule } from '@angular/core';
|
8
|
+
import { SKY_LIB_RESOURCES_PROVIDERS, SkyI18nModule, getLibStringForLocale, } from '@skyux/i18n';
|
9
|
+
import * as i0 from "@angular/core";
|
10
|
+
const RESOURCES = {
|
11
|
+
'EN-US': {
|
12
|
+
skyux_data_manager_column_picker_title: {
|
13
|
+
message: 'Choose columns to show in the list',
|
14
|
+
},
|
15
|
+
skyux_data_manager_apply_changes_button_title: { message: 'Apply changes' },
|
16
|
+
skyux_data_manager_cancel_button_title: { message: 'Cancel' },
|
17
|
+
skyux_data_manager_select_all_button_title: { message: 'Select all' },
|
18
|
+
skyux_data_manager_clear_all_button_title: { message: 'Clear all' },
|
19
|
+
skyux_data_manager_show_selected_option_title: {
|
20
|
+
message: 'Show only selected items',
|
21
|
+
},
|
22
|
+
skyux_data_manager_columns_button_title: { message: 'Columns' },
|
23
|
+
skyux_data_manager_select_column_status_indicator_title: {
|
24
|
+
message: 'Select at least one column.',
|
25
|
+
},
|
26
|
+
},
|
27
|
+
};
|
28
|
+
export class SkyDataManagerResourcesProvider {
|
29
|
+
getString(localeInfo, name) {
|
30
|
+
return getLibStringForLocale(RESOURCES, localeInfo.locale, name);
|
31
|
+
}
|
32
|
+
}
|
33
|
+
/**
|
34
|
+
* Import into any component library module that needs to use resource strings.
|
35
|
+
*/
|
36
|
+
export class SkyDataManagerResourcesModule {
|
37
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyDataManagerResourcesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
38
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: SkyDataManagerResourcesModule, exports: [SkyI18nModule] }); }
|
39
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyDataManagerResourcesModule, providers: [
|
40
|
+
{
|
41
|
+
provide: SKY_LIB_RESOURCES_PROVIDERS,
|
42
|
+
useClass: SkyDataManagerResourcesProvider,
|
43
|
+
multi: true,
|
44
|
+
},
|
45
|
+
], imports: [SkyI18nModule] }); }
|
46
|
+
}
|
47
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyDataManagerResourcesModule, decorators: [{
|
48
|
+
type: NgModule,
|
49
|
+
args: [{
|
50
|
+
exports: [SkyI18nModule],
|
51
|
+
providers: [
|
52
|
+
{
|
53
|
+
provide: SKY_LIB_RESOURCES_PROVIDERS,
|
54
|
+
useClass: SkyDataManagerResourcesProvider,
|
55
|
+
multi: true,
|
56
|
+
},
|
57
|
+
],
|
58
|
+
}]
|
59
|
+
}] });
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2t5LWRhdGEtbWFuYWdlci1yZXNvdXJjZXMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGEtbWFuYWdlci9zcmMvbGliL21vZHVsZXMvc2hhcmVkL3NreS1kYXRhLW1hbmFnZXItcmVzb3VyY2VzLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUNILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUNMLDJCQUEyQixFQUUzQixhQUFhLEVBR2IscUJBQXFCLEdBQ3RCLE1BQU0sYUFBYSxDQUFDOztBQUVyQixNQUFNLFNBQVMsR0FBMEM7SUFDdkQsT0FBTyxFQUFFO1FBQ1Asc0NBQXNDLEVBQUU7WUFDdEMsT0FBTyxFQUFFLG9DQUFvQztTQUM5QztRQUNELDZDQUE2QyxFQUFFLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRTtRQUMzRSxzQ0FBc0MsRUFBRSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUU7UUFDN0QsMENBQTBDLEVBQUUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFO1FBQ3JFLHlDQUF5QyxFQUFFLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRTtRQUNuRSw2Q0FBNkMsRUFBRTtZQUM3QyxPQUFPLEVBQUUsMEJBQTBCO1NBQ3BDO1FBQ0QsdUNBQXVDLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFO1FBQy9ELHVEQUF1RCxFQUFFO1lBQ3ZELE9BQU8sRUFBRSw2QkFBNkI7U0FDdkM7S0FDRjtDQUNGLENBQUM7QUFFRixNQUFNLE9BQU8sK0JBQStCO0lBR25DLFNBQVMsQ0FDZCxVQUE0QixFQUM1QixJQUFZO1FBRVosT0FBTyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNuRSxDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQVdILE1BQU0sT0FBTyw2QkFBNkI7OEdBQTdCLDZCQUE2QjsrR0FBN0IsNkJBQTZCLFlBVDlCLGFBQWE7K0dBU1osNkJBQTZCLGFBUjdCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLDJCQUEyQjtnQkFDcEMsUUFBUSxFQUFFLCtCQUErQjtnQkFDekMsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGLFlBUFMsYUFBYTs7MkZBU1osNkJBQTZCO2tCQVZ6QyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLGFBQWEsQ0FBQztvQkFDeEIsU0FBUyxFQUFFO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSwyQkFBMkI7NEJBQ3BDLFFBQVEsRUFBRSwrQkFBK0I7NEJBQ3pDLEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBOT1RJQ0U6IERPIE5PVCBNT0RJRlkgVEhJUyBGSUxFIVxuICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSB3ZXJlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5XG4gKiB0aGUgJ25nIGdlbmVyYXRlIEBza3l1eC9pMThuOmxpYi1yZXNvdXJjZXMtbW9kdWxlIGxpYi9tb2R1bGVzL3NoYXJlZC9za3ktZGF0YS1tYW5hZ2VyJyBzY2hlbWF0aWMuXG4gKiBUbyB1cGRhdGUgdGhpcyBmaWxlLCBzaW1wbHkgcmVydW4gdGhlIGNvbW1hbmQuXG4gKi9cbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBTS1lfTElCX1JFU09VUkNFU19QUk9WSURFUlMsXG4gIFNreUFwcExvY2FsZUluZm8sXG4gIFNreUkxOG5Nb2R1bGUsXG4gIFNreUxpYlJlc291cmNlcyxcbiAgU2t5TGliUmVzb3VyY2VzUHJvdmlkZXIsXG4gIGdldExpYlN0cmluZ0ZvckxvY2FsZSxcbn0gZnJvbSAnQHNreXV4L2kxOG4nO1xuXG5jb25zdCBSRVNPVVJDRVM6IHsgW2xvY2FsZTogc3RyaW5nXTogU2t5TGliUmVzb3VyY2VzIH0gPSB7XG4gICdFTi1VUyc6IHtcbiAgICBza3l1eF9kYXRhX21hbmFnZXJfY29sdW1uX3BpY2tlcl90aXRsZToge1xuICAgICAgbWVzc2FnZTogJ0Nob29zZSBjb2x1bW5zIHRvIHNob3cgaW4gdGhlIGxpc3QnLFxuICAgIH0sXG4gICAgc2t5dXhfZGF0YV9tYW5hZ2VyX2FwcGx5X2NoYW5nZXNfYnV0dG9uX3RpdGxlOiB7IG1lc3NhZ2U6ICdBcHBseSBjaGFuZ2VzJyB9LFxuICAgIHNreXV4X2RhdGFfbWFuYWdlcl9jYW5jZWxfYnV0dG9uX3RpdGxlOiB7IG1lc3NhZ2U6ICdDYW5jZWwnIH0sXG4gICAgc2t5dXhfZGF0YV9tYW5hZ2VyX3NlbGVjdF9hbGxfYnV0dG9uX3RpdGxlOiB7IG1lc3NhZ2U6ICdTZWxlY3QgYWxsJyB9LFxuICAgIHNreXV4X2RhdGFfbWFuYWdlcl9jbGVhcl9hbGxfYnV0dG9uX3RpdGxlOiB7IG1lc3NhZ2U6ICdDbGVhciBhbGwnIH0sXG4gICAgc2t5dXhfZGF0YV9tYW5hZ2VyX3Nob3dfc2VsZWN0ZWRfb3B0aW9uX3RpdGxlOiB7XG4gICAgICBtZXNzYWdlOiAnU2hvdyBvbmx5IHNlbGVjdGVkIGl0ZW1zJyxcbiAgICB9LFxuICAgIHNreXV4X2RhdGFfbWFuYWdlcl9jb2x1bW5zX2J1dHRvbl90aXRsZTogeyBtZXNzYWdlOiAnQ29sdW1ucycgfSxcbiAgICBza3l1eF9kYXRhX21hbmFnZXJfc2VsZWN0X2NvbHVtbl9zdGF0dXNfaW5kaWNhdG9yX3RpdGxlOiB7XG4gICAgICBtZXNzYWdlOiAnU2VsZWN0IGF0IGxlYXN0IG9uZSBjb2x1bW4uJyxcbiAgICB9LFxuICB9LFxufTtcblxuZXhwb3J0IGNsYXNzIFNreURhdGFNYW5hZ2VyUmVzb3VyY2VzUHJvdmlkZXJcbiAgaW1wbGVtZW50cyBTa3lMaWJSZXNvdXJjZXNQcm92aWRlclxue1xuICBwdWJsaWMgZ2V0U3RyaW5nKFxuICAgIGxvY2FsZUluZm86IFNreUFwcExvY2FsZUluZm8sXG4gICAgbmFtZTogc3RyaW5nXG4gICk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIGdldExpYlN0cmluZ0ZvckxvY2FsZShSRVNPVVJDRVMsIGxvY2FsZUluZm8ubG9jYWxlLCBuYW1lKTtcbiAgfVxufVxuXG4vKipcbiAqIEltcG9ydCBpbnRvIGFueSBjb21wb25lbnQgbGlicmFyeSBtb2R1bGUgdGhhdCBuZWVkcyB0byB1c2UgcmVzb3VyY2Ugc3RyaW5ncy5cbiAqL1xuQE5nTW9kdWxlKHtcbiAgZXhwb3J0czogW1NreUkxOG5Nb2R1bGVdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBTS1lfTElCX1JFU09VUkNFU19QUk9WSURFUlMsXG4gICAgICB1c2VDbGFzczogU2t5RGF0YU1hbmFnZXJSZXNvdXJjZXNQcm92aWRlcixcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFNreURhdGFNYW5hZ2VyUmVzb3VyY2VzTW9kdWxlIHt9XG4iXX0=
|