| import { createStore } from 'zustand' | |
| import type { Features } from './types' | |
| import { Resolution, TransferMethod } from '@/types/app' | |
| export type FeaturesModal = { | |
| showFeaturesModal: boolean | |
| setShowFeaturesModal: (showFeaturesModal: boolean) => void | |
| } | |
| export type FeaturesState = { | |
| features: Features | |
| } | |
| export type FeaturesAction = { | |
| setFeatures: (features: Features) => void | |
| } | |
| export type FeatureStoreState = FeaturesState & FeaturesAction & FeaturesModal | |
| export type FeaturesStore = ReturnType<typeof createFeaturesStore> | |
| export const createFeaturesStore = (initProps?: Partial<FeaturesState>) => { | |
| const DEFAULT_PROPS: FeaturesState = { | |
| features: { | |
| moreLikeThis: { | |
| enabled: false, | |
| }, | |
| opening: { | |
| enabled: false, | |
| }, | |
| suggested: { | |
| enabled: false, | |
| }, | |
| text2speech: { | |
| enabled: false, | |
| }, | |
| speech2text: { | |
| enabled: false, | |
| }, | |
| citation: { | |
| enabled: false, | |
| }, | |
| moderation: { | |
| enabled: false, | |
| }, | |
| file: { | |
| image: { | |
| enabled: false, | |
| detail: Resolution.high, | |
| number_limits: 3, | |
| transfer_methods: [TransferMethod.local_file, TransferMethod.remote_url], | |
| }, | |
| }, | |
| annotationReply: { | |
| enabled: false, | |
| }, | |
| }, | |
| } | |
| return createStore<FeatureStoreState>()(set => ({ | |
| ...DEFAULT_PROPS, | |
| ...initProps, | |
| setFeatures: features => set(() => ({ features })), | |
| showFeaturesModal: false, | |
| setShowFeaturesModal: showFeaturesModal => set(() => ({ showFeaturesModal })), | |
| })) | |
| } | |