@hi-ui/query-filter 5.0.0-canary.0

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.
@@ -0,0 +1,125 @@
1
+ /** @LICENSE
2
+ * @hi-ui/query-filter
3
+ * https://github.com/XiaoMi/hiui/tree/master/packages/ui/query-filter#readme
4
+ *
5
+ * Copyright (c) HiUI <mi-hiui@xiaomi.com>.
6
+ *
7
+ * This source code is licensed under the MIT license found in the
8
+ * LICENSE file in the root directory of this source tree.
9
+ */
10
+ import { __rest } from 'tslib';
11
+ import React, { useState, useRef, useEffect } from 'react';
12
+ import { useLocaleContext } from '@hi-ui/core';
13
+ import { getPrefixCls } from '@hi-ui/classname';
14
+ import Drawer from '@hi-ui/drawer';
15
+ import { Button } from '@hi-ui/button';
16
+ import { FilterForm, updateSelectedCacheData } from '../FilterForm/index.js';
17
+ import { useFilterContext } from '../context.js';
18
+ var prefixCls = getPrefixCls('query-filter-drawer');
19
+ var FilterDrawer = function FilterDrawer(_a) {
20
+ var propsFilterFields = _a.filterFields,
21
+ propsFormData = _a.formData,
22
+ onChange = _a.onChange,
23
+ onPinChange = _a.onPinChange,
24
+ onSelect = _a.onSelect,
25
+ title = _a.title,
26
+ sureText = _a.sureText,
27
+ cancelText = _a.cancelText,
28
+ visibleProp = _a.visible,
29
+ pinTexts = _a.pinTexts,
30
+ onClose = _a.onClose,
31
+ customFieldProps = _a.customFieldProps,
32
+ restProps = __rest(_a, ["filterFields", "formData", "onChange", "onPinChange", "onSelect", "title", "sureText", "cancelText", "visible", "pinTexts", "onClose", "customFieldProps"]);
33
+ var _useState = useState(propsFormData),
34
+ formData = _useState[0],
35
+ setFormData = _useState[1];
36
+ var _useState2 = useState(visibleProp),
37
+ visible = _useState2[0],
38
+ setVisible = _useState2[1];
39
+ var _useState3 = useState(propsFilterFields),
40
+ filterFields = _useState3[0],
41
+ setFilterFields = _useState3[1];
42
+ var i18n = useLocaleContext();
43
+ var _useFilterContext = useFilterContext(),
44
+ selectedCacheData = _useFilterContext.selectedCacheData,
45
+ setSelectedCacheData = _useFilterContext.setSelectedCacheData;
46
+ var originSelectedCacheData = useRef(selectedCacheData);
47
+ var newSelectedCacheData = useRef(selectedCacheData);
48
+ useEffect(function () {
49
+ originSelectedCacheData.current = new Map(selectedCacheData);
50
+ }, [selectedCacheData]);
51
+ useEffect(function () {
52
+ setFormData(propsFormData);
53
+ }, [propsFormData]);
54
+ useEffect(function () {
55
+ setVisible(visibleProp);
56
+ }, [visibleProp]);
57
+ useEffect(function () {
58
+ setFilterFields(propsFilterFields);
59
+ }, [propsFilterFields]);
60
+ var handleChange = function handleChange(val, allVals) {
61
+ setFormData(allVals);
62
+ onSelect === null || onSelect === void 0 ? void 0 : onSelect(val, allVals, filterFields.find(function (item) {
63
+ return item.field === Object.keys(val)[0];
64
+ }));
65
+ };
66
+ var handleConfirm = function handleConfirm() {
67
+ setVisible(false);
68
+ onClose === null || onClose === void 0 ? void 0 : onClose();
69
+ onChange === null || onChange === void 0 ? void 0 : onChange(formData, filterFields);
70
+ setSelectedCacheData(new Map(newSelectedCacheData.current));
71
+ };
72
+ var handlePinChange = function handlePinChange(field, visible) {
73
+ var newFields = filterFields.map(function (item) {
74
+ if (item.field === field) {
75
+ return Object.assign(Object.assign({}, item), {
76
+ visible: visible
77
+ });
78
+ }
79
+ return item;
80
+ });
81
+ setFilterFields(newFields);
82
+ onPinChange === null || onPinChange === void 0 ? void 0 : onPinChange(field, visible);
83
+ };
84
+ var handleReset = function handleReset() {
85
+ setFormData(propsFormData);
86
+ setFilterFields(propsFilterFields);
87
+ setSelectedCacheData(new Map(originSelectedCacheData.current));
88
+ };
89
+ var handleClose = function handleClose() {
90
+ setVisible(false);
91
+ onClose === null || onClose === void 0 ? void 0 : onClose();
92
+ handleReset();
93
+ };
94
+ return /*#__PURE__*/React.createElement(Drawer, Object.assign({
95
+ className: prefixCls,
96
+ title: title,
97
+ footer: /*#__PURE__*/React.createElement("div", {
98
+ className: prefixCls + "-footer",
99
+ style: {
100
+ textAlign: 'right'
101
+ }
102
+ }, /*#__PURE__*/React.createElement(Button, {
103
+ appearance: "line",
104
+ onClick: handleClose
105
+ }, cancelText || i18n.get('modal.cancelText')), /*#__PURE__*/React.createElement(Button, {
106
+ type: "primary",
107
+ onClick: handleConfirm
108
+ }, sureText || i18n.get('modal.confirmText'))),
109
+ visible: visible,
110
+ onClose: handleClose
111
+ }, restProps), /*#__PURE__*/React.createElement(FilterForm, {
112
+ placement: "vertical",
113
+ appearance: "line",
114
+ filterFields: filterFields,
115
+ formData: formData,
116
+ onChange: handleChange,
117
+ onPinChange: handlePinChange,
118
+ pinTexts: pinTexts,
119
+ onDataChange: function onDataChange(field, value, item, items) {
120
+ newSelectedCacheData.current = updateSelectedCacheData(originSelectedCacheData.current, field, value, item, items);
121
+ },
122
+ customFieldProps: customFieldProps
123
+ }));
124
+ };
125
+ export { FilterDrawer };
@@ -0,0 +1,173 @@
1
+ /** @LICENSE
2
+ * @hi-ui/query-filter
3
+ * https://github.com/XiaoMi/hiui/tree/master/packages/ui/query-filter#readme
4
+ *
5
+ * Copyright (c) HiUI <mi-hiui@xiaomi.com>.
6
+ *
7
+ * This source code is licensed under the MIT license found in the
8
+ * LICENSE file in the root directory of this source tree.
9
+ */
10
+ import React, { useRef, useEffect } from 'react';
11
+ import { useLocaleContext } from '@hi-ui/core';
12
+ import { getPrefixCls } from '@hi-ui/classname';
13
+ import Form from '@hi-ui/form';
14
+ import Tooltip from '@hi-ui/tooltip';
15
+ import Button from '@hi-ui/button';
16
+ import { PinOutlined } from '@hi-ui/icons';
17
+ import { useFilterContext } from '../context.js';
18
+ var prefixCls = getPrefixCls('query-filter-form');
19
+ var FilterForm = function FilterForm(_ref) {
20
+ var filterFields = _ref.filterFields,
21
+ formData = _ref.formData,
22
+ onChange = _ref.onChange,
23
+ onPinChange = _ref.onPinChange,
24
+ _ref$placement = _ref.placement,
25
+ placement = _ref$placement === void 0 ? 'horizontal' : _ref$placement,
26
+ _ref$showLabel = _ref.showLabel,
27
+ showLabel = _ref$showLabel === void 0 ? true : _ref$showLabel,
28
+ _ref$showPin = _ref.showPin,
29
+ showPin = _ref$showPin === void 0 ? true : _ref$showPin,
30
+ _ref$appearance = _ref.appearance,
31
+ appearance = _ref$appearance === void 0 ? 'line' : _ref$appearance,
32
+ _ref$gap = _ref.gap,
33
+ gap = _ref$gap === void 0 ? 8 : _ref$gap,
34
+ prepend = _ref.prepend,
35
+ append = _ref.append,
36
+ _ref$pinTexts = _ref.pinTexts,
37
+ pinTexts = _ref$pinTexts === void 0 ? {
38
+ pin: '',
39
+ unpin: ''
40
+ } : _ref$pinTexts,
41
+ onDataChange = _ref.onDataChange,
42
+ customFieldProps = _ref.customFieldProps;
43
+ var formRef = useRef(null);
44
+ useEffect(function () {
45
+ var _a;
46
+ (_a = formRef.current) === null || _a === void 0 ? void 0 : _a.setFieldsValue(formData);
47
+ }, [formData]);
48
+ var prependList = prepend ? Array.isArray(prepend) ? prepend : [prepend] : [];
49
+ var appendList = append ? Array.isArray(append) ? append : [append] : [];
50
+ return /*#__PURE__*/React.createElement("div", {
51
+ className: prefixCls + "-wrapper"
52
+ }, /*#__PURE__*/React.createElement(Form, {
53
+ className: "" + prefixCls,
54
+ innerRef: formRef,
55
+ initialValues: formData,
56
+ onValuesChange: onChange,
57
+ labelPlacement: "top",
58
+ placement: placement,
59
+ showValidateMessage: placement === 'vertical',
60
+ style: {
61
+ '--filter-form-gap': gap + "px"
62
+ }
63
+ }, prependList.map(function (item, index) {
64
+ return /*#__PURE__*/React.createElement(Form.Item, {
65
+ key: index
66
+ }, item);
67
+ }), filterFields.map(function (item) {
68
+ return /*#__PURE__*/React.createElement(FilterField, {
69
+ key: item.field,
70
+ item: item,
71
+ showLabel: showLabel,
72
+ showPin: showPin,
73
+ pinTexts: pinTexts,
74
+ appearance: appearance,
75
+ onPinChange: onPinChange,
76
+ onDataChange: onDataChange,
77
+ customFieldProps: customFieldProps
78
+ });
79
+ }), appendList.map(function (item, index) {
80
+ return /*#__PURE__*/React.createElement(Form.Item, {
81
+ key: index
82
+ }, item);
83
+ })));
84
+ };
85
+ var updateSelectedCacheData = function updateSelectedCacheData(selectedCacheData, field, value, item, items) {
86
+ var newSelectedCacheData = new Map(selectedCacheData);
87
+ if (!value || Array.isArray(value) && value.length === 0) {
88
+ newSelectedCacheData.set(field, []);
89
+ } else {
90
+ if (Array.isArray(value) && items) {
91
+ newSelectedCacheData.set(field, [].concat(items));
92
+ } else {
93
+ newSelectedCacheData.set(field, [item]);
94
+ }
95
+ }
96
+ return newSelectedCacheData;
97
+ };
98
+ var useCacheSelectedData = function useCacheSelectedData() {
99
+ var _useFilterContext = useFilterContext(),
100
+ selectedCacheData = _useFilterContext.selectedCacheData,
101
+ setSelectedCacheData = _useFilterContext.setSelectedCacheData;
102
+ var cacheSelectedData = function cacheSelectedData(field, value, item, items) {
103
+ var newSelectedCacheData = updateSelectedCacheData(selectedCacheData, field, value, item, items);
104
+ setSelectedCacheData(newSelectedCacheData);
105
+ };
106
+ return {
107
+ cacheSelectedData: cacheSelectedData
108
+ };
109
+ };
110
+ function FilterField(_ref2) {
111
+ var item = _ref2.item,
112
+ showLabel = _ref2.showLabel,
113
+ showPin = _ref2.showPin,
114
+ pinTexts = _ref2.pinTexts,
115
+ onPinChange = _ref2.onPinChange,
116
+ appearance = _ref2.appearance,
117
+ onDataChange = _ref2.onDataChange,
118
+ customFieldProps = _ref2.customFieldProps;
119
+ var field = item.field,
120
+ label = item.label,
121
+ component = item.component,
122
+ visible = item.visible;
123
+ var _useFilterContext2 = useFilterContext(),
124
+ selectedCacheData = _useFilterContext2.selectedCacheData;
125
+ var i18n = useLocaleContext();
126
+ var dataMemo = React.useMemo(function () {
127
+ var _a, _b;
128
+ var dataProp = (_a = component === null || component === void 0 ? void 0 : component.props) === null || _a === void 0 ? void 0 : _a.data;
129
+ // 去重后的数据
130
+ var data = dataProp === null || dataProp === void 0 ? void 0 : dataProp.filter(function (item) {
131
+ var _a;
132
+ return !((_a = selectedCacheData.get(field)) === null || _a === void 0 ? void 0 : _a.includes(item));
133
+ });
134
+ return ((_b = component === null || component === void 0 ? void 0 : component.props) === null || _b === void 0 ? void 0 : _b.dataSource) ? (selectedCacheData.get(field) || []).concat(data || []) : dataProp;
135
+ }, [selectedCacheData, field, component]);
136
+ return /*#__PURE__*/React.createElement("div", {
137
+ key: field,
138
+ className: prefixCls + "-item"
139
+ }, /*#__PURE__*/React.createElement(Form.Item, {
140
+ key: field,
141
+ field: field,
142
+ label: showLabel ? label : '',
143
+ className: prefixCls + "-item-form"
144
+ }, /*#__PURE__*/React.cloneElement(component, Object.assign(Object.assign(Object.assign({
145
+ // Todo:因为 Input 组件目前 appearance 没有 'contained' 类型,所以这里先特殊处理
146
+ appearance: appearance === 'contained' ? component.props.appearance || 'contained' : 'line'
147
+ }, appearance === 'contained' ? {
148
+ label: label
149
+ } : {}), {
150
+ data: dataMemo,
151
+ onChange: function onChange(value, item, items) {
152
+ var _a, _b;
153
+ (_b = (_a = component === null || component === void 0 ? void 0 : component.props) === null || _a === void 0 ? void 0 : _a.onChange) === null || _b === void 0 ? void 0 : _b.call(_a, value, item, items);
154
+ onDataChange === null || onDataChange === void 0 ? void 0 : onDataChange(field, value, item, items);
155
+ }
156
+ }), customFieldProps === null || customFieldProps === void 0 ? void 0 : customFieldProps(item)))), showPin && ( /*#__PURE__*/React.createElement(Tooltip, {
157
+ title: visible ? (pinTexts === null || pinTexts === void 0 ? void 0 : pinTexts.unpin) || i18n.get('queryFilter.unpin') : (pinTexts === null || pinTexts === void 0 ? void 0 : pinTexts.pin) || i18n.get('queryFilter.pin'),
158
+ placement: "left",
159
+ gutterGap: 9
160
+ }, /*#__PURE__*/React.createElement(Button, {
161
+ className: prefixCls + "-item-pin-btn",
162
+ size: "sm",
163
+ type: visible ? 'primary' : 'default',
164
+ appearance: "text",
165
+ icon: /*#__PURE__*/React.createElement(PinOutlined, {
166
+ size: 16
167
+ }),
168
+ onClick: function onClick() {
169
+ return onPinChange === null || onPinChange === void 0 ? void 0 : onPinChange(field, !visible);
170
+ }
171
+ }))));
172
+ }
173
+ export { FilterForm, updateSelectedCacheData, useCacheSelectedData };
@@ -0,0 +1,57 @@
1
+ /** @LICENSE
2
+ * @hi-ui/query-filter
3
+ * https://github.com/XiaoMi/hiui/tree/master/packages/ui/query-filter#readme
4
+ *
5
+ * Copyright (c) HiUI <mi-hiui@xiaomi.com>.
6
+ *
7
+ * This source code is licensed under the MIT license found in the
8
+ * LICENSE file in the root directory of this source tree.
9
+ */
10
+ import { __rest } from 'tslib';
11
+ import React, { forwardRef } from 'react';
12
+ import { getPrefixCls, cx } from '@hi-ui/classname';
13
+ import { __DEV__ } from '@hi-ui/env';
14
+ import { useCacheSelectedData, FilterForm } from './FilterForm/index.js';
15
+ var QUERY_FILTER_PREFIX = getPrefixCls('query-filter');
16
+ /**
17
+ * 筛选表单
18
+ */
19
+ var QueryFilter = /*#__PURE__*/forwardRef(function (_a, ref) {
20
+ var _a$prefixCls = _a.prefixCls,
21
+ prefixCls = _a$prefixCls === void 0 ? QUERY_FILTER_PREFIX : _a$prefixCls,
22
+ _a$role = _a.role,
23
+ role = _a$role === void 0 ? 'query-filter' : _a$role,
24
+ className = _a.className,
25
+ filterFields = _a.filterFields,
26
+ formData = _a.formData,
27
+ onChange = _a.onChange,
28
+ rest = __rest(_a, ["prefixCls", "role", "className", "children", "filterFields", "formData", "onChange"]);
29
+ var cls = cx(prefixCls, className);
30
+ var _useCacheSelectedData = useCacheSelectedData(),
31
+ cacheSelectedData = _useCacheSelectedData.cacheSelectedData;
32
+ var handleChange = function handleChange(formData) {
33
+ onChange === null || onChange === void 0 ? void 0 : onChange(formData);
34
+ };
35
+ return /*#__PURE__*/React.createElement("div", {
36
+ ref: ref,
37
+ role: role,
38
+ className: cls
39
+ }, /*#__PURE__*/React.createElement(FilterForm, Object.assign({
40
+ placement: "horizontal",
41
+ showLabel: false,
42
+ showPin: false,
43
+ appearance: "contained",
44
+ filterFields: filterFields,
45
+ formData: formData,
46
+ onChange: function onChange(value, allValues) {
47
+ handleChange(allValues);
48
+ },
49
+ onDataChange: function onDataChange(field, value, item, items) {
50
+ cacheSelectedData(field, value, item, items);
51
+ }
52
+ }, rest)));
53
+ });
54
+ if (__DEV__) {
55
+ QueryFilter.displayName = 'QueryFilter';
56
+ }
57
+ export { QueryFilter };
@@ -0,0 +1,25 @@
1
+ /** @LICENSE
2
+ * @hi-ui/query-filter
3
+ * https://github.com/XiaoMi/hiui/tree/master/packages/ui/query-filter#readme
4
+ *
5
+ * Copyright (c) HiUI <mi-hiui@xiaomi.com>.
6
+ *
7
+ * This source code is licensed under the MIT license found in the
8
+ * LICENSE file in the root directory of this source tree.
9
+ */
10
+ import React from 'react';
11
+ import { FilterProvider } from './context.js';
12
+ var QueryFilterProvider = function QueryFilterProvider(_ref) {
13
+ var children = _ref.children;
14
+ // 缓存选中的数据,方便在多个组件中共享数据,解决组件 dataSource 模式下选中数据回显问题
15
+ var _React$useState = React.useState(new Map()),
16
+ selectedCacheData = _React$useState[0],
17
+ setSelectedCacheData = _React$useState[1];
18
+ return /*#__PURE__*/React.createElement(FilterProvider, {
19
+ value: {
20
+ selectedCacheData: selectedCacheData,
21
+ setSelectedCacheData: setSelectedCacheData
22
+ }
23
+ }, children);
24
+ };
25
+ export { QueryFilterProvider };
@@ -0,0 +1,28 @@
1
+ /** @LICENSE
2
+ * @hi-ui/query-filter
3
+ * https://github.com/XiaoMi/hiui/tree/master/packages/ui/query-filter#readme
4
+ *
5
+ * Copyright (c) HiUI <mi-hiui@xiaomi.com>.
6
+ *
7
+ * This source code is licensed under the MIT license found in the
8
+ * LICENSE file in the root directory of this source tree.
9
+ */
10
+ import { __rest } from 'tslib';
11
+ import React from 'react';
12
+ import { getPrefixCls } from '@hi-ui/classname';
13
+ import { SearchOutlined } from '@hi-ui/icons';
14
+ import Input from '@hi-ui/input';
15
+ var prefixCls = getPrefixCls('query-filter-search-input');
16
+ var SearchInput = function SearchInput(_a) {
17
+ var restProps = __rest(_a, []);
18
+ return /*#__PURE__*/React.createElement(Input, Object.assign({
19
+ className: prefixCls,
20
+ style: {
21
+ width: 200
22
+ },
23
+ clearable: true,
24
+ appearance: "filled",
25
+ prefix: /*#__PURE__*/React.createElement(SearchOutlined, null)
26
+ }, restProps));
27
+ };
28
+ export { SearchInput };
@@ -0,0 +1,21 @@
1
+ /** @LICENSE
2
+ * @hi-ui/query-filter
3
+ * https://github.com/XiaoMi/hiui/tree/master/packages/ui/query-filter#readme
4
+ *
5
+ * Copyright (c) HiUI <mi-hiui@xiaomi.com>.
6
+ *
7
+ * This source code is licensed under the MIT license found in the
8
+ * LICENSE file in the root directory of this source tree.
9
+ */
10
+ import { useContext, createContext } from 'react';
11
+ var FilterContext = /*#__PURE__*/createContext({
12
+ selectedCacheData: new Map(),
13
+ setSelectedCacheData: function setSelectedCacheData() {
14
+ console.log('setSelectedCacheData');
15
+ }
16
+ });
17
+ var FilterProvider = FilterContext.Provider;
18
+ var useFilterContext = function useFilterContext() {
19
+ return useContext(FilterContext);
20
+ };
21
+ export { FilterContext, FilterProvider, useFilterContext };
@@ -0,0 +1,16 @@
1
+ /** @LICENSE
2
+ * @hi-ui/query-filter
3
+ * https://github.com/XiaoMi/hiui/tree/master/packages/ui/query-filter#readme
4
+ *
5
+ * Copyright (c) HiUI <mi-hiui@xiaomi.com>.
6
+ *
7
+ * This source code is licensed under the MIT license found in the
8
+ * LICENSE file in the root directory of this source tree.
9
+ */
10
+ import './styles/index.scss.js';
11
+ export { QueryFilter, QueryFilter as default } from './QueryFilter.js';
12
+ export { QueryFilterProvider } from './QueryFilterProvider.js';
13
+ export { FilterForm, updateSelectedCacheData, useCacheSelectedData } from './FilterForm/index.js';
14
+ export { FilterDrawer } from './FilterDrawer/index.js';
15
+ export { SearchInput } from './SearchInput/index.js';
16
+ export { FilterButton } from './FilterButton/index.js';
@@ -0,0 +1,13 @@
1
+ /** @LICENSE
2
+ * @hi-ui/query-filter
3
+ * https://github.com/XiaoMi/hiui/tree/master/packages/ui/query-filter#readme
4
+ *
5
+ * Copyright (c) HiUI <mi-hiui@xiaomi.com>.
6
+ *
7
+ * This source code is licensed under the MIT license found in the
8
+ * LICENSE file in the root directory of this source tree.
9
+ */
10
+ import __styleInject__ from '@hi-ui/style-inject';
11
+ var css_248z = ".hi-v5-query-filter-form-wrapper .hi-v5-query-filter-form {gap: var(--query-filter-form-gap, var(--hi-v5-spacing-4, 8px));}.hi-v5-query-filter-form-wrapper .hi-v5-query-filter-form-item {display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-align: center;-ms-flex-align: center;align-items: center;}.hi-v5-query-filter-form-wrapper .hi-v5-query-filter-form-item-form {-webkit-box-flex: 1;-ms-flex: 1 1;flex: 1 1;overflow: hidden;}.hi-v5-query-filter-form-wrapper .hi-v5-query-filter-form-item-pin-btn {-ms-flex-negative: 0;flex-shrink: 0;width: var(--hi-v5-height-8, 32px) !important;height: var(--hi-v5-height-8, 32px) !important;margin: var(--hi-v5-spacing-1, 2px) 0 0 var(--hi-v5-spacing-4, 8px);}.hi-v5-query-filter-button-icon {font-size: var(--hi-v5-text-size-lg, 1rem);}.hi-v5-query-filter-button-text {-webkit-margin-start: var(--hi-v5-spacing-4, 8px);margin-inline-start: var(--hi-v5-spacing-4, 8px);}.hi-v5-query-filter-button.has-count .hi-v5-query-filter-button-text {color: var(--hi-v5-color-primary-600, var(--hi-v5-color-brandblue-600, #1843d2));}.hi-v5-query-filter-button-count-wrapper {-webkit-box-sizing: border-box;box-sizing: border-box;display: -webkit-inline-box;display: -ms-inline-flexbox;display: inline-flex;-webkit-box-align: center;-ms-flex-align: center;align-items: center;-webkit-box-pack: center;-ms-flex-pack: center;justify-content: center;width: 14px;height: 14px;border-radius: 9999px;color: #fff;background-color: var(--hi-v5-color-primary-600, var(--hi-v5-color-brandblue-600, #1843d2));}.hi-v5-query-filter-button-count {font-size: 20px;-webkit-transform: scale(0.5);transform: scale(0.5);-webkit-transform-origin: center;transform-origin: center;}.hi-v5-query-filter-search-input[class*=\"--appearance-filled\"] [class*=__inner],.hi-v5-query-filter-search-input[class*=\"--appearance-filled\"] [class*=__inner--focused] {background-color: var(--hi-v5-color-gray-50, #f2f4f7) !important;}";
12
+ __styleInject__(css_248z);
13
+ export { css_248z as default };
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ import { ButtonProps } from '@hi-ui/button';
3
+ export declare const FilterButton: React.FC<FilterButtonProps>;
4
+ export interface FilterButtonProps extends ButtonProps {
5
+ /**
6
+ * 筛选数量,当数量大于 9 时,宽度会自动调整为自适应
7
+ */
8
+ count?: number;
9
+ /**
10
+ * 按钮文本
11
+ */
12
+ children?: React.ReactNode;
13
+ }
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import { DrawerProps } from '@hi-ui/drawer';
3
+ import { FilterFieldProps, FilterFormProps } from '../FilterForm';
4
+ export declare const FilterDrawer: React.FC<Omit<FilterFormProps, 'onChange' | 'placement'> & {
5
+ onChange?: (formData: Record<string, unknown>, fields: FilterFieldProps[]) => void;
6
+ sureText?: React.ReactNode;
7
+ cancelText?: React.ReactNode;
8
+ } & DrawerProps & {
9
+ onSelect?: (val: Record<string, unknown>, allVals: Record<string, unknown>, filterField?: FilterFieldProps) => void;
10
+ }>;
@@ -0,0 +1,36 @@
1
+ import React, { ReactText } from 'react';
2
+ import { FormProps } from '@hi-ui/form';
3
+ export declare const FilterForm: React.FC<FilterFormProps>;
4
+ export interface FilterFieldProps {
5
+ field: string;
6
+ label: React.ReactNode;
7
+ component: React.ReactElement;
8
+ options?: {
9
+ id: ReactText;
10
+ title: string;
11
+ }[];
12
+ visible?: boolean;
13
+ }
14
+ export interface FilterFormProps {
15
+ filterFields: FilterFieldProps[];
16
+ formData: Record<string, unknown>;
17
+ onChange?: FormProps['onValuesChange'];
18
+ onPinChange?: (field: string, visible: boolean) => void;
19
+ placement?: FormProps['placement'];
20
+ showLabel?: boolean;
21
+ showPin?: boolean;
22
+ appearance?: 'line' | 'contained';
23
+ gap?: number;
24
+ prepend?: React.ReactNode | React.ReactNode[];
25
+ append?: React.ReactNode | React.ReactNode[];
26
+ pinTexts?: {
27
+ pin: string;
28
+ unpin: string;
29
+ };
30
+ onDataChange?: (field: string, value: React.ReactText | React.ReactText[], item: unknown, items: unknown[]) => void;
31
+ customFieldProps?: (filterField: FilterFieldProps) => Record<string, unknown> | undefined;
32
+ }
33
+ export declare const updateSelectedCacheData: (selectedCacheData: Map<string, unknown[]>, field: string, value: React.ReactText | React.ReactText[], item: unknown, items: unknown[]) => Map<string, unknown[]>;
34
+ export declare const useCacheSelectedData: () => {
35
+ cacheSelectedData: (field: string, value: React.ReactText | React.ReactText[], item: unknown, items: unknown[]) => void;
36
+ };
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import { HiBaseHTMLProps } from '@hi-ui/core';
3
+ import { FilterFormProps } from './FilterForm';
4
+ /**
5
+ * 筛选表单
6
+ */
7
+ export declare const QueryFilter: React.ForwardRefExoticComponent<QueryFilterProps & React.RefAttributes<HTMLDivElement | null>>;
8
+ export interface QueryFilterProps extends HiBaseHTMLProps<'div'>, FilterFormProps {
9
+ onChange?: (formData: Record<string, unknown>) => void;
10
+ }
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ export declare const QueryFilterProvider: React.FC<{
3
+ children: React.ReactNode;
4
+ }>;
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { InputProps } from '@hi-ui/input';
3
+ export declare const SearchInput: React.FC<SearchInputProps>;
4
+ export declare type SearchInputProps = InputProps;
@@ -0,0 +1,13 @@
1
+ /// <reference types="react" />
2
+ export declare const FilterContext: import("react").Context<{
3
+ selectedCacheData: Map<string, unknown[]>;
4
+ setSelectedCacheData: (data: Map<string, unknown[]>) => void;
5
+ }>;
6
+ export declare const FilterProvider: import("react").Provider<{
7
+ selectedCacheData: Map<string, unknown[]>;
8
+ setSelectedCacheData: (data: Map<string, unknown[]>) => void;
9
+ }>;
10
+ export declare const useFilterContext: () => {
11
+ selectedCacheData: Map<string, unknown[]>;
12
+ setSelectedCacheData: (data: Map<string, unknown[]>) => void;
13
+ };
@@ -0,0 +1,8 @@
1
+ import './styles/index.scss';
2
+ export * from './QueryFilter';
3
+ export { QueryFilter as default } from './QueryFilter';
4
+ export * from './QueryFilterProvider';
5
+ export * from './FilterForm';
6
+ export * from './FilterDrawer';
7
+ export * from './SearchInput';
8
+ export * from './FilterButton';
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ export interface QueryFilterDataItem {
3
+ /**
4
+ * 节点唯一 id
5
+ */
6
+ id: React.ReactText;
7
+ /**
8
+ * 节点标题
9
+ */
10
+ title: React.ReactNode;
11
+ }
package/package.json ADDED
@@ -0,0 +1,66 @@
1
+ {
2
+ "name": "@hi-ui/query-filter",
3
+ "version": "5.0.0-canary.0",
4
+ "description": "A sub-package for @hi-ui/hiui.",
5
+ "keywords": [],
6
+ "author": "HiUI <mi-hiui@xiaomi.com>",
7
+ "homepage": "https://github.com/XiaoMi/hiui/tree/master/packages/ui/query-filter#readme",
8
+ "license": "MIT",
9
+ "directories": {
10
+ "lib": "lib",
11
+ "test": "__tests__"
12
+ },
13
+ "files": [
14
+ "lib"
15
+ ],
16
+ "main": "lib/cjs/index.js",
17
+ "module": "lib/esm/index.js",
18
+ "types": "lib/types/index.d.ts",
19
+ "typings": "lib/types/index.d.ts",
20
+ "exports": {
21
+ ".": {
22
+ "require": "./lib/cjs/index.js",
23
+ "default": "./lib/esm/index.js"
24
+ }
25
+ },
26
+ "publishConfig": {
27
+ "access": "public"
28
+ },
29
+ "repository": {
30
+ "type": "git",
31
+ "url": "git+https://github.com/XiaoMi/hiui.git"
32
+ },
33
+ "scripts": {
34
+ "test": "jest",
35
+ "clean": "rimraf lib",
36
+ "prebuild": "yarn clean",
37
+ "build:esm": "hi-build ./src/index.ts --format esm -d ./lib/esm",
38
+ "build:cjs": "hi-build ./src/index.ts --format cjs -d ./lib/cjs",
39
+ "build:types": "tsc --emitDeclarationOnly --declaration --declarationDir lib/types",
40
+ "build": "concurrently yarn:build:*"
41
+ },
42
+ "bugs": {
43
+ "url": "https://github.com/XiaoMi/hiui/issues"
44
+ },
45
+ "dependencies": {
46
+ "@hi-ui/classname": "^4.0.0",
47
+ "@hi-ui/button": "^4.0.0",
48
+ "@hi-ui/drawer": "^4.0.0",
49
+ "@hi-ui/env": "^4.0.0",
50
+ "@hi-ui/form": "^4.0.0",
51
+ "@hi-ui/tooltip": "^4.0.0",
52
+ "@hi-ui/icons": "^5.0.0-canary.4",
53
+ "@hi-ui/input": "^4.0.0"
54
+ },
55
+ "peerDependencies": {
56
+ "@hi-ui/core": ">=5.0.0-canary.4",
57
+ "react": ">=16.8.6",
58
+ "react-dom": ">=16.8.6"
59
+ },
60
+ "devDependencies": {
61
+ "@hi-ui/core": "^5.0.0-canary.4",
62
+ "@hi-ui/core-css": "^4.0.0",
63
+ "react": "^17.0.1",
64
+ "react-dom": "^17.0.1"
65
+ }
66
+ }