This commit is contained in:
yyh 2025-12-26 17:01:16 +08:00
parent d64510146c
commit ca490d84ff
No known key found for this signature in database
3 changed files with 12 additions and 22 deletions

View File

@ -157,7 +157,7 @@ export const ModalContextProvider = ({
children,
}: ModalContextProviderProps) => {
// Use nuqs hooks for URL-based modal state management
const { isOpen: showPricingModal, setIsOpen: setPricingModalOpen } = usePricingModal()
const [showPricingModal, setPricingModalOpen] = usePricingModal()
const [urlAccountModalState, setUrlAccountModalState] = useAccountSettingModal<AccountSettingTab>()
const accountSettingCallbacksRef = useRef<Omit<ModalState<AccountSettingTab>, 'payload'> | null>(null)

View File

@ -37,7 +37,7 @@ describe('useQueryParams hooks', () => {
const { result } = renderWithAdapter(() => usePricingModal())
// Act
const { isOpen } = result.current
const [isOpen] = result.current
// Assert
expect(isOpen).toBe(false)
@ -51,7 +51,7 @@ describe('useQueryParams hooks', () => {
)
// Act
const { isOpen } = result.current
const [isOpen] = result.current
// Assert
expect(isOpen).toBe(true)
@ -65,7 +65,7 @@ describe('useQueryParams hooks', () => {
)
// Act
const { isOpen } = result.current
const [isOpen] = result.current
// Assert
expect(isOpen).toBe(false)
@ -77,7 +77,7 @@ describe('useQueryParams hooks', () => {
// Act
act(() => {
result.current.setIsOpen(true)
result.current[1](true)
})
// Assert
@ -92,7 +92,7 @@ describe('useQueryParams hooks', () => {
// Act
act(() => {
result.current.setIsOpen(true)
result.current[1](true)
})
// Assert
@ -110,7 +110,7 @@ describe('useQueryParams hooks', () => {
// Act
act(() => {
result.current.setIsOpen(false)
result.current[1](false)
})
// Assert
@ -128,7 +128,7 @@ describe('useQueryParams hooks', () => {
// Act
act(() => {
result.current.setIsOpen(false)
result.current[1](false)
})
// Assert
@ -143,7 +143,7 @@ describe('useQueryParams hooks', () => {
// Act
act(() => {
result.current.setIsOpen(true, { history: 'replace' })
result.current[1](true, { history: 'replace' })
})
// Assert

View File

@ -13,7 +13,6 @@
* - Use shallow routing to avoid unnecessary re-renders
*/
import type { Options } from 'nuqs'
import {
createParser,
parseAsArrayOf,
@ -39,27 +38,18 @@ const parseAsPricingModal = createParser<boolean>({
/**
* Hook to manage pricing modal state via URL
* @returns { isOpen, setIsOpen } - isOpen boolean and setter
* @returns [isOpen, setIsOpen] - Tuple like useState
*
* @example
* const { isOpen, setIsOpen } = usePricingModal()
* const [isOpen, setIsOpen] = usePricingModal()
* setIsOpen(true) // Sets ?pricing=open
* setIsOpen(false) // Removes ?pricing
*/
export function usePricingModal() {
const [isOpen, setIsOpenState] = useQueryState(
return useQueryState(
PRICING_MODAL_QUERY_PARAM,
parseAsPricingModal,
)
const setIsOpen = useCallback(
(open: boolean, options?: Options) => {
setIsOpenState(open, options)
},
[setIsOpenState],
)
return { isOpen, setIsOpen }
}
/**