@synerise/ds-search 1.5.8 → 1.5.10
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.
- package/CHANGELOG.md +8 -0
- package/README.md +47 -42
- package/dist/Elements/SearchButton/SearchButton.d.ts +2 -2
- package/dist/Elements/SearchButton/SearchButton.js +16 -28
- package/dist/Elements/SearchButton/SearchButton.types.js +1 -1
- package/dist/Elements/SearchHeader/SearchHeader.d.ts +2 -2
- package/dist/Elements/SearchHeader/SearchHeader.js +15 -15
- package/dist/Elements/SearchHeader/SearchHeader.types.js +1 -1
- package/dist/Elements/SearchInput/SearchInput.d.ts +2 -2
- package/dist/Elements/SearchInput/SearchInput.js +74 -117
- package/dist/Elements/SearchInput/SearchInput.types.d.ts +3 -3
- package/dist/Elements/SearchInput/SearchInput.types.js +1 -1
- package/dist/Elements/SearchItems/SearchItems.d.ts +2 -2
- package/dist/Elements/SearchItems/SearchItems.js +54 -58
- package/dist/Elements/SearchItems/SearchItems.types.d.ts +1 -1
- package/dist/Elements/SearchItems/SearchItems.types.js +1 -1
- package/dist/Elements/SearchRenderer/SearchRenderer.d.ts +1 -1
- package/dist/Elements/SearchRenderer/SearchRenderer.js +22 -33
- package/dist/Elements/SearchRenderer/SearchRenderer.types.d.ts +2 -2
- package/dist/Elements/SearchRenderer/SearchRenderer.types.js +1 -1
- package/dist/Elements/index.js +12 -4
- package/dist/Elements/utils/searchUtils.d.ts +1 -1
- package/dist/Elements/utils/searchUtils.js +16 -17
- package/dist/Search.d.ts +2 -3
- package/dist/Search.js +145 -230
- package/dist/Search.styles.d.ts +15 -15
- package/dist/Search.styles.js +59 -62
- package/dist/Search.types.d.ts +4 -4
- package/dist/Search.types.js +8 -7
- package/dist/assets/style/index-tn0RQdqM.css +0 -0
- package/dist/const.js +16 -7
- package/dist/index.js +14 -2
- package/dist/modules.d.js +1 -1
- package/dist/modules.d.ts +0 -0
- package/package.json +11 -11
|
@@ -1,48 +1,51 @@
|
|
|
1
|
-
|
|
2
|
-
import
|
|
3
|
-
import { FixedSizeList
|
|
4
|
-
import { ListContextProvider } from
|
|
5
|
-
import Menu from
|
|
6
|
-
|
|
7
|
-
overflowX:
|
|
8
|
-
overflowY:
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useRef, useMemo, useEffect, cloneElement } from "react";
|
|
3
|
+
import { FixedSizeList } from "react-window";
|
|
4
|
+
import { ListContextProvider } from "@synerise/ds-list-item";
|
|
5
|
+
import Menu from "@synerise/ds-menu";
|
|
6
|
+
const listStyle = {
|
|
7
|
+
overflowX: "unset",
|
|
8
|
+
overflowY: "unset"
|
|
9
9
|
};
|
|
10
|
-
|
|
11
|
-
return
|
|
10
|
+
function renderSearchList(props, children) {
|
|
11
|
+
return /* @__PURE__ */ jsx(SearchItems, { ...props, children });
|
|
12
12
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
13
|
+
const rowRenderer = ({
|
|
14
|
+
index,
|
|
15
|
+
style,
|
|
16
|
+
data
|
|
17
|
+
}) => {
|
|
18
|
+
const item = data && data.items[index];
|
|
19
|
+
const itemReturnedFromRenderer = data.itemRender(item);
|
|
20
|
+
const rendererCustomStyles = itemReturnedFromRenderer && itemReturnedFromRenderer.props && itemReturnedFromRenderer.props.style || {};
|
|
21
|
+
const mergedStyles = {
|
|
22
|
+
...rendererCustomStyles,
|
|
23
|
+
...style
|
|
24
|
+
};
|
|
25
|
+
return cloneElement(itemReturnedFromRenderer, {
|
|
26
|
+
...itemReturnedFromRenderer.props,
|
|
22
27
|
style: mergedStyles,
|
|
23
28
|
highlight: data.highlight,
|
|
24
|
-
onClick:
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
className: 'ds-search-item'
|
|
28
|
-
}));
|
|
29
|
+
onClick: () => data.onItemClick && data.onItemClick(item),
|
|
30
|
+
className: "ds-search-item"
|
|
31
|
+
});
|
|
29
32
|
};
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
33
|
+
const SearchItems = ({
|
|
34
|
+
data,
|
|
35
|
+
height,
|
|
36
|
+
highlight,
|
|
37
|
+
itemRender,
|
|
38
|
+
listProps,
|
|
39
|
+
onItemClick,
|
|
40
|
+
rowHeight,
|
|
41
|
+
visibleRows,
|
|
42
|
+
width,
|
|
43
|
+
renderInMenu = true
|
|
44
|
+
}) => {
|
|
45
|
+
const listRef = useRef(null);
|
|
46
|
+
const listHeight = useMemo(() => {
|
|
44
47
|
if (data) {
|
|
45
|
-
|
|
48
|
+
const dataHeight = data.length * rowHeight;
|
|
46
49
|
if (visibleRows) {
|
|
47
50
|
return visibleRows < data.length ? visibleRows * rowHeight : dataHeight;
|
|
48
51
|
}
|
|
@@ -53,27 +56,20 @@ var SearchItems = function SearchItems(_ref2) {
|
|
|
53
56
|
}
|
|
54
57
|
return 0;
|
|
55
58
|
}, [data, height, rowHeight, visibleRows]);
|
|
56
|
-
useEffect(
|
|
59
|
+
useEffect(() => {
|
|
57
60
|
if (listRef.current && listProps) {
|
|
58
61
|
listRef.current.scrollTo(Math.max(0, listProps.scrollTop || 0));
|
|
59
62
|
}
|
|
60
63
|
}, [listProps]);
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
style: listStyle,
|
|
73
|
-
width: width
|
|
74
|
-
}, listProps), rowRenderer);
|
|
75
|
-
return renderInMenu ? /*#__PURE__*/React.createElement(Menu, {
|
|
76
|
-
tabIndex: -1
|
|
77
|
-
}, list) : /*#__PURE__*/React.createElement(ListContextProvider, null, list);
|
|
64
|
+
const list = data && /* @__PURE__ */ jsx(FixedSizeList, { height: listHeight, itemCount: data.length, itemData: {
|
|
65
|
+
highlight,
|
|
66
|
+
itemRender,
|
|
67
|
+
items: data,
|
|
68
|
+
onItemClick
|
|
69
|
+
}, itemSize: rowHeight, ref: listRef, style: listStyle, width, ...listProps, children: rowRenderer });
|
|
70
|
+
return renderInMenu ? /* @__PURE__ */ jsx(Menu, { tabIndex: -1, children: list }) : /* @__PURE__ */ jsx(ListContextProvider, { children: list });
|
|
71
|
+
};
|
|
72
|
+
export {
|
|
73
|
+
SearchItems as default,
|
|
74
|
+
renderSearchList
|
|
78
75
|
};
|
|
79
|
-
export default SearchItems;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SearchRendererProps } from './SearchRenderer.types';
|
|
2
2
|
declare const SearchRenderer: ({ title, tooltip, data, width, height, rowHeight, listProps, itemRender, highlight, onItemClick, }: SearchRendererProps) => JSX.Element | null;
|
|
3
3
|
export default SearchRenderer;
|
|
@@ -1,34 +1,23 @@
|
|
|
1
|
-
import
|
|
2
|
-
import SearchHeader from
|
|
3
|
-
import SearchItems from
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
onItemClick
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
data: data,
|
|
24
|
-
height: height,
|
|
25
|
-
highlight: highlight,
|
|
26
|
-
width: width,
|
|
27
|
-
rowHeight: rowHeight,
|
|
28
|
-
itemRender: itemRender,
|
|
29
|
-
onItemClick: onItemClick,
|
|
30
|
-
listProps: listProps,
|
|
31
|
-
renderInMenu: false
|
|
32
|
-
}));
|
|
1
|
+
import { jsxs, Fragment, jsx } from "react/jsx-runtime";
|
|
2
|
+
import SearchHeader from "../SearchHeader/SearchHeader.js";
|
|
3
|
+
import SearchItems from "../SearchItems/SearchItems.js";
|
|
4
|
+
const SearchRenderer = ({
|
|
5
|
+
title,
|
|
6
|
+
tooltip,
|
|
7
|
+
data,
|
|
8
|
+
width,
|
|
9
|
+
height,
|
|
10
|
+
rowHeight = 30,
|
|
11
|
+
listProps,
|
|
12
|
+
itemRender = (item) => /* @__PURE__ */ jsx(Fragment, { children: item }),
|
|
13
|
+
highlight,
|
|
14
|
+
onItemClick
|
|
15
|
+
}) => {
|
|
16
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
17
|
+
!!title && /* @__PURE__ */ jsx(SearchHeader, { headerText: title, tooltip }),
|
|
18
|
+
/* @__PURE__ */ jsx(SearchItems, { data, height, highlight, width, rowHeight, itemRender, onItemClick, listProps, renderInMenu: false })
|
|
19
|
+
] });
|
|
20
|
+
};
|
|
21
|
+
export {
|
|
22
|
+
SearchRenderer as default
|
|
33
23
|
};
|
|
34
|
-
export default SearchRenderer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
|
package/dist/Elements/index.js
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { default as default2 } from "./SearchInput/SearchInput.js";
|
|
2
|
+
import { default as default3 } from "./SearchHeader/SearchHeader.js";
|
|
3
|
+
import { default as default4, default as default5, renderSearchList } from "./SearchItems/SearchItems.js";
|
|
4
|
+
import { default as default6 } from "./SearchButton/SearchButton.js";
|
|
5
|
+
export {
|
|
6
|
+
default6 as SearchButton,
|
|
7
|
+
default3 as SearchHeader,
|
|
8
|
+
default2 as SearchInput,
|
|
9
|
+
default4 as SearchItemList,
|
|
10
|
+
default5 as SearchItems,
|
|
11
|
+
renderSearchList
|
|
12
|
+
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AnyObject } from '../../Search.types';
|
|
2
2
|
export declare const getAllElementsFiltered: <T extends AnyObject>(data: T[] | undefined | null, value: string, elementTextLookupKey: keyof T) => T[];
|
|
3
3
|
export declare const hasSomeElementFiltered: <T extends AnyObject>(data: T[] | undefined | null, currentValue: string, elementTextLookupKey: keyof T) => boolean;
|
|
4
4
|
export declare const hasSomeElement: (data: Record<string, unknown>[] | undefined) => boolean;
|
|
@@ -1,20 +1,19 @@
|
|
|
1
|
-
import { LIST_HEADER_HEIGHT } from
|
|
2
|
-
|
|
3
|
-
return data && data.filter(
|
|
4
|
-
return String(el[elementTextLookupKey]).toLowerCase().includes(value.toLocaleLowerCase());
|
|
5
|
-
}) || [];
|
|
1
|
+
import { LIST_HEADER_HEIGHT } from "../../const.js";
|
|
2
|
+
const getAllElementsFiltered = (data, value, elementTextLookupKey) => {
|
|
3
|
+
return data && data.filter((el) => String(el[elementTextLookupKey]).toLowerCase().includes(value.toLocaleLowerCase())) || [];
|
|
6
4
|
};
|
|
7
|
-
|
|
8
|
-
return !!data && data.some(
|
|
9
|
-
return String(el[elementTextLookupKey]).toLowerCase().includes(currentValue.toLocaleLowerCase());
|
|
10
|
-
}) || false;
|
|
5
|
+
const hasSomeElementFiltered = (data, currentValue, elementTextLookupKey) => {
|
|
6
|
+
return !!data && data.some((el) => String(el[elementTextLookupKey]).toLowerCase().includes(currentValue.toLocaleLowerCase())) || false;
|
|
11
7
|
};
|
|
12
|
-
|
|
13
|
-
|
|
8
|
+
const hasSomeElement = (data) => !!data && data.length > 0;
|
|
9
|
+
const getParametersScrollTop = ({
|
|
10
|
+
scrollTop,
|
|
11
|
+
rowHeight,
|
|
12
|
+
recent
|
|
13
|
+
}) => scrollTop - LIST_HEADER_HEIGHT - (hasSomeElement(recent) ? recent.length * rowHeight : 0);
|
|
14
|
+
export {
|
|
15
|
+
getAllElementsFiltered,
|
|
16
|
+
getParametersScrollTop,
|
|
17
|
+
hasSomeElement,
|
|
18
|
+
hasSomeElementFiltered
|
|
14
19
|
};
|
|
15
|
-
export var getParametersScrollTop = function getParametersScrollTop(_ref) {
|
|
16
|
-
var scrollTop = _ref.scrollTop,
|
|
17
|
-
rowHeight = _ref.rowHeight,
|
|
18
|
-
recent = _ref.recent;
|
|
19
|
-
return scrollTop - LIST_HEADER_HEIGHT - (hasSomeElement(recent) ? recent.length * rowHeight : 0);
|
|
20
|
-
};
|
package/dist/Search.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import {
|
|
3
|
-
import './style/index.less';
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { AnyObject, SearchProps } from './Search.types';
|
|
4
3
|
export declare function Search<T extends AnyObject, U extends AnyObject, S extends AnyObject>({ divider, dropdownMaxHeight, width, searchWidth, style, dropdownWidth, recent, suggestions, parameters, value, textLookupConfig, hideLabel, parameterValue, onParameterValueChange, alwaysExpanded, onClear, onValueChange, filterLookupKey, recentDisplayProps, parametersDisplayProps, suggestionsDisplayProps, placeholder, clearTooltip, disableInput, inputProps, searchTooltipProps, }: SearchProps<T, U, S>): React.JSX.Element;
|
|
5
4
|
export default Search;
|