@schema-render/search-table-react
Version:
Conditional search table component.
76 lines (75 loc) • 3.13 kB
JavaScript
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
};
}