reaminig 5-t-9

This commit is contained in:
alorig
2025-11-18 06:36:56 +05:00
parent 9facd12082
commit 68a98208b1
31 changed files with 5210 additions and 153 deletions

View File

@@ -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 });
}
},
}));