UNPKG

@schema-render/search-table-react

Version:
76 lines (75 loc) 3.13 kB
import { jsx as _jsx } from "react/jsx-runtime"; import { useForceUpdate, useMemoizedFn, utils } from "@schema-render/core-react"; import SchemaSearch from "@schema-render/search-react"; import { useRef } from "react"; const { hasOwnProperty } = utils; /** * 搜索栏数据处理 */ export default function useSearch({ locale, loading, search, searchValueRef, runRequest, updateScrollY }) { const searchProps = search === false ? {} : search; const searchRef = useRef(null); const { forceUpdate } = useForceUpdate(); // 是否受控模式,存在 value 字段即为受控模式 const isControlled = hasOwnProperty(searchProps, 'value'); if (isControlled) { searchValueRef.current = searchProps.value ?? {}; } // 搜索数据变化事件 const handleSearchChange = useMemoizedFn((value, e)=>{ var _searchProps_onChange; // 解构,避免外部 onChange 影响 searchValueRef.current = { ...value }; // 非受控模式下内部更新,受控模式下由应用层父组件触发更新 if (!isControlled) { forceUpdate(); } (_searchProps_onChange = searchProps.onChange) === null || _searchProps_onChange === void 0 ? void 0 : _searchProps_onChange.call(searchProps, value, e); }); // 重置事件 const handleSearchReset = useMemoizedFn(async (value)=>{ var _searchProps_onReset; searchValueRef.current = { ...value }; // 外部事件 await ((_searchProps_onReset = searchProps.onReset) === null || _searchProps_onReset === void 0 ? void 0 : _searchProps_onReset.call(searchProps, value)); // 发送请求,重置时,分页重置为第一页 await runRequest({ current: 1 }); }); // 提交事件 const handleSearchSubmit = useMemoizedFn(async (value)=>{ var _searchProps_onSubmit; await ((_searchProps_onSubmit = searchProps.onSubmit) === null || _searchProps_onSubmit === void 0 ? void 0 : _searchProps_onSubmit.call(searchProps, value)); await runRequest(); }); // 收起、展开事件 const handleToggleCollapsed = useMemoizedFn((isCollapsed)=>{ var _searchProps_onToggleCollapsed; (_searchProps_onToggleCollapsed = searchProps.onToggleCollapsed) === null || _searchProps_onToggleCollapsed === void 0 ? void 0 : _searchProps_onToggleCollapsed.call(searchProps, isCollapsed); // 更新表格高度 updateScrollY(0, true); }); const searchNodeHolder = search ? /*#__PURE__*/ _jsx(SchemaSearch, { ...search, locale: search.locale || locale, rootStyle: { marginBottom: 16, ...search.rootStyle }, ref: searchRef, disabled: search.disabled || loading, value: searchValueRef.current, onChange: handleSearchChange, onReset: handleSearchReset, onSubmit: handleSearchSubmit, onToggleCollapsed: handleToggleCollapsed }) : null; return { searchNodeHolder, searchRef }; }