|
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 })), |
|
})) |
|
} |
|
|