stores/button-stores.ts
Rama main · réplica de lectura del repositorio original.
import { createStore } from 'zustand/vanilla'
import { persist, createJSONStorage } from 'zustand/middleware'
import type { AlbumType, ImageType, OpenListInfo, R2Info, S3Info } from '~/types'
export type ButtonState = {
albumAdd: boolean
albumEdit: boolean
album: AlbumType
image: ImageType
imageEdit: boolean
imageViewData: ImageType
imageView: boolean
s3Edit: boolean
s3Data: S3Info | null
r2Edit: boolean
r2Data: R2Info | null
openListEdit: boolean
openListData: OpenListInfo | null
MasonryView: boolean
MasonryViewData: ImageType
MasonryViewDataList: ImageType[]
imageBatchDelete: boolean
searchOpen: boolean
loginHelp: boolean
command: boolean
}
export type ButtonActions = {
setAlbumAdd: (albumAdd: boolean) => void
setAlbumEdit: (albumEdit: boolean) => void
setAlbumEditData: (album: AlbumType) => void
setImageEdit: (imageEdit: boolean) => void
setImageEditData: (image: ImageType) => void
setImageView: (imageView: boolean) => void
setImageViewData: (imageViewData: ImageType) => void
setS3Edit: (s3Edit: boolean) => void
setS3EditData: (s3Data: S3Info | null) => void
setR2Edit: (r2Edit: boolean) => void
setR2EditData: (r2Data: R2Info | null) => void
setOpenListEdit: (openListEdit: boolean) => void
setOpenListEditData: (openListData: OpenListInfo | null) => void
setMasonryView: (masonryView: boolean) => void
setMasonryViewData: (masonryViewData: ImageType) => void
setMasonryViewDataList: (masonryViewDataList: ImageType[]) => void
setImageBatchDelete: (imageBatchDelete: boolean) => void
setSearchOpen: (searchOpen: boolean) => void
setLoginHelp: (loginHelp: boolean) => void
setCommand: (command: boolean) => void
}
export type ButtonStore = ButtonState & ButtonActions
export const initButtonStore = (): ButtonState => {
return {
albumAdd: false,
albumEdit: false,
album: {} as AlbumType,
imageEdit: false,
image: {} as ImageType,
imageView: false,
imageViewData: {} as ImageType,
s3Edit: false,
s3Data: null,
r2Edit: false,
r2Data: null,
openListEdit: false,
openListData: null,
MasonryView: false,
MasonryViewData: {} as ImageType,
MasonryViewDataList: [] as ImageType[],
imageBatchDelete: false,
searchOpen: false,
loginHelp: false,
command: false,
}
}
export const defaultInitState: ButtonState = {
albumAdd: false,
albumEdit: false,
album: {} as AlbumType,
imageEdit: false,
image: {} as ImageType,
imageView: false,
imageViewData: {} as ImageType,
s3Edit: false,
s3Data: null,
r2Edit: false,
r2Data: null,
openListEdit: false,
openListData: null,
MasonryView: false,
MasonryViewData: {} as ImageType,
MasonryViewDataList: [] as ImageType[],
imageBatchDelete: false,
searchOpen: false,
loginHelp: false,
command: false,
}
export const createButtonStore = (
initState: ButtonState = defaultInitState,
) => {
return createStore<ButtonStore>()(
persist(
(set) => ({
...initState,
setAlbumAdd: (albumAddValue) => set(() => ({
albumAdd: albumAddValue,
})),
setAlbumEdit: (albumEditValue) => set(() => ({
albumEdit: albumEditValue,
})),
setAlbumEditData: (albumValue) => set(() => ({
album: albumValue,
})),
setImageEdit: (imageEditValue) => set(() => ({
imageEdit: imageEditValue,
})),
setImageEditData: (imageDataValue) => set(() => ({
image: imageDataValue,
})),
setImageView: (imageViewValue) => set(() => ({
imageView: imageViewValue,
})),
setImageViewData: (imageViewDataValue) => set(() => ({
imageViewData: imageViewDataValue,
})),
setS3Edit: (s3EditValue) => set(() => ({
s3Edit: s3EditValue,
})),
setS3EditData: (s3DataValue) => set(() => ({
s3Data: s3DataValue,
})),
setR2Edit: (r2EditValue) => set(() => ({
r2Edit: r2EditValue,
})),
setR2EditData: (r2DataValue) => set(() => ({
r2Data: r2DataValue,
})),
setOpenListEdit: (openListEditValue) => set(() => ({
openListEdit: openListEditValue,
})),
setOpenListEditData: (openListDataValue) => set(() => ({
openListData: openListDataValue,
})),
setMasonryView: (masonryViewValue) => set(() => ({
MasonryView: masonryViewValue,
})),
setMasonryViewData: (masonryViewDataValue) => set(() => ({
MasonryViewData: masonryViewDataValue,
})),
setMasonryViewDataList: (masonryViewDataListValue) => set(() => ({
MasonryViewDataList: masonryViewDataListValue,
})),
setImageBatchDelete: (imageBatchDeleteValue) => set(() => ({
imageBatchDelete: imageBatchDeleteValue,
})),
setSearchOpen: (searchOpenValue) => set(() => ({
searchOpen: searchOpenValue,
})),
setLoginHelp: (loginHelpValue) => set(() => ({
loginHelp: loginHelpValue,
})),
setCommand: (commandValue) => set(() => ({
command: commandValue,
}))
}),
{
name: 'pic-impact-button-storage', // name of the item in the storage (must be unique)
storage: createJSONStorage(() => localStorage), // (optional) by default, 'localStorage' is used
skipHydration: true,
},
)
)
}