slick-table 1.1.40 → 1.1.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,19 @@
1
+ #slick-table-autocomplete {
2
+ background-color: white;
3
+ z-index: 1;
4
+ position: absolute;
5
+ color: #1E456F;
6
+ box-shadow: gray 0px 0px 5px 1px;
7
+ font-size: 0.75rem;
8
+
9
+ strong {
10
+ color: rgb(0, 123, 255)
11
+ }
12
+
13
+ div.active,
14
+ div:hover {
15
+ cursor: pointer;
16
+ background-color: #e8f4fe;
17
+ }
18
+ }
19
+
@@ -11,12 +11,13 @@ export declare abstract class Autocomplete implements Editor {
11
11
  protected navOnLR?: boolean;
12
12
  applyValue(item: any, state: any): void;
13
13
  closeAllList(): void;
14
+ createList(): void;
14
15
  destroy(): void;
15
16
  focus(): void;
16
17
  init(): void;
17
18
  isValueChanged(): boolean;
18
19
  loadValue(item: ISlickRow): void;
19
- makeVisible(list: HTMLDivElement): void;
20
+ makeVisible(): void;
20
21
  abstract onClick(event: MouseEvent): void;
21
22
  abstract onInput(event: Event): void;
22
23
  onKeydown(event: KeyboardEvent): void;
@@ -1 +1 @@
1
- {"version":3,"file":"Autocomplete.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shared/lib/slickgrid/lib/editors/Autocomplete/Autocomplete.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,MAAM,EACN,eAAe,EACf,sBAAsB,EAEtB,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,8BAAsB,YAAa,YAAW,MAAM;IACnD,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC9C,SAAS,CAAC,YAAY,SAAM;IAC5B,SAAS,CAAC,YAAY,SAAM;IAC5B,SAAS,CAAC,EAAE,SAAkB;IAC9B,SAAS,CAAC,KAAK,EAAE,gBAAgB,CAAmC;IAC7D,cAAc,EAAE,MAAM,EAAE,CAA6C;IAC5E,SAAS,CAAC,IAAI,CAAC,EAAE,cAAc,CAAC;IAChC,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAE5B,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAGvC,YAAY,IAAI,IAAI;IAKpB,OAAO,IAAI,IAAI;IAMf,KAAK,IAAI,IAAI;IAGb,IAAI,IAAI,IAAI;IAWZ,cAAc,IAAI,OAAO;IAMzB,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAOhC,WAAW,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAoBvC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IACzC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IACpC,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IA8BrC,YAAY,CAAC,CAAC,EAAE,gBAAgB,CAAC,cAAc,CAAC,GAAG,IAAI;IAKvD,eAAe,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAW5C,cAAc,IAAI,MAAM;IAGxB,SAAS,CAAC,IAAI,EAAE,gBAAgB,CAAC,cAAc,CAAC,GAAG,IAAI;IASvD,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAC1C,QAAQ,IAAI,sBAAsB;CAelC"}
1
+ {"version":3,"file":"Autocomplete.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shared/lib/slickgrid/lib/editors/Autocomplete/Autocomplete.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,MAAM,EACN,eAAe,EACf,sBAAsB,EAGtB,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,8BAAsB,YAAa,YAAW,MAAM;IACnD,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC9C,SAAS,CAAC,YAAY,SAAM;IAC5B,SAAS,CAAC,YAAY,SAAM;IAC5B,SAAS,CAAC,EAAE,SAA8B;IAC1C,SAAS,CAAC,KAAK,EAAE,gBAAgB,CAAmC;IAC7D,cAAc,EAAE,MAAM,EAAE,CAA6C;IAC5E,SAAS,CAAC,IAAI,CAAC,EAAE,cAAc,CAAC;IAChC,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAE5B,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAGvC,YAAY,IAAI,IAAI;IAKpB,UAAU;IAYV,OAAO,IAAI,IAAI;IAMf,KAAK,IAAI,IAAI;IAGb,IAAI,IAAI,IAAI;IAWZ,cAAc,IAAI,OAAO;IAMzB,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAOhC,WAAW,IAAI,IAAI;IAuBnB,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IACzC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IACpC,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IA8BrC,YAAY,CAAC,CAAC,EAAE,gBAAgB,CAAC,cAAc,CAAC,GAAG,IAAI;IAKvD,eAAe,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAW5C,cAAc,IAAI,MAAM;IAGxB,SAAS,CAAC,IAAI,EAAE,gBAAgB,CAAC,cAAc,CAAC,GAAG,IAAI;IASvD,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAC1C,QAAQ,IAAI,sBAAsB;CAelC"}
@@ -1 +1 @@
1
- {"version":3,"file":"EditorAutocomplete.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shared/lib/slickgrid/lib/editors/Autocomplete/EditorAutocomplete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,UAAU,EAAiB,MAAM,WAAW,CAAC;AAK/E,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,qBAAa,kBAAkB,CAC9B,KAAK,GAAG,GAAG,EACX,CAAC,SAAS,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,EACvC,CAAC,SAAS,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CACtC,SAAQ,YAAY;IAGF,IAAI,EAAE,eAAe,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAFrD,SAAS,CAAC,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;gBAEpB,IAAI,EAAE,eAAe,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAuBrD,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAK3B,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAKhC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;CAkBjC"}
1
+ {"version":3,"file":"EditorAutocomplete.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shared/lib/slickgrid/lib/editors/Autocomplete/EditorAutocomplete.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,MAAM,EACN,eAAe,EAEf,UAAU,EAEV,MAAM,WAAW,CAAC;AAKnB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,qBAAa,kBAAkB,CAC9B,KAAK,GAAG,GAAG,EACX,CAAC,SAAS,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,EACvC,CAAC,SAAS,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CACtC,SAAQ,YAAY;IAGF,IAAI,EAAE,eAAe,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAFrD,SAAS,CAAC,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;gBAEpB,IAAI,EAAE,eAAe,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAuBrD,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAK3B,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAShC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;CAgBjC"}
@@ -7,6 +7,7 @@ export declare class EditorSelectWithSearch<TData = any, C extends Column<TData>
7
7
  protected reversedHash: Record<string, string>;
8
8
  constructor(args: EditorArguments<TData, C, O>);
9
9
  applyValue(item: any, state: any): void;
10
+ isValueChanged(): boolean;
10
11
  loadValue(item: ISlickRow): void;
11
12
  onInput(event: Event): void;
12
13
  onClick(event: MouseEvent): void;
@@ -1 +1 @@
1
- {"version":3,"file":"EditorSelectWithSearch.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shared/lib/slickgrid/lib/editors/Autocomplete/EditorSelectWithSearch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAGhE,OAAO,EAAW,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,qBAAa,sBAAsB,CAClC,KAAK,GAAG,GAAG,EACX,CAAC,SAAS,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,EACvC,CAAC,SAAS,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CACtC,SAAQ,YAAY;IAIF,IAAI,EAAE,eAAe,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAHrD,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAE5B,IAAI,EAAE,eAAe,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAmBrD,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAIvC,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAQhC,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAK3B,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAKhC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;CAsBjC"}
1
+ {"version":3,"file":"EditorSelectWithSearch.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shared/lib/slickgrid/lib/editors/Autocomplete/EditorSelectWithSearch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAGhE,OAAO,EAAW,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,qBAAa,sBAAsB,CAClC,KAAK,GAAG,GAAG,EACX,CAAC,SAAS,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,EACvC,CAAC,SAAS,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CACtC,SAAQ,YAAY;IAIF,IAAI,EAAE,eAAe,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAHrD,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAE5B,IAAI,EAAE,eAAe,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAmBrD,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAIvC,cAAc,IAAI,OAAO;IAUzB,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAQhC,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAK3B,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAKhC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;CAkBjC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useGrid.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/shared/lib/slickgrid/ui/SlickgridTable/lib/hooks/useGrid.ts"],"names":[],"mappings":"AACA,OAAO,EACN,OAAO,EACP,oBAAoB,EACpB,qBAAqB,EAOrB,MAAM,WAAW,CAAC;AAYnB,OAAO,EAAE,KAAK,EAAkB,MAAM,aAAa,CAAC;AAEpD,wBAAgB,OAAO,CAAC,EACvB,aAAiC,EACjC,kBAAkB,EAClB,SAAiB,EACjB,YAAqB,EACrB,OAAO,EACP,eAAe,EACf,MAAM,EACN,cAAqB,EACrB,KAAK,EACL,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,OAAO,EACP,UAAU,EACV,mBAAmB,EACnB,iBAAkC,EAClC,qBAAqB,EACrB,OAAY,EACZ,KAAK,GACL,EAAE,KAAK,GAAG;IACV,WAAW,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC3C,YAAY,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;CAC7C,QA2HA"}
1
+ {"version":3,"file":"useGrid.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/shared/lib/slickgrid/ui/SlickgridTable/lib/hooks/useGrid.ts"],"names":[],"mappings":"AACA,OAAO,EACN,OAAO,EACP,oBAAoB,EACpB,qBAAqB,EAOrB,MAAM,WAAW,CAAC;AAYnB,OAAO,EAAE,KAAK,EAAkB,MAAM,aAAa,CAAC;AAEpD,wBAAgB,OAAO,CAAC,EACvB,aAAiC,EACjC,kBAAkB,EAClB,SAAiB,EACjB,YAAqB,EACrB,OAAO,EACP,eAAe,EACf,MAAM,EACN,cAAqB,EACrB,KAAK,EACL,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,OAAO,EACP,UAAU,EACV,mBAAmB,EACnB,iBAAkC,EAClC,qBAAqB,EACrB,OAAY,EACZ,KAAK,GACL,EAAE,KAAK,GAAG;IACV,WAAW,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC3C,YAAY,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;CAC7C,QA6HA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "slick-table",
3
- "version": "1.1.40",
3
+ "version": "1.1.42",
4
4
  "description": "Enhanced version of SlickGrid library",
