import type { Optional } from '@rocket.chat/core-typings'; import type { ReactNode } from 'react'; import { useContext, createContext } from 'react'; export type ComposerPopupOption = { title?: string; getItemsFromLocal?: (filter: any) => Promise; getItemsFromServer?: (filter: any) => Promise; blurOnSelectItem?: boolean; closeOnEsc?: boolean; trigger?: string; triggerAnywhere?: boolean; triggerLength?: number; suffix?: string; prefix?: string; matchSelectorRegex?: RegExp; preview?: boolean; getValue: (item: T) => string; renderItem?: ({ item }: { item: T }) => ReactNode; disabled?: boolean; }; export type ComposerPopupContextValue = ComposerPopupOption[]; export const ComposerPopupContext = createContext(undefined); export const createMessageBoxPopupConfig = ( partial: Optional, 'getValue'>, ): ComposerPopupOption => { return { blurOnSelectItem: true, closeOnEsc: true, triggerAnywhere: true, suffix: ' ', prefix: partial.prefix ?? partial.trigger ?? ' ', getValue: (item) => item._id, ...partial, }; }; export const useComposerPopupOptions = () => { const composerPopupContext = useContext(ComposerPopupContext); if (!composerPopupContext) { throw new Error('useComposerPopupOptions must be used within ComposerPopupContext'); } return composerPopupContext; };