@scheels-softdev/kendoreact-generics 2.8.1 → 2.8.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/GenericDropdown.js +37 -30
  2. package/package.json +1 -1
@@ -1,32 +1,32 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { ComboBox } from "@progress/kendo-react-dropdowns";
3
- import { filterBy } from "@progress/kendo-data-query";
4
- import { useEffect, useRef, useState } from "react";
3
+ import { useCallback, useEffect, useMemo, useState } from "react";
5
4
  import { Guard } from "@scheels-softdev/frontend-utility-functions";
6
5
  export function GenericDropdown({ data, selectedId, selectedData, onChange, textField, disabled, idField, title, hideClearButton, style, isLoading, suggest, }) {
7
- //local state
6
+ var _a, _b;
8
7
  const pageSize = 8;
9
8
  if (selectedId !== undefined && selectedData !== undefined) {
10
9
  throw new Error("You cannot provide both selectedData and selectedId to GenericDropdown.");
11
10
  }
12
- //useState
13
- const [selectedObject, setSelectedObject] = useState(undefined);
11
+ const [selectedObject, setSelectedObject] = useState(selectedId
12
+ ? (_a = data.find((item) => (selectedId === item ? item[idField || "id"] : 0))) !== null && _a !== void 0 ? _a : undefined
13
+ : (_b = data.find((x) => Guard.Ensure.EqualObjects(Object.assign(Object.assign({}, x), selectedData), Object.assign({}, (x !== null && x !== void 0 ? x : {}))))) !== null && _b !== void 0 ? _b : undefined);
14
14
  const [state, setState] = useState({
15
15
  skip: 0,
16
16
  total: data.length,
17
17
  subsetData: data.slice(0, pageSize),
18
18
  });
19
- //trigger functions
20
19
  useEffect(() => {
21
20
  var _a, _b;
22
- if (!selectedId && !selectedData)
21
+ if (!selectedId && !selectedData) {
23
22
  setSelectedObject(undefined);
23
+ }
24
24
  else {
25
25
  setSelectedObject(selectedId
26
- ? (_a = data.find((item) => selectedId === item[idField || "id"])) !== null && _a !== void 0 ? _a : undefined
26
+ ? (_a = data.find((item) => (selectedId === item ? item[idField || "id"] : 0))) !== null && _a !== void 0 ? _a : undefined
27
27
  : (_b = data.find((x) => Guard.Ensure.EqualObjects(Object.assign(Object.assign({}, x), selectedData), Object.assign({}, (x !== null && x !== void 0 ? x : {}))))) !== null && _b !== void 0 ? _b : undefined);
28
28
  }
29
- }, [selectedId, selectedData, data]);
29
+ }, [selectedId, selectedData, state.subsetData, data, idField]);
30
30
  useEffect(() => {
31
31
  setState({
32
32
  skip: 0,
@@ -34,32 +34,39 @@ export function GenericDropdown({ data, selectedId, selectedData, onChange, text
34
34
  subsetData: data.slice(0, pageSize),
35
35
  });
36
36
  }, [data]);
37
- //external function variables
38
- let filteredData = useRef(data.slice());
39
- //function creation
40
- // function to handle filter changes
41
- const onFilterChange = (event) => {
42
- var _a;
43
- if ((_a = event.filter.value) === null || _a === void 0 ? void 0 : _a.length)
44
- filteredData.current = filterBy(data.slice(), event.filter);
45
- else
46
- filteredData.current = data;
47
- const newData = filteredData.current.slice(0, pageSize);
48
- setState({
49
- subsetData: newData,
50
- skip: 0,
51
- total: filteredData.current.length,
37
+ const filteredData = useMemo(() => {
38
+ return data.filter((item) => {
39
+ return item[textField] !== undefined && item[textField] !== null;
52
40
  });
53
- };
54
- // function to handle page changes for virtualization
55
- const pageChange = (event) => {
41
+ }, [data, textField]);
42
+ const onFilterChange = useCallback((event) => {
43
+ var _a;
44
+ if ((_a = event.filter.value) === null || _a === void 0 ? void 0 : _a.length) {
45
+ const filtered = data.filter((item) => {
46
+ var _a;
47
+ return (_a = item[textField]) === null || _a === void 0 ? void 0 : _a.toString().toLowerCase().includes(event.filter.value.toLowerCase());
48
+ });
49
+ setState({
50
+ subsetData: filtered.slice(0, pageSize),
51
+ skip: 0,
52
+ total: filtered.length,
53
+ });
54
+ }
55
+ else {
56
+ setState({
57
+ subsetData: data.slice(0, pageSize),
58
+ skip: 0,
59
+ total: data.length,
60
+ });
61
+ }
62
+ }, [data, pageSize, textField]);
63
+ const pageChange = useCallback((event) => {
56
64
  const skip = event.page.skip;
57
65
  const take = event.page.take;
58
- const newSubsetData = filteredData.current.length ? filteredData.current.slice(skip, skip + take) : data.slice(skip, skip + take);
66
+ const newSubsetData = filteredData.slice(skip, skip + take);
59
67
  setState(Object.assign(Object.assign({}, state), { subsetData: newSubsetData, skip: skip }));
60
- };
68
+ }, [filteredData, state]);
61
69
  return (_jsx("div", Object.assign({ "data-testid": "dropdown" }, { children: _jsx(ComboBox, { style: style, label: title, disabled: disabled || isLoading, data: state.subsetData, textField: textField.toString(), virtual: {
62
- // enable virtualization for large datasets
63
70
  total: state.total,
64
71
  pageSize: pageSize,
65
72
  skip: state.skip,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scheels-softdev/kendoreact-generics",
3
- "version": "2.8.1",
3
+ "version": "2.8.3",
4
4
  "main": "index.js",
5
5
  "scripts": {
6
6
  "test": "jest",