@omegagrid/tree 0.11.17 → 0.11.18
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selectionModel.d.ts","sourceRoot":"","sources":["../../src/model/selectionModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,CAAC;AAM9B,oBAAY,mBAAmB;IAC9B,IAAI,IAAI;IACR,OAAO,IAAI;IACX,eAAe,IAAI;IACnB,SAAS,IAAI;CACb;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAE9E,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,CAAC,MAAM,GAAC,MAAM,GAAC,eAAe,CAAC,EAAE,qBAKhF;AAED,MAAM,MAAM,kBAAkB,GAAG;IAChC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAA;CACd,CAAC;AAEF,qBAAa,kBAAkB;IASX,OAAO,EAAE,OAAO;IAPnC,KAAK,kCAAyC;IAC9C,KAAK,EAAE,SAAS,CAAC;IAEjB,IAAI,KAAK,WAER;gBAEkB,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,eAAe,EAAE;IAMnE,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAOtC,QAAQ,CAAC,KAAK,EAAE,eAAe,EAAE;IAIjC,QAAQ,CAAC,UAAU,EAAE,eAAe,EAAE;IAWtC,qBAAqB,CAAC,eAAe,CAAC,EAAE,CAAC,MAAM,UAAU,CAAC,EAAE,IACnD,SAAS,MAAM,EAAE,QAAQ,kBAAkB;IAUpD,SAAS,CAAC,eAAe,CAAC,EAAE,CAAC,MAAM,UAAU,CAAC,EAAE;IAahD,KAAK;IAIL,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;
|
|
1
|
+
{"version":3,"file":"selectionModel.d.ts","sourceRoot":"","sources":["../../src/model/selectionModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,CAAC;AAM9B,oBAAY,mBAAmB;IAC9B,IAAI,IAAI;IACR,OAAO,IAAI;IACX,eAAe,IAAI;IACnB,SAAS,IAAI;CACb;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAE9E,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,CAAC,MAAM,GAAC,MAAM,GAAC,eAAe,CAAC,EAAE,qBAKhF;AAED,MAAM,MAAM,kBAAkB,GAAG;IAChC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAA;CACd,CAAC;AAEF,qBAAa,kBAAkB;IASX,OAAO,EAAE,OAAO;IAPnC,KAAK,kCAAyC;IAC9C,KAAK,EAAE,SAAS,CAAC;IAEjB,IAAI,KAAK,WAER;gBAEkB,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,eAAe,EAAE;IAMnE,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAOtC,QAAQ,CAAC,KAAK,EAAE,eAAe,EAAE;IAIjC,QAAQ,CAAC,UAAU,EAAE,eAAe,EAAE;IAWtC,qBAAqB,CAAC,eAAe,CAAC,EAAE,CAAC,MAAM,UAAU,CAAC,EAAE,IACnD,SAAS,MAAM,EAAE,QAAQ,kBAAkB;IAUpD,SAAS,CAAC,eAAe,CAAC,EAAE,CAAC,MAAM,UAAU,CAAC,EAAE;IAahD,KAAK;IAIL,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;IAW7D,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM;IAqCrC,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,OAAO,GAAC,IAAW;IAkBjE;;;;OAIG;IACH,SAAS,CAAC,OAAO,UAAQ;IAQzB,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM;IAUvC,kBAAkB,CAAC,IAAI,EAAE,SAAS;IAIlC,iBAAiB,CAAC,IAAI,EAAE,SAAS;IAMjC,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,GAAE,OAAc;IAOrE,kBAAkB,CAAC,IAAI,EAAE,SAAS;IAYlC,kBAAkB,CAAC,IAAI,EAAE,SAAS,GAAG,mBAAmB;IAaxD,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM;CAkB/C"}
|
|
@@ -74,6 +74,9 @@ export class TreeSelectionModel {
|
|
|
74
74
|
this.items.clear();
|
|
75
75
|
}
|
|
76
76
|
validateChange(node, level, value) {
|
|
77
|
+
// a node without a checkbox (ch: false) is a group heading, it can be expanded but never picked
|
|
78
|
+
if (level == 0 && value && node.checkbox === false)
|
|
79
|
+
return false;
|
|
77
80
|
if (this.options.selectMode == SelectMode.Single) {
|
|
78
81
|
if (value === false && this.items.size == 1) {
|
|
79
82
|
return false;
|
|
@@ -82,10 +85,12 @@ export class TreeSelectionModel {
|
|
|
82
85
|
return true;
|
|
83
86
|
}
|
|
84
87
|
toggle(node, level) {
|
|
85
|
-
|
|
86
|
-
const
|
|
87
|
-
|
|
88
|
+
// validate before ensureItem, a rejected change must not leave an empty item behind
|
|
89
|
+
const existing = this.items.get(node.key);
|
|
90
|
+
const currentValue = existing?.levels.has(level) ? existing.levels.get(level) : null;
|
|
91
|
+
if (!this.validateChange(node, level, currentValue === null ? true : !currentValue))
|
|
88
92
|
return this;
|
|
93
|
+
let item = this.ensureItem(node.key, node.value);
|
|
89
94
|
if (currentValue) {
|
|
90
95
|
item.levels.delete(level);
|
|
91
96
|
}
|
|
@@ -119,9 +124,11 @@ export class TreeSelectionModel {
|
|
|
119
124
|
return this;
|
|
120
125
|
}
|
|
121
126
|
select(node, level, value = true) {
|
|
122
|
-
const
|
|
123
|
-
|
|
127
|
+
const existing = this.items.get(node.key);
|
|
128
|
+
const currentValue = existing?.levels.has(level) ? existing.levels.get(level) : false;
|
|
129
|
+
if (!this.validateChange(node, level, value === null ? currentValue : value))
|
|
124
130
|
return this;
|
|
131
|
+
const item = this.ensureItem(node.key, node.value);
|
|
125
132
|
if (value === true) {
|
|
126
133
|
item.levels.set(level, true);
|
|
127
134
|
}
|
|
@@ -141,7 +148,7 @@ export class TreeSelectionModel {
|
|
|
141
148
|
* at least one of them, an unmatched filter never throws the selection away.
|
|
142
149
|
*/
|
|
143
150
|
selectAll(replace = false) {
|
|
144
|
-
const matched = this.model.nodes.filter(node => node.filterState == tree.FilterState.Matched);
|
|
151
|
+
const matched = this.model.nodes.filter(node => node.filterState == tree.FilterState.Matched && node.checkbox !== false);
|
|
145
152
|
if (matched.length == 0)
|
|
146
153
|
return 0;
|
|
147
154
|
if (replace)
|
|
@@ -202,6 +209,9 @@ export class TreeSelectionModel {
|
|
|
202
209
|
let value = null;
|
|
203
210
|
node.walk((n) => {
|
|
204
211
|
if (n.level - parentLevel == level) {
|
|
212
|
+
// group headings (ch: false) are never picked, they must not decide the direction either
|
|
213
|
+
if (n.checkbox === false)
|
|
214
|
+
return false;
|
|
205
215
|
if (value === null) {
|
|
206
216
|
value = this.getSelectionStatus(n) != NodeSelectionStatus.Checked;
|
|
207
217
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selectionModel.js","sourceRoot":"","sources":["../../src/model/selectionModel.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeModel, NodeSource } from \"./nodeModel\";\nimport { Options } from \"../options\";\nimport { SelectMode } from \"../types\";\nimport { TreeModel } from \".\";\nimport { tree } from \"@omegagrid/core\";\n\nconst getMapValue = <TKey, TValue>(map: Map<TKey, TValue>, key: TKey, defaultValue: TValue = null) =>\n\tmap.has(key) ? map.get(key) : defaultValue;\n\nexport enum NodeSelectionStatus {\n\tNone = 0,\n\tChecked = 1,\n\tCheckedByParent = 2,\n\tUnchecked = 3\n}\n\nexport type SerializedValue = [string, number?, (0|1)?, Partial<NodeSource>?];\n\nexport function normalizeSerializedValues(data: (string|number|SerializedValue)[]) {\n\treturn data.map<SerializedValue>(item => {\n\t\tif (Array.isArray(item)) return item;\n\t\treturn [item.toString(), 0, 1];\n\t});\n}\n\nexport type SelectedItemParams = {\n\tlevels: Map<number, boolean>,\n\tvalue?: string\n};\n\nexport class TreeSelectionModel {\n\n\titems = new Map<string, SelectedItemParams>();\n\tmodel: TreeModel;\n\n\tget count() {\n\t\treturn this.items.size;\n\t}\n\n\tconstructor(public options: Options, sourceData?: SerializedValue[]) {\n\t\tif (sourceData) {\n\t\t\tthis.populate(sourceData);\n\t\t}\n\t}\n\n\tensureItem(key: string, value?: string) {\n\t\tif (!this.items.has(key)) this.items.set(key, {levels: new Map<number, boolean>()});\n\t\tconst item = this.items.get(key);\n\t\tif (value != null) item.value = value;\n\t\treturn item;\t\n\t}\n\n\tsetItems(items: SerializedValue[]) {\n\t\tthis.populate(items ?? []);\n\t}\n\n\tpopulate(sourceData: SerializedValue[]) {\n\t\tconst oldItems = this.items;\n\t\tthis.items = new Map();\n\t\tsourceData.forEach(sourceItem => {\n\t\t\tconst value = sourceItem[3]?.v ?? sourceItem[3]?.value ?? oldItems.get(sourceItem[0])?.value;\n\t\t\tconst item = this.ensureItem(sourceItem[0], value);\n\t\t\titem.levels.set(sourceItem[1] ?? 0, (sourceItem[2] ?? 1) == 1);\n\t\t\tif (sourceItem[3]) Object.assign(item, sourceItem[3]);\n\t\t});\n\t}\n\n\tgetPropertySerializer(serializedProps?: (keyof NodeSource)[]) {\n\t\treturn (nodeKey: string, params: SelectedItemParams) => serializedProps.reduce((acc, key) => {\n\t\t\tif (key == 'v' || key == 'value') {\n\t\t\t\tacc[key] = params.value ?? this.model?.nodeMap.get(nodeKey)?.value;\n\t\t\t} else {\n\t\t\t\tacc[key] = this.model?.nodeMap.get(nodeKey)?.value;\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, {} as Record<string, unknown>);\n\t}\n\n\tserialize(serializedProps?: (keyof NodeSource)[]) {\n\t\tconst items: SerializedValue[] = [];\n\t\tconst propertySerializer = serializedProps?.length ? this.getPropertySerializer(serializedProps) : null;\n\t\tthis.items.forEach((item, key) => {\n\t\t\tconst props = propertySerializer ? propertySerializer(key, item) : null;\n\t\t\titem.levels.forEach((value, level) => items.push(props \n\t\t\t\t? [key, level, value ? 1 : 0, props] \n\t\t\t\t: [key, level, value ? 1 : 0]\n\t\t\t));\n\t\t});\n\t\treturn items;\n\t}\n\n\tclear() {\n\t\tthis.items.clear();\n\t}\n\n\tvalidateChange(node: NodeModel, level: number, value: boolean) {\n\t\tif (this.options.selectMode == SelectMode.Single) {\n\t\t\tif (value === false && this.items.size == 1) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\ttoggle(node: NodeModel, level: number) {\n\t\tlet item = this.ensureItem(node.key, node.value);\n\t\tconst currentValue = item.levels.has(level) ? item.levels.get(level) : null;\n\t\t\n\t\tif (!this.validateChange(node, level, item.levels.has(level) ? !item.levels.get(level) : true)) return this;\n\n\t\tif (currentValue) {\n\t\t\titem.levels.delete(level);\n\t\t} else if (this.options.selectMode == SelectMode.MultipleLevels) {\n\t\t\tif (level == 0 && this.isSelectedByParent(node)) {\n\t\t\t\tif (currentValue === false) {\n\t\t\t\t\titem.levels.delete(0);\n\t\t\t\t} else {\n\t\t\t\t\titem.levels.set(0, false);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\titem.levels.set(level, true);\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.options.selectMode == SelectMode.Single) {\n\t\t\t\tthis.clear();\n\t\t\t\titem = this.ensureItem(node.key, node.value);\n\t\t\t}\n\n\t\t\tif (level == 0) {\n\t\t\t\titem.levels.set(0, true);\n\t\t\t} else {\n\t\t\t\tthis.toggleChildNodes(node, level);\n\t\t\t}\n\t\t}\n\n\t\tif (item.levels.size == 0) this.clearItemSelection(node);\n\t\treturn this;\n\t}\n\t\n\tselect(node: NodeModel, level: number, value: boolean|null = true) {\n\t\tconst item = this.ensureItem(node.key, node.value);\n\n\t\tif (!this.validateChange(node, level, value === null ? (item.levels.has(level) ? item.levels.get(level) : false) : value)) return this;\n\n\t\tif (value === true) {\n\t\t\titem.levels.set(level, true);\n\t\t} else if (value === false && this.options.selectMode == SelectMode.MultipleLevels) {\n\t\t\titem.levels.set(level, false);\n\t\t} else {\n\t\t\titem.levels.delete(level);\n\t\t}\n\t\tif (item.levels.size == 0) this.clearItemSelection(node);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Selects every node matching the current filter, returns the number of them.\n\t * With replace, the matched nodes become the whole selection - but only when there is\n\t * at least one of them, an unmatched filter never throws the selection away.\n\t */\n\tselectAll(replace = false) {\n\t\tconst matched = this.model.nodes.filter(node => node.filterState == tree.FilterState.Matched);\n\t\tif (matched.length == 0) return 0;\n\t\tif (replace) this.clear();\n\t\tmatched.forEach(node => this.ensureItem(node.key, node.value).levels.set(0, true));\n\t\treturn matched.length;\n\t}\n\n\tdeselect(node: NodeModel, level: number) {\n\t\tif (!this.validateChange(node, level, false)) return this;\n\n\t\tif (this.items.has(node.key)) {\n\t\t\tthis.items.get(node.key).levels.delete(level);\n\t\t\tif (this.items.get(node.key).levels.size == 0) this.clearItemSelection(node);\n\t\t}\n\t\treturn this;\n\t}\n\t\n\tclearItemSelection(node: NodeModel) {\n\t\tthis.items.delete(node.key);\n\t}\n\n\tgetLevelSelection(node: NodeModel) {\n\t\treturn this.items.has(node.key)\n\t\t\t? this.items.get(node.key).levels\n\t\t\t: new Map<number, boolean>()\n\t}\n\n\tgetValue(node: NodeModel, level: number, defaultValue: boolean = null) {\n\t\tif (this.items.has(node.key)) {\n\t\t\treturn getMapValue(this.items.get(node.key).levels, level, defaultValue);\n\t\t}\n\t\treturn defaultValue;\n\t}\n\n\tisSelectedByParent(node: NodeModel) {\n\t\tlet parent = node.parent as NodeModel;\n\t\tlet levelSpan = 0;\n\t\twhile (parent) {\n\t\t\tif (this.getValue(parent, ++levelSpan, false)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tparent = parent.parent as NodeModel;\n\t\t}\n\t\treturn false;\n\t}\n\n\tgetSelectionStatus(node: NodeModel): NodeSelectionStatus {\n\t\tconst value = this.getValue(node, 0, null);\n\n\t\tif (value === true) {\n\t\t\treturn NodeSelectionStatus.Checked;\n\t\t} else if (value === false) {\n\t\t\treturn NodeSelectionStatus.Unchecked;\n\t\t} else if (this.options.selectMode == SelectMode.MultipleLevels && this.isSelectedByParent(node)) {\n\t\t\treturn NodeSelectionStatus.CheckedByParent;\n\t\t}\n\t\treturn NodeSelectionStatus.None;\n\t}\n\n\ttoggleChildNodes(node: NodeModel, level: number) {\n\t\tconst parentLevel = node.level;\n\t\tlet value: boolean = null;\n\n\t\tnode.walk((n: NodeModel) => {\n\t\t\tif (n.level - parentLevel == level) {\n\t\t\t\tif (value === null) {\n\t\t\t\t\tvalue = this.getSelectionStatus(n) != NodeSelectionStatus.Checked;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.select(n, 0, value ? true : null)\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t}\n\n}"]}
|
|
1
|
+
{"version":3,"file":"selectionModel.js","sourceRoot":"","sources":["../../src/model/selectionModel.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeModel, NodeSource } from \"./nodeModel\";\nimport { Options } from \"../options\";\nimport { SelectMode } from \"../types\";\nimport { TreeModel } from \".\";\nimport { tree } from \"@omegagrid/core\";\n\nconst getMapValue = <TKey, TValue>(map: Map<TKey, TValue>, key: TKey, defaultValue: TValue = null) =>\n\tmap.has(key) ? map.get(key) : defaultValue;\n\nexport enum NodeSelectionStatus {\n\tNone = 0,\n\tChecked = 1,\n\tCheckedByParent = 2,\n\tUnchecked = 3\n}\n\nexport type SerializedValue = [string, number?, (0|1)?, Partial<NodeSource>?];\n\nexport function normalizeSerializedValues(data: (string|number|SerializedValue)[]) {\n\treturn data.map<SerializedValue>(item => {\n\t\tif (Array.isArray(item)) return item;\n\t\treturn [item.toString(), 0, 1];\n\t});\n}\n\nexport type SelectedItemParams = {\n\tlevels: Map<number, boolean>,\n\tvalue?: string\n};\n\nexport class TreeSelectionModel {\n\n\titems = new Map<string, SelectedItemParams>();\n\tmodel: TreeModel;\n\n\tget count() {\n\t\treturn this.items.size;\n\t}\n\n\tconstructor(public options: Options, sourceData?: SerializedValue[]) {\n\t\tif (sourceData) {\n\t\t\tthis.populate(sourceData);\n\t\t}\n\t}\n\n\tensureItem(key: string, value?: string) {\n\t\tif (!this.items.has(key)) this.items.set(key, {levels: new Map<number, boolean>()});\n\t\tconst item = this.items.get(key);\n\t\tif (value != null) item.value = value;\n\t\treturn item;\t\n\t}\n\n\tsetItems(items: SerializedValue[]) {\n\t\tthis.populate(items ?? []);\n\t}\n\n\tpopulate(sourceData: SerializedValue[]) {\n\t\tconst oldItems = this.items;\n\t\tthis.items = new Map();\n\t\tsourceData.forEach(sourceItem => {\n\t\t\tconst value = sourceItem[3]?.v ?? sourceItem[3]?.value ?? oldItems.get(sourceItem[0])?.value;\n\t\t\tconst item = this.ensureItem(sourceItem[0], value);\n\t\t\titem.levels.set(sourceItem[1] ?? 0, (sourceItem[2] ?? 1) == 1);\n\t\t\tif (sourceItem[3]) Object.assign(item, sourceItem[3]);\n\t\t});\n\t}\n\n\tgetPropertySerializer(serializedProps?: (keyof NodeSource)[]) {\n\t\treturn (nodeKey: string, params: SelectedItemParams) => serializedProps.reduce((acc, key) => {\n\t\t\tif (key == 'v' || key == 'value') {\n\t\t\t\tacc[key] = params.value ?? this.model?.nodeMap.get(nodeKey)?.value;\n\t\t\t} else {\n\t\t\t\tacc[key] = this.model?.nodeMap.get(nodeKey)?.value;\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, {} as Record<string, unknown>);\n\t}\n\n\tserialize(serializedProps?: (keyof NodeSource)[]) {\n\t\tconst items: SerializedValue[] = [];\n\t\tconst propertySerializer = serializedProps?.length ? this.getPropertySerializer(serializedProps) : null;\n\t\tthis.items.forEach((item, key) => {\n\t\t\tconst props = propertySerializer ? propertySerializer(key, item) : null;\n\t\t\titem.levels.forEach((value, level) => items.push(props \n\t\t\t\t? [key, level, value ? 1 : 0, props] \n\t\t\t\t: [key, level, value ? 1 : 0]\n\t\t\t));\n\t\t});\n\t\treturn items;\n\t}\n\n\tclear() {\n\t\tthis.items.clear();\n\t}\n\n\tvalidateChange(node: NodeModel, level: number, value: boolean) {\n\t\t// a node without a checkbox (ch: false) is a group heading, it can be expanded but never picked\n\t\tif (level == 0 && value && node.checkbox === false) return false;\n\t\tif (this.options.selectMode == SelectMode.Single) {\n\t\t\tif (value === false && this.items.size == 1) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\ttoggle(node: NodeModel, level: number) {\n\t\t// validate before ensureItem, a rejected change must not leave an empty item behind\n\t\tconst existing = this.items.get(node.key);\n\t\tconst currentValue = existing?.levels.has(level) ? existing.levels.get(level) : null;\n\n\t\tif (!this.validateChange(node, level, currentValue === null ? true : !currentValue)) return this;\n\n\t\tlet item = this.ensureItem(node.key, node.value);\n\t\tif (currentValue) {\n\t\t\titem.levels.delete(level);\n\t\t} else if (this.options.selectMode == SelectMode.MultipleLevels) {\n\t\t\tif (level == 0 && this.isSelectedByParent(node)) {\n\t\t\t\tif (currentValue === false) {\n\t\t\t\t\titem.levels.delete(0);\n\t\t\t\t} else {\n\t\t\t\t\titem.levels.set(0, false);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\titem.levels.set(level, true);\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.options.selectMode == SelectMode.Single) {\n\t\t\t\tthis.clear();\n\t\t\t\titem = this.ensureItem(node.key, node.value);\n\t\t\t}\n\n\t\t\tif (level == 0) {\n\t\t\t\titem.levels.set(0, true);\n\t\t\t} else {\n\t\t\t\tthis.toggleChildNodes(node, level);\n\t\t\t}\n\t\t}\n\n\t\tif (item.levels.size == 0) this.clearItemSelection(node);\n\t\treturn this;\n\t}\n\t\n\tselect(node: NodeModel, level: number, value: boolean|null = true) {\n\t\tconst existing = this.items.get(node.key);\n\t\tconst currentValue = existing?.levels.has(level) ? existing.levels.get(level) : false;\n\n\t\tif (!this.validateChange(node, level, value === null ? currentValue : value)) return this;\n\n\t\tconst item = this.ensureItem(node.key, node.value);\n\t\tif (value === true) {\n\t\t\titem.levels.set(level, true);\n\t\t} else if (value === false && this.options.selectMode == SelectMode.MultipleLevels) {\n\t\t\titem.levels.set(level, false);\n\t\t} else {\n\t\t\titem.levels.delete(level);\n\t\t}\n\t\tif (item.levels.size == 0) this.clearItemSelection(node);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Selects every node matching the current filter, returns the number of them.\n\t * With replace, the matched nodes become the whole selection - but only when there is\n\t * at least one of them, an unmatched filter never throws the selection away.\n\t */\n\tselectAll(replace = false) {\n\t\tconst matched = this.model.nodes.filter(node => node.filterState == tree.FilterState.Matched && node.checkbox !== false);\n\t\tif (matched.length == 0) return 0;\n\t\tif (replace) this.clear();\n\t\tmatched.forEach(node => this.ensureItem(node.key, node.value).levels.set(0, true));\n\t\treturn matched.length;\n\t}\n\n\tdeselect(node: NodeModel, level: number) {\n\t\tif (!this.validateChange(node, level, false)) return this;\n\n\t\tif (this.items.has(node.key)) {\n\t\t\tthis.items.get(node.key).levels.delete(level);\n\t\t\tif (this.items.get(node.key).levels.size == 0) this.clearItemSelection(node);\n\t\t}\n\t\treturn this;\n\t}\n\t\n\tclearItemSelection(node: NodeModel) {\n\t\tthis.items.delete(node.key);\n\t}\n\n\tgetLevelSelection(node: NodeModel) {\n\t\treturn this.items.has(node.key)\n\t\t\t? this.items.get(node.key).levels\n\t\t\t: new Map<number, boolean>()\n\t}\n\n\tgetValue(node: NodeModel, level: number, defaultValue: boolean = null) {\n\t\tif (this.items.has(node.key)) {\n\t\t\treturn getMapValue(this.items.get(node.key).levels, level, defaultValue);\n\t\t}\n\t\treturn defaultValue;\n\t}\n\n\tisSelectedByParent(node: NodeModel) {\n\t\tlet parent = node.parent as NodeModel;\n\t\tlet levelSpan = 0;\n\t\twhile (parent) {\n\t\t\tif (this.getValue(parent, ++levelSpan, false)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tparent = parent.parent as NodeModel;\n\t\t}\n\t\treturn false;\n\t}\n\n\tgetSelectionStatus(node: NodeModel): NodeSelectionStatus {\n\t\tconst value = this.getValue(node, 0, null);\n\n\t\tif (value === true) {\n\t\t\treturn NodeSelectionStatus.Checked;\n\t\t} else if (value === false) {\n\t\t\treturn NodeSelectionStatus.Unchecked;\n\t\t} else if (this.options.selectMode == SelectMode.MultipleLevels && this.isSelectedByParent(node)) {\n\t\t\treturn NodeSelectionStatus.CheckedByParent;\n\t\t}\n\t\treturn NodeSelectionStatus.None;\n\t}\n\n\ttoggleChildNodes(node: NodeModel, level: number) {\n\t\tconst parentLevel = node.level;\n\t\tlet value: boolean = null;\n\n\t\tnode.walk((n: NodeModel) => {\n\t\t\tif (n.level - parentLevel == level) {\n\t\t\t\t// group headings (ch: false) are never picked, they must not decide the direction either\n\t\t\t\tif (n.checkbox === false) return false;\n\t\t\t\tif (value === null) {\n\t\t\t\t\tvalue = this.getSelectionStatus(n) != NodeSelectionStatus.Checked;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.select(n, 0, value ? true : null)\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t}\n\n}"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@omegagrid/tree",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.18",
|
|
4
4
|
"license": "UNLICENSED",
|
|
5
5
|
"description": "Universal treeview component",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -27,8 +27,8 @@
|
|
|
27
27
|
"_prepublish": "yarn test && yarn lint"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@omegagrid/core": "^0.11.
|
|
31
|
-
"@omegagrid/localize": "^0.11.
|
|
30
|
+
"@omegagrid/core": "^0.11.18",
|
|
31
|
+
"@omegagrid/localize": "^0.11.18",
|
|
32
32
|
"date-fns": "^3.2.0",
|
|
33
33
|
"lit": "^3.1.1",
|
|
34
34
|
"lit-html": "^3.1.1",
|