diff --git a/package.json b/package.json index 244ede7..9ae8779 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,8 @@ "react-player": "^2.16.0", "react-router-dom": "^6.28.0", "sass": "^1.81.0", - "tcplayer.js": "^5.2.0" + "tcplayer.js": "^5.2.0", + "zustand": "^5.0.2" }, "devDependencies": { "@types/file-saver": "^2.0.7", diff --git a/src/hooks/useCache.ts b/src/hooks/useCache.ts new file mode 100644 index 0000000..5a4a437 --- /dev/null +++ b/src/hooks/useCache.ts @@ -0,0 +1,136 @@ +import {create} from "zustand" + + +type StoreInstance = { + cache: T[]; + clear: () => void; + set: (values: T[]) => void; + add: (value: T) => void; + remove: (value: T) => void +} +// function createStore(set: Get>, "setState", never>){ +// return { +// data: [], +// set: (values: T[]) => { +// set(s=>{ +// +// }) +// // set() +// set({data: values}) +// }, +// clear: () => { +// set({data: []}) +// }, +// add: (id: Id) => { +// set((state) => ({ +// data: [...state.data, id] +// })) +// }, +// remove: (id: Id) => { +// set((state) => ({ +// data: state.data.filter((item) => item != id) +// })) +// } +// } +// } +// export const useIndexIdCache = create>((set) => { +// //createStore(set) +// return { +// data: [], +// xxx: () => { +// set(s => { +// s.data = [...s.data, 1] +// }) +// } +// } +// }); +export const useIndexArrayCache = create>((set) => ({ + cache: [], + set: (values: Id[]) => { + set({cache: values}) + }, + clear: () => { + set({cache: []}) + }, + add: (id: Id) => { + set((state) => ({ + cache: [...(state.cache || []), id] + })) + }, + remove: (id: Id) => { + set((state) => ({ + cache: (state.cache || []).filter((item) => item != id) + })) + } +})) +// +// export const useCacheStore = create<{ +// [dataKey: string]: Id[]; +// clear: (key: string) => void; +// set: (key: string, value: Id[]) => void; +// add: (key: string, id: Id) => void; +// remove: (key: string, id: Id) => void +// }>((set) => ({ +// data: {}, +// clear: (key: string) => { +// set(s => { +// s[key] = [] +// return s; +// }) +// }, +// set: (key: string, value: Id[]) => { +// set((s) => { +// s[key] = value +// return s; +// }) +// }, +// add: (key: string, id: Id) => { +// console.log(id, 'add cache', key) +// set((s) => { +// if (!s[key]) { +// s[key] = []; +// } +// s[key].push(id) +// return s; +// }) +// }, +// remove: (key: string, id: Id) => { +// set((s) => { +// if (!s[key]) { +// return s; +// } +// s[key] = s[key].filter((item) => item != id) +// return s; +// }) +// } +// })) +// +// function useCache(key: 'index' | 'edit') { +// //{data,set,add,remove,clear} +// const store = useCacheStore() +// +// return { +// store, +// data: store[key], +// getCache: () => { +// // return cache.data[key] || [] +// return store[key] || []; +// }, +// setCache: (value: Id[]) => { +// store.set(key, value) +// }, +// clearCache: () => { +// store.clear(key) +// }, +// addCache: (id: Id, addSame = false) => { +// if (!addSame && store[key]?.includes(id)) return; +// console.log(id, 'add cache') +// store.add(key, id) +// }, +// removeCache: (id: Id) => { +// store.remove(key, id) +// } +// } +// } +// +// export default useCache \ No newline at end of file diff --git a/src/pages/news/components/button-push-news2article.tsx b/src/pages/news/components/button-push-news2article.tsx index 6c27020..64721e7 100644 --- a/src/pages/news/components/button-push-news2article.tsx +++ b/src/pages/news/components/button-push-news2article.tsx @@ -1,18 +1,20 @@ -import {App} from "antd"; import {showToast} from "@/components/message.ts"; import {useState} from "react"; import {push2article} from "@/service/api/news.ts"; import {IconArrowRight} from "@/components/icons"; import {useNavigate} from "react-router-dom"; +import {useIndexArrayCache} from "@/hooks/useCache.ts"; export default function ButtonPushNews2Article(props: { ids: Id[]; }) { - const {modal} = App.useApp(); + // const {modal} = App.useApp(); const [loading,setLoading] = useState(false) const navigate = useNavigate(); + const {set} = useIndexArrayCache(); const handlePush = () => { setLoading(true) push2article(props.ids).then(() => { showToast('推送成功', 'success') + set([]) navigate('/edit') }).catch(() => { showToast('推送失败', 'error') @@ -26,12 +28,13 @@ export default function ButtonPushNews2Article(props: { ids: Id[]; }) { showToast('请选择要推入编辑的新闻', 'warning') return } - modal.confirm({ - title: '操作提示', - content: '是否确定推入素材编辑界面?', - onOk: handlePush, - centered: true - }) + handlePush(); + // modal.confirm({ + // title: '操作提示', + // content: '是否确定推入素材编辑界面?', + // onOk: handlePush, + // centered: true + // }) } return (