@scheels-softdev/kendoreact-generics 2.8.4 → 2.8.6

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 -36
  2. package/package.json +1 -1
@@ -1,29 +1,32 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { ComboBox } from "@progress/kendo-react-dropdowns";
3
- import { useCallback, useEffect, useMemo, useState } from "react";
3
+ import { filterBy } from "@progress/kendo-data-query";
4
+ import { useEffect, useRef, useState } from "react";
4
5
  import { Guard } from "@scheels-softdev/frontend-utility-functions";
5
6
  export function GenericDropdown({ data, selectedId, selectedData, onChange, textField, disabled, idField, title, hideClearButton, style, isLoading, suggest, }) {
6
- var _a, _b;
7
+ //local state
7
8
  const pageSize = 8;
8
9
  if (selectedId !== undefined && selectedData !== undefined) {
9
10
  throw new Error("You cannot provide both selectedData and selectedId to GenericDropdown.");
10
11
  }
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);
12
+ //useState
13
+ const [selectedObject, setSelectedObject] = useState(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
19
20
  useEffect(() => {
20
21
  var _a, _b;
21
- if (selectedId || selectedData) {
22
+ if (!selectedId && !selectedData)
23
+ setSelectedObject(undefined);
24
+ else {
22
25
  setSelectedObject(selectedId
23
- ? (_a = data.find((item) => (selectedId === item ? item[idField || "id"] : 0))) !== null && _a !== void 0 ? _a : undefined
26
+ ? (_a = data.find((item) => selectedId === item[idField || "id"])) !== null && _a !== void 0 ? _a : undefined
24
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);
25
28
  }
26
- }, [selectedId, selectedData, state.subsetData, data, idField]);
29
+ }, [selectedId, selectedData, data]);
27
30
  useEffect(() => {
28
31
  setState({
29
32
  skip: 0,
@@ -31,39 +34,32 @@ export function GenericDropdown({ data, selectedId, selectedData, onChange, text
31
34
  subsetData: data.slice(0, pageSize),
32
35
  });
33
36
  }, [data]);
34
- const filteredData = useMemo(() => {
35
- return data.filter((item) => {
36
- return item[textField] !== undefined && item[textField] !== null;
37
- });
38
- }, [data, textField]);
39
- const onFilterChange = useCallback((event) => {
37
+ //external function variables
38
+ let filteredData = useRef(data.slice());
39
+ //function creation
40
+ // function to handle filter changes
41
+ const onFilterChange = (event) => {
40
42
  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) => {
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,
52
+ });
53
+ };
54
+ // function to handle page changes for virtualization
55
+ const pageChange = (event) => {
61
56
  const skip = event.page.skip;
62
57
  const take = event.page.take;
63
- const newSubsetData = filteredData.slice(skip, skip + take);
58
+ const newSubsetData = filteredData.current.length ? filteredData.current.slice(skip, skip + take) : data.slice(skip, skip + take);
64
59
  setState(Object.assign(Object.assign({}, state), { subsetData: newSubsetData, skip: skip }));
65
- }, [filteredData, state]);
60
+ };
66
61
  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
67
63
  total: state.total,
68
64
  pageSize: pageSize,
69
65
  skip: state.skip,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scheels-softdev/kendoreact-generics",
3
- "version": "2.8.4",
3
+ "version": "2.8.6",
4
4
  "main": "index.js",
5
5
  "scripts": {
6
6
  "test": "jest",