From eecbffc24881ab7e43c8aa8f2fee500f83327d52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E8=89=B3=E5=85=B5?= Date: Mon, 25 May 2026 16:04:50 +0800 Subject: [PATCH] fix: avoid rc package deep imports --- examples/adjust-overflow.tsx | 2 +- package.json | 8 ++++---- src/Cascader.tsx | 13 ++++++------- src/OptionList/Column.tsx | 2 +- src/OptionList/List.tsx | 12 +++++++++--- src/OptionList/index.tsx | 3 +-- src/OptionList/useKeyboard.ts | 4 ++-- src/hooks/useEntities.ts | 6 ++++-- src/hooks/useSearchConfig.ts | 2 +- src/hooks/useSelect.ts | 2 +- src/hooks/useValues.ts | 4 ++-- src/utils/warningPropsUtil.ts | 2 +- tests/__snapshots__/search.spec.tsx.snap | 2 +- tests/fieldNames.spec.tsx | 4 ++-- tests/index.spec.tsx | 10 +++++----- tests/keyboard.spec.tsx | 2 +- tests/search.spec.tsx | 3 +-- 17 files changed, 43 insertions(+), 38 deletions(-) diff --git a/examples/adjust-overflow.tsx b/examples/adjust-overflow.tsx index 1e0ede7d..9052e4d7 100644 --- a/examples/adjust-overflow.tsx +++ b/examples/adjust-overflow.tsx @@ -1,5 +1,5 @@ import React, { useState } from 'react'; -import type { BuildInPlacements } from '@rc-component/trigger/lib/interface'; +import type { BuildInPlacements } from '@rc-component/trigger'; import '../assets/index.less'; import type { CascaderProps } from '../src'; import Cascader from '../src'; diff --git a/package.json b/package.json index af0c95ec..dffa4ff9 100644 --- a/package.json +++ b/package.json @@ -43,13 +43,13 @@ "test": "rc-test" }, "dependencies": { - "@rc-component/select": "~1.7.0", - "@rc-component/tree": "~1.3.0", - "@rc-component/util": "^1.4.0", + "@rc-component/select": "~1.7.1", + "@rc-component/tree": "~1.3.2", + "@rc-component/util": "^1.11.1", "clsx": "^2.1.1" }, "devDependencies": { - "@rc-component/father-plugin": "^2.0.2", + "@rc-component/father-plugin": "^2.2.0", "@rc-component/form": "^1.4.0", "@rc-component/np": "^1.0.3", "@rc-component/trigger": "^3.0.0", diff --git a/src/Cascader.tsx b/src/Cascader.tsx index 15d77216..48caac01 100644 --- a/src/Cascader.tsx +++ b/src/Cascader.tsx @@ -1,14 +1,11 @@ -import type { BuildInPlacements } from '@rc-component/trigger/lib/interface'; +import type { BuildInPlacements } from '@rc-component/trigger'; import type { BaseSelectProps, BaseSelectPropsWithoutPrivate, BaseSelectRef, } from '@rc-component/select'; import { BaseSelect } from '@rc-component/select'; -import type { DisplayValueType, Placement } from '@rc-component/select/lib/BaseSelect'; -import useId from '@rc-component/util/lib/hooks/useId'; -import useEvent from '@rc-component/util/lib/hooks/useEvent'; -import useControlledState from '@rc-component/util/lib/hooks/useControlledState'; +import { useControlledState, useEvent, useId } from '@rc-component/util'; import * as React from 'react'; import CascaderContext from './context'; import useDisplayValues from './hooks/useDisplayValues'; @@ -111,7 +108,7 @@ interface BaseCascaderProps< popupClassName?: string; popupMenuColumnStyle?: React.CSSProperties; - placement?: Placement; + placement?: BaseSelectPropsWithoutPrivate['placement']; builtinPlacements?: BuildInPlacements; onPopupVisibleChange?: (open: boolean) => void; @@ -381,7 +378,9 @@ const Cascader = React.forwardRef((props, re } // Cascader do not support `add` type. Only support `remove` - const { valueCells } = info.values[0] as DisplayValueType & { valueCells: SingleValueType }; + const { valueCells } = info.values[0] as BaseSelectProps['displayValues'][number] & { + valueCells: SingleValueType; + }; onInternalSelect(valueCells); }; diff --git a/src/OptionList/Column.tsx b/src/OptionList/Column.tsx index 8b79bd80..73afcc7c 100644 --- a/src/OptionList/Column.tsx +++ b/src/OptionList/Column.tsx @@ -1,6 +1,6 @@ import { clsx } from 'clsx'; import * as React from 'react'; -import pickAttrs from '@rc-component/util/lib/pickAttrs'; +import { pickAttrs } from '@rc-component/util'; import type { DefaultOptionType, SingleValueType } from '../Cascader'; import CascaderContext from '../context'; import { SEARCH_MARK } from '../hooks/useSearchOptions'; diff --git a/src/OptionList/List.tsx b/src/OptionList/List.tsx index c99ef264..e5ed46c3 100644 --- a/src/OptionList/List.tsx +++ b/src/OptionList/List.tsx @@ -1,9 +1,8 @@ /* eslint-disable default-case */ import { clsx } from 'clsx'; -import type { useBaseProps } from '@rc-component/select'; -import type { RefOptionListProps } from '@rc-component/select/lib/OptionList'; +import type { BaseSelectProps, useBaseProps } from '@rc-component/select'; import * as React from 'react'; -import useMemo from '@rc-component/util/lib/hooks/useMemo'; +import { useMemo } from '@rc-component/util'; import type { DefaultOptionType, LegacyKey, SingleValueType } from '../Cascader'; import CascaderContext from '../context'; import { @@ -19,6 +18,13 @@ import Column, { FIX_LABEL } from './Column'; import useActive from './useActive'; import useKeyboard from './useKeyboard'; +export type RefOptionListProps = + NonNullable['ref']> extends React.Ref< + infer Ref + > + ? Ref + : never; + export type RawOptionListProps = Pick< ReturnType, | 'prefixCls' diff --git a/src/OptionList/index.tsx b/src/OptionList/index.tsx index 46475963..dcba9929 100644 --- a/src/OptionList/index.tsx +++ b/src/OptionList/index.tsx @@ -1,7 +1,6 @@ import { useBaseProps } from '@rc-component/select'; -import type { RefOptionListProps } from '@rc-component/select/lib/OptionList'; import * as React from 'react'; -import RawOptionList from './List'; +import RawOptionList, { type RefOptionListProps } from './List'; const RefOptionList = React.forwardRef((props, ref) => { const { lockOptions, ...baseProps } = useBaseProps(); diff --git a/src/OptionList/useKeyboard.ts b/src/OptionList/useKeyboard.ts index e211ec9d..ccca74e9 100644 --- a/src/OptionList/useKeyboard.ts +++ b/src/OptionList/useKeyboard.ts @@ -1,5 +1,4 @@ -import type { RefOptionListProps } from '@rc-component/select/lib/OptionList'; -import KeyCode from '@rc-component/util/lib/KeyCode'; +import { KeyCode } from '@rc-component/util'; import * as React from 'react'; import type { DefaultOptionType, @@ -9,6 +8,7 @@ import type { } from '../Cascader'; import { SEARCH_MARK } from '../hooks/useSearchOptions'; import { getFullPathKeys, toPathKey } from '../utils/commonUtil'; +import type { RefOptionListProps } from './List'; export default ( ref: React.Ref, diff --git a/src/hooks/useEntities.ts b/src/hooks/useEntities.ts index 9724516c..aaa0841f 100644 --- a/src/hooks/useEntities.ts +++ b/src/hooks/useEntities.ts @@ -1,9 +1,11 @@ import * as React from 'react'; -import { convertDataToEntities } from '@rc-component/tree/lib/utils/treeUtil'; +import { convertDataToEntities } from '@rc-component/tree'; +import type { DataNode } from '@rc-component/tree'; import type { DefaultOptionType, InternalFieldNames } from '../Cascader'; -import type { DataEntity, DataNode } from '@rc-component/tree/lib/interface'; import { VALUE_SPLIT } from '../utils/commonUtil'; +export type DataEntity = ReturnType['keyEntities'][string]; + export interface OptionsInfo { keyEntities: Record; pathKeyEntities: Record; diff --git a/src/hooks/useSearchConfig.ts b/src/hooks/useSearchConfig.ts index f6be7bab..1cc1d8bd 100644 --- a/src/hooks/useSearchConfig.ts +++ b/src/hooks/useSearchConfig.ts @@ -1,4 +1,4 @@ -import warning from '@rc-component/util/lib/warning'; +import { warning } from '@rc-component/util'; import * as React from 'react'; import type { CascaderProps, SearchConfig } from '../Cascader'; diff --git a/src/hooks/useSelect.ts b/src/hooks/useSelect.ts index 35bda7d1..032d37d3 100644 --- a/src/hooks/useSelect.ts +++ b/src/hooks/useSelect.ts @@ -1,4 +1,4 @@ -import { conductCheck } from '@rc-component/tree/lib/utils/conductUtil'; +import { conductCheck } from '@rc-component/tree'; import type { InternalValueType, LegacyKey, diff --git a/src/hooks/useValues.ts b/src/hooks/useValues.ts index 68526d49..19fbdb8a 100644 --- a/src/hooks/useValues.ts +++ b/src/hooks/useValues.ts @@ -1,8 +1,8 @@ -import type { DataEntity } from '@rc-component/tree/lib/interface'; -import { conductCheck } from '@rc-component/tree/lib/utils/conductUtil'; +import { conductCheck } from '@rc-component/tree'; import * as React from 'react'; import type { LegacyKey, SingleValueType } from '../Cascader'; import { toPathKeys } from '../utils/commonUtil'; +import type { DataEntity } from './useEntities'; import type { GetMissValues } from './useMissingValues'; export default function useValues( diff --git a/src/utils/warningPropsUtil.ts b/src/utils/warningPropsUtil.ts index e8f3b4ac..14c128a8 100644 --- a/src/utils/warningPropsUtil.ts +++ b/src/utils/warningPropsUtil.ts @@ -1,4 +1,4 @@ -import warning from '@rc-component/util/lib/warning'; +import { warning } from '@rc-component/util'; import type { DefaultOptionType, FieldNames } from '../Cascader'; // value in Cascader options should not be null diff --git a/tests/__snapshots__/search.spec.tsx.snap b/tests/__snapshots__/search.spec.tsx.snap index e257ad56..ff51c323 100644 --- a/tests/__snapshots__/search.spec.tsx.snap +++ b/tests/__snapshots__/search.spec.tsx.snap @@ -6,7 +6,7 @@ exports[`Cascader.Search should correct render Cascader with same field name of class="rc-cascader rc-cascader-single rc-cascader-open rc-cascader-show-search" >
{ />, ); - const contentValue = container.querySelector('.rc-cascader-content-value'); + const contentValue = container.querySelector('.rc-cascader-content'); expect(contentValue?.textContent).toEqual('Bamboo / Little / Toy'); const menus = container.querySelectorAll('.rc-cascader-menu'); @@ -106,7 +106,7 @@ describe('Cascader.FieldNames', () => { />, ); - const contentValue = container.querySelector('.rc-cascader-content-value'); + const contentValue = container.querySelector('.rc-cascader-content'); expect(contentValue?.textContent).toEqual('Bamboo->Little->Toy & bamboo>>little>>toy'); }); diff --git a/tests/index.spec.tsx b/tests/index.spec.tsx index fa109305..ec3ee811 100644 --- a/tests/index.spec.tsx +++ b/tests/index.spec.tsx @@ -1,11 +1,11 @@ -import { spyElementPrototypes } from '@rc-component/util/lib/test/domHook'; +import { spyElementPrototypes } from '@rc-component/util'; import React, { useEffect, useState } from 'react'; import type { CascaderRef, BaseOptionType, CascaderProps } from '../src'; import Cascader from '../src'; import { addressOptions, addressOptionsForUneven, optionsForActiveMenuItems } from './demoOptions'; import * as commonUtil from '../src/utils/commonUtil'; import { act, fireEvent, render } from '@testing-library/react'; -import KeyCode from '@rc-component/util/lib/KeyCode'; +import { KeyCode } from '@rc-component/util'; import { expectOpen, selectOption, isOpen, clickOption } from './util'; describe('Cascader.Basic', () => { @@ -776,7 +776,7 @@ describe('Cascader.Basic', () => { it('defaultValue not exist', () => { const { container } = render(); - expect(container.querySelector('.rc-cascader-content-value')!.textContent).toEqual('not / exist'); + expect(container.querySelector('.rc-cascader-content')!.textContent).toEqual('not / exist'); }); it('number value', () => { @@ -787,7 +787,7 @@ describe('Cascader.Basic', () => { clickOption(container, 0, 0); expect(onValueChange).toHaveBeenCalledWith([1], expect.anything()); - expect(container.querySelector('.rc-cascader-content-value')!.textContent).toEqual('One'); + expect(container.querySelector('.rc-cascader-content')!.textContent).toEqual('One'); }); it('empty children is last children', () => { @@ -837,7 +837,7 @@ describe('Cascader.Basic', () => { />, ); - expect(container.querySelector('.rc-cascader-content-value')!.textContent).toEqual('Normal / Child'); + expect(container.querySelector('.rc-cascader-content')!.textContent).toEqual('Normal / Child'); }); it('multiple', () => { diff --git a/tests/keyboard.spec.tsx b/tests/keyboard.spec.tsx index 7acc8d4b..3c91c0f8 100644 --- a/tests/keyboard.spec.tsx +++ b/tests/keyboard.spec.tsx @@ -1,5 +1,5 @@ import { act, fireEvent, render } from '@testing-library/react'; -import KeyCode from '@rc-component/util/lib/KeyCode'; +import { KeyCode } from '@rc-component/util'; import type { CascaderProps } from '../src'; import Cascader from '../src'; import { addressOptions } from './demoOptions'; diff --git a/tests/search.spec.tsx b/tests/search.spec.tsx index fb5e4a84..a130cecf 100644 --- a/tests/search.spec.tsx +++ b/tests/search.spec.tsx @@ -1,6 +1,5 @@ import { fireEvent, render } from '@testing-library/react'; -import KeyCode from '@rc-component/util/lib/KeyCode'; -import { resetWarned } from '@rc-component/util/lib/warning'; +import { KeyCode, resetWarned } from '@rc-component/util'; import React from 'react'; import Cascader, { type DefaultOptionType } from '../src'; import { optionsForActiveMenuItems } from './demoOptions';