documentStore.ts 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import { create } from 'zustand'
  2. import { getDocumentList as _getDocumentList, deleteDocument as _del, createDocument as _createDocument } from '@/service/document'
  3. import { IEntityDocument, IPageParams, IDocumentReq } from '@/types/index'
  4. import { TFileItem } from '@/types/file-types'
  5. export interface DocumentState {
  6. loading: boolean
  7. documents: IEntityDocument[] | []
  8. fetchDocumentList: (data: IPageParams) => Promise<IEntityDocument[]>
  9. deleteDocument: (id: number) => Promise<void>
  10. createDocument: (data: IDocumentReq) => Promise<IEntityDocument|null>
  11. uploadingList: TFileItem[]
  12. setUploadingList: (list: TFileItem[]) => void
  13. setUploadListItem: (fileItem: TFileItem) => void
  14. }
  15. export const useDocumentStore = create<DocumentState>((set, get) => ({
  16. loading: false,
  17. documents: [],
  18. uploadingList: [],
  19. setUploadingList: (list: TFileItem[]) => {
  20. set({ uploadingList: list })
  21. },
  22. setUploadListItem: (fileItem: TFileItem) => {
  23. set((state) => {
  24. let list = state.uploadingList.map(item => {
  25. if(item.file.name === fileItem.file.name){
  26. return{
  27. ...item,
  28. status: fileItem.status,
  29. }
  30. }
  31. return {...item}
  32. })
  33. const uploaded = list.filter(item => item.status === 2);
  34. if(uploaded.length === list.length ){
  35. list = []
  36. }
  37. return {
  38. uploadingList: list
  39. }
  40. })
  41. },
  42. fetchDocumentList: async (data: IPageParams) => {
  43. const response = await _getDocumentList(data)
  44. if (response.code === 0 && response.data) {
  45. set({ documents: response.data})
  46. }
  47. return response?.data
  48. },
  49. createDocument: async (c: IDocumentReq) => {
  50. set({ loading: true })
  51. const response = await _createDocument(c)
  52. if(response.code !== 0){
  53. return null
  54. }
  55. set((state) => {
  56. return {
  57. documents: [...state.documents, response.data],
  58. loading: false
  59. }
  60. })
  61. return response?.data
  62. },
  63. deleteDocument: async (id) => {
  64. const res = await _del(id)
  65. if (res.code === 0) {
  66. set((state) => {
  67. const docs = state.documents.filter((item: IEntityDocument) => item?.id !== id)
  68. return {
  69. documents: [...docs]
  70. }
  71. })
  72. }
  73. },
  74. setLoading: (loading: boolean) => {
  75. set({ loading })
  76. }
  77. }))