// // 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 }