//
// 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 .
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>
toDelete: Map>
setToDelete: React.Dispatch>>>
selected: Map>
setSelected: React.Dispatch>>>
selectedTags: string[]
sorting: SortingState
setSorting: React.Dispatch>
filter: Record
setFilter: React.Dispatch>>
handleTagToggle: (tag: string) => void
}
const SearchContext = React.createContext(null)
interface Props {
children: React.ReactNode
value: SearchContextType
}
export default function SearchProvider({ children, value }: Props) {
return {children}
}
export const useSearchContext = () => {
const searchContext = React.useContext(SearchContext)
if (!searchContext) {
throw new Error(
'useSearchContext has to be used within '
)
}
return searchContext
}