* initial implementation of search modal * added hit and search suggestions * added support for multiple indices * updated sample env * added close when click outside dropdown * test for mobile * added mobile design * added shortcut * dark mode fixes * added search to docs * added plugins filter * added React import * moved filters to configurations * handled error on page load * change suggestion text * removed hits limit * handle select all * open link in current tab * change highlight colors * added support for shortcuts + auto focus * change header and footer * redesigned search ui
56 lines
1.2 KiB
TypeScript
56 lines
1.2 KiB
TypeScript
"use client"
|
|
|
|
import React, { useContext, useState } from "react"
|
|
import { createContext } from "react"
|
|
import Modal, { ModalProps } from "../components/Modal"
|
|
|
|
type ModalContextType = {
|
|
modalProps: ModalProps | null
|
|
setModalProps: (value: ModalProps | null) => void
|
|
closeModal: () => void
|
|
}
|
|
|
|
const ModalContext = createContext<ModalContextType | null>(null)
|
|
|
|
type ModalProviderProps = {
|
|
children?: React.ReactNode
|
|
}
|
|
|
|
const ModalProvider = ({ children }: ModalProviderProps) => {
|
|
const [modalProps, setModalProps] = useState<ModalProps | null>(null)
|
|
|
|
const closeModal = () => {
|
|
setModalProps(null)
|
|
}
|
|
|
|
return (
|
|
<ModalContext.Provider
|
|
value={{
|
|
modalProps,
|
|
setModalProps,
|
|
closeModal,
|
|
}}
|
|
>
|
|
{children}
|
|
{modalProps && (
|
|
<>
|
|
<div className="bg-medusa-bg-overlay dark:bg-medusa-bg-overlay-dark fixed top-0 left-0 z-[499] h-screen w-screen"></div>
|
|
<Modal {...modalProps} onClose={closeModal} />
|
|
</>
|
|
)}
|
|
</ModalContext.Provider>
|
|
)
|
|
}
|
|
|
|
export default ModalProvider
|
|
|
|
export const useModal = () => {
|
|
const context = useContext(ModalContext)
|
|
|
|
if (!context) {
|
|
throw new Error("useModal must be used within a ModalProvider")
|
|
}
|
|
|
|
return context
|
|
}
|