@datarailsshared/datarailsshared 1.4.187 → 1.4.188
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/bundles/datarailsshared-datarailsshared.umd.js +884 -0
- package/bundles/datarailsshared-datarailsshared.umd.js.map +1 -1
- package/datarailsshared-datarailsshared-1.4.188.tgz +0 -0
- package/datarailsshared-datarailsshared.d.ts +1 -0
- package/datarailsshared-datarailsshared.metadata.json +1 -1
- package/esm2015/datarailsshared-datarailsshared.js +2 -1
- package/esm2015/lib/dr-treeview/components/treeview/treeview.component.js +210 -0
- package/esm2015/lib/dr-treeview/components/treeview-item/treeview-item.component.js +58 -0
- package/esm2015/lib/dr-treeview/dr-tree-view.module.js +38 -0
- package/esm2015/lib/dr-treeview/helpers/treeview-event-parser.js +97 -0
- package/esm2015/lib/dr-treeview/helpers/treeview-helper.js +82 -0
- package/esm2015/lib/dr-treeview/models/treeview-config.js +22 -0
- package/esm2015/lib/dr-treeview/models/treeview-header-template-context.js +2 -0
- package/esm2015/lib/dr-treeview/models/treeview-i18n.js +42 -0
- package/esm2015/lib/dr-treeview/models/treeview-item-template-context.js +2 -0
- package/esm2015/lib/dr-treeview/models/treeview-item.js +155 -0
- package/esm2015/lib/dr-treeview/pipes/treeview.pipe.js +17 -0
- package/esm2015/public-api.js +10 -1
- package/fesm2015/datarailsshared-datarailsshared.js +695 -2
- package/fesm2015/datarailsshared-datarailsshared.js.map +1 -1
- package/lib/dr-treeview/components/treeview/treeview.component.d.ts +39 -0
- package/lib/dr-treeview/components/treeview-item/treeview-item.component.d.ts +15 -0
- package/lib/dr-treeview/dr-tree-view.module.d.ts +4 -0
- package/lib/dr-treeview/helpers/treeview-event-parser.d.ts +21 -0
- package/lib/dr-treeview/helpers/treeview-helper.d.ts +16 -0
- package/lib/dr-treeview/models/treeview-config.d.ts +15 -0
- package/lib/dr-treeview/models/treeview-header-template-context.d.ts +9 -0
- package/lib/dr-treeview/models/treeview-i18n.d.ts +15 -0
- package/lib/dr-treeview/models/treeview-item-template-context.d.ts +6 -0
- package/lib/dr-treeview/models/treeview-item.d.ts +35 -0
- package/lib/dr-treeview/pipes/treeview.pipe.d.ts +5 -0
- package/package.json +1 -1
- package/public-api.d.ts +9 -0
- package/datarailsshared-datarailsshared-1.4.187.tgz +0 -0
|
@@ -29,6 +29,7 @@ export { TooltipInfoSimpleComponent as ɵo } from './lib/dr-tooltip/components/t
|
|
|
29
29
|
export { TooltipInfoComponent as ɵn } from './lib/dr-tooltip/components/tooltip-info/tooltip-info.component';
|
|
30
30
|
export { TooltipNoBodyComponent as ɵp } from './lib/dr-tooltip/components/tooltip-no-body/tooltip-no-body.component';
|
|
31
31
|
export { TooltipProcessDefaultComponent as ɵq } from './lib/dr-tooltip/components/tooltip-process-default/tooltip-process-default.component';
|
|
32
|
+
export { TreeviewItemComponent as ɵbd } from './lib/dr-treeview/components/treeview-item/treeview-item.component';
|
|
32
33
|
export { POPUP_ANIMATION as ɵb } from './lib/models/constants';
|
|
33
34
|
export { StepperComponent as ɵt } from './lib/stepper/stepper.component';
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXJhaWxzc2hhcmVkLWRhdGFyYWlsc3NoYXJlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2RhdGFyYWlsc3NoYXJlZC9zcmMvZGF0YXJhaWxzc2hhcmVkLWRhdGFyYWlsc3NoYXJlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDO0FBRTdCLE9BQU8sRUFBQyxVQUFVLElBQUksRUFBRSxFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDakUsT0FBTyxFQUFDLHNCQUFzQixJQUFJLEdBQUcsRUFBQyxNQUFNLGlEQUFpRCxDQUFDO0FBQzlGLE9BQU8sRUFBQyxtQkFBbUIsSUFBSSxFQUFFLEVBQUMsTUFBTSxnREFBZ0QsQ0FBQztBQUN6RixPQUFPLEVBQUMsc0JBQXNCLElBQUksRUFBRSxFQUFDLE1BQU0sc0RBQXNELENBQUM7QUFDbEcsT0FBTyxFQUFDLDRCQUE0QixJQUFJLEVBQUUsRUFBQyxNQUFNLG9GQUFvRixDQUFDO0FBQ3RJLE9BQU8sRUFBQywwQkFBMEIsSUFBSSxFQUFFLEVBQUMsTUFBTSxrRkFBa0YsQ0FBQztBQUNsSSxPQUFPLEVBQUMsMEJBQTBCLElBQUksRUFBRSxFQUFDLE1BQU0sZ0ZBQWdGLENBQUM7QUFDaEksT0FBTyxFQUFDLDBCQUEwQixJQUFJLEVBQUUsRUFBQyxNQUFNLGdGQUFnRixDQUFDO0FBQ2hJLE9BQU8sRUFBQywwQkFBMEIsSUFBSSxFQUFFLEVBQUMsTUFBTSw4REFBOEQsQ0FBQztBQUM5RyxPQUFPLEVBQUMsc0JBQXNCLElBQUksRUFBRSxFQUFDLE1BQU0seURBQXlELENBQUM7QUFDckcsT0FBTyxFQUFDLDJCQUEyQixJQUFJLEVBQUUsRUFBQyxNQUFNLGdGQUFnRixDQUFDO0FBQ2pJLE9BQU8sRUFBQyxzQkFBc0IsSUFBSSxFQUFFLEVBQUMsTUFBTSxvRUFBb0UsQ0FBQztBQUNoSCxPQUFPLEVBQUMscUJBQXFCLElBQUksRUFBRSxFQUFDLE1BQU0sK0NBQStDLENBQUM7QUFDMUYsT0FBTyxFQUFDLGtCQUFrQixJQUFJLEVBQUUsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBQ3BGLE9BQU8sRUFBQywyQkFBMkIsSUFBSSxFQUFFLEVBQUMsTUFBTSx5RUFBeUUsQ0FBQztBQUMxSCxPQUFPLEVBQUMsa0NBQWtDLElBQUksRUFBRSxFQUFDLE1BQU0sb0dBQW9HLENBQUM7QUFDNUosT0FBTyxFQUFDLHFCQUFxQixJQUFJLEVBQUUsRUFBQyxNQUFNLHNFQUFzRSxDQUFDO0FBQ2pILE9BQU8sRUFBQyxpQ0FBaUMsSUFBSSxFQUFFLEVBQUMsTUFBTSxrR0FBa0csQ0FBQztBQUN6SixPQUFPLEVBQUMsbUJBQW1CLElBQUksRUFBRSxFQUFDLE1BQU0scURBQXFELENBQUM7QUFDOUYsT0FBTyxFQUFDLG1CQUFtQixJQUFJLEVBQUUsRUFBQyxNQUFNLDhEQUE4RCxDQUFDO0FBQ3ZHLE9BQU8sRUFBQyx3QkFBd0IsSUFBSSxFQUFFLEVBQUMsTUFBTSxpRUFBaUUsQ0FBQztBQUMvRyxPQUFPLEVBQUMsZ0NBQWdDLElBQUksR0FBRyxFQUFDLE1BQU0sNEZBQTRGLENBQUM7QUFDbkosT0FBTyxFQUFDLG1DQUFtQyxJQUFJLEdBQUcsRUFBQyxNQUFNLG9HQUFvRyxDQUFDO0FBQzlKLE9BQU8sRUFBQywwQkFBMEIsSUFBSSxFQUFFLEVBQUMsTUFBTSwrRUFBK0UsQ0FBQztBQUMvSCxPQUFPLEVBQUMsb0JBQW9CLElBQUksRUFBRSxFQUFDLE1BQU0saUVBQWlFLENBQUM7QUFDM0csT0FBTyxFQUFDLHNCQUFzQixJQUFJLEVBQUUsRUFBQyxNQUFNLHVFQUF1RSxDQUFDO0FBQ25ILE9BQU8sRUFBQyw4QkFBOEIsSUFBSSxFQUFFLEVBQUMsTUFBTSx1RkFBdUYsQ0FBQztBQUMzSSxPQUFPLEVBQUMscUJBQXFCLElBQUksR0FBRyxFQUFDLE1BQU0sb0VBQW9FLENBQUM7QUFDaEgsT0FBTyxFQUFDLGVBQWUsSUFBSSxFQUFFLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEVBQUMsZ0JBQWdCLElBQUksRUFBRSxFQUFDLE1BQU0saUNBQWlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG5cbmV4cG9ydCB7Y29tcG9uZW50cyBhcyDJtWF9IGZyb20gJy4vbGliL2RhdGUtdGFncy9kYXRlLXRhZy5tb2R1bGUnO1xuZXhwb3J0IHtEckJhZGdlU3RhdHVzQ29tcG9uZW50IGFzIMm1YmN9IGZyb20gJy4vbGliL2RyLWJhZGdlLXN0YXR1cy9kci1iYWRnZS1zdGF0dXMuY29tcG9uZW50JztcbmV4cG9ydCB7RHJDaGF0Rm9ybUNvbXBvbmVudCBhcyDJtWV9IGZyb20gJy4vbGliL2RyLWNoYXQvZHItY2hhdC1mb3JtL2NoYXQtZm9ybS5jb21wb25lbnQnO1xuZXhwb3J0IHtEckNoYXRNZXNzYWdlQ29tcG9uZW50IGFzIMm1ZH0gZnJvbSAnLi9saWIvZHItY2hhdC9kci1jaGF0LW1lc3NhZ2UvY2hhdC1tZXNzYWdlLmNvbXBvbmVudCc7XG5leHBvcnQge0RyQ2hhdEN1c3RvbU1lc3NhZ2VEaXJlY3RpdmUgYXMgybV6fSBmcm9tICcuL2xpYi9kci1jaGF0L2RyLWNoYXQtbWVzc2FnZS9kci1jaGF0LW1lc3NhZ2UtY3VzdG9tL2NoYXQtY3VzdG9tLW1lc3NhZ2UuZGlyZWN0aXZlJztcbmV4cG9ydCB7RHJDaGF0Q3VzdG9tTWVzc2FnZVNlcnZpY2UgYXMgybVjfSBmcm9tICcuL2xpYi9kci1jaGF0L2RyLWNoYXQtbWVzc2FnZS9kci1jaGF0LW1lc3NhZ2UtY3VzdG9tL2NoYXQtY3VzdG9tLW1lc3NhZ2Uuc2VydmljZSc7XG5leHBvcnQge0RyQ2hhdE1lc3NhZ2VGaWxlQ29tcG9uZW50IGFzIMm1eH0gZnJvbSAnLi9saWIvZHItY2hhdC9kci1jaGF0LW1lc3NhZ2UvZHItY2hhdC1tZXNzYWdlLWZpbGUvY2hhdC1tZXNzYWdlLWZpbGUuY29tcG9uZW50JztcbmV4cG9ydCB7RHJDaGF0TWVzc2FnZVRleHRDb21wb25lbnQgYXMgybV3fSBmcm9tICcuL2xpYi9kci1jaGF0L2RyLWNoYXQtbWVzc2FnZS9kci1jaGF0LW1lc3NhZ2UtdGV4dC9jaGF0LW1lc3NhZ2UtdGV4dC5jb21wb25lbnQnO1xuZXhwb3J0IHtEckNoYXRTdWdnZXN0aW9uc0NvbXBvbmVudCBhcyDJtWZ9IGZyb20gJy4vbGliL2RyLWNoYXQvZHItY2hhdC1zdWdnZXN0aW9ucy9jaGF0LXN1Z2dlc3Rpb25zLmNvbXBvbmVudCc7XG5leHBvcnQge0RyRG90Rmxhc2hpbmdDb21wb25lbnQgYXMgybV5fSBmcm9tICcuL2xpYi9kci1jaGF0L2RyLWRvdC1mbGFzaGluZy9kci1kb3QtZmxhc2hpbmcuY29tcG9uZW50JztcbmV4cG9ydCB7RGlhbG9nTW9kYWxXcmFwcGVyQ29tcG9uZW50IGFzIMm1dn0gZnJvbSAnLi9saWIvZHItZGlhbG9nL2NvbXBvbmVudHMvZGlhbG9nLW1vZGFsLXdyYXBwZXIvZGlhbG9nLW1vZGFsLXdyYXBwZXIuY29tcG9uZW50JztcbmV4cG9ydCB7RGlhbG9nV3JhcHBlckNvbXBvbmVudCBhcyDJtXV9IGZyb20gJy4vbGliL2RyLWRpYWxvZy9jb21wb25lbnRzL2RpYWxvZy13cmFwcGVyL2RpYWxvZy13cmFwcGVyLmNvbXBvbmVudCc7XG5leHBvcnQge0RyRHluYW1pY1RhZ0NvbXBvbmVudCBhcyDJtXN9IGZyb20gJy4vbGliL2RyLWR5bmFtaWMtdGFnL2RyLWR5bmFtaWMtdGFnLmNvbXBvbmVudCc7XG5leHBvcnQge0RyRHluYW1pY1RhZ01vZHVsZSBhcyDJtXJ9IGZyb20gJy4vbGliL2RyLWR5bmFtaWMtdGFnL2RyLWR5bmFtaWMtdGFnLm1vZHVsZSc7XG5leHBvcnQge0RyRGF0ZVBpY2tlckZvcm1hdERpcmVjdGl2ZSBhcyDJtWp9IGZyb20gJy4vbGliL2RyLWlucHV0cy9kYXRlLXBpY2tlcnMvZGlyZWN0aXZlcy9kci1kYXRlLXBpY2tlci1mb3JtYXQuZGlyZWN0aXZlJztcbmV4cG9ydCB7RHJEYXRlUGlja2VyV2l0aFRpbWVmcmFtZUNvbXBvbmVudCBhcyDJtWl9IGZyb20gJy4vbGliL2RyLWlucHV0cy9kYXRlLXBpY2tlcnMvZHItZGF0ZS1waWNrZXItd2l0aC10aW1lZnJhbWUvZHItZGF0ZS1waWNrZXItd2l0aC10aW1lZnJhbWUuY29tcG9uZW50JztcbmV4cG9ydCB7RHJEYXRlUGlja2VyQ29tcG9uZW50IGFzIMm1Z30gZnJvbSAnLi9saWIvZHItaW5wdXRzL2RhdGUtcGlja2Vycy9kci1kYXRlLXBpY2tlci9kci1kYXRlLXBpY2tlci5jb21wb25lbnQnO1xuZXhwb3J0IHtEckRhdGVQaWNrZXJDdXN0b21IZWFkZXJDb21wb25lbnQgYXMgybVrfSBmcm9tICcuL2xpYi9kci1pbnB1dHMvZGF0ZS1waWNrZXJzL2RyLWRhdGUtcGlja2VyX2N1c3RvbS1oZWFkZXIvZHItZGF0ZS1waWNrZXJfY3VzdG9tLWhlYWRlci5jb21wb25lbnQnO1xuZXhwb3J0IHtEclNob3dUaW1lZnJhbWVQaXBlIGFzIMm1bH0gZnJvbSAnLi9saWIvZHItaW5wdXRzL2RhdGUtcGlja2Vycy9kci1zaG93LXRpbWVmcmFtZS5waXBlJztcbmV4cG9ydCB7RHJEYXRlUGlja2VyU2VydmljZSBhcyDJtWh9IGZyb20gJy4vbGliL2RyLWlucHV0cy9kYXRlLXBpY2tlcnMvc2VydmljZXMvZHItZGF0ZS1waWNrZXIuc2VydmljZSc7XG5leHBvcnQge0RyU2VsZWN0QWRkSXRlbUNvbXBvbmVudCBhcyDJtW19IGZyb20gJy4vbGliL2RyLWlucHV0cy9kci1zZWxlY3QtYWRkLWl0ZW0vZHItc2VsZWN0LWFkZC1pdGVtLmNvbXBvbmVudCc7XG5leHBvcnQge0RyU2NlbmFyaW9Db25maWd1cmF0aW9uQ29tcG9uZW50IGFzIMm1YmF9IGZyb20gJy4vbGliL2RyLXNjZW5hcmlvL2NvbXBvbmVudHMvZHItc2NlbmFyaW8tY29uZmlndXJhdGlvbi9kci1zY2VuYXJpby1jb25maWd1cmF0aW9uLmNvbXBvbmVudCc7XG5leHBvcnQge0RyU2NlbmFyaW9UYWdDb25maWd1cmF0aW9uQ29tcG9uZW50IGFzIMm1YmJ9IGZyb20gJy4vbGliL2RyLXNjZW5hcmlvL2NvbXBvbmVudHMvZHItc2NlbmFyaW8tdGFnLWNvbmZpZ3VyYXRpb24vZHItc2NlbmFyaW8tdGFnLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50JztcbmV4cG9ydCB7VG9vbHRpcEluZm9TaW1wbGVDb21wb25lbnQgYXMgybVvfSBmcm9tICcuL2xpYi9kci10b29sdGlwL2NvbXBvbmVudHMvdG9vbHRpcC1pbmZvLXNpbXBsZS90b29sdGlwLWluZm8tc2ltcGxlLmNvbXBvbmVudCc7XG5leHBvcnQge1Rvb2x0aXBJbmZvQ29tcG9uZW50IGFzIMm1bn0gZnJvbSAnLi9saWIvZHItdG9vbHRpcC9jb21wb25lbnRzL3Rvb2x0aXAtaW5mby90b29sdGlwLWluZm8uY29tcG9uZW50JztcbmV4cG9ydCB7VG9vbHRpcE5vQm9keUNvbXBvbmVudCBhcyDJtXB9IGZyb20gJy4vbGliL2RyLXRvb2x0aXAvY29tcG9uZW50cy90b29sdGlwLW5vLWJvZHkvdG9vbHRpcC1uby1ib2R5LmNvbXBvbmVudCc7XG5leHBvcnQge1Rvb2x0aXBQcm9jZXNzRGVmYXVsdENvbXBvbmVudCBhcyDJtXF9IGZyb20gJy4vbGliL2RyLXRvb2x0aXAvY29tcG9uZW50cy90b29sdGlwLXByb2Nlc3MtZGVmYXVsdC90b29sdGlwLXByb2Nlc3MtZGVmYXVsdC5jb21wb25lbnQnO1xuZXhwb3J0IHtUcmVldmlld0l0ZW1Db21wb25lbnQgYXMgybViZH0gZnJvbSAnLi9saWIvZHItdHJlZXZpZXcvY29tcG9uZW50cy90cmVldmlldy1pdGVtL3RyZWV2aWV3LWl0ZW0uY29tcG9uZW50JztcbmV4cG9ydCB7UE9QVVBfQU5JTUFUSU9OIGFzIMm1Yn0gZnJvbSAnLi9saWIvbW9kZWxzL2NvbnN0YW50cyc7XG5leHBvcnQge1N0ZXBwZXJDb21wb25lbnQgYXMgybV0fSBmcm9tICcuL2xpYi9zdGVwcGVyL3N0ZXBwZXIuY29tcG9uZW50JzsiXX0=
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
|
+
import { isNil, includes } from 'lodash';
|
|
3
|
+
import { TreeviewI18n } from '../../models/treeview-i18n';
|
|
4
|
+
import { TreeviewItem } from '../../models/treeview-item';
|
|
5
|
+
import { TreeviewConfig } from '../../models/treeview-config';
|
|
6
|
+
import { TreeviewHelper } from '../../helpers/treeview-helper';
|
|
7
|
+
import { TreeviewEventParser } from '../../helpers/treeview-event-parser';
|
|
8
|
+
class FilterTreeviewItem extends TreeviewItem {
|
|
9
|
+
constructor(item) {
|
|
10
|
+
super({
|
|
11
|
+
text: item.text,
|
|
12
|
+
value: item.value,
|
|
13
|
+
disabled: item.disabled,
|
|
14
|
+
checked: item.checked,
|
|
15
|
+
collapsed: item.collapsed,
|
|
16
|
+
children: item.children
|
|
17
|
+
});
|
|
18
|
+
this.refItem = item;
|
|
19
|
+
}
|
|
20
|
+
updateRefChecked() {
|
|
21
|
+
this.children.forEach(child => {
|
|
22
|
+
if (child instanceof FilterTreeviewItem) {
|
|
23
|
+
child.updateRefChecked();
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
let refChecked = this.checked;
|
|
27
|
+
if (refChecked) {
|
|
28
|
+
for (const refChild of this.refItem.children) {
|
|
29
|
+
if (!refChild.checked) {
|
|
30
|
+
refChecked = false;
|
|
31
|
+
break;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
this.refItem.checked = refChecked;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export class TreeviewComponent {
|
|
39
|
+
constructor(i18n, defaultConfig, eventParser) {
|
|
40
|
+
this.i18n = i18n;
|
|
41
|
+
this.defaultConfig = defaultConfig;
|
|
42
|
+
this.eventParser = eventParser;
|
|
43
|
+
this.selectedChange = new EventEmitter();
|
|
44
|
+
this.filterChange = new EventEmitter();
|
|
45
|
+
this.filterText = '';
|
|
46
|
+
this.config = this.defaultConfig;
|
|
47
|
+
this.allItem = new TreeviewItem({ text: 'All', value: undefined });
|
|
48
|
+
}
|
|
49
|
+
get hasFilterItems() {
|
|
50
|
+
return !isNil(this.filterItems) && this.filterItems.length > 0;
|
|
51
|
+
}
|
|
52
|
+
get maxHeight() {
|
|
53
|
+
return `${this.config.maxHeight}`;
|
|
54
|
+
}
|
|
55
|
+
ngOnInit() {
|
|
56
|
+
this.createHeaderTemplateContext();
|
|
57
|
+
this.generateSelection();
|
|
58
|
+
}
|
|
59
|
+
ngOnChanges(changes) {
|
|
60
|
+
const itemsSimpleChange = changes.items;
|
|
61
|
+
if (!isNil(itemsSimpleChange) && !isNil(this.items)) {
|
|
62
|
+
this.updateFilterItems();
|
|
63
|
+
this.updateCollapsedOfAll();
|
|
64
|
+
this.raiseSelectedChange();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
onAllCollapseExpand() {
|
|
68
|
+
this.allItem.collapsed = !this.allItem.collapsed;
|
|
69
|
+
this.filterItems.forEach(item => item.setCollapsedRecursive(this.allItem.collapsed));
|
|
70
|
+
}
|
|
71
|
+
onFilterTextChange(text) {
|
|
72
|
+
this.filterText = text;
|
|
73
|
+
this.filterChange.emit(text);
|
|
74
|
+
this.updateFilterItems();
|
|
75
|
+
}
|
|
76
|
+
onAllCheckedChange() {
|
|
77
|
+
const checked = this.allItem.checked;
|
|
78
|
+
this.filterItems.forEach(item => {
|
|
79
|
+
item.setCheckedRecursive(checked);
|
|
80
|
+
if (item instanceof FilterTreeviewItem) {
|
|
81
|
+
item.updateRefChecked();
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
this.raiseSelectedChange();
|
|
85
|
+
}
|
|
86
|
+
onItemCheckedChange(item, checked) {
|
|
87
|
+
if (item instanceof FilterTreeviewItem) {
|
|
88
|
+
item.updateRefChecked();
|
|
89
|
+
}
|
|
90
|
+
this.updateCheckedOfAll();
|
|
91
|
+
this.raiseSelectedChange();
|
|
92
|
+
}
|
|
93
|
+
raiseSelectedChange() {
|
|
94
|
+
this.generateSelection();
|
|
95
|
+
const values = this.eventParser.getSelectedChange(this);
|
|
96
|
+
setTimeout(() => {
|
|
97
|
+
this.selectedChange.emit(values);
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
createHeaderTemplateContext() {
|
|
101
|
+
this.headerTemplateContext = {
|
|
102
|
+
config: this.config,
|
|
103
|
+
item: this.allItem,
|
|
104
|
+
onCheckedChange: () => this.onAllCheckedChange(),
|
|
105
|
+
onCollapseExpand: () => this.onAllCollapseExpand(),
|
|
106
|
+
onFilterTextChange: (text) => this.onFilterTextChange(text)
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
generateSelection() {
|
|
110
|
+
let checkedItems = [];
|
|
111
|
+
let uncheckedItems = [];
|
|
112
|
+
if (!isNil(this.items)) {
|
|
113
|
+
const selection = TreeviewHelper.concatSelection(this.items, checkedItems, uncheckedItems);
|
|
114
|
+
checkedItems = selection.checked;
|
|
115
|
+
uncheckedItems = selection.unchecked;
|
|
116
|
+
}
|
|
117
|
+
this.selection = {
|
|
118
|
+
checkedItems,
|
|
119
|
+
uncheckedItems
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
updateFilterItems() {
|
|
123
|
+
if (this.filterText !== '') {
|
|
124
|
+
const filterItems = [];
|
|
125
|
+
const filterText = this.filterText.toLowerCase();
|
|
126
|
+
this.items.forEach(item => {
|
|
127
|
+
const newItem = this.filterItem(item, filterText);
|
|
128
|
+
if (!isNil(newItem)) {
|
|
129
|
+
filterItems.push(newItem);
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
this.filterItems = filterItems;
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
this.filterItems = this.items;
|
|
136
|
+
}
|
|
137
|
+
this.updateCheckedOfAll();
|
|
138
|
+
}
|
|
139
|
+
filterItem(item, filterText) {
|
|
140
|
+
const isMatch = includes(item.text.toLowerCase(), filterText);
|
|
141
|
+
if (isMatch) {
|
|
142
|
+
return item;
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
if (!isNil(item.children)) {
|
|
146
|
+
const children = [];
|
|
147
|
+
item.children.forEach(child => {
|
|
148
|
+
const newChild = this.filterItem(child, filterText);
|
|
149
|
+
if (!isNil(newChild)) {
|
|
150
|
+
children.push(newChild);
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
if (children.length > 0) {
|
|
154
|
+
const newItem = new FilterTreeviewItem(item);
|
|
155
|
+
newItem.collapsed = false;
|
|
156
|
+
newItem.children = children;
|
|
157
|
+
return newItem;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return undefined;
|
|
162
|
+
}
|
|
163
|
+
updateCheckedOfAll() {
|
|
164
|
+
let itemChecked = null;
|
|
165
|
+
for (const filterItem of this.filterItems) {
|
|
166
|
+
if (itemChecked === null) {
|
|
167
|
+
itemChecked = filterItem.checked;
|
|
168
|
+
}
|
|
169
|
+
else if (itemChecked !== filterItem.checked) {
|
|
170
|
+
itemChecked = undefined;
|
|
171
|
+
break;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
if (itemChecked === null) {
|
|
175
|
+
itemChecked = false;
|
|
176
|
+
}
|
|
177
|
+
this.allItem.checked = itemChecked;
|
|
178
|
+
}
|
|
179
|
+
updateCollapsedOfAll() {
|
|
180
|
+
let hasItemExpanded = false;
|
|
181
|
+
for (const filterItem of this.filterItems) {
|
|
182
|
+
if (!filterItem.collapsed) {
|
|
183
|
+
hasItemExpanded = true;
|
|
184
|
+
break;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
this.allItem.collapsed = !hasItemExpanded;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
TreeviewComponent.decorators = [
|
|
191
|
+
{ type: Component, args: [{
|
|
192
|
+
selector: 'ngx-treeview',
|
|
193
|
+
template: "<ng-template #defaultItemTemplate let-item=\"item\" let-onCollapseExpand=\"onCollapseExpand\"\n let-onCheckedChange=\"onCheckedChange\">\n <div class=\"form-inline row-item\">\n <i *ngIf=\"item.children\" (click)=\"onCollapseExpand()\" aria-hidden=\"true\" [ngSwitch]=\"item.collapsed\">\n <svg *ngSwitchCase=\"true\" width=\"0.8rem\" height=\"0.8rem\" viewBox=\"0 0 16 16\" class=\"bi bi-caret-right-fill\"\n fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M12.14 8.753l-5.482 4.796c-.646.566-1.658.106-1.658-.753V3.204a1 1 0 0 1 1.659-.753l5.48 4.796a1 1 0 0 1 0 1.506z\" />\n </svg>\n <svg *ngSwitchCase=\"false\" width=\"0.8rem\" height=\"0.8rem\" viewBox=\"0 0 16 16\" class=\"bi bi-caret-down-fill\"\n fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M7.247 11.14L2.451 5.658C1.885 5.013 2.345 4 3.204 4h9.592a1 1 0 0 1 .753 1.659l-4.796 5.48a1 1 0 0 1-1.506 0z\" />\n </svg>\n </i>\n <div class=\"form-check\">\n <input type=\"checkbox\" class=\"form-check-input\" [(ngModel)]=\"item.checked\" (ngModelChange)=\"onCheckedChange()\"\n [disabled]=\"item.disabled\" [indeterminate]=\"item.indeterminate\" />\n <label class=\"form-check-label\" (click)=\"item.checked = !item.checked; onCheckedChange()\">\n {{item.text}}\n </label>\n </div>\n </div>\n</ng-template>\n<ng-template #defaultHeaderTemplate let-config=\"config\" let-item=\"item\" let-onCollapseExpand=\"onCollapseExpand\"\n let-onCheckedChange=\"onCheckedChange\" let-onFilterTextChange=\"onFilterTextChange\">\n <div *ngIf=\"config.hasFilter\" class=\"row row-filter\">\n <div class=\"col-12\">\n <input class=\"form-control\" type=\"text\" [placeholder]=\"i18n.getFilterPlaceholder()\" [(ngModel)]=\"filterText\"\n (ngModelChange)=\"onFilterTextChange($event)\" />\n </div>\n </div>\n <div *ngIf=\"hasFilterItems\">\n <div *ngIf=\"config.hasAllCheckBox || config.hasCollapseExpand\" class=\"row row-all\">\n <div class=\"col-12\">\n <div class=\"form-check form-check-inline\" *ngIf=\"config.hasAllCheckBox\">\n <input type=\"checkbox\" class=\"form-check-input\" [(ngModel)]=\"item.checked\" (ngModelChange)=\"onCheckedChange()\"\n [indeterminate]=\"item.indeterminate\" />\n <label class=\"form-check-label\" (click)=\"item.checked = !item.checked; onCheckedChange()\">\n {{i18n.getAllCheckboxText()}}\n </label>\n </div>\n <label *ngIf=\"config.hasCollapseExpand\" class=\"float-right form-check-label\" (click)=\"onCollapseExpand()\">\n <i [title]=\"i18n.getTooltipCollapseExpandText(item.collapsed)\" aria-hidden=\"true\" [ngSwitch]=\"item.collapsed\">\n <svg *ngSwitchCase=\"true\" width=\"1em\" height=\"1em\" viewBox=\"0 0 16 16\" class=\"bi bi-arrows-angle-expand\"\n fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\"\n d=\"M1.5 10.036a.5.5 0 0 1 .5.5v3.5h3.5a.5.5 0 0 1 0 1h-4a.5.5 0 0 1-.5-.5v-4a.5.5 0 0 1 .5-.5z\" />\n <path fill-rule=\"evenodd\"\n d=\"M6.354 9.646a.5.5 0 0 1 0 .708l-4.5 4.5a.5.5 0 0 1-.708-.708l4.5-4.5a.5.5 0 0 1 .708 0zm8.5-8.5a.5.5 0 0 1 0 .708l-4.5 4.5a.5.5 0 0 1-.708-.708l4.5-4.5a.5.5 0 0 1 .708 0z\" />\n <path fill-rule=\"evenodd\"\n d=\"M10.036 1.5a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 .5.5v4a.5.5 0 1 1-1 0V2h-3.5a.5.5 0 0 1-.5-.5z\" />\n </svg>\n <svg *ngSwitchCase=\"false\" width=\"1em\" height=\"1em\" viewBox=\"0 0 16 16\" class=\"bi bi-arrows-angle-contract\"\n fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\"\n d=\"M9.5 2.036a.5.5 0 0 1 .5.5v3.5h3.5a.5.5 0 0 1 0 1h-4a.5.5 0 0 1-.5-.5v-4a.5.5 0 0 1 .5-.5z\" />\n <path fill-rule=\"evenodd\"\n d=\"M14.354 1.646a.5.5 0 0 1 0 .708l-4.5 4.5a.5.5 0 1 1-.708-.708l4.5-4.5a.5.5 0 0 1 .708 0zm-7.5 7.5a.5.5 0 0 1 0 .708l-4.5 4.5a.5.5 0 0 1-.708-.708l4.5-4.5a.5.5 0 0 1 .708 0z\" />\n <path fill-rule=\"evenodd\"\n d=\"M2.036 9.5a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 .5.5v4a.5.5 0 0 1-1 0V10h-3.5a.5.5 0 0 1-.5-.5z\" />\n </svg>\n </i>\n </label>\n </div>\n </div>\n <div *ngIf=\"config.hasDivider\" class=\"dropdown-divider\"></div>\n </div>\n</ng-template>\n<div class=\"treeview-header\">\n <ng-template [ngTemplateOutlet]=\"headerTemplate || defaultHeaderTemplate\"\n [ngTemplateOutletContext]=\"headerTemplateContext\">\n </ng-template>\n</div>\n<div [ngSwitch]=\"hasFilterItems\">\n <div *ngSwitchCase=\"true\" class=\"treeview-container\" [style.max-height.px]=\"maxHeight\">\n <ngx-treeview-item *ngFor=\"let item of filterItems\" [config]=\"config\" [item]=\"item\"\n [template]=\"itemTemplate || defaultItemTemplate\" (checkedChange)=\"onItemCheckedChange(item, $event)\">\n </ngx-treeview-item>\n </div>\n <div *ngSwitchCase=\"false\" class=\"treeview-text\">\n {{i18n.getFilterNoItemsFoundText()}}\n </div>\n</div>\n",
|
|
194
|
+
styles: [":host .treeview-header .row-filter{margin-bottom:.5rem}:host .treeview-header .row-all .bi{cursor:pointer}:host .treeview-container .row-item{margin-bottom:.3rem;flex-wrap:nowrap}:host .treeview-container .row-item .bi{cursor:pointer;margin-right:.3rem}.treeview-container{overflow-y:auto;padding-right:.3rem}.treeview-text{padding:.3rem 0;white-space:nowrap}\n"]
|
|
195
|
+
},] }
|
|
196
|
+
];
|
|
197
|
+
TreeviewComponent.ctorParameters = () => [
|
|
198
|
+
{ type: TreeviewI18n },
|
|
199
|
+
{ type: TreeviewConfig },
|
|
200
|
+
{ type: TreeviewEventParser }
|
|
201
|
+
];
|
|
202
|
+
TreeviewComponent.propDecorators = {
|
|
203
|
+
headerTemplate: [{ type: Input }],
|
|
204
|
+
itemTemplate: [{ type: Input }],
|
|
205
|
+
items: [{ type: Input }],
|
|
206
|
+
config: [{ type: Input }],
|
|
207
|
+
selectedChange: [{ type: Output }],
|
|
208
|
+
filterChange: [{ type: Output }]
|
|
209
|
+
};
|
|
210
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YXJhaWxzc2hhcmVkL3NyYy9saWIvZHItdHJlZXZpZXcvY29tcG9uZW50cy90cmVldmlldy90cmVldmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBaUQsTUFBTSxlQUFlLENBQUM7QUFDdEgsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQXFCLE1BQU0sNEJBQTRCLENBQUM7QUFDN0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUUxRSxNQUFNLGtCQUFtQixTQUFRLFlBQVk7SUFFM0MsWUFBWSxJQUFrQjtRQUM1QixLQUFLLENBQUM7WUFDSixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDakIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDekIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQ3hCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxL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LE1BQU07YUFDUDtTQUNGO1FBRUQsSUFBSSxXQUFXLEtBQUssSUFBSSxFQUFFO1lBQ3hCLFdBQVcsR0FBRyxLQUFLLENBQUM7U0FDckI7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUM7SUFDckMsQ0FBQztJQUVPLG9CQUFvQjtRQUMxQixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDNUIsS0FBSyxNQUFNLFVBQVUsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3pDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFO2dCQUN6QixlQUFlLEdBQUcsSUFBSSxDQUFDO2dCQUN2QixNQUFNO2FBQ1A7U0FDRjtRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLENBQUMsZUFBZSxDQUFDO0lBQzVDLENBQUM7OztZQXpMRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGNBQWM7Z0JBQ3hCLDJtS0FBd0M7O2FBRXpDOzs7WUE5Q1EsWUFBWTtZQUVaLGNBQWM7WUFJZCxtQkFBbUI7Ozs2QkEwQ3pCLEtBQUs7MkJBQ0wsS0FBSztvQkFDTCxLQUFLO3FCQUNMLEtBQUs7NkJBQ0wsTUFBTTsyQkFDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIFNpbXBsZUNoYW5nZXMsIE9uQ2hhbmdlcywgVGVtcGxhdGVSZWYsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNOaWwsIGluY2x1ZGVzIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFRyZWV2aWV3STE4biB9IGZyb20gJy4uLy4uL21vZGVscy90cmVldmlldy1pMThuJztcbmltcG9ydCB7IFRyZWV2aWV3SXRlbSwgVHJlZXZpZXdTZWxlY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvdHJlZXZpZXctaXRlbSc7XG5pbXBvcnQgeyBUcmVldmlld0NvbmZpZyB9IGZyb20gJy4uLy4uL21vZGVscy90cmVldmlldy1jb25maWcnO1xuaW1wb3J0IHsgVHJlZXZpZXdIZWFkZXJUZW1wbGF0ZUNvbnRleHQgfSBmcm9tICcuLi8uLi9tb2RlbHMvdHJlZXZpZXctaGVhZGVyLXRlbXBsYXRlLWNvbnRleHQnO1xuaW1wb3J0IHsgVHJlZXZpZXdJdGVtVGVtcGxhdGVDb250ZXh0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RyZWV2aWV3LWl0ZW0tdGVtcGxhdGUtY29udGV4dCc7XG5pbXBvcnQgeyBUcmVldmlld0hlbHBlciB9IGZyb20gJy4uLy4uL2hlbHBlcnMvdHJlZXZpZXctaGVscGVyJztcbmltcG9ydCB7IFRyZWV2aWV3RXZlbnRQYXJzZXIgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3RyZWV2aWV3LWV2ZW50LXBhcnNlcic7XG5cbmNsYXNzIEZpbHRlclRyZWV2aWV3SXRlbSBleHRlbmRzIFRyZWV2aWV3SXRlbSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVmSXRlbTogVHJlZXZpZXdJdGVtO1xuICBjb25zdHJ1Y3RvcihpdGVtOiBUcmVldmlld0l0ZW0pIHtcbiAgICBzdXBlcih7XG4gICAgICB0ZXh0OiBpdGVtLnRleHQsXG4gICAgICB2YWx1ZTogaXRlbS52YWx1ZSxcbiAgICAgIGRpc2FibGVkOiBpdGVtLmRpc2FibGVkLFxuICAgICAgY2hlY2tlZDogaXRlbS5jaGVja2VkLFxuICAgICAgY29sbGFwc2VkOiBpdGVtLmNvbGxhcHNlZCxcbiAgICAgIGNoaWxkcmVuOiBpdGVtLmNoaWxkcmVuXG4gICAgfSk7XG4gICAgdGhpcy5yZWZJdGVtID0gaXRlbTtcbiAgfVxuXG4gIHVwZGF0ZVJlZkNoZWNrZWQoKTogdm9pZCB7XG4gICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIEZpbHRlclRyZWV2aWV3SXRlbSkge1xuICAgICAgICBjaGlsZC51cGRhdGVSZWZDaGVja2VkKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBsZXQgcmVmQ2hlY2tlZCA9IHRoaXMuY2hlY2tlZDtcbiAgICBpZiAocmVmQ2hlY2tlZCkge1xuICAgICAgZm9yIChjb25zdCByZWZDaGlsZCBvZiB0aGlzLnJlZkl0ZW0uY2hpbGRyZW4pIHtcbiAgICAgICAgaWYgKCFyZWZDaGlsZC5jaGVja2VkKSB7XG4gICAgICAgICAgcmVmQ2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucmVmSXRlbS5jaGVja2VkID0gcmVmQ2hlY2tlZDtcbiAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtdHJlZXZpZXcnLFxuICB0ZW1wbGF0ZVVybDogJy4vdHJlZXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90cmVldmlldy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFRyZWV2aWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQge1xuICBASW5wdXQoKSBoZWFkZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8VHJlZXZpZXdIZWFkZXJUZW1wbGF0ZUNvbnRleHQ+O1xuICBASW5wdXQoKSBpdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPFRyZWV2aWV3SXRlbVRlbXBsYXRlQ29udGV4dD47XG4gIEBJbnB1dCgpIGl0ZW1zOiBUcmVldmlld0l0ZW1bXTtcbiAgQElucHV0KCkgY29uZmlnOiBUcmVldmlld0NvbmZpZztcbiAgQE91dHB1dCgpIHNlbGVjdGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcbiAgQE91dHB1dCgpIGZpbHRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBoZWFkZXJUZW1wbGF0ZUNvbnRleHQ6IFRyZWV2aWV3SGVhZGVyVGVtcGxhdGVDb250ZXh0O1xuICBhbGxJdGVtOiBUcmVldmlld0l0ZW07XG4gIGZpbHRlclRleHQgPSAnJztcbiAgZmlsdGVySXRlbXM6IFRyZWV2aWV3SXRlbVtdO1xuICBzZWxlY3Rpb246IFRyZWV2aWV3U2VsZWN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBpMThuOiBUcmVldmlld0kxOG4sXG4gICAgcHJpdmF0ZSBkZWZhdWx0Q29uZmlnOiBUcmVldmlld0NvbmZpZyxcbiAgICBwcml2YXRlIGV2ZW50UGFyc2VyOiBUcmVldmlld0V2ZW50UGFyc2VyXG4gICkge1xuICAgIHRoaXMuY29uZmlnID0gdGhpcy5kZWZhdWx0Q29uZmlnO1xuICAgIHRoaXMuYWxsSXRlbSA9IG5ldyBUcmVldmlld0l0ZW0oeyB0ZXh0OiAnQWxsJywgdmFsdWU6IHVuZGVmaW5lZCB9KTtcbiAgfVxuXG4gIGdldCBoYXNGaWx0ZXJJdGVtcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIWlzTmlsKHRoaXMuZmlsdGVySXRlbXMpICYmIHRoaXMuZmlsdGVySXRlbXMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGdldCBtYXhIZWlnaHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5jb25maWcubWF4SGVpZ2h0fWA7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNyZWF0ZUhlYWRlclRlbXBsYXRlQ29udGV4dCgpO1xuICAgIHRoaXMuZ2VuZXJhdGVTZWxlY3Rpb24oKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtc1NpbXBsZUNoYW5nZSA9IGNoYW5nZXMuaXRlbXM7XG4gICAgaWYgKCFpc05pbChpdGVtc1NpbXBsZUNoYW5nZSkgJiYgIWlzTmlsKHRoaXMuaXRlbXMpKSB7XG4gICAgICB0aGlzLnVwZGF0ZUZpbHRlckl0ZW1zKCk7XG4gICAgICB0aGlzLnVwZGF0ZUNvbGxhcHNlZE9mQWxsKCk7XG4gICAgICB0aGlzLnJhaXNlU2VsZWN0ZWRDaGFuZ2UoKTtcbiAgICB9XG4gIH1cblxuICBvbkFsbENvbGxhcHNlRXhwYW5kKCk6IHZvaWQge1xuICAgIHRoaXMuYWxsSXRlbS5jb2xsYXBzZWQgPSAhdGhpcy5hbGxJdGVtLmNvbGxhcHNlZDtcbiAgICB0aGlzLmZpbHRlckl0ZW1zLmZvckVhY2goaXRlbSA9PiBpdGVtLnNldENvbGxhcHNlZFJlY3Vyc2l2ZSh0aGlzLmFsbEl0ZW0uY29sbGFwc2VkKSk7XG4gIH1cblxuICBvbkZpbHRlclRleHRDaGFuZ2UodGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJUZXh0ID0gdGV4dDtcbiAgICB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KHRleHQpO1xuICAgIHRoaXMudXBkYXRlRmlsdGVySXRlbXMoKTtcbiAgfVxuXG4gIG9uQWxsQ2hlY2tlZENoYW5nZSgpOiB2b2lkIHtcbiAgICBjb25zdCBjaGVja2VkID0gdGhpcy5hbGxJdGVtLmNoZWNrZWQ7XG4gICAgdGhpcy5maWx0ZXJJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgaXRlbS5zZXRDaGVja2VkUmVjdXJzaXZlKGNoZWNrZWQpO1xuICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBGaWx0ZXJUcmVldmlld0l0ZW0pIHtcbiAgICAgICAgaXRlbS51cGRhdGVSZWZDaGVja2VkKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnJhaXNlU2VsZWN0ZWRDaGFuZ2UoKTtcbiAgfVxuXG4gIG9uSXRlbUNoZWNrZWRDaGFuZ2UoaXRlbTogVHJlZXZpZXdJdGVtLCBjaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBGaWx0ZXJUcmVldmlld0l0ZW0pIHtcbiAgICAgIGl0ZW0udXBkYXRlUmVmQ2hlY2tlZCgpO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlQ2hlY2tlZE9mQWxsKCk7XG4gICAgdGhpcy5yYWlzZVNlbGVjdGVkQ2hhbmdlKCk7XG4gIH1cblxuICByYWlzZVNlbGVjdGVkQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuZ2VuZXJhdGVTZWxlY3Rpb24oKTtcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmV2ZW50UGFyc2VyLmdldFNlbGVjdGVkQ2hhbmdlKHRoaXMpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zZWxlY3RlZENoYW5nZS5lbWl0KHZhbHVlcyk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUhlYWRlclRlbXBsYXRlQ29udGV4dCgpOiB2b2lkIHtcbiAgICB0aGlzLmhlYWRlclRlbXBsYXRlQ29udGV4dCA9IHtcbiAgICAgIGNvbmZpZzogdGhpcy5jb25maWcsXG4gICAgICBpdGVtOiB0aGlzLmFsbEl0ZW0sXG4gICAgICBvbkNoZWNrZWRDaGFuZ2U6ICgpID0+IHRoaXMub25BbGxDaGVja2VkQ2hhbmdlKCksXG4gICAgICBvbkNvbGxhcHNlRXhwYW5kOiAoKSA9PiB0aGlzLm9uQWxsQ29sbGFwc2VFeHBhbmQoKSxcbiAgICAgIG9uRmlsdGVyVGV4dENoYW5nZTogKHRleHQpID0+IHRoaXMub25GaWx0ZXJUZXh0Q2hhbmdlKHRleHQpXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgbGV0IGNoZWNrZWRJdGVtczogVHJlZXZpZXdJdGVtW10gPSBbXTtcbiAgICBsZXQgdW5jaGVja2VkSXRlbXM6IFRyZWV2aWV3SXRlbVtdID0gW107XG4gICAgaWYgKCFpc05pbCh0aGlzLml0ZW1zKSkge1xuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gVHJlZXZpZXdIZWxwZXIuY29uY2F0U2VsZWN0aW9uKHRoaXMuaXRlbXMsIGNoZWNrZWRJdGVtcywgdW5jaGVja2VkSXRlbXMpO1xuICAgICAgY2hlY2tlZEl0ZW1zID0gc2VsZWN0aW9uLmNoZWNrZWQ7XG4gICAgICB1bmNoZWNrZWRJdGVtcyA9IHNlbGVjdGlvbi51bmNoZWNrZWQ7XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3Rpb24gPSB7XG4gICAgICBjaGVja2VkSXRlbXMsXG4gICAgICB1bmNoZWNrZWRJdGVtc1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUZpbHRlckl0ZW1zKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZpbHRlclRleHQgIT09ICcnKSB7XG4gICAgICBjb25zdCBmaWx0ZXJJdGVtczogVHJlZXZpZXdJdGVtW10gPSBbXTtcbiAgICAgIGNvbnN0IGZpbHRlclRleHQgPSB0aGlzLmZpbHRlclRleHQudG9Mb3dlckNhc2UoKTtcbiAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgY29uc3QgbmV3SXRlbSA9IHRoaXMuZmlsdGVySXRlbShpdGVtLCBmaWx0ZXJUZXh0KTtcbiAgICAgICAgaWYgKCFpc05pbChuZXdJdGVtKSkge1xuICAgICAgICAgIGZpbHRlckl0ZW1zLnB1c2gobmV3SXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5maWx0ZXJJdGVtcyA9IGZpbHRlckl0ZW1zO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlckl0ZW1zID0gdGhpcy5pdGVtcztcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZUNoZWNrZWRPZkFsbCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaWx0ZXJJdGVtKGl0ZW06IFRyZWV2aWV3SXRlbSwgZmlsdGVyVGV4dDogc3RyaW5nKTogVHJlZXZpZXdJdGVtIHtcbiAgICBjb25zdCBpc01hdGNoID0gaW5jbHVkZXMoaXRlbS50ZXh0LnRvTG93ZXJDYXNlKCksIGZpbHRlclRleHQpO1xuICAgIGlmIChpc01hdGNoKSB7XG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFpc05pbChpdGVtLmNoaWxkcmVuKSkge1xuICAgICAgICBjb25zdCBjaGlsZHJlbjogVHJlZXZpZXdJdGVtW10gPSBbXTtcbiAgICAgICAgaXRlbS5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdDaGlsZCA9IHRoaXMuZmlsdGVySXRlbShjaGlsZCwgZmlsdGVyVGV4dCk7XG4gICAgICAgICAgaWYgKCFpc05pbChuZXdDaGlsZCkpIHtcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2gobmV3Q2hpbGQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgbmV3SXRlbSA9IG5ldyBGaWx0ZXJUcmVldmlld0l0ZW0oaXRlbSk7XG4gICAgICAgICAgbmV3SXRlbS5jb2xsYXBzZWQgPSBmYWxzZTtcbiAgICAgICAgICBuZXdJdGVtLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgICAgICAgcmV0dXJuIG5ld0l0ZW07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDaGVja2VkT2ZBbGwoKTogdm9pZCB7XG4gICAgbGV0IGl0ZW1DaGVja2VkOiBib29sZWFuID0gbnVsbDtcbiAgICBmb3IgKGNvbnN0IGZpbHRlckl0ZW0gb2YgdGhpcy5maWx0ZXJJdGVtcykge1xuICAgICAgaWYgKGl0ZW1DaGVja2VkID09PSBudWxsKSB7XG4gICAgICAgIGl0ZW1DaGVja2VkID0gZmlsdGVySXRlbS5jaGVja2VkO1xuICAgICAgfSBlbHNlIGlmIChpdGVtQ2hlY2tlZCAhPT0gZmlsdGVySXRlbS5jaGVja2VkKSB7XG4gICAgICAgIGl0ZW1DaGVja2VkID0gdW5kZWZpbmVkO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXRlbUNoZWNrZWQgPT09IG51bGwpIHtcbiAgICAgIGl0ZW1DaGVja2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5hbGxJdGVtLmNoZWNrZWQgPSBpdGVtQ2hlY2tlZDtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ29sbGFwc2VkT2ZBbGwoKTogdm9pZCB7XG4gICAgbGV0IGhhc0l0ZW1FeHBhbmRlZCA9IGZhbHNlO1xuICAgIGZvciAoY29uc3QgZmlsdGVySXRlbSBvZiB0aGlzLmZpbHRlckl0ZW1zKSB7XG4gICAgICBpZiAoIWZpbHRlckl0ZW0uY29sbGFwc2VkKSB7XG4gICAgICAgIGhhc0l0ZW1FeHBhbmRlZCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuYWxsSXRlbS5jb2xsYXBzZWQgPSAhaGFzSXRlbUV4cGFuZGVkO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import { isNil } from 'lodash';
|
|
3
|
+
import { TreeviewConfig } from '../../models/treeview-config';
|
|
4
|
+
export class TreeviewItemComponent {
|
|
5
|
+
constructor(defaultConfig) {
|
|
6
|
+
this.defaultConfig = defaultConfig;
|
|
7
|
+
this.checkedChange = new EventEmitter();
|
|
8
|
+
this.onCollapseExpand = () => {
|
|
9
|
+
this.item.collapsed = !this.item.collapsed;
|
|
10
|
+
};
|
|
11
|
+
this.onCheckedChange = () => {
|
|
12
|
+
const checked = this.item.checked;
|
|
13
|
+
if (!isNil(this.item.children) && !this.config.decoupleChildFromParent) {
|
|
14
|
+
this.item.children.forEach(child => child.setCheckedRecursive(checked));
|
|
15
|
+
}
|
|
16
|
+
this.checkedChange.emit(checked);
|
|
17
|
+
};
|
|
18
|
+
this.config = this.defaultConfig;
|
|
19
|
+
}
|
|
20
|
+
onChildCheckedChange(child, checked) {
|
|
21
|
+
if (!this.config.decoupleChildFromParent) {
|
|
22
|
+
let itemChecked = null;
|
|
23
|
+
for (const childItem of this.item.children) {
|
|
24
|
+
if (itemChecked === null) {
|
|
25
|
+
itemChecked = childItem.checked;
|
|
26
|
+
}
|
|
27
|
+
else if (itemChecked !== childItem.checked) {
|
|
28
|
+
itemChecked = undefined;
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (itemChecked === null) {
|
|
33
|
+
itemChecked = false;
|
|
34
|
+
}
|
|
35
|
+
if (this.item.checked !== itemChecked) {
|
|
36
|
+
this.item.checked = itemChecked;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
this.checkedChange.emit(checked);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
TreeviewItemComponent.decorators = [
|
|
43
|
+
{ type: Component, args: [{
|
|
44
|
+
selector: 'ngx-treeview-item',
|
|
45
|
+
template: "<div *ngIf=\"item\" class=\"treeview-item\">\n <ng-template [ngTemplateOutlet]=\"template\"\n [ngTemplateOutletContext]=\"{item: item, onCollapseExpand: onCollapseExpand, onCheckedChange: onCheckedChange}\">\n </ng-template>\n <div *ngIf=\"!item.collapsed\">\n <ngx-treeview-item [config]=\"config\" *ngFor=\"let child of item.children\" [item]=\"child\" [template]=\"template\"\n (checkedChange)=\"onChildCheckedChange(child, $event)\">\n </ngx-treeview-item>\n </div>\n</div>\n",
|
|
46
|
+
styles: [":host{display:block}:host .treeview-item{white-space:nowrap}:host .treeview-item .treeview-item{margin-left:2rem}\n"]
|
|
47
|
+
},] }
|
|
48
|
+
];
|
|
49
|
+
TreeviewItemComponent.ctorParameters = () => [
|
|
50
|
+
{ type: TreeviewConfig }
|
|
51
|
+
];
|
|
52
|
+
TreeviewItemComponent.propDecorators = {
|
|
53
|
+
config: [{ type: Input }],
|
|
54
|
+
template: [{ type: Input }],
|
|
55
|
+
item: [{ type: Input }],
|
|
56
|
+
checkedChange: [{ type: Output }]
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZXZpZXctaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhcmFpbHNzaGFyZWQvc3JjL2xpYi9kci10cmVldmlldy9jb21wb25lbnRzL3RyZWV2aWV3LWl0ZW0vdHJlZXZpZXctaXRlbS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUNwRixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRS9CLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQVE5RCxNQUFNLE9BQU8scUJBQXFCO0lBTWhDLFlBQ1UsYUFBNkI7UUFBN0Isa0JBQWEsR0FBYixhQUFhLENBQWdCO1FBSDdCLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQVF0RCxxQkFBZ0IsR0FBRyxHQUFHLEVBQUU7WUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUM3QyxDQUFDLENBQUE7UUFFRCxvQkFBZSxHQUFHLEdBQUcsRUFBRTtZQUNyQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLHVCQUF1QixFQUFFO2dCQUN0RSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQzthQUN6RTtZQUNELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQTtRQWJDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUNuQyxDQUFDO0lBY0Qsb0JBQW9CLENBQUMsS0FBbUIsRUFBRSxPQUFnQjtRQUN4RCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRTtZQUN4QyxJQUFJLFdBQVcsR0FBWSxJQUFJLENBQUM7WUFDaEMsS0FBSyxNQUFNLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDMUMsSUFBSSxXQUFXLEtBQUssSUFBSSxFQUFFO29CQUN4QixXQUFXLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQztpQkFDakM7cUJBQU0sSUFBSSxXQUFXLEtBQUssU0FBUyxDQUFDLE9BQU8sRUFBRTtvQkFDNUMsV0FBVyxHQUFHLFNBQVMsQ0FBQztvQkFDeEIsTUFBTTtpQkFDUDthQUNGO1lBRUQsSUFBSSxXQUFXLEtBQUssSUFBSSxFQUFFO2dCQUN4QixXQUFXLEdBQUcsS0FBSyxDQUFDO2FBQ3JCO1lBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sS0FBSyxXQUFXLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQzthQUNqQztTQUVGO1FBRUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkMsQ0FBQzs7O1lBcERGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsbUJBQW1CO2dCQUM3Qiw2ZkFBNkM7O2FBRTlDOzs7WUFQUSxjQUFjOzs7cUJBU3BCLEtBQUs7dUJBQ0wsS0FBSzttQkFDTCxLQUFLOzRCQUNMLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzTmlsIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFRyZWV2aWV3SXRlbSB9IGZyb20gJy4uLy4uL21vZGVscy90cmVldmlldy1pdGVtJztcbmltcG9ydCB7IFRyZWV2aWV3Q29uZmlnIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RyZWV2aWV3LWNvbmZpZyc7XG5pbXBvcnQgeyBUcmVldmlld0l0ZW1UZW1wbGF0ZUNvbnRleHQgfSBmcm9tICcuLi8uLi9tb2RlbHMvdHJlZXZpZXctaXRlbS10ZW1wbGF0ZS1jb250ZXh0JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmd4LXRyZWV2aWV3LWl0ZW0nLFxuICB0ZW1wbGF0ZVVybDogJy4vdHJlZXZpZXctaXRlbS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RyZWV2aWV3LWl0ZW0uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBUcmVldmlld0l0ZW1Db21wb25lbnQge1xuICBASW5wdXQoKSBjb25maWc6IFRyZWV2aWV3Q29uZmlnO1xuICBASW5wdXQoKSB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8VHJlZXZpZXdJdGVtVGVtcGxhdGVDb250ZXh0PjtcbiAgQElucHV0KCkgaXRlbTogVHJlZXZpZXdJdGVtO1xuICBAT3V0cHV0KCkgY2hlY2tlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGRlZmF1bHRDb25maWc6IFRyZWV2aWV3Q29uZmlnXG4gICkge1xuICAgIHRoaXMuY29uZmlnID0gdGhpcy5kZWZhdWx0Q29uZmlnO1xuICB9XG5cbiAgb25Db2xsYXBzZUV4cGFuZCA9ICgpID0+IHtcbiAgICB0aGlzLml0ZW0uY29sbGFwc2VkID0gIXRoaXMuaXRlbS5jb2xsYXBzZWQ7XG4gIH1cblxuICBvbkNoZWNrZWRDaGFuZ2UgPSAoKSA9PiB7XG4gICAgY29uc3QgY2hlY2tlZCA9IHRoaXMuaXRlbS5jaGVja2VkO1xuICAgIGlmICghaXNOaWwodGhpcy5pdGVtLmNoaWxkcmVuKSAmJiAhdGhpcy5jb25maWcuZGVjb3VwbGVDaGlsZEZyb21QYXJlbnQpIHtcbiAgICAgIHRoaXMuaXRlbS5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IGNoaWxkLnNldENoZWNrZWRSZWN1cnNpdmUoY2hlY2tlZCkpO1xuICAgIH1cbiAgICB0aGlzLmNoZWNrZWRDaGFuZ2UuZW1pdChjaGVja2VkKTtcbiAgfVxuXG4gIG9uQ2hpbGRDaGVja2VkQ2hhbmdlKGNoaWxkOiBUcmVldmlld0l0ZW0sIGNoZWNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmRlY291cGxlQ2hpbGRGcm9tUGFyZW50KSB7XG4gICAgICBsZXQgaXRlbUNoZWNrZWQ6IGJvb2xlYW4gPSBudWxsO1xuICAgICAgZm9yIChjb25zdCBjaGlsZEl0ZW0gb2YgdGhpcy5pdGVtLmNoaWxkcmVuKSB7XG4gICAgICAgIGlmIChpdGVtQ2hlY2tlZCA9PT0gbnVsbCkge1xuICAgICAgICAgIGl0ZW1DaGVja2VkID0gY2hpbGRJdGVtLmNoZWNrZWQ7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbUNoZWNrZWQgIT09IGNoaWxkSXRlbS5jaGVja2VkKSB7XG4gICAgICAgICAgaXRlbUNoZWNrZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGl0ZW1DaGVja2VkID09PSBudWxsKSB7XG4gICAgICAgIGl0ZW1DaGVja2VkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLml0ZW0uY2hlY2tlZCAhPT0gaXRlbUNoZWNrZWQpIHtcbiAgICAgICAgdGhpcy5pdGVtLmNoZWNrZWQgPSBpdGVtQ2hlY2tlZDtcbiAgICAgIH1cblxuICAgIH1cblxuICAgIHRoaXMuY2hlY2tlZENoYW5nZS5lbWl0KGNoZWNrZWQpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { FormsModule } from '@angular/forms';
|
|
4
|
+
import { TreeviewComponent } from './components/treeview/treeview.component';
|
|
5
|
+
import { TreeviewItemComponent } from './components/treeview-item/treeview-item.component';
|
|
6
|
+
import { TreeviewPipe } from './pipes/treeview.pipe';
|
|
7
|
+
import { TreeviewConfig } from './models/treeview-config';
|
|
8
|
+
import { DefaultTreeviewEventParser, TreeviewEventParser } from './helpers/treeview-event-parser';
|
|
9
|
+
export class TreeviewModule {
|
|
10
|
+
static forRoot() {
|
|
11
|
+
return {
|
|
12
|
+
ngModule: TreeviewModule,
|
|
13
|
+
providers: [
|
|
14
|
+
TreeviewConfig,
|
|
15
|
+
{ provide: TreeviewEventParser, useClass: DefaultTreeviewEventParser }
|
|
16
|
+
]
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
TreeviewModule.decorators = [
|
|
21
|
+
{ type: NgModule, args: [{
|
|
22
|
+
imports: [
|
|
23
|
+
FormsModule,
|
|
24
|
+
CommonModule
|
|
25
|
+
],
|
|
26
|
+
declarations: [
|
|
27
|
+
TreeviewComponent,
|
|
28
|
+
TreeviewItemComponent,
|
|
29
|
+
TreeviewPipe
|
|
30
|
+
],
|
|
31
|
+
exports: [
|
|
32
|
+
TreeviewComponent,
|
|
33
|
+
TreeviewPipe,
|
|
34
|
+
],
|
|
35
|
+
providers: [],
|
|
36
|
+
},] }
|
|
37
|
+
];
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHItdHJlZS12aWV3Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGFyYWlsc3NoYXJlZC9zcmMvbGliL2RyLXRyZWV2aWV3L2RyLXRyZWUtdmlldy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF1QixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUM3RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMzRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBb0JsRyxNQUFNLE9BQU8sY0FBYztJQUN2QixNQUFNLENBQUMsT0FBTztRQUNWLE9BQU87WUFDSCxRQUFRLEVBQUUsY0FBYztZQUN4QixTQUFTLEVBQUU7Z0JBQ1AsY0FBYztnQkFDZCxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsMEJBQTBCLEVBQUU7YUFDekU7U0FDSixDQUFDO0lBQ04sQ0FBQzs7O1lBMUJKLFFBQVEsU0FBQztnQkFDTixPQUFPLEVBQUU7b0JBQ0wsV0FBVztvQkFDWCxZQUFZO2lCQUNmO2dCQUNELFlBQVksRUFBRTtvQkFDVixpQkFBaUI7b0JBQ2pCLHFCQUFxQjtvQkFDckIsWUFBWTtpQkFDZjtnQkFDRCxPQUFPLEVBQUU7b0JBQ0wsaUJBQWlCO29CQUNqQixZQUFZO2lCQUNmO2dCQUNELFNBQVMsRUFBRSxFQUFFO2FBQ2hCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRyZWV2aWV3Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3RyZWV2aWV3L3RyZWV2aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUcmVldmlld0l0ZW1Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdHJlZXZpZXctaXRlbS90cmVldmlldy1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUcmVldmlld1BpcGUgfSBmcm9tICcuL3BpcGVzL3RyZWV2aWV3LnBpcGUnO1xuaW1wb3J0IHsgVHJlZXZpZXdDb25maWcgfSBmcm9tICcuL21vZGVscy90cmVldmlldy1jb25maWcnO1xuaW1wb3J0IHsgRGVmYXVsdFRyZWV2aWV3RXZlbnRQYXJzZXIsIFRyZWV2aWV3RXZlbnRQYXJzZXIgfSBmcm9tICcuL2hlbHBlcnMvdHJlZXZpZXctZXZlbnQtcGFyc2VyJztcblxuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIENvbW1vbk1vZHVsZVxuICAgIF0sXG4gICAgZGVjbGFyYXRpb25zOiBbXG4gICAgICAgIFRyZWV2aWV3Q29tcG9uZW50LFxuICAgICAgICBUcmVldmlld0l0ZW1Db21wb25lbnQsXG4gICAgICAgIFRyZWV2aWV3UGlwZVxuICAgIF0sXG4gICAgZXhwb3J0czogW1xuICAgICAgICBUcmVldmlld0NvbXBvbmVudCxcbiAgICAgICAgVHJlZXZpZXdQaXBlLFxuICAgIF0sXG4gICAgcHJvdmlkZXJzOiBbXSxcbn0pXG5cbmV4cG9ydCBjbGFzcyBUcmVldmlld01vZHVsZSB7XG4gICAgc3RhdGljIGZvclJvb3QoKTogTW9kdWxlV2l0aFByb3ZpZGVyczxUcmVldmlld01vZHVsZT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmdNb2R1bGU6IFRyZWV2aWV3TW9kdWxlLFxuICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgVHJlZXZpZXdDb25maWcsXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBUcmVldmlld0V2ZW50UGFyc2VyLCB1c2VDbGFzczogRGVmYXVsdFRyZWV2aWV3RXZlbnRQYXJzZXIgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9O1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { isNil } from 'lodash';
|
|
3
|
+
export class TreeviewEventParser {
|
|
4
|
+
}
|
|
5
|
+
TreeviewEventParser.decorators = [
|
|
6
|
+
{ type: Injectable }
|
|
7
|
+
];
|
|
8
|
+
export class DefaultTreeviewEventParser extends TreeviewEventParser {
|
|
9
|
+
getSelectedChange(component) {
|
|
10
|
+
const checkedItems = component.selection.checkedItems;
|
|
11
|
+
if (!isNil(checkedItems)) {
|
|
12
|
+
return checkedItems.map(item => item.value);
|
|
13
|
+
}
|
|
14
|
+
return [];
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
DefaultTreeviewEventParser.decorators = [
|
|
18
|
+
{ type: Injectable }
|
|
19
|
+
];
|
|
20
|
+
export class DownlineTreeviewEventParser extends TreeviewEventParser {
|
|
21
|
+
getSelectedChange(component) {
|
|
22
|
+
const items = component.items;
|
|
23
|
+
if (!isNil(items)) {
|
|
24
|
+
let result = [];
|
|
25
|
+
items.forEach(item => {
|
|
26
|
+
const links = this.getLinks(item, null);
|
|
27
|
+
if (!isNil(links)) {
|
|
28
|
+
result = result.concat(links);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
return result;
|
|
32
|
+
}
|
|
33
|
+
return [];
|
|
34
|
+
}
|
|
35
|
+
getLinks(item, parent) {
|
|
36
|
+
if (!isNil(item.children)) {
|
|
37
|
+
const link = {
|
|
38
|
+
item,
|
|
39
|
+
parent
|
|
40
|
+
};
|
|
41
|
+
let result = [];
|
|
42
|
+
item.children.forEach(child => {
|
|
43
|
+
const links = this.getLinks(child, link);
|
|
44
|
+
if (!isNil(links)) {
|
|
45
|
+
result = result.concat(links);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
return result;
|
|
49
|
+
}
|
|
50
|
+
if (item.checked) {
|
|
51
|
+
return [{
|
|
52
|
+
item,
|
|
53
|
+
parent
|
|
54
|
+
}];
|
|
55
|
+
}
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
DownlineTreeviewEventParser.decorators = [
|
|
60
|
+
{ type: Injectable }
|
|
61
|
+
];
|
|
62
|
+
export class OrderDownlineTreeviewEventParser extends TreeviewEventParser {
|
|
63
|
+
constructor() {
|
|
64
|
+
super(...arguments);
|
|
65
|
+
this.currentDownlines = [];
|
|
66
|
+
this.parser = new DownlineTreeviewEventParser();
|
|
67
|
+
}
|
|
68
|
+
getSelectedChange(component) {
|
|
69
|
+
const newDownlines = this.parser.getSelectedChange(component);
|
|
70
|
+
if (this.currentDownlines.length === 0) {
|
|
71
|
+
this.currentDownlines = newDownlines;
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
const intersectDownlines = [];
|
|
75
|
+
this.currentDownlines.forEach(downline => {
|
|
76
|
+
let foundIndex = -1;
|
|
77
|
+
const length = newDownlines.length;
|
|
78
|
+
for (let i = 0; i < length; i++) {
|
|
79
|
+
if (downline.item.value === newDownlines[i].item.value) {
|
|
80
|
+
foundIndex = i;
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (foundIndex !== -1) {
|
|
85
|
+
intersectDownlines.push(newDownlines[foundIndex]);
|
|
86
|
+
newDownlines.splice(foundIndex, 1);
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
this.currentDownlines = intersectDownlines.concat(newDownlines);
|
|
90
|
+
}
|
|
91
|
+
return this.currentDownlines;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
OrderDownlineTreeviewEventParser.decorators = [
|
|
95
|
+
{ type: Injectable }
|
|
96
|
+
];
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZXZpZXctZXZlbnQtcGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YXJhaWxzc2hhcmVkL3NyYy9saWIvZHItdHJlZXZpZXcvaGVscGVycy90cmVldmlldy1ldmVudC1wYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBSy9CLE1BQU0sT0FBZ0IsbUJBQW1COzs7WUFEeEMsVUFBVTs7QUFNWCxNQUFNLE9BQU8sMEJBQTJCLFNBQVEsbUJBQW1CO0lBQ2pFLGlCQUFpQixDQUFDLFNBQTRCO1FBQzVDLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDO1FBQ3RELElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDeEIsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzdDO1FBRUQsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDOzs7WUFURixVQUFVOztBQWtCWCxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsbUJBQW1CO0lBQ2xFLGlCQUFpQixDQUFDLFNBQTRCO1FBQzVDLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqQixJQUFJLE1BQU0sR0FBMkIsRUFBRSxDQUFDO1lBQ3hDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ25CLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUN4QyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUNqQixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDL0I7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILE9BQU8sTUFBTSxDQUFDO1NBQ2Y7UUFFRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFTyxRQUFRLENBQUMsSUFBa0IsRUFBRSxNQUE0QjtRQUMvRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUN6QixNQUFNLElBQUksR0FBRztnQkFDWCxJQUFJO2dCQUNKLE1BQU07YUFDUCxDQUFDO1lBQ0YsSUFBSSxNQUFNLEdBQTJCLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDNUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ2pCLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUMvQjtZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUgsT0FBTyxNQUFNLENBQUM7U0FDZjtRQUVELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixPQUFPLENBQUM7b0JBQ04sSUFBSTtvQkFDSixNQUFNO2lCQUNQLENBQUMsQ0FBQztTQUNKO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOzs7WUE1Q0YsVUFBVTs7QUFnRFgsTUFBTSxPQUFPLGdDQUFpQyxTQUFRLG1CQUFtQjtJQUR6RTs7UUFFVSxxQkFBZ0IsR0FBMkIsRUFBRSxDQUFDO1FBQzlDLFdBQU0sR0FBRyxJQUFJLDJCQUEyQixFQUFFLENBQUM7SUE2QnJELENBQUM7SUEzQkMsaUJBQWlCLENBQUMsU0FBNEI7UUFDNUMsTUFBTSxZQUFZLEdBQTJCLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEYsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN0QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsWUFBWSxDQUFDO1NBQ3RDO2FBQU07WUFDTCxNQUFNLGtCQUFrQixHQUEyQixFQUFFLENBQUM7WUFDdEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDdkMsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BCLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUM7Z0JBQ25DLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQy9CLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7d0JBQ3RELFVBQVUsR0FBRyxDQUFDLENBQUM7d0JBQ2YsTUFBTTtxQkFDUDtpQkFDRjtnQkFFRCxJQUFJLFVBQVUsS0FBSyxDQUFDLENBQUMsRUFBRTtvQkFDckIsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO29CQUNsRCxZQUFZLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDcEM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDakU7UUFFRCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDOzs7WUEvQkYsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzTmlsIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFRyZWV2aWV3SXRlbSB9IGZyb20gJy4uL21vZGVscy90cmVldmlldy1pdGVtJztcbmltcG9ydCB7IFRyZWV2aWV3Q29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy90cmVldmlldy90cmVldmlldy5jb21wb25lbnQnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVHJlZXZpZXdFdmVudFBhcnNlciB7XG4gIGFic3RyYWN0IGdldFNlbGVjdGVkQ2hhbmdlKGNvbXBvbmVudDogVHJlZXZpZXdDb21wb25lbnQpOiBhbnlbXTtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERlZmF1bHRUcmVldmlld0V2ZW50UGFyc2VyIGV4dGVuZHMgVHJlZXZpZXdFdmVudFBhcnNlciB7XG4gIGdldFNlbGVjdGVkQ2hhbmdlKGNvbXBvbmVudDogVHJlZXZpZXdDb21wb25lbnQpOiBhbnlbXSB7XG4gICAgY29uc3QgY2hlY2tlZEl0ZW1zID0gY29tcG9uZW50LnNlbGVjdGlvbi5jaGVja2VkSXRlbXM7XG4gICAgaWYgKCFpc05pbChjaGVja2VkSXRlbXMpKSB7XG4gICAgICByZXR1cm4gY2hlY2tlZEl0ZW1zLm1hcChpdGVtID0+IGl0ZW0udmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiBbXTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERvd25saW5lVHJlZXZpZXdJdGVtIHtcbiAgaXRlbTogVHJlZXZpZXdJdGVtO1xuICBwYXJlbnQ6IERvd25saW5lVHJlZXZpZXdJdGVtO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRG93bmxpbmVUcmVldmlld0V2ZW50UGFyc2VyIGV4dGVuZHMgVHJlZXZpZXdFdmVudFBhcnNlciB7XG4gIGdldFNlbGVjdGVkQ2hhbmdlKGNvbXBvbmVudDogVHJlZXZpZXdDb21wb25lbnQpOiBhbnlbXSB7XG4gICAgY29uc3QgaXRlbXMgPSBjb21wb25lbnQuaXRlbXM7XG4gICAgaWYgKCFpc05pbChpdGVtcykpIHtcbiAgICAgIGxldCByZXN1bHQ6IERvd25saW5lVHJlZXZpZXdJdGVtW10gPSBbXTtcbiAgICAgIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IGxpbmtzID0gdGhpcy5nZXRMaW5rcyhpdGVtLCBudWxsKTtcbiAgICAgICAgaWYgKCFpc05pbChsaW5rcykpIHtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KGxpbmtzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMaW5rcyhpdGVtOiBUcmVldmlld0l0ZW0sIHBhcmVudDogRG93bmxpbmVUcmVldmlld0l0ZW0pOiBEb3dubGluZVRyZWV2aWV3SXRlbVtdIHtcbiAgICBpZiAoIWlzTmlsKGl0ZW0uY2hpbGRyZW4pKSB7XG4gICAgICBjb25zdCBsaW5rID0ge1xuICAgICAgICBpdGVtLFxuICAgICAgICBwYXJlbnRcbiAgICAgIH07XG4gICAgICBsZXQgcmVzdWx0OiBEb3dubGluZVRyZWV2aWV3SXRlbVtdID0gW107XG4gICAgICBpdGVtLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4ge1xuICAgICAgICBjb25zdCBsaW5rcyA9IHRoaXMuZ2V0TGlua3MoY2hpbGQsIGxpbmspO1xuICAgICAgICBpZiAoIWlzTmlsKGxpbmtzKSkge1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQobGlua3MpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBpZiAoaXRlbS5jaGVja2VkKSB7XG4gICAgICByZXR1cm4gW3tcbiAgICAgICAgaXRlbSxcbiAgICAgICAgcGFyZW50XG4gICAgICB9XTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgT3JkZXJEb3dubGluZVRyZWV2aWV3RXZlbnRQYXJzZXIgZXh0ZW5kcyBUcmVldmlld0V2ZW50UGFyc2VyIHtcbiAgcHJpdmF0ZSBjdXJyZW50RG93bmxpbmVzOiBEb3dubGluZVRyZWV2aWV3SXRlbVtdID0gW107XG4gIHByaXZhdGUgcGFyc2VyID0gbmV3IERvd25saW5lVHJlZXZpZXdFdmVudFBhcnNlcigpO1xuXG4gIGdldFNlbGVjdGVkQ2hhbmdlKGNvbXBvbmVudDogVHJlZXZpZXdDb21wb25lbnQpOiBhbnlbXSB7XG4gICAgY29uc3QgbmV3RG93bmxpbmVzOiBEb3dubGluZVRyZWV2aWV3SXRlbVtdID0gdGhpcy5wYXJzZXIuZ2V0U2VsZWN0ZWRDaGFuZ2UoY29tcG9uZW50KTtcbiAgICBpZiAodGhpcy5jdXJyZW50RG93bmxpbmVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5jdXJyZW50RG93bmxpbmVzID0gbmV3RG93bmxpbmVzO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpbnRlcnNlY3REb3dubGluZXM6IERvd25saW5lVHJlZXZpZXdJdGVtW10gPSBbXTtcbiAgICAgIHRoaXMuY3VycmVudERvd25saW5lcy5mb3JFYWNoKGRvd25saW5lID0+IHtcbiAgICAgICAgbGV0IGZvdW5kSW5kZXggPSAtMTtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gbmV3RG93bmxpbmVzLmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChkb3dubGluZS5pdGVtLnZhbHVlID09PSBuZXdEb3dubGluZXNbaV0uaXRlbS52YWx1ZSkge1xuICAgICAgICAgICAgZm91bmRJbmRleCA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm91bmRJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICBpbnRlcnNlY3REb3dubGluZXMucHVzaChuZXdEb3dubGluZXNbZm91bmRJbmRleF0pO1xuICAgICAgICAgIG5ld0Rvd25saW5lcy5zcGxpY2UoZm91bmRJbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmN1cnJlbnREb3dubGluZXMgPSBpbnRlcnNlY3REb3dubGluZXMuY29uY2F0KG5ld0Rvd25saW5lcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY3VycmVudERvd25saW5lcztcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { concat, isNil, pull } from 'lodash';
|
|
2
|
+
export const TreeviewHelper = {
|
|
3
|
+
findItem,
|
|
4
|
+
findItemInList,
|
|
5
|
+
findParent,
|
|
6
|
+
removeItem,
|
|
7
|
+
concatSelection
|
|
8
|
+
};
|
|
9
|
+
function findItem(root, value) {
|
|
10
|
+
if (isNil(root)) {
|
|
11
|
+
return undefined;
|
|
12
|
+
}
|
|
13
|
+
if (root.value === value) {
|
|
14
|
+
return root;
|
|
15
|
+
}
|
|
16
|
+
if (root.children) {
|
|
17
|
+
for (const child of root.children) {
|
|
18
|
+
const foundItem = findItem(child, value);
|
|
19
|
+
if (foundItem) {
|
|
20
|
+
return foundItem;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
function findItemInList(list, value) {
|
|
27
|
+
if (isNil(list)) {
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
for (const item of list) {
|
|
31
|
+
const foundItem = findItem(item, value);
|
|
32
|
+
if (foundItem) {
|
|
33
|
+
return foundItem;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
function findParent(root, item) {
|
|
39
|
+
if (isNil(root) || isNil(root.children)) {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
for (const child of root.children) {
|
|
43
|
+
if (child === item) {
|
|
44
|
+
return root;
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
const parent = findParent(child, item);
|
|
48
|
+
if (parent) {
|
|
49
|
+
return parent;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
function removeItem(root, item) {
|
|
56
|
+
const parent = findParent(root, item);
|
|
57
|
+
if (parent) {
|
|
58
|
+
pull(parent.children, item);
|
|
59
|
+
if (parent.children.length === 0) {
|
|
60
|
+
parent.children = undefined;
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
parent.correctChecked();
|
|
64
|
+
}
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
function concatSelection(items, checked, unchecked) {
|
|
70
|
+
let checkedItems = [...checked];
|
|
71
|
+
let uncheckedItems = [...unchecked];
|
|
72
|
+
for (const item of items) {
|
|
73
|
+
const selection = item.getSelection();
|
|
74
|
+
checkedItems = concat(checkedItems, selection.checkedItems);
|
|
75
|
+
uncheckedItems = concat(uncheckedItems, selection.uncheckedItems);
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
checked: checkedItems,
|
|
79
|
+
unchecked: uncheckedItems
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZXZpZXctaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YXJhaWxzc2hhcmVkL3NyYy9saWIvZHItdHJlZXZpZXcvaGVscGVycy90cmVldmlldy1oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRzdDLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRztJQUM1QixRQUFRO0lBQ1IsY0FBYztJQUNkLFVBQVU7SUFDVixVQUFVO0lBQ1YsZUFBZTtDQUNoQixDQUFDO0FBRUYsU0FBUyxRQUFRLENBQUMsSUFBa0IsRUFBRSxLQUFVO0lBQzlDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ2YsT0FBTyxTQUFTLENBQUM7S0FDbEI7SUFFRCxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxFQUFFO1FBQ3hCLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFFRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7UUFDakIsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pDLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDekMsSUFBSSxTQUFTLEVBQUU7Z0JBQ2IsT0FBTyxTQUFTLENBQUM7YUFDbEI7U0FDRjtLQUNGO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLElBQW9CLEVBQUUsS0FBVTtJQUN0RCxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNmLE9BQU8sU0FBUyxDQUFDO0tBQ2xCO0lBRUQsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLEVBQUU7UUFDdkIsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4QyxJQUFJLFNBQVMsRUFBRTtZQUNiLE9BQU8sU0FBUyxDQUFDO1NBQ2xCO0tBQ0Y7SUFFRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsSUFBa0IsRUFBRSxJQUFrQjtJQUN4RCxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQ3ZDLE9BQU8sU0FBUyxDQUFDO0tBQ2xCO0lBRUQsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1FBQ2pDLElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtZQUNsQixPQUFPLElBQUksQ0FBQztTQUNiO2FBQU07WUFDTCxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3ZDLElBQUksTUFBTSxFQUFFO2dCQUNWLE9BQU8sTUFBTSxDQUFDO2FBQ2Y7U0FDRjtLQUNGO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLElBQWtCLEVBQUUsSUFBa0I7SUFDeEQsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0QyxJQUFJLE1BQU0sRUFBRTtRQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVCLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ2hDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO1NBQzdCO2FBQU07WUFDTCxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDekI7UUFDRCxPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsS0FBcUIsRUFBRSxPQUF1QixFQUFFLFNBQXlCO0lBQ2hHLElBQUksWUFBWSxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztJQUNoQyxJQUFJLGNBQWMsR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7SUFDcEMsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7UUFDeEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RDLFlBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM1RCxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsRUFBRSxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUM7S0FDbkU7SUFDRCxPQUFPO1FBQ0wsT0FBTyxFQUFFLFlBQVk7UUFDckIsU0FBUyxFQUFFLGNBQWM7S0FDMUIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25jYXQsIGlzTmlsLCBwdWxsIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFRyZWV2aWV3SXRlbSB9IGZyb20gJy4uL21vZGVscy90cmVldmlldy1pdGVtJztcblxuZXhwb3J0IGNvbnN0IFRyZWV2aWV3SGVscGVyID0ge1xuICBmaW5kSXRlbSxcbiAgZmluZEl0ZW1Jbkxpc3QsXG4gIGZpbmRQYXJlbnQsXG4gIHJlbW92ZUl0ZW0sXG4gIGNvbmNhdFNlbGVjdGlvblxufTtcblxuZnVuY3Rpb24gZmluZEl0ZW0ocm9vdDogVHJlZXZpZXdJdGVtLCB2YWx1ZTogYW55KTogVHJlZXZpZXdJdGVtIHtcbiAgaWYgKGlzTmlsKHJvb3QpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChyb290LnZhbHVlID09PSB2YWx1ZSkge1xuICAgIHJldHVybiByb290O1xuICB9XG5cbiAgaWYgKHJvb3QuY2hpbGRyZW4pIHtcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHJvb3QuY2hpbGRyZW4pIHtcbiAgICAgIGNvbnN0IGZvdW5kSXRlbSA9IGZpbmRJdGVtKGNoaWxkLCB2YWx1ZSk7XG4gICAgICBpZiAoZm91bmRJdGVtKSB7XG4gICAgICAgIHJldHVybiBmb3VuZEl0ZW07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZmluZEl0ZW1Jbkxpc3QobGlzdDogVHJlZXZpZXdJdGVtW10sIHZhbHVlOiBhbnkpOiBUcmVldmlld0l0ZW0ge1xuICBpZiAoaXNOaWwobGlzdCkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgZm9yIChjb25zdCBpdGVtIG9mIGxpc3QpIHtcbiAgICBjb25zdCBmb3VuZEl0ZW0gPSBmaW5kSXRlbShpdGVtLCB2YWx1ZSk7XG4gICAgaWYgKGZvdW5kSXRlbSkge1xuICAgICAgcmV0dXJuIGZvdW5kSXRlbTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBmaW5kUGFyZW50KHJvb3Q6IFRyZWV2aWV3SXRlbSwgaXRlbTogVHJlZXZpZXdJdGVtKTogVHJlZXZpZXdJdGVtIHtcbiAgaWYgKGlzTmlsKHJvb3QpIHx8IGlzTmlsKHJvb3QuY2hpbGRyZW4pKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZvciAoY29uc3QgY2hpbGQgb2Ygcm9vdC5jaGlsZHJlbikge1xuICAgIGlmIChjaGlsZCA9PT0gaXRlbSkge1xuICAgICAgcmV0dXJuIHJvb3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGZpbmRQYXJlbnQoY2hpbGQsIGl0ZW0pO1xuICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICByZXR1cm4gcGFyZW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUl0ZW0ocm9vdDogVHJlZXZpZXdJdGVtLCBpdGVtOiBUcmVldmlld0l0ZW0pOiBib29sZWFuIHtcbiAgY29uc3QgcGFyZW50ID0gZmluZFBhcmVudChyb290LCBpdGVtKTtcbiAgaWYgKHBhcmVudCkge1xuICAgIHB1bGwocGFyZW50LmNoaWxkcmVuLCBpdGVtKTtcbiAgICBpZiAocGFyZW50LmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcGFyZW50LmNoaWxkcmVuID0gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJlbnQuY29ycmVjdENoZWNrZWQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGNvbmNhdFNlbGVjdGlvbihpdGVtczogVHJlZXZpZXdJdGVtW10sIGNoZWNrZWQ6IFRyZWV2aWV3SXRlbVtdLCB1bmNoZWNrZWQ6IFRyZWV2aWV3SXRlbVtdKTogeyBbazogc3RyaW5nXTogVHJlZXZpZXdJdGVtW10gfSB7XG4gIGxldCBjaGVja2VkSXRlbXMgPSBbLi4uY2hlY2tlZF07XG4gIGxldCB1bmNoZWNrZWRJdGVtcyA9IFsuLi51bmNoZWNrZWRdO1xuICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSBpdGVtLmdldFNlbGVjdGlvbigpO1xuICAgIGNoZWNrZWRJdGVtcyA9IGNvbmNhdChjaGVja2VkSXRlbXMsIHNlbGVjdGlvbi5jaGVja2VkSXRlbXMpO1xuICAgIHVuY2hlY2tlZEl0ZW1zID0gY29uY2F0KHVuY2hlY2tlZEl0ZW1zLCBzZWxlY3Rpb24udW5jaGVja2VkSXRlbXMpO1xuICB9XG4gIHJldHVybiB7XG4gICAgY2hlY2tlZDogY2hlY2tlZEl0ZW1zLFxuICAgIHVuY2hlY2tlZDogdW5jaGVja2VkSXRlbXNcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
export class TreeviewConfig {
|
|
3
|
+
constructor() {
|
|
4
|
+
this.hasAllCheckBox = true;
|
|
5
|
+
this.hasFilter = false;
|
|
6
|
+
this.hasCollapseExpand = false;
|
|
7
|
+
this.decoupleChildFromParent = false;
|
|
8
|
+
this.maxHeight = 500;
|
|
9
|
+
}
|
|
10
|
+
get hasDivider() {
|
|
11
|
+
return this.hasFilter || this.hasAllCheckBox || this.hasCollapseExpand;
|
|
12
|
+
}
|
|
13
|
+
static create(fields) {
|
|
14
|
+
const config = new TreeviewConfig();
|
|
15
|
+
Object.assign(config, fields);
|
|
16
|
+
return config;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
TreeviewConfig.decorators = [
|
|
20
|
+
{ type: Injectable }
|
|
21
|
+
];
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZXZpZXctY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YXJhaWxzc2hhcmVkL3NyYy9saWIvZHItdHJlZXZpZXcvbW9kZWxzL3RyZWV2aWV3LWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE1BQU0sT0FBTyxjQUFjO0lBRDNCO1FBRUUsbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFDdEIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDMUIsNEJBQXVCLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLGNBQVMsR0FBRyxHQUFHLENBQUM7SUFpQmxCLENBQUM7SUFmQyxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDekUsQ0FBQztJQUVNLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFNcEI7UUFDQyxNQUFNLE1BQU0sR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzlCLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7OztZQXRCRixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVHJlZXZpZXdDb25maWcge1xuICBoYXNBbGxDaGVja0JveCA9IHRydWU7XG4gIGhhc0ZpbHRlciA9IGZhbHNlO1xuICBoYXNDb2xsYXBzZUV4cGFuZCA9IGZhbHNlO1xuICBkZWNvdXBsZUNoaWxkRnJvbVBhcmVudCA9IGZhbHNlO1xuICBtYXhIZWlnaHQgPSA1MDA7XG5cbiAgZ2V0IGhhc0RpdmlkZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzRmlsdGVyIHx8IHRoaXMuaGFzQWxsQ2hlY2tCb3ggfHwgdGhpcy5oYXNDb2xsYXBzZUV4cGFuZDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlKGZpZWxkcz86IHtcbiAgICBoYXNBbGxDaGVja0JveD86IGJvb2xlYW4sXG4gICAgaGFzRmlsdGVyPzogYm9vbGVhbixcbiAgICBoYXNDb2xsYXBzZUV4cGFuZD86IGJvb2xlYW4sXG4gICAgZGVjb3VwbGVDaGlsZEZyb21QYXJlbnQ/OiBib29sZWFuXG4gICAgbWF4SGVpZ2h0PzogbnVtYmVyLFxuICB9KTogVHJlZXZpZXdDb25maWcge1xuICAgIGNvbnN0IGNvbmZpZyA9IG5ldyBUcmVldmlld0NvbmZpZygpO1xuICAgIE9iamVjdC5hc3NpZ24oY29uZmlnLCBmaWVsZHMpO1xuICAgIHJldHVybiBjb25maWc7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZXZpZXctaGVhZGVyLXRlbXBsYXRlLWNvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhcmFpbHNzaGFyZWQvc3JjL2xpYi9kci10cmVldmlldy9tb2RlbHMvdHJlZXZpZXctaGVhZGVyLXRlbXBsYXRlLWNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyZWV2aWV3SXRlbSB9IGZyb20gJy4vdHJlZXZpZXctaXRlbSc7XG5pbXBvcnQgeyBUcmVldmlld0NvbmZpZyB9IGZyb20gJy4vdHJlZXZpZXctY29uZmlnJztcblxuZXhwb3J0IGludGVyZmFjZSBUcmVldmlld0hlYWRlclRlbXBsYXRlQ29udGV4dCB7XG4gIGNvbmZpZzogVHJlZXZpZXdDb25maWc7XG4gIGl0ZW06IFRyZWV2aWV3SXRlbTtcbiAgb25Db2xsYXBzZUV4cGFuZDogKCkgPT4gdm9pZDtcbiAgb25DaGVja2VkQ2hhbmdlOiAoY2hlY2tlZDogYm9vbGVhbikgPT4gdm9pZDtcbiAgb25GaWx0ZXJUZXh0Q2hhbmdlOiAodGV4dDogc3RyaW5nKSA9PiB2b2lkO1xufVxuIl19
|