category.ts 1.56 KB
import { postShopProductCategory } from '@/service';
import { create, State } from 'zustand';

interface CategoryState extends State {
  list: any[];
  selectedCategory: string;
  selectedSubCategory: string;
  selectedFuncCategory: string;
  categoryVisible: boolean;
  resetFuncValue: string;
  resetCategoryValue: string;
}

const useCategoryStore = create<CategoryState>((set, get) => ({
  list: [],
  selectedCategory: '',
  selectedSubCategory: '',
  selectedFuncCategory: '',
  categoryVisible: true,
  resetFuncValue: '',
  resetCategoryValue: '',

  getList: async () => {
    const res = await postShopProductCategory();
    const rootList = res.data?.data?.rootCategoryList;
    set((state: CategoryState) => {
      state.list = rootList || [];
      state.resetCategoryValue = state.selectedCategory = rootList[0].categoryDisplayName;
      state.selectedSubCategory = rootList[0].list[0].id;
      state.resetFuncValue = state.selectedFuncCategory = rootList[0].productFunctions[0].id;
    });
  },

  updateCategory: (value: string) => {
    const resetValue = get().resetCategoryValue as string;
    set((state: CategoryState) => {
      state.selectedCategory = value;
      state.selectedFuncCategory = value === resetValue ? get().resetFuncValue : '';
    });
  },

  updateSubCategory: (value: string) => {
    set({ selectedSubCategory: value });
  },

  updateFuncCategory: (value: string = '') => {
    set({ selectedFuncCategory: value });
  },

  updateDisplay: (visible: boolean) => {
    set({ categoryVisible: visible });
  }
}));

export default useCategoryStore;