sushilideaclan01's picture
Update ad generation features and enhance user input options
addcf34
import { create } from "zustand";
import type { AdCreativeDB, AdFilters, AdSortOptions } from "../types";
interface GalleryState {
ads: AdCreativeDB[];
total: number;
limit: number;
offset: number;
filters: AdFilters;
sortOptions: AdSortOptions;
selectedAds: string[];
isLoading: boolean;
error: string | null;
setAds: (ads: AdCreativeDB[], total: number) => void;
setLimit: (limit: number) => void;
setOffset: (offset: number) => void;
setFilters: (filters: Partial<AdFilters>) => void;
setSortOptions: (sort: AdSortOptions) => void;
toggleAdSelection: (adId: string) => void;
clearSelection: () => void;
selectAll: () => void;
setIsLoading: (isLoading: boolean) => void;
setError: (error: string | null) => void;
removeAd: (adId: string) => void;
}
export const useGalleryStore = create<GalleryState>((set, get) => ({
ads: [],
total: 0,
limit: 50,
offset: 0,
filters: {},
sortOptions: {
field: "created_at",
direction: "desc",
},
selectedAds: [],
isLoading: false,
error: null,
setAds: (ads, total) => set({ ads, total }),
setLimit: (limit) => set({ limit, offset: 0 }),
setOffset: (offset) => set({ offset }),
setFilters: (filters) => set((state) => ({
filters: { ...state.filters, ...filters },
offset: 0, // Reset to first page when filters change
selectedAds: [], // Clear selections when filters change
})),
setSortOptions: (sort) => set({ sortOptions: sort, offset: 0 }), // Reset to first page when sort changes
toggleAdSelection: (adId) => set((state) => ({
selectedAds: state.selectedAds.includes(adId)
? state.selectedAds.filter((id) => id !== adId)
: [...state.selectedAds, adId],
})),
clearSelection: () => set({ selectedAds: [] }),
selectAll: () => set((state) => ({
selectedAds: state.ads.map((ad) => ad.id),
})),
setIsLoading: (isLoading) => set({ isLoading }),
setError: (error) => set({ error }),
removeAd: (adId) => set((state) => ({
ads: state.ads.filter((ad) => ad.id !== adId),
total: state.total - 1,
selectedAds: state.selectedAds.filter((id) => id !== adId),
})),
}));