From d8fd7ed2c77817288bde0c2351ba9cc78b910d01 Mon Sep 17 00:00:00 2001 From: MuxinFeng <434980373@qq.com> Date: Sun, 11 Jun 2023 18:42:45 +0800 Subject: [PATCH 1/3] refactor: solve circule dependency --- src/Item.tsx | 2 +- src/Overflow.tsx | 26 ++------------------------ src/RawItem.tsx | 25 +++++++++++++++++++++++-- 3 files changed, 26 insertions(+), 27 deletions(-) diff --git a/src/Item.tsx b/src/Item.tsx index c8f046b..e1870b0 100644 --- a/src/Item.tsx +++ b/src/Item.tsx @@ -1,7 +1,7 @@ import * as React from 'react'; import classNames from 'classnames'; import ResizeObserver from 'rc-resize-observer'; -import type { ComponentType } from './Overflow'; +import type { ComponentType } from './RawItem'; // Use shared variable to save bundle size const UNDEFINED = undefined; diff --git a/src/Overflow.tsx b/src/Overflow.tsx index 7aa2e3b..418e0ce 100644 --- a/src/Overflow.tsx +++ b/src/Overflow.tsx @@ -5,34 +5,12 @@ import ResizeObserver from 'rc-resize-observer'; import useLayoutEffect from 'rc-util/lib/hooks/useLayoutEffect'; import Item from './Item'; import useEffectState, { useBatcher } from './hooks/useEffectState'; -import RawItem from './RawItem'; - -export const OverflowContext = React.createContext<{ - prefixCls: string; - responsive: boolean; - order: number; - registerSize: (key: React.Key, width: number | null) => void; - display: boolean; - - invalidate: boolean; - - // Item Usage - item?: any; - itemKey?: React.Key; - - // Rest Usage - className?: string; -}>(null); +import type { ComponentType } from './RawItem'; +import RawItem, { OverflowContext } from './RawItem'; const RESPONSIVE = 'responsive' as const; const INVALIDATE = 'invalidate' as const; -export type ComponentType = - | React.ComponentType - | React.ForwardRefExoticComponent - | React.FC - | keyof React.ReactHTML; - export interface OverflowProps extends React.HTMLAttributes { prefixCls?: string; className?: string; diff --git a/src/RawItem.tsx b/src/RawItem.tsx index f8f5d78..ecacbc5 100644 --- a/src/RawItem.tsx +++ b/src/RawItem.tsx @@ -1,8 +1,29 @@ import * as React from 'react'; import classNames from 'classnames'; import Item from './Item'; -import { OverflowContext } from './Overflow'; -import type { ComponentType } from './Overflow'; + +export type ComponentType = + | React.ComponentType + | React.ForwardRefExoticComponent + | React.FC + | keyof React.ReactHTML; + +export const OverflowContext = React.createContext<{ + prefixCls: string; + responsive: boolean; + order: number; + registerSize: (key: React.Key, width: number | null) => void; + display: boolean; + + invalidate: boolean; + + // Item Usage + item?: any; + itemKey?: React.Key; + + // Rest Usage + className?: string; +}>(null); export interface RawItemProps extends React.HTMLAttributes { component?: ComponentType; From 09a8ddd8c7b919903d502931989e1e7e446f2f5e Mon Sep 17 00:00:00 2001 From: MuxinFeng <434980373@qq.com> Date: Mon, 12 Jun 2023 18:59:04 +0800 Subject: [PATCH 2/3] fix: add extra export path --- src/Overflow.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Overflow.tsx b/src/Overflow.tsx index 418e0ce..f60407f 100644 --- a/src/Overflow.tsx +++ b/src/Overflow.tsx @@ -11,6 +11,10 @@ import RawItem, { OverflowContext } from './RawItem'; const RESPONSIVE = 'responsive' as const; const INVALIDATE = 'invalidate' as const; +export { OverflowContext } from './RawItem'; + +export type { ComponentType } from './RawItem'; + export interface OverflowProps extends React.HTMLAttributes { prefixCls?: string; className?: string; From fac55ccb03310e6a4f690089a7957a6ec8f44d83 Mon Sep 17 00:00:00 2001 From: MuxinFeng <434980373@qq.com> Date: Wed, 14 Jun 2023 11:00:55 +0800 Subject: [PATCH 3/3] fix: add context file --- src/Overflow.tsx | 5 +++-- src/RawItem.tsx | 18 +----------------- src/context.ts | 18 ++++++++++++++++++ 3 files changed, 22 insertions(+), 19 deletions(-) create mode 100644 src/context.ts diff --git a/src/Overflow.tsx b/src/Overflow.tsx index f60407f..de6241b 100644 --- a/src/Overflow.tsx +++ b/src/Overflow.tsx @@ -6,12 +6,13 @@ import useLayoutEffect from 'rc-util/lib/hooks/useLayoutEffect'; import Item from './Item'; import useEffectState, { useBatcher } from './hooks/useEffectState'; import type { ComponentType } from './RawItem'; -import RawItem, { OverflowContext } from './RawItem'; +import RawItem from './RawItem'; +import { OverflowContext } from './context'; const RESPONSIVE = 'responsive' as const; const INVALIDATE = 'invalidate' as const; -export { OverflowContext } from './RawItem'; +export { OverflowContext } from './context'; export type { ComponentType } from './RawItem'; diff --git a/src/RawItem.tsx b/src/RawItem.tsx index ecacbc5..2c9c0bd 100644 --- a/src/RawItem.tsx +++ b/src/RawItem.tsx @@ -1,6 +1,7 @@ import * as React from 'react'; import classNames from 'classnames'; import Item from './Item'; +import { OverflowContext } from './context'; export type ComponentType = | React.ComponentType @@ -8,23 +9,6 @@ export type ComponentType = | React.FC | keyof React.ReactHTML; -export const OverflowContext = React.createContext<{ - prefixCls: string; - responsive: boolean; - order: number; - registerSize: (key: React.Key, width: number | null) => void; - display: boolean; - - invalidate: boolean; - - // Item Usage - item?: any; - itemKey?: React.Key; - - // Rest Usage - className?: string; -}>(null); - export interface RawItemProps extends React.HTMLAttributes { component?: ComponentType; children?: React.ReactNode; diff --git a/src/context.ts b/src/context.ts new file mode 100644 index 0000000..6f0cb6d --- /dev/null +++ b/src/context.ts @@ -0,0 +1,18 @@ +import React from 'react'; + +export const OverflowContext = React.createContext<{ + prefixCls: string; + responsive: boolean; + order: number; + registerSize: (key: React.Key, width: number | null) => void; + display: boolean; + + invalidate: boolean; + + // Item Usage + item?: any; + itemKey?: React.Key; + + // Rest Usage + className?: string; +}>(null);