@canlooks/can-ui 0.0.147 → 0.0.149

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.
@@ -210,28 +210,28 @@ exports.Curd = (0, react_1.memo)((props) => {
210
210
  innerLoadRows().then();
211
211
  message.success(deleteName + '成功').then();
212
212
  };
213
- return ((0, jsx_runtime_1.jsx)("div", { ...wrapperProps, css: curd_style_1.style, className: (0, utils_1.clsx)(curd_style_1.classes.root, wrapperProps?.className), "data-variant": variant, children: (0, jsx_runtime_1.jsxs)(form_1.Form, { ...(0, utils_1.mergeComponentProps)({
214
- ref: innerFilterRef,
215
- className: curd_style_1.classes.filterForm,
216
- variant: 'plain',
217
- initialValue: initialFilterValue
218
- }, filterProps, {
219
- ...filterableProps?.showButton === false
220
- ? { onChange: filterHandler }
221
- : { onFinish: filterHandler }
222
- }), children: [renderFilterableFn(), (creatable || toolbarLeft || toolbarRight || reloadable || resizable || columnConfigurable) &&
223
- (0, jsx_runtime_1.jsxs)("div", { className: curd_style_1.classes.toolbar, children: [(0, jsx_runtime_1.jsxs)("div", { className: curd_style_1.classes.toolbarLeft, children: [creatable &&
224
- (0, jsx_runtime_1.jsxs)(button_1.Button, { prefix: (0, jsx_runtime_1.jsx)(icon_1.Icon, { icon: faPlus_1.faPlus }), ...createButtonProps, onClick: createHandler, children: [createName, dataName] }), toolbarLeft] }), (0, jsx_runtime_1.jsxs)("div", { className: curd_style_1.classes.toolbarRight, children: [!!toolbarRight &&
225
- (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [toolbarRight, (0, jsx_runtime_1.jsx)(divider_1.Divider, { className: curd_style_1.classes.divider, orientation: "vertical" })] }), reloadable &&
226
- (0, jsx_runtime_1.jsx)(tooltip_1.Tooltip, { title: "\u5237\u65B0", children: (0, jsx_runtime_1.jsx)(button_1.Button, { shape: "circular", variant: "text", color: "text.secondary", prefix: (0, jsx_runtime_1.jsx)(icon_1.Icon, { icon: faRotateRight_1.faRotateRight }), loading: innerLoading.current, onClick: reloadHandler }) }), resizable &&
227
- (0, jsx_runtime_1.jsx)(curdResizable_1.CurdResizable, { innerSize: innerSize.current, setInnerSize: setInnerSize }), columnConfigurable &&
228
- (0, jsx_runtime_1.jsx)(curdColumnConfig_1.CurdColumnConfig, { columns: orderedColumns, innerVisible: innerVisible.current, setInnerVisible: setInnerVisible, setInnerOrder: setInnerOrder })] })] }), (0, jsx_runtime_1.jsx)("div", { className: curd_style_1.classes.card, children: (0, jsx_runtime_1.jsx)(dataGrid_1.DataGrid, { ...dataGridProps, columns: actualColumns, tableProps: {
229
- ...props.tableProps,
230
- ...resizable && { size: innerSize.current }
231
- }, loading: innerLoading.current, rows: innerRows.current, paginatable: !loadRows && props.paginatable, renderPagination: loadRows && props.paginatable !== false
232
- ? () => (0, jsx_runtime_1.jsx)(pagination_1.Pagination, { ...props.paginationProps, total: innerTotal.current, page: innerPage.current, onPageChange: setInnerPage, pageSize: innerPageSize.current, onPageSizeChange: setInnerPageSize })
233
- : props.renderPagination, orderColumn: innerOrderColumn.current, orderType: innerOrderType.current, onOrderChange: orderChangeHandler, _noRenderFormTag: true }) }), (creatable || updatable) &&
234
- (0, jsx_runtime_1.jsx)(curdDialog_1.CurdDialog, { ...dialogProps, ref: curdDialogRef, onFinish: finishHandler, curdProps: props })] }) }));
213
+ return ((0, jsx_runtime_1.jsxs)("div", { ...wrapperProps, css: curd_style_1.style, className: (0, utils_1.clsx)(curd_style_1.classes.root, wrapperProps?.className), "data-variant": variant, children: [(0, jsx_runtime_1.jsxs)(form_1.Form, { ...(0, utils_1.mergeComponentProps)({
214
+ ref: innerFilterRef,
215
+ className: curd_style_1.classes.filterForm,
216
+ variant: 'plain',
217
+ initialValue: initialFilterValue
218
+ }, filterProps, {
219
+ ...filterableProps?.showButton === false
220
+ ? { onChange: filterHandler }
221
+ : { onFinish: filterHandler }
222
+ }), children: [renderFilterableFn(), (creatable || toolbarLeft || toolbarRight || reloadable || resizable || columnConfigurable) &&
223
+ (0, jsx_runtime_1.jsxs)("div", { className: curd_style_1.classes.toolbar, children: [(0, jsx_runtime_1.jsxs)("div", { className: curd_style_1.classes.toolbarLeft, children: [creatable &&
224
+ (0, jsx_runtime_1.jsxs)(button_1.Button, { prefix: (0, jsx_runtime_1.jsx)(icon_1.Icon, { icon: faPlus_1.faPlus }), ...createButtonProps, onClick: createHandler, children: [createName, dataName] }), toolbarLeft] }), (0, jsx_runtime_1.jsxs)("div", { className: curd_style_1.classes.toolbarRight, children: [!!toolbarRight &&
225
+ (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [toolbarRight, (0, jsx_runtime_1.jsx)(divider_1.Divider, { className: curd_style_1.classes.divider, orientation: "vertical" })] }), reloadable &&
226
+ (0, jsx_runtime_1.jsx)(tooltip_1.Tooltip, { title: "\u5237\u65B0", children: (0, jsx_runtime_1.jsx)(button_1.Button, { shape: "circular", variant: "text", color: "text.secondary", prefix: (0, jsx_runtime_1.jsx)(icon_1.Icon, { icon: faRotateRight_1.faRotateRight }), loading: innerLoading.current, onClick: reloadHandler }) }), resizable &&
227
+ (0, jsx_runtime_1.jsx)(curdResizable_1.CurdResizable, { innerSize: innerSize.current, setInnerSize: setInnerSize }), columnConfigurable &&
228
+ (0, jsx_runtime_1.jsx)(curdColumnConfig_1.CurdColumnConfig, { columns: orderedColumns, innerVisible: innerVisible.current, setInnerVisible: setInnerVisible, setInnerOrder: setInnerOrder })] })] }), (0, jsx_runtime_1.jsx)("div", { className: curd_style_1.classes.card, children: (0, jsx_runtime_1.jsx)(dataGrid_1.DataGrid, { ...dataGridProps, columns: actualColumns, tableProps: {
229
+ ...props.tableProps,
230
+ ...resizable && { size: innerSize.current }
231
+ }, loading: innerLoading.current, rows: innerRows.current, paginatable: !loadRows && props.paginatable, renderPagination: loadRows && props.paginatable !== false
232
+ ? () => (0, jsx_runtime_1.jsx)(pagination_1.Pagination, { ...props.paginationProps, total: innerTotal.current, page: innerPage.current, onPageChange: setInnerPage, pageSize: innerPageSize.current, onPageSizeChange: setInnerPageSize })
233
+ : props.renderPagination, orderColumn: innerOrderColumn.current, orderType: innerOrderType.current, onOrderChange: orderChangeHandler, _noRenderFormTag: true }) })] }), (creatable || updatable) &&
234
+ (0, jsx_runtime_1.jsx)(curdDialog_1.CurdDialog, { ...dialogProps, ref: curdDialogRef, onFinish: finishHandler, curdProps: props })] }));
235
235
  });
