feat(SW-3218): Move SidePeek to design-system * Remove SidePeekProvider dependency on Next * Remove dependency on i18n in sidepeek * Inline types * Move SidePeek to design-system * Fix align-items value Approved-by: Bianca Widstam
44 lines
1.0 KiB
TypeScript
44 lines
1.0 KiB
TypeScript
'use client'
|
|
import { useEffect, useState } from 'react'
|
|
import { SidePeekContext } from './index'
|
|
|
|
interface SidepeekProviderProps extends React.PropsWithChildren {
|
|
onOpen?: (sidePeek: string) => void
|
|
onClose?: () => void
|
|
searchParams: URLSearchParams
|
|
}
|
|
|
|
export default function SidePeekProvider({
|
|
children,
|
|
searchParams,
|
|
onOpen,
|
|
onClose,
|
|
}: SidepeekProviderProps) {
|
|
const [activeSidePeek, setActiveSidePeek] = useState<string | null>(null)
|
|
useEffect(() => {
|
|
const sidePeekParam = searchParams.get('s')
|
|
if (sidePeekParam !== activeSidePeek) {
|
|
setActiveSidePeek(sidePeekParam)
|
|
}
|
|
}, [searchParams, activeSidePeek])
|
|
|
|
useEffect(() => {
|
|
if (activeSidePeek && onOpen) {
|
|
onOpen(activeSidePeek)
|
|
}
|
|
}, [activeSidePeek, onOpen])
|
|
|
|
function handleClose(isOpen: boolean) {
|
|
if (!isOpen) {
|
|
onClose?.()
|
|
setActiveSidePeek(null)
|
|
}
|
|
}
|
|
|
|
return (
|
|
<SidePeekContext.Provider value={{ handleClose, activeSidePeek }}>
|
|
{children}
|
|
</SidePeekContext.Provider>
|
|
)
|
|
}
|