2023-03-28 14:19:23 -07:00
|
|
|
import merge from 'lodash/merge';
|
|
|
|
|
import { devtools, persist } from 'zustand/middleware';
|
|
|
|
|
import { immer } from 'zustand/middleware/immer';
|
2025-06-24 00:04:36 -07:00
|
|
|
import { createWithEqualityFn } from 'zustand/traditional';
|
2023-03-28 14:19:23 -07:00
|
|
|
|
2025-05-18 14:03:18 -07:00
|
|
|
export interface FullScreenPlayerSlice extends FullScreenPlayerState {
|
|
|
|
|
actions: {
|
|
|
|
|
setStore: (data: Partial<FullScreenPlayerSlice>) => void;
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
2023-03-28 14:19:23 -07:00
|
|
|
interface FullScreenPlayerState {
|
2025-05-18 14:03:18 -07:00
|
|
|
activeTab: 'lyrics' | 'queue' | 'related' | string;
|
2023-07-01 19:10:05 -07:00
|
|
|
dynamicBackground?: boolean;
|
2024-03-05 02:30:37 -06:00
|
|
|
dynamicImageBlur: number;
|
|
|
|
|
dynamicIsImage?: boolean;
|
2023-07-01 19:10:05 -07:00
|
|
|
expanded: boolean;
|
2023-09-10 22:03:46 +00:00
|
|
|
opacity: number;
|
2023-07-01 19:10:05 -07:00
|
|
|
useImageAspectRatio: boolean;
|
2023-03-28 14:19:23 -07:00
|
|
|
}
|
|
|
|
|
|
2025-06-24 00:04:36 -07:00
|
|
|
export const useFullScreenPlayerStore = createWithEqualityFn<FullScreenPlayerSlice>()(
|
2023-07-01 19:10:05 -07:00
|
|
|
persist(
|
|
|
|
|
devtools(
|
|
|
|
|
immer((set, get) => ({
|
|
|
|
|
actions: {
|
|
|
|
|
setStore: (data) => {
|
|
|
|
|
set({ ...get(), ...data });
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
activeTab: 'queue',
|
|
|
|
|
dynamicBackground: true,
|
2024-03-05 02:30:37 -06:00
|
|
|
dynamicImageBlur: 1.5,
|
|
|
|
|
dynamicIsImage: false,
|
2023-07-01 19:10:05 -07:00
|
|
|
expanded: false,
|
2023-09-10 22:03:46 +00:00
|
|
|
opacity: 60,
|
2023-07-01 19:10:05 -07:00
|
|
|
useImageAspectRatio: false,
|
|
|
|
|
})),
|
|
|
|
|
{ name: 'store_full_screen_player' },
|
|
|
|
|
),
|
|
|
|
|
{
|
|
|
|
|
merge: (persistedState, currentState) => {
|
|
|
|
|
return merge(currentState, persistedState);
|
|
|
|
|
},
|
|
|
|
|
name: 'store_full_screen_player',
|
|
|
|
|
version: 2,
|
2023-03-28 14:19:23 -07:00
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
export const useFullScreenPlayerStoreActions = () =>
|
2023-07-01 19:10:05 -07:00
|
|
|
useFullScreenPlayerStore((state) => state.actions);
|
2023-03-28 14:19:23 -07:00
|
|
|
|
|
|
|
|
export const useSetFullScreenPlayerStore = () =>
|
2023-07-01 19:10:05 -07:00
|
|
|
useFullScreenPlayerStore((state) => state.actions.setStore);
|