@scheels-softdev/kendoreact-generics 2.8.1 → 2.8.2

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 +32 -28
  2. package/package.json +1 -1
@@ -1,29 +1,26 @@
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
8
6
  const pageSize = 8;
9
7
  if (selectedId !== undefined && selectedData !== undefined) {
10
8
  throw new Error("You cannot provide both selectedData and selectedId to GenericDropdown.");
11
9
  }
12
- //useState
13
10
  const [selectedObject, setSelectedObject] = useState(undefined);
14
11
  const [state, setState] = useState({
15
12
  skip: 0,
16
13
  total: data.length,
17
14
  subsetData: data.slice(0, pageSize),
18
15
  });
19
- //trigger functions
20
16
  useEffect(() => {
21
17
  var _a, _b;
22
- if (!selectedId && !selectedData)
18
+ if (!selectedId && !selectedData) {
23
19
  setSelectedObject(undefined);
20
+ }
24
21
  else {
25
22
  setSelectedObject(selectedId
26
- ? (_a = data.find((item) => selectedId === item[idField || "id"])) !== null && _a !== void 0 ? _a : undefined
23
+ ? (_a = data.find((item) => (selectedId === item ? item[idField || "id"] : 0))) !== null && _a !== void 0 ? _a : undefined
27
24
  : (_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
25
  }
29
26
  }, [selectedId, selectedData, data]);
@@ -34,32 +31,39 @@ export function GenericDropdown({ data, selectedId, selectedData, onChange, text
34
31
  subsetData: data.slice(0, pageSize),
35
32
  });
36
33
  }, [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,
34
+ const filteredData = useMemo(() => {
35
+ return data.filter((item) => {
36
+ return item[textField] !== undefined && item[textField] !== null;
52
37
  });
53
- };
54
- // function to handle page changes for virtualization
55
- const pageChange = (event) => {
38
+ }, [data, textField]);
39
+ const onFilterChange = useCallback((event) => {
40
+ var _a;
41
+ if ((_a = event.filter.value) === null || _a === void 0 ? void 0 : _a.length) {
42
+ const filtered = data.filter((item) => {
43
+ var _a;
44
+ return (_a = item[textField]) === null || _a === void 0 ? void 0 : _a.toString().toLowerCase().includes(event.filter.value.toLowerCase());
45
+ });
46
+ setState({
47
+ subsetData: filtered.slice(0, pageSize),
48
+ skip: 0,
49
+ total: filtered.length,
50
+ });
51
+ }
52
+ else {
53
+ setState({
54
+ subsetData: data.slice(0, pageSize),
55
+ skip: 0,
56
+ total: data.length,
57
+ });
58
+ }
59
+ }, [data, pageSize, textField]);
60
+ const pageChange = useCallback((event) => {
56
61
  const skip = event.page.skip;
57
62
  const take = event.page.take;
58
- const newSubsetData = filteredData.current.length ? filteredData.current.slice(skip, skip + take) : data.slice(skip, skip + take);
63
+ const newSubsetData = filteredData.slice(skip, skip + take);
59
64
  setState(Object.assign(Object.assign({}, state), { subsetData: newSubsetData, skip: skip }));
60
- };
65
+ }, [filteredData, state]);
61
66
  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
67
  total: state.total,
64
68
  pageSize: pageSize,
65
69
  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.2",
4
4
  "main": "index.js",
5
5
  "scripts": {
6
6
  "test": "jest",