diff --git a/src/components/Select/Basic/index.d.ts b/src/components/Select/Basic/index.d.ts index 89ad525..d6d8933 100644 --- a/src/components/Select/Basic/index.d.ts +++ b/src/components/Select/Basic/index.d.ts @@ -21,6 +21,10 @@ export interface BasicSelectProps extends SelectProps { onGetData?: (data: Record[]) => void; /** 自定义 label 的渲染函数 */ labelRender?: (item: Record) => ReactNode; + /** 排除的项 */ + exclude?: string[]; + /** 包含的项 */ + include?: string[]; } /** diff --git a/src/components/Select/Basic/index.js b/src/components/Select/Basic/index.js index cff8991..be881dd 100644 --- a/src/components/Select/Basic/index.js +++ b/src/components/Select/Basic/index.js @@ -1,5 +1,6 @@ import { Select } from "antd"; -import { useEffect } from "react"; +import { useEffect, useMemo } from "react"; +import { getMatchedItems, getUnmatchedItems } from "../../../utils"; /** * 基础下拉组件 @@ -15,9 +16,25 @@ function BasicSelect(props) { nameKey = "name", idKey = "id", labelRender, + exclude = [], + include = [], ...restProps } = props; + const actualData = useMemo(() => { + let result = data; + + if (exclude.length > 0) { + result = getUnmatchedItems({ list: result, value: exclude, idKey }); + } + + if (include.length > 0) { + result = getMatchedItems({ list: result, value: include, idKey }); + } + + return result; + }, [data, exclude, include, idKey]); + const handleChange = (event, option) => { if (onGetLabel || onGetOption) { if (Array.isArray(event)) { @@ -25,7 +42,7 @@ function BasicSelect(props) { const findItems = []; const names = []; event.forEach((item) => { - const findItem = data.find(dataItem => dataItem[idKey] === item); + const findItem = actualData.find(dataItem => dataItem[idKey] === item); if (findItem) { findItems.push(findItem); names.push(findItem[nameKey]); @@ -41,7 +58,7 @@ function BasicSelect(props) { } else { if (event) { - const findItem = data.find(item => item[idKey] === event); + const findItem = actualData.find(item => item[idKey] === event); onGetLabel?.(findItem[nameKey]); onGetOption?.(findItem); } @@ -55,12 +72,12 @@ function BasicSelect(props) { }; useEffect(() => { - onGetData?.(data); - }, [data]); + onGetData?.(actualData); + }, [actualData]); return (