(set, get)
| 16 | } |
| 17 | |
| 18 | export const createSheetSlice: AppSliceCreator<SheetSlice> = (set, get) => ({ |
| 19 | sheetsByName: {}, |
| 20 | sheetRequests: {}, |
| 21 | sheetErrorsByName: {}, |
| 22 | |
| 23 | fetchSheet: async (name, raw = false) => { |
| 24 | if (!isValidSheetName(name)) return undefined; |
| 25 | if (!raw) { |
| 26 | const existing = get().sheetsByName[name]; |
| 27 | if (existing) return existing; |
| 28 | } |
| 29 | const pending = get().sheetRequests[name]; |
| 30 | if (pending) return pending; |
| 31 | |
| 32 | const request = sheetServiceClientConnect |
| 33 | .getSheet(createProto(GetSheetRequestSchema, { name, raw })) |
| 34 | .then((sheet: Sheet) => { |
| 35 | set((state) => { |
| 36 | const { [name]: _, ...sheetRequests } = state.sheetRequests; |
| 37 | return { |
| 38 | sheetsByName: { |
| 39 | ...state.sheetsByName, |
| 40 | [sheet.name]: sheet, |
| 41 | }, |
| 42 | sheetErrorsByName: { |
| 43 | ...state.sheetErrorsByName, |
| 44 | [name]: undefined, |
| 45 | }, |
| 46 | sheetRequests, |
| 47 | }; |
| 48 | }); |
| 49 | return sheet; |
| 50 | }) |
| 51 | .catch((error) => { |
| 52 | set((state) => { |
| 53 | const { [name]: _, ...sheetRequests } = state.sheetRequests; |
| 54 | return { |
| 55 | sheetErrorsByName: { |
| 56 | ...state.sheetErrorsByName, |
| 57 | [name]: toError(error), |
| 58 | }, |
| 59 | sheetRequests, |
| 60 | }; |
| 61 | }); |
| 62 | return undefined; |
| 63 | }); |
| 64 | set((state) => ({ |
| 65 | sheetRequests: { |
| 66 | ...state.sheetRequests, |
| 67 | [name]: request, |
| 68 | }, |
| 69 | })); |
| 70 | return request; |
| 71 | }, |
| 72 | |
| 73 | createSheet: async (parent, sheet) => { |
| 74 | const response = await sheetServiceClientConnect.createSheet( |
| 75 | createProto(CreateSheetRequestSchema, { parent, sheet }) |
no test coverage detected