mirror of
https://github.com/rustmailer/bichon.git
synced 2026-08-03 07:48:34 +02:00
65 lines
2.3 KiB
TypeScript
65 lines
2.3 KiB
TypeScript
//
|
|
// Copyright (c) 2025-2026 rustmailer.com (https://rustmailer.com)
|
|
//
|
|
// This file is part of the Bichon Email Archiving Project
|
|
//
|
|
// This program is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU Affero General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU Affero General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU Affero General Public License
|
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
import React from 'react'
|
|
import { EmailEnvelope } from '@/api'
|
|
import { SortingState } from '@tanstack/react-table'
|
|
|
|
export type SearchDialogType = 'mailbox' | 'display' | 'delete' | 'filters' | 'tags' | 'edit-tags' | 'restore'
|
|
|
|
interface SearchContextType {
|
|
open: SearchDialogType | null
|
|
setOpen: (str: SearchDialogType | null) => void
|
|
currentEnvelope: EmailEnvelope | undefined
|
|
setCurrentEnvelope: React.Dispatch<React.SetStateAction<EmailEnvelope | undefined>>
|
|
toDelete: Map<number, Set<number>>
|
|
setToDelete: React.Dispatch<React.SetStateAction<Map<number, Set<number>>>>
|
|
selected: Map<number, Set<number>>
|
|
setSelected: React.Dispatch<React.SetStateAction<Map<number, Set<number>>>>
|
|
selectedTags: string[]
|
|
sorting: SortingState
|
|
setSorting: React.Dispatch<React.SetStateAction<SortingState>>
|
|
filter: Record<string, any>
|
|
setFilter: React.Dispatch<React.SetStateAction<Record<string, any>>>
|
|
handleTagToggle: (tag: string) => void
|
|
}
|
|
|
|
const SearchContext = React.createContext<SearchContextType | null>(null)
|
|
|
|
interface Props {
|
|
children: React.ReactNode
|
|
value: SearchContextType
|
|
}
|
|
|
|
export default function SearchProvider({ children, value }: Props) {
|
|
return <SearchContext.Provider value={value}>{children}</SearchContext.Provider>
|
|
}
|
|
|
|
export const useSearchContext = () => {
|
|
const searchContext = React.useContext(SearchContext)
|
|
|
|
if (!searchContext) {
|
|
throw new Error(
|
|
'useSearchContext has to be used within <SearchContext.Provider>'
|
|
)
|
|
}
|
|
|
|
return searchContext
|
|
}
|