5
5
  "private": false,
6
6
  "type": "module",
@@ -13,6 +13,7 @@
13
13
  "import": "./dist/index.es.js",
14
14
  "require": "./dist/index.cjs.js"
15
15
  },
16
+ "./styles": "./dist/styles/slick-table.scss",
16
17
  "./package.json": "./package.json"
17
18
  },
18
19
  "files": [
@@ -36,6 +37,7 @@
36
37
  "scripts": {
37
38
  "dev": "vite",
38
39
  "build": "vite build",
40
+ "postbuild": "node scripts/copy-styles.mjs",
39
41
  "lint": "eslint .",
40
42
  "pack": "npm pack --dry-run",
41
43
  "version:patch": "npm version patch",
@@ -0,0 +1,19 @@
1
+ #slick-table-autocomplete {
2
+ background-color: white;
3
+ z-index: 1;
4
+ position: absolute;
5
+ color: #1E456F;
6
+ box-shadow: gray 0px 0px 5px 1px;
7
+ font-size: 0.75rem;
8
+
9
+ strong {
10
+ color: rgb(0, 123, 255)
11
+ }
12
+
13
+ div.active,
14
+ div:hover {
15
+ cursor: pointer;
16
+ background-color: #e8f4fe;
17
+ }
18
+ }
19
+
package/src/index.scss CHANGED
@@ -1,3 +1,4 @@
1
+ @use './app/styles/slick-table' as *;
1
2
  @use './app/styles/slickgrid' as *;
2
3
  @use './app/styles/global' as *;
3
4
  @use './app/styles/icons' as *;
@@ -2,6 +2,7 @@ import {
2
2
  Editor,
3
3
  EditorArguments,
4
4
  EditorValidationResult,
5
+ ElementPosition,
5
6
  keyCode,
6
7
  } from "slickgrid";
7
8
 
@@ -12,7 +13,7 @@ export abstract class Autocomplete implements Editor {
12
13
  abstract args: EditorArguments<any, any, any>;
13
14
  protected currentFocus = -1;
14
15
  protected defaultValue = "";
15
- protected id = "autocomplete";
16
+ protected id = "slick-table-autocomplete";
16
17
  protected input: HTMLInputElement = document.createElement("input");
17
18
  public keyCaptureList: number[] = [keyCode.UP, keyCode.DOWN, keyCode.ENTER];
18
19
  protected list?: HTMLDivElement;
@@ -26,6 +27,18 @@ export abstract class Autocomplete implements Editor {
26
27
  this.list = undefined;
27
28
  this.currentFocus = -1;
28
29
  }
30
+ createList() {
31
+ this.list = document.createElement("div");
32
+ const container = document.getElementById("root");
33
+ if (!container) return;
34
+ container.appendChild(this.list);
35
+ this.list.setAttribute("id", this.id);
36
+ const { top, left, right } = this.args.position as ElementPosition;
37
+ const rowHeight = this.args.grid.getOptions().rowHeight || 25;
38
+ this.list.style.top = `${top + rowHeight}px`;
39
+ this.list.style.left = `${left}px`;
40
+ this.list.style.minWidth = `${right - left}px`;
41
+ }
29
42
  destroy(): void {
30
43
  this.input.removeEventListener("input", this.onInput.bind(this));
31
44
  this.input.removeEventListener("keydown", this.onKeydown.bind(this));
@@ -59,24 +72,27 @@ export abstract class Autocomplete implements Editor {
59
72
  this.input.focus();
60
73
  this.input.select();
61
74
  }
62
- makeVisible(list: HTMLDivElement): void {
63
- const canvas = list.closest(".slick-viewport");
75
+ makeVisible(): void {
76
+ if (!this.list) return;
77
+ const canvas = this.args.container.closest(".slick-viewport");
64
78
  if (!canvas) return;
65
- const { bottom: listBottom, right: listRight } =
66
- list.getBoundingClientRect();
79
+ const {
80
+ bottom: listBottom,
81
+ left: listLeft,
82
+ right: listRight,
83
+ top: listTop,
84
+ } = this.list.getBoundingClientRect();
67
85
  const { bottom: canvasBottom, right: canvasRight } =
68
86
  canvas.getBoundingClientRect();
69
- list.style.left = "0";
70
87
  if (listBottom >= canvasBottom) {
71
- const rowHeight = this.args.grid.getOptions().rowHeight;
72
- list.style.position = "absolute";
73
- list.style.bottom = `${rowHeight}px`;
74
- list.style.top = "auto";
88
+ const rowHeight = this.args.grid.getOptions().rowHeight || 25;
89
+ const listHeight = listBottom - listTop;
90
+ this.list.style.top = `${listTop - listHeight - rowHeight}px`;
75
91
  }
76
92
  if (listRight >= canvasRight) {
77
- list.style.position = "absolute";
78
- list.style.right = "0";
79
- list.style.left = "auto";
93
+ const { right: cellRight } = this.args.container.getBoundingClientRect();
94
+ const exceeding = listRight - cellRight;
95
+ this.list.style.left = `${listLeft - exceeding}px`;
80
96
  }
81
97
  }
82
98
  abstract onClick(event: MouseEvent): void;
@@ -1,4 +1,10 @@
1
- import { Column, EditorArguments, GridOption, SlickDataView } from "slickgrid";
1
+ import {
2
+ Column,
3
+ EditorArguments,
4
+ ElementPosition,
5
+ GridOption,
6
+ SlickDataView,
7
+ } from "slickgrid";
2
8
 
3
9
  import { escapeSpecialChar } from "shared/lib/regexp";
4
10
  import { IColumn } from "shared/model/types";
@@ -41,14 +47,16 @@ export class EditorAutocomplete<
41
47
  this.showOptions((event.target as HTMLInputElement).value);
42
48
  }
43
49
  onClick(event: MouseEvent): void {
44
- const div = event.target as HTMLDivElement;
45
- this.input.value = div.getElementsByTagName("input")[0].value;
50
+ const targetElement = event.target as HTMLElement; // either <div> or <strong>
51
+ const htmlInputElement = targetElement
52
+ .closest("div")
53
+ ?.querySelector("input");
54
+ this.input.value = htmlInputElement?.value || "";
46
55
  this.closeAllList();
56
+ this.args.grid.navigateNext();
47
57
  }
48
58
  showOptions(search: string): void {
49
- this.list = document.createElement("div");
50
- this.list.setAttribute("id", this.id);
51
- this.args.container.appendChild(this.list);
59
+ this.createList();
52
60
  this.suggestionsList.forEach((name: string) => {
53
61
  const hasOverlap = name.match(new RegExp(escapeSpecialChar(search), "i"));
54
62
  if (hasOverlap) {
@@ -61,6 +69,6 @@ export class EditorAutocomplete<
61
69
  this.list?.appendChild(listItem);
62
70
  }
63
71
  });
64
- this.makeVisible(this.list);
72
+ this.makeVisible();
65
73
  }
66
74
  }
@@ -36,6 +36,16 @@ export class EditorSelectWithSearch<
36
36
  item[this.args.column.field] = this.reversedHash[state];
37
37
  }
38
38
 
39
+ isValueChanged(): boolean {
40
+ if (!this.reversedHash[this.input.value]) {
41
+ this.input.value = this.defaultValue;
42
+ }
43
+ return (
44
+ !(this.input.value == "" && this.defaultValue == null) &&
45
+ this.input.value != this.defaultValue
46
+ );
47
+ }
48
+
39
49
  loadValue(item: ISlickRow): void {
40
50
  this.defaultValue = this.hash[item[this.args.column.id]] || "";
41
51
  this.input.value = this.defaultValue;
@@ -55,11 +65,7 @@ export class EditorSelectWithSearch<
55
65
  this.closeAllList();
56
66
  }
57
67
  showOptions(search: string): void {
58
- this.list = document.createElement("div");
59
- this.list.setAttribute("id", this.id);
60
- this.list.style.width = "fit-content";
61
- this.list.style.textAlign = "left";
62
- this.args.container.appendChild(this.list);
68
+ this.createList();
63
69
  Object.entries(this.hash).forEach(([key, value]) => {
64
70
  const hasOverlap = value.match(
65
71
  new RegExp(escapeSpecialChar(search), "i"),
@@ -74,6 +80,6 @@ export class EditorSelectWithSearch<
74
80
  this.list?.appendChild(listItem);
75
81
  }
76
82
  });
77
- this.makeVisible(this.list);
83
+ this.makeVisible();
78
84
  }
79
85
  }
@@ -100,9 +100,6 @@ export function useGrid({
100
100
  }
101
101
  applyCellCssStyles?.(grid);
102
102
 
103
- table.hotKeysBehavior.pushToCommandQueue(grid);
104
- // table.notifyObservers();
105
-
106
103
  return () => {
107
104
  headerButtonsPlugin.onCommand.unsubscribe(onHeaderButtonCommand);
108
105
  onHeaderMenuCommand &&
@@ -168,5 +165,10 @@ export function useGrid({
168
165
  table.totalCalculator?.calculate(grid);
169
166
  table.notifyObservers();
170
167
  columnSorter.restoreSorting(table);
168
+ // add initial items to command queue after column sorting has been applied
169
+ table.hotKeysBehavior.pushToCommandQueue(grid);
170
+ return () => {
171
+ table.hotKeysBehavior.resetQueue();
172
+ };
171
173
  }, [columns, items]);
172
174
  }