Ask the six optional setup questions after size so each tick can change suggested cards #97
No files matched your search
@@ -999,6 +999,7 @@ function CreateFlowLayoutContent({
|
||||
}
|
||||
className={CREATE_FLOW_FOOTER_BUTTON_CLASS}
|
||||
onClick={() => {
|
||||
markCreateFlowInteraction();
|
||||
goToNextStep();
|
||||
}}
|
||||
>
|
||||
|
||||
@@ -30,7 +30,9 @@ export type UseTemplateReviewActionsResult = {
|
||||
* Customize: apply the template's selections onto state and route to
|
||||
* `/create/core-values` (if community name is set) or `/create/informational`
|
||||
* with a `pendingTemplateAction` pin so `/create/review` can later replace
|
||||
* itself with `/create/core-values`.
|
||||
* itself with `/create/core-values`. A named community skips setup
|
||||
* questions, so leftover setup answers are dropped and cannot change
|
||||
* suggested cards.
|
||||
*/
|
||||
handleCustomize: () => Promise<void>;
|
||||
/**
|
||||
@@ -39,8 +41,9 @@ export type UseTemplateReviewActionsResult = {
|
||||
* Customize) so drilling from final-review via + shows selected cards, drop
|
||||
* the Values row from `state.sections`. Direct template entry routes to
|
||||
* `/create/community-name` with a pin so Next/Back collect only name →
|
||||
* description → photo. In-flow (`?fromFlow=1`, community steps already done)
|
||||
* routes to `/create/confirm-stakeholders`.
|
||||
* description → photo, and drops leftover setup answers along with the
|
||||
* other identity fields. In-flow (`?fromFlow=1`, community steps already
|
||||
* done) routes to `/create/confirm-stakeholders` and keeps those answers.
|
||||
*/
|
||||
handleUseWithoutChanges: () => Promise<void>;
|
||||
};
|
||||
@@ -128,7 +131,7 @@ export function useTemplateReviewActions({
|
||||
},
|
||||
templateReviewBackSlug: undefined,
|
||||
...(hasCommunityName
|
||||
? { pendingTemplateAction: undefined }
|
||||
? { pendingTemplateAction: undefined, setupTraits: undefined }
|
||||
: {
|
||||
pendingTemplateAction: {
|
||||
slug: templateReviewSlug,
|
||||
@@ -256,6 +259,7 @@ export function useTemplateReviewActions({
|
||||
communityAvatarUrl: undefined,
|
||||
currentStep: undefined,
|
||||
templateReviewEntryFromCreateFlow: undefined,
|
||||
setupTraits: undefined,
|
||||
pendingTemplateAction: {
|
||||
slug: templateReviewSlug,
|
||||
mode: "useWithoutChanges",
|
||||
|
||||
@@ -91,6 +91,7 @@ describe("useTemplateReviewActions", () => {
|
||||
title: "Neighborhood",
|
||||
communityContext: "Stale description",
|
||||
currentStep: "confirm-stakeholders",
|
||||
setupTraits: { employer: true, network: false },
|
||||
});
|
||||
},
|
||||
);
|
||||
@@ -104,6 +105,7 @@ describe("useTemplateReviewActions", () => {
|
||||
expect(applied?.title).toBeUndefined();
|
||||
expect(applied?.communityContext).toBeUndefined();
|
||||
expect(applied?.currentStep).toBeUndefined();
|
||||
expect(applied?.setupTraits).toBeUndefined();
|
||||
expect(applied?.pendingTemplateAction?.mode).toBe("useWithoutChanges");
|
||||
});
|
||||
|
||||
@@ -114,6 +116,7 @@ describe("useTemplateReviewActions", () => {
|
||||
title: "Neighborhood",
|
||||
communityContext: "We meet weekly",
|
||||
templateReviewEntryFromCreateFlow: true,
|
||||
setupTraits: { employer: true },
|
||||
});
|
||||
},
|
||||
);
|
||||
@@ -129,7 +132,38 @@ describe("useTemplateReviewActions", () => {
|
||||
expect(router.push).toHaveBeenCalledWith("/create/confirm-stakeholders");
|
||||
expect(applied?.title).toBe("Neighborhood");
|
||||
expect(applied?.communityContext).toBe("We meet weekly");
|
||||
expect(applied?.setupTraits).toEqual({ employer: true });
|
||||
expect(applied?.pendingTemplateAction).toBeUndefined();
|
||||
expect(applied?.templateReviewBackSlug).toBe("mutual-aid-mondays");
|
||||
});
|
||||
|
||||
it("customize with a community name drops leftover setup answers", async () => {
|
||||
const { result } = renderActions({
|
||||
title: "Neighborhood",
|
||||
setupTraits: { employer: true },
|
||||
});
|
||||
|
||||
await act(async () => {
|
||||
await result.current.handleCustomize();
|
||||
});
|
||||
|
||||
expect(router.push).toHaveBeenCalledWith("/create/core-values");
|
||||
expect(updateState).toHaveBeenCalledWith(
|
||||
expect.objectContaining({ setupTraits: undefined }),
|
||||
);
|
||||
});
|
||||
|
||||
it("customize without a community name leaves setup answers for the questionnaire", async () => {
|
||||
const { result } = renderActions({
|
||||
setupTraits: { employer: true },
|
||||
});
|
||||
|
||||
await act(async () => {
|
||||
await result.current.handleCustomize();
|
||||
});
|
||||
|
||||
expect(router.push).toHaveBeenCalledWith("/create/informational");
|
||||
const patch = updateState.mock.calls[0]?.[0] as CreateFlowState;
|
||||
expect(patch).not.toHaveProperty("setupTraits");
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user