store.ts 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import { createStore } from 'zustand'
  2. import type { Features } from './types'
  3. import { TransferMethod } from '@/types/app'
  4. export type FeaturesModal = {
  5. showFeaturesModal: boolean
  6. setShowFeaturesModal: (showFeaturesModal: boolean) => void
  7. }
  8. export type FeaturesState = {
  9. features: Features
  10. }
  11. export type FeaturesAction = {
  12. setFeatures: (features: Features) => void
  13. }
  14. export type FeatureStoreState = FeaturesState & FeaturesAction & FeaturesModal
  15. export type FeaturesStore = ReturnType<typeof createFeaturesStore>
  16. export const createFeaturesStore = (initProps?: Partial<FeaturesState>) => {
  17. const DEFAULT_PROPS: FeaturesState = {
  18. features: {
  19. opening: {
  20. enabled: false,
  21. },
  22. suggested: {
  23. enabled: false,
  24. },
  25. text2speech: {
  26. enabled: false,
  27. },
  28. speech2text: {
  29. enabled: false,
  30. },
  31. citation: {
  32. enabled: false,
  33. },
  34. moderation: {
  35. enabled: false,
  36. },
  37. file: {
  38. image: {
  39. enabled: false,
  40. number_limits: 3,
  41. transfer_methods: [TransferMethod.local_file, TransferMethod.remote_url],
  42. },
  43. },
  44. },
  45. }
  46. return createStore<FeatureStoreState>()(set => ({
  47. ...DEFAULT_PROPS,
  48. ...initProps,
  49. setFeatures: features => set(() => ({ features })),
  50. showFeaturesModal: false,
  51. setShowFeaturesModal: showFeaturesModal => set(() => ({ showFeaturesModal })),
  52. }))
  53. }