From 6d97d437a2a2cd038a1914f38a88b56a954c3c5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=B6=9B?= Date: Sun, 7 Apr 2024 17:33:45 +0800 Subject: [PATCH] =?UTF-8?q?feat(ui):=E5=A2=9E=E5=8A=A0=E4=BA=A7=E5=93=81?= =?UTF-8?q?=E4=BC=B4=E9=9A=8F=E9=80=89=E6=8B=A9=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- license_ui/src/hooks/use_products_store.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/license_ui/src/hooks/use_products_store.ts b/license_ui/src/hooks/use_products_store.ts index 21ec22e..66f13c2 100644 --- a/license_ui/src/hooks/use_products_store.ts +++ b/license_ui/src/hooks/use_products_store.ts @@ -1,9 +1,10 @@ -import { concat, pluck, uniq } from "ramda"; +import { concat, find, pluck, propEq, uniq } from "ramda"; import { create } from "zustand"; interface Product { id: string; name: string; + couple: string[]; } interface ProductsStore { @@ -18,8 +19,12 @@ interface ProductsStore { export const useProductsStore = create((set, get) => ({ products: [], selectedProducts: [], - append: (code: string) => - set((state) => ({ selectedProducts: [...state.selectedProducts, code] })), + append: (code: string) => { + const selectedProduct: Product | undefined = find(propEq(code, "id"), get().products); + set((state) => ({ + selectedProducts: uniq([...state.selectedProducts, code, ...(selectedProduct.couple ?? [])]), + })); + }, remove: (code: string) => set((state) => ({ selectedProducts: state.selectedProducts.filter((item) => item !== code) })), unselectAll: () => set({ selectedProducts: [] }),