feat(appstate): Refactor data fetching to use helper for stripping class instances
This commit is contained in:
		| @@ -2,6 +2,11 @@ import * as plugins from './plugins.js'; | |||||||
| import * as domtools from '@design.estate/dees-domtools'; | import * as domtools from '@design.estate/dees-domtools'; | ||||||
|  |  | ||||||
| const appstate = new plugins.deesDomtools.plugins.smartstate.Smartstate(); | const appstate = new plugins.deesDomtools.plugins.smartstate.Smartstate(); | ||||||
|  |  | ||||||
|  | // Helper: strip class instances (with circular refs) to plain objects | ||||||
|  | type IdData<T> = { id: string; data: T }; | ||||||
|  | const toPlain = <D>(items: Array<{ id: string; data: D }> = []): Array<IdData<D>> => | ||||||
|  |   items.map(({ id, data }) => ({ id, data })); | ||||||
| export interface ILoginState { | export interface ILoginState { | ||||||
|   identity: plugins.interfaces.data.IIdentity; |   identity: plugins.interfaces.data.IIdentity; | ||||||
| } | } | ||||||
| @@ -16,7 +21,7 @@ export const loginAction = loginStatePart.createAction<{ username: string; passw | |||||||
|     const currentState = statePartArg.getState(); |     const currentState = statePartArg.getState(); | ||||||
|     let identity: plugins.interfaces.data.IIdentity = null; |     let identity: plugins.interfaces.data.IIdentity = null; | ||||||
|     try { |     try { | ||||||
|       identity = await apiClient.loginWithUsernameAndPassword(payloadArg.username, payloadArg.password) as any; |       identity = await apiClient.loginWithUsernameAndPassword(payloadArg.username, payloadArg.password); | ||||||
|     } catch (err) { |     } catch (err) { | ||||||
|       console.log(err); |       console.log(err); | ||||||
|     } |     } | ||||||
| @@ -102,7 +107,7 @@ export const getAllDataAction = dataState.createAction(async (statePartArg) => { | |||||||
|     const secretGroups = await apiClient.secretgroup.getSecretGroups(); |     const secretGroups = await apiClient.secretgroup.getSecretGroups(); | ||||||
|     currentState = { |     currentState = { | ||||||
|       ...currentState, |       ...currentState, | ||||||
|       secretGroups: (secretGroups as any[]).map((sg: any) => ({ id: sg.id, data: sg.data })), |       secretGroups: toPlain(secretGroups), | ||||||
|     }; |     }; | ||||||
|   } catch (err) { |   } catch (err) { | ||||||
|     console.error('Failed to fetch secret groups:', err); |     console.error('Failed to fetch secret groups:', err); | ||||||
| @@ -118,7 +123,7 @@ export const getAllDataAction = dataState.createAction(async (statePartArg) => { | |||||||
|     const responseSecretBundles = await apiClient.secretbundle.getSecretBundles(); |     const responseSecretBundles = await apiClient.secretbundle.getSecretBundles(); | ||||||
|     currentState = { |     currentState = { | ||||||
|       ...currentState, |       ...currentState, | ||||||
|       secretBundles: (responseSecretBundles as any[]).map((sb: any) => ({ id: sb.id, data: sb.data })), |       secretBundles: toPlain(responseSecretBundles), | ||||||
|     }; |     }; | ||||||
|   } catch (err) { |   } catch (err) { | ||||||
|     console.error('Failed to fetch secret bundles:', err); |     console.error('Failed to fetch secret bundles:', err); | ||||||
| @@ -134,7 +139,7 @@ export const getAllDataAction = dataState.createAction(async (statePartArg) => { | |||||||
|     const images = await apiClient.image.getImages(); |     const images = await apiClient.image.getImages(); | ||||||
|     currentState = { |     currentState = { | ||||||
|       ...currentState, |       ...currentState, | ||||||
|       images: (images as any[]).map((im: any) => ({ id: im.id, data: im.data })), |       images: toPlain(images), | ||||||
|     }; |     }; | ||||||
|   } catch (err) { |   } catch (err) { | ||||||
|     console.error('Failed to fetch images:', err); |     console.error('Failed to fetch images:', err); | ||||||
| @@ -150,7 +155,7 @@ export const getAllDataAction = dataState.createAction(async (statePartArg) => { | |||||||
|     const clusters = await apiClient.cluster.getClusters(); |     const clusters = await apiClient.cluster.getClusters(); | ||||||
|     currentState = { |     currentState = { | ||||||
|       ...currentState, |       ...currentState, | ||||||
|       clusters: (clusters as any[]).map((cl: any) => ({ id: cl.id, data: cl.data })), |       clusters: toPlain(clusters), | ||||||
|     } |     } | ||||||
|   } catch (err) { |   } catch (err) { | ||||||
|     console.error('Failed to fetch clusters:', err); |     console.error('Failed to fetch clusters:', err); | ||||||
| @@ -166,7 +171,7 @@ export const getAllDataAction = dataState.createAction(async (statePartArg) => { | |||||||
|     const registries = await apiClient.externalRegistry.getRegistries(); |     const registries = await apiClient.externalRegistry.getRegistries(); | ||||||
|     currentState = { |     currentState = { | ||||||
|       ...currentState, |       ...currentState, | ||||||
|       externalRegistries: (registries as any[]).map((r: any) => ({ id: r.id, data: r.data })), |       externalRegistries: toPlain(registries), | ||||||
|     }; |     }; | ||||||
|   } catch (error) { |   } catch (error) { | ||||||
|     console.error('Failed to fetch external registries:', error); |     console.error('Failed to fetch external registries:', error); | ||||||
| @@ -182,7 +187,7 @@ export const getAllDataAction = dataState.createAction(async (statePartArg) => { | |||||||
|     const services = await apiClient.services.getServices(); |     const services = await apiClient.services.getServices(); | ||||||
|     currentState = { |     currentState = { | ||||||
|       ...currentState, |       ...currentState, | ||||||
|       services: (services as any[]).map((s: any) => ({ id: s.id, data: s.data })), |       services: toPlain(services), | ||||||
|     }; |     }; | ||||||
|   } catch (error) { |   } catch (error) { | ||||||
|     console.error('Failed to fetch services:', error); |     console.error('Failed to fetch services:', error); | ||||||
| @@ -324,7 +329,7 @@ export const createImageAction = dataState.createAction( | |||||||
|   async (statePartArg, payloadArg: { imageName: string, description: string }) => { |   async (statePartArg, payloadArg: { imageName: string, description: string }) => { | ||||||
|     let currentState = statePartArg.getState(); |     let currentState = statePartArg.getState(); | ||||||
|     apiClient.identity = loginStatePart.getState().identity; |     apiClient.identity = loginStatePart.getState().identity; | ||||||
|     await apiClient.image.createImage({ name: payloadArg.imageName, description: payloadArg.description } as any); |     await apiClient.image.createImage({ name: payloadArg.imageName, description: payloadArg.description }); | ||||||
|     currentState = await dataState.dispatchAction(getAllDataAction, null); |     currentState = await dataState.dispatchAction(getAllDataAction, null); | ||||||
|     return currentState; |     return currentState; | ||||||
|   } |   } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user