236
236
  exports.Curd.Filter = curdFilterable_1.CurdFilterable;
237
237
  exports.Curd.CONTROL_COLUMN = Symbol('control-column');
@@ -13,6 +13,8 @@ export interface FilterOptionsProps extends FilterSharedProps, OptionsBaseProps<
13
13
  }
14
14
  export interface FilterControlProps extends FilterSharedProps {
15
15
  control: FormItemChildren;
16
+ /** 关闭弹框时触发筛选,默认为`false` */
17
+ triggerFilterOnClose?: boolean;
16
18
  }
17
19
  export declare const FilterBubbleContent: import("react").MemoExoticComponent<({ columnKey, columnFilterProps }: {
18
20
  columnKey: Id;
@@ -16,15 +16,22 @@ const free_solid_svg_icons_1 = require("@fortawesome/free-solid-svg-icons");
16
16
  exports.FilterBubbleContent = (0, react_1.memo)(({ columnKey, columnFilterProps }) => {
17
17
  const { formRef } = (0, form_1.useFormContext)();
18
18
  const { open, setOpen } = (0, popper_1.usePopperContext)();
19
+ const hasChanged = (0, react_1.useRef)(false);
19
20
  (0, react_1.useEffect)(() => {
20
- if (!open) {
21
- // 关闭弹框触发筛选
21
+ if (open) {
22
+ return;
23
+ }
24
+ // 关闭弹框时,如果已经onChange,或使用control自定义渲染+triggerFilterOnClose,则触发筛选
25
+ if (hasChanged.current
26
+ || ('control' in columnFilterProps && columnFilterProps.triggerFilterOnClose)) {
22
27
  formRef.current.submit().then();
28
+ hasChanged.current = false;
23
29
  }
24
30
  }, [open]);
25
31
  return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(form_1.FormItem, { field: columnKey, children: 'control' in columnFilterProps
26
32
  ? columnFilterProps.control
27
33
  : (0, jsx_runtime_1.jsx)(FilterOptions, { ...columnFilterProps, onChange: () => {
34
+ hasChanged.current = true;
28
35
  columnFilterProps.multiple === false && setOpen(false);
29
36
  } }) }), columnFilterProps.showResetButton !== false &&
30
37
  (0, jsx_runtime_1.jsx)(flex_1.Flex, { gap: 6, justifyContent: "center", marginTop: 6, children: (0, jsx_runtime_1.jsx)(button_1.Button, { variant: "text", onClick: () => {
@@ -207,28 +207,28 @@ export const Curd = memo((props) => {
207
207
  innerLoadRows().then();
208
208
  message.success(deleteName + '成功').then();
209
209
  };
210
- return (_jsx("div", { ...wrapperProps, css: style, className: clsx(classes.root, wrapperProps?.className), "data-variant": variant, children: _jsxs(Form, { ...mergeComponentProps({
211
- ref: innerFilterRef,
212
- className: classes.filterForm,
213
- variant: 'plain',
214
- initialValue: initialFilterValue
215
- }, filterProps, {
216
- ...filterableProps?.showButton === false
217
- ? { onChange: filterHandler }
218
- : { onFinish: filterHandler }
219
- }), children: [renderFilterableFn(), (creatable || toolbarLeft || toolbarRight || reloadable || resizable || columnConfigurable) &&
220
- _jsxs("div", { className: classes.toolbar, children: [_jsxs("div", { className: classes.toolbarLeft, children: [creatable &&
221
- _jsxs(Button, { prefix: _jsx(Icon, { icon: faPlus }), ...createButtonProps, onClick: createHandler, children: [createName, dataName] }), toolbarLeft] }), _jsxs("div", { className: classes.toolbarRight, children: [!!toolbarRight &&
222
- _jsxs(_Fragment, { children: [toolbarRight, _jsx(Divider, { className: classes.divider, orientation: "vertical" })] }), reloadable &&
223
- _jsx(Tooltip, { title: "\u5237\u65B0", children: _jsx(Button, { shape: "circular", variant: "text", color: "text.secondary", prefix: _jsx(Icon, { icon: faRotateRight }), loading: innerLoading.current, onClick: reloadHandler }) }), resizable &&
224
- _jsx(CurdResizable, { innerSize: innerSize.current, setInnerSize: setInnerSize }), columnConfigurable &&
225
- _jsx(CurdColumnConfig, { columns: orderedColumns, innerVisible: innerVisible.current, setInnerVisible: setInnerVisible, setInnerOrder: setInnerOrder })] })] }), _jsx("div", { className: classes.card, children: _jsx(DataGrid, { ...dataGridProps, columns: actualColumns, tableProps: {
226
- ...props.tableProps,
227
- ...resizable && { size: innerSize.current }
228
- }, loading: innerLoading.current, rows: innerRows.current, paginatable: !loadRows && props.paginatable, renderPagination: loadRows && props.paginatable !== false
229
- ? () => _jsx(Pagination, { ...props.paginationProps, total: innerTotal.current, page: innerPage.current, onPageChange: setInnerPage, pageSize: innerPageSize.current, onPageSizeChange: setInnerPageSize })
230
- : props.renderPagination, orderColumn: innerOrderColumn.current, orderType: innerOrderType.current, onOrderChange: orderChangeHandler, _noRenderFormTag: true }) }), (creatable || updatable) &&
231
- _jsx(CurdDialog, { ...dialogProps, ref: curdDialogRef, onFinish: finishHandler, curdProps: props })] }) }));
210
+ return (_jsxs("div", { ...wrapperProps, css: style, className: clsx(classes.root, wrapperProps?.className), "data-variant": variant, children: [_jsxs(Form, { ...mergeComponentProps({
211
+ ref: innerFilterRef,
212
+ className: classes.filterForm,
213
+ variant: 'plain',
214
+ initialValue: initialFilterValue
215
+ }, filterProps, {
216
+ ...filterableProps?.showButton === false
217
+ ? { onChange: filterHandler }
218
+ : { onFinish: filterHandler }
219
+ }), children: [renderFilterableFn(), (creatable || toolbarLeft || toolbarRight || reloadable || resizable || columnConfigurable) &&
220
+ _jsxs("div", { className: classes.toolbar, children: [_jsxs("div", { className: classes.toolbarLeft, children: [creatable &&
221
+ _jsxs(Button, { prefix: _jsx(Icon, { icon: faPlus }), ...createButtonProps, onClick: createHandler, children: [createName, dataName] }), toolbarLeft] }), _jsxs("div", { className: classes.toolbarRight, children: [!!toolbarRight &&
222
+ _jsxs(_Fragment, { children: [toolbarRight, _jsx(Divider, { className: classes.divider, orientation: "vertical" })] }), reloadable &&
223
+ _jsx(Tooltip, { title: "\u5237\u65B0", children: _jsx(Button, { shape: "circular", variant: "text", color: "text.secondary", prefix: _jsx(Icon, { icon: faRotateRight }), loading: innerLoading.current, onClick: reloadHandler }) }), resizable &&
224
+ _jsx(CurdResizable, { innerSize: innerSize.current, setInnerSize: setInnerSize }), columnConfigurable &&
225
+ _jsx(CurdColumnConfig, { columns: orderedColumns, innerVisible: innerVisible.current, setInnerVisible: setInnerVisible, setInnerOrder: setInnerOrder })] })] }), _jsx("div", { className: classes.card, children: _jsx(DataGrid, { ...dataGridProps, columns: actualColumns, tableProps: {
226
+ ...props.tableProps,
227
+ ...resizable && { size: innerSize.current }
228
+ }, loading: innerLoading.current, rows: innerRows.current, paginatable: !loadRows && props.paginatable, renderPagination: loadRows && props.paginatable !== false
229
+ ? () => _jsx(Pagination, { ...props.paginationProps, total: innerTotal.current, page: innerPage.current, onPageChange: setInnerPage, pageSize: innerPageSize.current, onPageSizeChange: setInnerPageSize })
230
+ : props.renderPagination, orderColumn: innerOrderColumn.current, orderType: innerOrderType.current, onOrderChange: orderChangeHandler, _noRenderFormTag: true }) })] }), (creatable || updatable) &&
231
+ _jsx(CurdDialog, { ...dialogProps, ref: curdDialogRef, onFinish: finishHandler, curdProps: props })] }));
232
232
  });
233
233
  Curd.Filter = CurdFilterable;
234
234
  Curd.CONTROL_COLUMN = Symbol('control-column');
@@ -13,6 +13,8 @@ export interface FilterOptionsProps extends FilterSharedProps, OptionsBaseProps<
13
13
  }
14
14
  export interface FilterControlProps extends FilterSharedProps {
15
15
  control: FormItemChildren;
16
+ /** 关闭弹框时触发筛选,默认为`false` */
17
+ triggerFilterOnClose?: boolean;
16
18
  }
17
19
  export declare const FilterBubbleContent: import("react").MemoExoticComponent<({ columnKey, columnFilterProps }: {
18
20
  columnKey: Id;
@@ -4,7 +4,7 @@ import { useFlatSelection } from '../selectionContext';
4
4
  import { Flex } from '../flex';
5
5
  import { Button } from '../button';
6
6
  import { usePopperContext } from '../popper';
7
- import { memo, useDeferredValue, useEffect, useState } from 'react';
7
+ import { memo, useDeferredValue, useEffect, useRef, useState } from 'react';
8
8
  import { FormItem, useFormContext } from '../form';
9
9
  import { filterOptionsStyle } from './filterBubbleContent.style';
10
10
  import { Input } from '../input';
@@ -13,15 +13,22 @@ import { faSearch } from '@fortawesome/free-solid-svg-icons';
13
13
  export const FilterBubbleContent = memo(({ columnKey, columnFilterProps }) => {
14
14
  const { formRef } = useFormContext();
15
15
  const { open, setOpen } = usePopperContext();
16
+ const hasChanged = useRef(false);
16
17
  useEffect(() => {
17
- if (!open) {
18
- // 关闭弹框触发筛选
18
+ if (open) {
19
+ return;
20
+ }
21
+ // 关闭弹框时,如果已经onChange,或使用control自定义渲染+triggerFilterOnClose,则触发筛选
22
+ if (hasChanged.current
23
+ || ('control' in columnFilterProps && columnFilterProps.triggerFilterOnClose)) {
19
24
  formRef.current.submit().then();
25
+ hasChanged.current = false;
20
26
  }
21
27
  }, [open]);
22
28
  return (_jsxs(_Fragment, { children: [_jsx(FormItem, { field: columnKey, children: 'control' in columnFilterProps
23
29
  ? columnFilterProps.control
24
30
  : _jsx(FilterOptions, { ...columnFilterProps, onChange: () => {
31
+ hasChanged.current = true;
25
32
  columnFilterProps.multiple === false && setOpen(false);
26
33
  } }) }), columnFilterProps.showResetButton !== false &&
27
34
  _jsx(Flex, { gap: 6, justifyContent: "center", marginTop: 6, children: _jsx(Button, { variant: "text", onClick: () => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@canlooks/can-ui",
3
- "version": "0.0.147",
3
+ "version": "0.0.149",
4
4
  "author": "C.CanLiang <canlooks@gmail.com>",
5
5
  "description": "My ui framework",
6
6
  "license": "MIT",