Skip to content

Commit f585f68

Browse files
committed
Add project-created notice; clear persisted draft
Show a "Project created successfully" callout in the Tasks step and pass a createdProjectName prop (falls back to draft name). Add clearPersistedState() in the project wizard composable (wraps clearStoredState) and use a new leaveWizard helper to clear persisted draft state before navigating away from the wizard. Replace several clearDraft() usages with clearPersistedState to ensure stored wizard state is removed when exiting.
1 parent e287c42 commit f585f68

3 files changed

Lines changed: 52 additions & 9 deletions

File tree

components/project-wizard/steps/TasksGenerationStep.vue

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,17 @@
55
<p class="project-wizard-step-copy">{{ step.description }}</p>
66
</header>
77

8+
<section class="project-wizard-tasks-project-created" aria-live="polite">
9+
<app-icon variant="check_circle" size="18" no-margin />
10+
<div class="project-wizard-tasks-project-created-copy">
11+
<strong>Project created successfully</strong>
12+
<p>
13+
<span v-if="createdProjectName">“{{ createdProjectName }}” is now saved as a draft.</span>
14+
Generate tasks to complete the setup.
15+
</p>
16+
</div>
17+
</section>
18+
819
<section class="project-wizard-tasks-callout" aria-live="polite">
920
<app-icon variant="info" size="18" no-margin />
1021
<p class="project-wizard-tasks-callout-copy">
@@ -89,6 +100,7 @@ import type {
89100
90101
interface Props {
91102
canGenerate: boolean;
103+
createdProjectName: string;
92104
generatedSummary: ProjectWizardTaskGenerationSummary | null;
93105
generating: boolean;
94106
maximumTaskAreaSquareKilometers: number;
@@ -162,6 +174,7 @@ function onTaskAreaInput(event: Event) {
162174
}
163175
164176
.project-wizard-tasks-callout,
177+
.project-wizard-tasks-project-created,
165178
.project-wizard-tasks-success {
166179
display: grid;
167180
grid-template-columns: auto minmax(0, 1fr);
@@ -170,6 +183,29 @@ function onTaskAreaInput(event: Event) {
170183
border-radius: 0.4rem;
171184
}
172185
186+
.project-wizard-tasks-project-created {
187+
color: #0f5132;
188+
background-color: #eef9f3;
189+
border: 1px solid #b9e4ca;
190+
border-left: 4px solid #69b88a;
191+
}
192+
193+
.project-wizard-tasks-project-created-copy {
194+
display: grid;
195+
gap: 0.2rem;
196+
}
197+
198+
.project-wizard-tasks-project-created-copy strong,
199+
.project-wizard-tasks-project-created-copy p {
200+
margin: 0;
201+
}
202+
203+
.project-wizard-tasks-project-created-copy p {
204+
color: rgba($secondary, 0.98);
205+
font-size: 0.94rem;
206+
line-height: 1.55;
207+
}
208+
173209
.project-wizard-tasks-callout {
174210
color: $text-navy;
175211
background-color: rgba($purple-background-medium, 0.32);

composables/useProjectWizard.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,10 @@ export function useProjectWizard(workspaceId: WorkspaceId) {
176176
currentStep.value = 'details';
177177
}
178178

179+
function clearPersistedState() {
180+
clearStoredState(workspaceId);
181+
}
182+
179183
function hydrateDraft() {
180184
applyStoredState(readStoredState(workspaceId));
181185
}
@@ -201,6 +205,7 @@ export function useProjectWizard(workspaceId: WorkspaceId) {
201205

202206
return {
203207
clearDraft,
208+
clearPersistedState,
204209
creating,
205210
createdProject,
206211
currentStep,

pages/workspace/[id]/projects/create.vue

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@
7070
v-else-if="tasksStep"
7171
:step="tasksStep"
7272
:can-generate="Boolean(draft.area.aoi) && taskPreviewSummary.totalTasks > 0"
73+
:created-project-name="createdProject?.projectName ?? draft.details.name.trim()"
7374
:generated-summary="generatedTaskSummary"
7475
:generating="generatingTasks"
7576
:maximum-task-area-square-kilometers="PROJECT_WIZARD_TASK_AREA_MAXIMUM"
@@ -208,7 +209,7 @@ const {
208209
createdProject,
209210
currentStep,
210211
currentStepIndex,
211-
clearDraft,
212+
clearPersistedState,
212213
draft,
213214
goNext,
214215
goPrevious,
@@ -451,9 +452,13 @@ function updateDetailsField(fieldId: ProjectWizardDetailsFieldId, value: string)
451452
draft.details[fieldId] = value;
452453
}
453454
455+
async function leaveWizard(targetRoute: string) {
456+
clearPersistedState();
457+
await navigateTo(targetRoute);
458+
}
459+
454460
async function exitWizard() {
455-
clearDraft();
456-
await navigateTo(projectsRoute);
461+
await leaveWizard(projectsRoute);
457462
}
458463
459464
async function onPrimaryAction() {
@@ -463,8 +468,7 @@ async function onPrimaryAction() {
463468
}
464469
465470
if (currentStep.value === 'tasks') {
466-
clearDraft();
467-
await navigateTo(projectsRoute);
471+
await leaveWizard(projectsRoute);
468472
return;
469473
}
470474
@@ -511,8 +515,7 @@ async function handleStatusDialogPrimaryAction() {
511515
}
512516
513517
if (dialog.primaryRoute) {
514-
clearDraft();
515-
await navigateTo(dialog.primaryRoute);
518+
await leaveWizard(dialog.primaryRoute);
516519
}
517520
}
518521
@@ -521,8 +524,7 @@ async function handleStatusDialogSecondaryAction() {
521524
closeStatusDialog();
522525
523526
if (targetRoute) {
524-
clearDraft();
525-
await navigateTo(targetRoute);
527+
await leaveWizard(targetRoute);
526528
}
527529
}
528530

0 commit comments

Comments
 (0)