reaminig 5-t-9
This commit is contained in:
@@ -35,6 +35,13 @@ interface BuilderState {
|
||||
error?: string;
|
||||
activeBlueprint?: SiteBlueprint;
|
||||
pages: PageBlueprint[];
|
||||
selectedPageIds: number[];
|
||||
isGenerating: boolean;
|
||||
generationProgress?: {
|
||||
pagesQueued: number;
|
||||
taskIds: number[];
|
||||
celeryTaskId?: string;
|
||||
};
|
||||
setField: <K extends keyof BuilderFormData>(key: K, value: BuilderFormData[K]) => void;
|
||||
updateStyle: (partial: Partial<StylePreferences>) => void;
|
||||
addObjective: (value: string) => void;
|
||||
@@ -45,6 +52,10 @@ interface BuilderState {
|
||||
reset: () => void;
|
||||
submitWizard: () => Promise<void>;
|
||||
refreshPages: (blueprintId: number) => Promise<void>;
|
||||
togglePageSelection: (pageId: number) => void;
|
||||
selectAllPages: () => void;
|
||||
clearPageSelection: () => void;
|
||||
generateAllPages: (blueprintId: number, force?: boolean) => Promise<void>;
|
||||
}
|
||||
|
||||
export const useBuilderStore = create<BuilderState>((set, get) => ({
|
||||
@@ -52,6 +63,8 @@ export const useBuilderStore = create<BuilderState>((set, get) => ({
|
||||
currentStep: 0,
|
||||
isSubmitting: false,
|
||||
pages: [],
|
||||
selectedPageIds: [],
|
||||
isGenerating: false,
|
||||
|
||||
setField: (key, value) =>
|
||||
set((state) => ({
|
||||
@@ -151,6 +164,54 @@ export const useBuilderStore = create<BuilderState>((set, get) => ({
|
||||
set({ error: error instanceof Error ? error.message : 'Unable to load pages' });
|
||||
}
|
||||
},
|
||||
|
||||
togglePageSelection: (pageId: number) => {
|
||||
set((state) => {
|
||||
const isSelected = state.selectedPageIds.includes(pageId);
|
||||
return {
|
||||
selectedPageIds: isSelected
|
||||
? state.selectedPageIds.filter((id) => id !== pageId)
|
||||
: [...state.selectedPageIds, pageId],
|
||||
};
|
||||
});
|
||||
},
|
||||
|
||||
selectAllPages: () => {
|
||||
set((state) => ({
|
||||
selectedPageIds: state.pages.map((p) => p.id),
|
||||
}));
|
||||
},
|
||||
|
||||
clearPageSelection: () => {
|
||||
set({ selectedPageIds: [] });
|
||||
},
|
||||
|
||||
generateAllPages: async (blueprintId: number, force = false) => {
|
||||
const { selectedPageIds } = get();
|
||||
set({ isGenerating: true, error: undefined, generationProgress: undefined });
|
||||
|
||||
try {
|
||||
const result = await builderApi.generateAllPages(blueprintId, {
|
||||
pageIds: selectedPageIds.length > 0 ? selectedPageIds : undefined,
|
||||
force,
|
||||
});
|
||||
|
||||
set({
|
||||
generationProgress: {
|
||||
pagesQueued: result.pages_queued,
|
||||
taskIds: result.task_ids,
|
||||
celeryTaskId: result.celery_task_id,
|
||||
},
|
||||
});
|
||||
|
||||
// Refresh pages to update their status
|
||||
await get().refreshPages(blueprintId);
|
||||
} catch (error) {
|
||||
set({ error: error instanceof Error ? error.message : 'Failed to generate pages' });
|
||||
} finally {
|
||||
set({ isGenerating: false });
|
||||
}
|
||||
},
|
||||
}));
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user