Sai Kumar Taraka commited on
Commit
bb9bd03
·
1 Parent(s): 34acd4f

Persist config to localStorage via Zustand persist middleware

Browse files
Files changed (1) hide show
  1. frontend/src/store/appStore.ts +92 -66
frontend/src/store/appStore.ts CHANGED
@@ -1,4 +1,5 @@
1
  import { create } from 'zustand'
 
2
 
3
  export type PipelineStatus = 'pending' | 'running' | 'completed' | 'failed'
4
  export type PipelineStep = 'spec_parse' | 'feature_extract' | 'ml_generation' | 'uvm_validation' | 'coverage_analysis' | 'export'
@@ -207,71 +208,96 @@ sequences:
207
  description: Error injection test`
208
  }
209
 
210
- const useAppStore = create<AppState>((set) => ({
211
- // Pipeline state
212
- taskId: null,
213
- status: 'pending',
214
- currentStep: null,
215
- progress: 0,
216
- message: 'Ready to generate',
217
- logs: [],
218
- completedSteps: [],
219
- metrics: null,
220
- generatedFiles: [],
221
- selectedFile: null,
222
- fileContent: null,
223
- error: null,
224
- wsConnected: false,
225
-
226
- // Config
227
- config: defaultConfig,
228
-
229
- // Actions
230
- setTaskId: (id) => set({ taskId: id }),
231
- setStatus: (status) => set({ status }),
232
- setCurrentStep: (step) => set({ currentStep: step }),
233
- setProgress: (progress) => set({ progress }),
234
- setMessage: (message) => set({ message }),
235
- addLogs: (newLogs) => set((state) => ({ logs: [...state.logs, ...newLogs] })),
236
- clearLogs: () => set({ logs: [] }),
237
- setCompletedSteps: (steps) => set({ completedSteps: steps }),
238
- setMetrics: (metrics) => set({ metrics }),
239
- setGeneratedFiles: (files) => set({ generatedFiles: files }),
240
- setSelectedFile: (file) => set({ selectedFile: file }),
241
- setFileContent: (content) => set({ fileContent: content }),
242
- setError: (error) => set({ error }),
243
- setWsConnected: (connected) => set({ wsConnected: connected }),
244
-
245
- updateFromWs: (data) => set((state) => {
246
- const updated: Partial<PipelineState> = {}
247
- if (data.status) updated.status = data.status
248
- if (data.currentStep !== undefined) updated.currentStep = data.currentStep
249
- if (data.progress !== undefined) updated.progress = data.progress
250
- if (data.message) updated.message = data.message
251
- if (data.logs) updated.logs = [...state.logs, ...data.logs.filter(l => !state.logs.includes(l))]
252
- if (data.completedSteps) updated.completedSteps = data.completedSteps
253
- if (data.metrics) updated.metrics = data.metrics
254
- return updated
255
- }),
256
-
257
- resetPipeline: () => set({
258
- taskId: null,
259
- status: 'pending',
260
- currentStep: null,
261
- progress: 0,
262
- message: 'Ready to generate',
263
- logs: [],
264
- completedSteps: [],
265
- metrics: null,
266
- generatedFiles: [],
267
- selectedFile: null,
268
- fileContent: null,
269
- error: null,
270
- }),
271
-
272
- updateConfig: (updates) => set((state) => ({
273
- config: { ...state.config, ...updates }
274
- })),
275
- }))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
276
 
277
  export default useAppStore
 
1
  import { create } from 'zustand'
2
+ import { persist } from 'zustand/middleware'
3
 
4
  export type PipelineStatus = 'pending' | 'running' | 'completed' | 'failed'
5
  export type PipelineStep = 'spec_parse' | 'feature_extract' | 'ml_generation' | 'uvm_validation' | 'coverage_analysis' | 'export'
 
208
  description: Error injection test`
209
  }
210
 
211
+ const useAppStore = create<AppState>()(
212
+ persist(
213
+ (set) => ({
214
+ // Pipeline state
215
+ taskId: null,
216
+ status: 'pending',
217
+ currentStep: null,
218
+ progress: 0,
219
+ message: 'Ready to generate',
220
+ logs: [],
221
+ completedSteps: [],
222
+ metrics: null,
223
+ generatedFiles: [],
224
+ selectedFile: null,
225
+ fileContent: null,
226
+ error: null,
227
+ wsConnected: false,
228
+
229
+ // Config
230
+ config: defaultConfig,
231
+
232
+ // Actions
233
+ setTaskId: (id) => set({ taskId: id }),
234
+ setStatus: (status) => set({ status }),
235
+ setCurrentStep: (step) => set({ currentStep: step }),
236
+ setProgress: (progress) => set({ progress }),
237
+ setMessage: (message) => set({ message }),
238
+ addLogs: (newLogs) => set((state) => ({ logs: [...state.logs, ...newLogs] })),
239
+ clearLogs: () => set({ logs: [] }),
240
+ setCompletedSteps: (steps) => set({ completedSteps: steps }),
241
+ setMetrics: (metrics) => set({ metrics }),
242
+ setGeneratedFiles: (files) => set({ generatedFiles: files }),
243
+ setSelectedFile: (file) => set({ selectedFile: file }),
244
+ setFileContent: (content) => set({ fileContent: content }),
245
+ setError: (error) => set({ error }),
246
+ setWsConnected: (connected) => set({ wsConnected: connected }),
247
+
248
+ updateFromWs: (data) => set((state) => {
249
+ const updated: Partial<PipelineState> = {}
250
+ if (data.status) updated.status = data.status
251
+ if (data.currentStep !== undefined) updated.currentStep = data.currentStep
252
+ if (data.progress !== undefined) updated.progress = data.progress
253
+ if (data.message) updated.message = data.message
254
+ if (data.logs) updated.logs = [...state.logs, ...data.logs.filter(l => !state.logs.includes(l))]
255
+ if (data.completedSteps) updated.completedSteps = data.completedSteps
256
+ if (data.metrics) updated.metrics = data.metrics
257
+ return updated
258
+ }),
259
+
260
+ resetPipeline: () => set({
261
+ taskId: null,
262
+ status: 'pending',
263
+ currentStep: null,
264
+ progress: 0,
265
+ message: 'Ready to generate',
266
+ logs: [],
267
+ completedSteps: [],
268
+ metrics: null,
269
+ generatedFiles: [],
270
+ selectedFile: null,
271
+ fileContent: null,
272
+ error: null,
273
+ }),
274
+
275
+ updateConfig: (updates) => set((state) => ({
276
+ config: { ...state.config, ...updates }
277
+ })),
278
+ }),
279
+ {
280
+ name: 'uvm-generator-config',
281
+ partialize: (state) => ({ config: state.config }),
282
+ onRehydrateStorage: () => (state) => {
283
+ if (state) {
284
+ state.taskId = null
285
+ state.status = 'pending'
286
+ state.currentStep = null
287
+ state.progress = 0
288
+ state.message = 'Ready to generate'
289
+ state.logs = []
290
+ state.completedSteps = []
291
+ state.metrics = null
292
+ state.generatedFiles = []
293
+ state.selectedFile = null
294
+ state.fileContent = null
295
+ state.error = null
296
+ state.wsConnected = false
297
+ }
298
+ },
299
+ }
300
+ )
301
+ )
302
 
303
  export default useAppStore