@scheels-softdev/kendoreact-generics 2.8.5 → 2.8.7

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 +36 -43
  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 { 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, }) {
7
+ //local state
6
8
  const pageSize = 8;
7
9
  if (selectedId !== undefined && selectedData !== undefined) {
8
10
  throw new Error("You cannot provide both selectedData and selectedId to GenericDropdown.");
9
11
  }
10
- const findSelectedObject = useCallback(() => {
11
- if (selectedId) {
12
- return data.find((item) => (selectedId === item ? item[idField || "id"] : 0));
13
- }
14
- else if (selectedData) {
15
- return data.find((x) => Guard.Ensure.EqualObjects(Object.assign(Object.assign({}, x), selectedData), Object.assign({}, (x !== null && x !== void 0 ? x : {}))));
16
- }
17
- else {
18
- return undefined;
19
- }
20
- }, [data, selectedId, selectedData, idField]);
21
- const [selectedObject, setSelectedObject] = useState(findSelectedObject);
12
+ //useState
13
+ const [selectedObject, setSelectedObject] = useState(undefined);
22
14
  const [state, setState] = useState({
23
15
  skip: 0,
24
16
  total: data.length,
25
17
  subsetData: data.slice(0, pageSize),
26
18
  });
19
+ //trigger functions
27
20
  useEffect(() => {
28
- setSelectedObject(findSelectedObject);
29
- }, [selectedId, selectedData, state.subsetData, data, idField, findSelectedObject]);
21
+ var _a, _b;
22
+ if (!selectedId && !selectedData)
23
+ setSelectedObject(undefined);
24
+ else {
25
+ setSelectedObject(selectedId
26
+ ? (_a = data.find((item) => selectedId === item[idField || "id"])) !== null && _a !== void 0 ? _a : undefined
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
+ }
29
+ }, [selectedId, selectedData, data]);
30
30
  useEffect(() => {
31
31
  setState({
32
32
  skip: 0,
@@ -34,39 +34,32 @@ export function GenericDropdown({ data, selectedId, selectedData, onChange, text
34
34
  subsetData: data.slice(0, pageSize),
35
35
  });
36
36
  }, [data]);
37
- const filteredData = useMemo(() => {
38
- return data.filter((item) => {
39
- return item[textField] !== undefined && item[textField] !== null;
40
- });
41
- }, [data, textField]);
42
- 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) => {
43
42
  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) => {
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) => {
64
56
  const skip = event.page.skip;
65
57
  const take = event.page.take;
66
- const newSubsetData = filteredData.slice(skip, skip + take);
58
+ const newSubsetData = filteredData.current.length ? filteredData.current.slice(skip, skip + take) : data.slice(skip, skip + take);
67
59
  setState(Object.assign(Object.assign({}, state), { subsetData: newSubsetData, skip: skip }));
68
- }, [filteredData, state]);
60
+ };
69
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
70
63
  total: state.total,
71
64
  pageSize: pageSize,
72
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.5",
3
+ "version": "2.8.7",
4
4
  "main": "index.js",
5
5
  "scripts": {
6
6
  "test": "jest",