diff --git a/package.json b/package.json index 48e9c71..32e7ea5 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "dependencies": { "@rc-component/portal": "^2.2.0", "@rc-component/trigger": "^3.0.0", - "@rc-component/util": "^1.11.1", + "@rc-component/util": "^1.13.0", "clsx": "^2.1.1" }, "devDependencies": { diff --git a/src/hooks/useClosable.tsx b/src/hooks/useClosable.tsx index 55d27c3..dee1fef 100644 --- a/src/hooks/useClosable.tsx +++ b/src/hooks/useClosable.tsx @@ -1,4 +1,5 @@ import * as React from 'react'; +import { isReactRenderable } from '@rc-component/util'; import type { TourProps } from '../interface'; import type { TourStepInfo } from '../TourStep'; @@ -31,7 +32,8 @@ function getClosableConfig( ): ClosableConfig | 'empty' { if ( closable === false || - (closeIcon === false && (!isConfigObj(closable) || !closable.closeIcon)) + (closeIcon === false && + (!isConfigObj(closable) || !isReactRenderable(closable.closeIcon))) ) { return null; } @@ -47,7 +49,7 @@ function getClosableConfig( } // When StepClosable no need auto fill, but RootClosable need this. - return preset || closable || closeIcon + return preset || closable || isReactRenderable(closeIcon) ? { closeIcon: mergedCloseIcon, } diff --git a/tests/renderability.test.tsx b/tests/renderability.test.tsx new file mode 100644 index 0000000..8e7802f --- /dev/null +++ b/tests/renderability.test.tsx @@ -0,0 +1,27 @@ +import React from 'react'; +import { render } from '@testing-library/react'; +import Tour from '../src'; + +it('uses the zero step icon instead of the root icon', () => { + const { baseElement } = render( + , + ); + expect(baseElement.querySelector('.rc-tour-close').textContent).toBe('0'); +}); + +it('lets a configured zero icon override closeIcon=false', () => { + const { baseElement } = render( + , + ); + expect(baseElement.querySelector('.rc-tour-close').textContent).toBe('0'); +}); + +it('preserves closable=false even with a zero icon', () => { + const { baseElement } = render( + , + ); + expect(baseElement.querySelector('.rc-tour-close')).toBeNull(); +});