Skip to content

Commit d314eca

Browse files
yn1323claude
andcommitted
feat: シフト提出完了ページを追加し成功時に遷移するよう変更
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent fc28b06 commit d314eca

File tree

10 files changed

+100
-159
lines changed

10 files changed

+100
-159
lines changed

e2e/pages/StaffSubmitPage.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ export class StaffSubmitPage {
2020
}
2121

2222
async expectCompletionVisible() {
23-
await expect(this.page.getByText("提出しました")).toBeVisible();
23+
await expect(this.page).toHaveURL(/\/shifts\/submit\/completed$/);
24+
await expect(this.page.getByText("提出が完了しました")).toBeVisible();
2425
}
2526

2627
async expectReadOnlyVisible() {
@@ -52,10 +53,6 @@ export class StaffSubmitPage {
5253
await this.page.getByRole("button", { name: // }).click();
5354
}
5455

55-
async clickEdit() {
56-
await this.page.getByRole("button", { name: "内容を修正する" }).click();
57-
}
58-
5956
async expectDayWorking(dateText: string) {
6057
const row = this.page.getByText(dateText, { exact: true }).locator("..");
6158
await expect(row.getByText("〜")).toBeVisible();

e2e/scenarios/staff-shift-submission.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ test.describe("スタッフのシフト希望提出", () => {
4242
});
4343

4444
await test.step("Step 3: 修正して再提出する", async () => {
45-
await submitPage.clickEdit();
45+
await submitPage.goto(token);
4646
await submitPage.expectFormVisible();
4747
await submitPage.expectSubmittedBadge();
4848

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1-
import { useState } from "react";
21
import type { DayEntry } from "../DayCard";
32
import { ExpiredSubmitView } from "../ExpiredSubmitView";
43
import { ReadOnlySubmitView } from "../ReadOnlySubmitView";
5-
import { SubmitCompleteView } from "../SubmitCompleteView";
64
import { type SubmissionData, SubmitFormView } from "../SubmitFormView";
75

86
type Props = {
@@ -11,9 +9,6 @@ type Props = {
119
};
1210

1311
export const ShiftSubmitPage = ({ data, onSubmit }: Props) => {
14-
const [showCompletion, setShowCompletion] = useState(false);
15-
const [submittedEntries, setSubmittedEntries] = useState<DayEntry[] | null>(null);
16-
1712
// 状態D: 未提出+締切後
1813
if (!data.isBeforeDeadline && !data.hasSubmitted) {
1914
return <ExpiredSubmitView shopName={data.shopName} />;
@@ -24,22 +19,6 @@ export const ShiftSubmitPage = ({ data, onSubmit }: Props) => {
2419
return <ReadOnlySubmitView data={data} />;
2520
}
2621

27-
// 画面5: 提出完了
28-
if (showCompletion && submittedEntries) {
29-
return (
30-
<SubmitCompleteView shopName={data.shopName} entries={submittedEntries} onEdit={() => setShowCompletion(false)} />
31-
);
32-
}
33-
3422
// 状態A/B: 締切前(編集可能)
35-
return (
36-
<SubmitFormView
37-
data={data}
38-
onSubmit={async (entries) => {
39-
await onSubmit(entries);
40-
setSubmittedEntries(entries);
41-
setShowCompletion(true);
42-
}}
43-
/>
44-
);
23+
return <SubmitFormView data={data} onSubmit={onSubmit} />;
4524
};

src/components/features/StaffSubmit/SubmitCompleteView/index.stories.tsx

Lines changed: 0 additions & 35 deletions
This file was deleted.

src/components/features/StaffSubmit/SubmitCompleteView/index.tsx

Lines changed: 0 additions & 95 deletions
This file was deleted.
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import type { Meta, StoryObj } from "@storybook/react-vite";
2+
import { SubmittedView } from "./index";
3+
4+
const meta = {
5+
title: "features/StaffSubmit/SubmittedView",
6+
component: SubmittedView,
7+
parameters: {
8+
layout: "fullscreen",
9+
},
10+
globals: {
11+
viewport: { value: "mobile2", isRotated: false },
12+
},
13+
} satisfies Meta<typeof SubmittedView>;
14+
15+
export default meta;
16+
type Story = StoryObj<typeof meta>;
17+
18+
export const Basic: Story = {};
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import { Box, Circle, Flex, Icon, Text, VStack } from "@chakra-ui/react";
2+
import { LuCheck } from "react-icons/lu";
3+
import { SubmitPageLayout } from "../SubmitPageLayout";
4+
5+
export const SubmittedView = () => {
6+
return (
7+
<SubmitPageLayout>
8+
<Box bg="teal.600" w="full">
9+
<Box maxW="1024px" mx="auto" px={4} pt={3} pb={4}>
10+
<Text fontSize="xl" fontWeight="bold" color="white">
11+
シフト希望を提出
12+
</Text>
13+
</Box>
14+
</Box>
15+
16+
<Flex flex={1} align="center" justify="center" bg="white" px={4}>
17+
<VStack gap={4}>
18+
<Circle size="64px" bg="teal.600">
19+
<Icon color="white" boxSize={8}>
20+
<LuCheck />
21+
</Icon>
22+
</Circle>
23+
<Text fontSize="xl" fontWeight="bold">
24+
提出が完了しました
25+
</Text>
26+
<VStack gap={1}>
27+
<Text fontSize="sm" color="fg.muted" textAlign="center">
28+
店長からの連絡をお待ちください
29+
</Text>
30+
<Text fontSize="sm" color="fg.muted" textAlign="center">
31+
このページは閉じて大丈夫です
32+
</Text>
33+
</VStack>
34+
</VStack>
35+
</Flex>
36+
</SubmitPageLayout>
37+
);
38+
};

src/routeTree.gen.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import { Route as UnregisteredShiftsViewRouteImport } from './routes/_unregister
2020
import { Route as UnregisteredShiftsSubmitRouteImport } from './routes/_unregistered/shifts.submit'
2121
import { Route as UnregisteredShiftsReissueRouteImport } from './routes/_unregistered/shifts.reissue'
2222
import { Route as AuthShiftboardRecruitmentIdRouteImport } from './routes/_auth/shiftboard.$recruitmentId'
23+
import { Route as UnregisteredShiftsSubmitCompletedRouteImport } from './routes/_unregistered/shifts.submit_.completed'
2324

2425
const TermsRoute = TermsRouteImport.update({
2526
id: '/terms',
@@ -77,6 +78,12 @@ const AuthShiftboardRecruitmentIdRoute =
7778
path: '/shiftboard/$recruitmentId',
7879
getParentRoute: () => AuthRoute,
7980
} as any)
81+
const UnregisteredShiftsSubmitCompletedRoute =
82+
UnregisteredShiftsSubmitCompletedRouteImport.update({
83+
id: '/shifts/submit_/completed',
84+
path: '/shifts/submit/completed',
85+
getParentRoute: () => UnregisteredRoute,
86+
} as any)
8087

8188
export interface FileRoutesByFullPath {
8289
'/': typeof IndexRoute
@@ -88,6 +95,7 @@ export interface FileRoutesByFullPath {
8895
'/shifts/reissue': typeof UnregisteredShiftsReissueRoute
8996
'/shifts/submit': typeof UnregisteredShiftsSubmitRoute
9097
'/shifts/view': typeof UnregisteredShiftsViewRoute
98+
'/shifts/submit/completed': typeof UnregisteredShiftsSubmitCompletedRoute
9199
}
92100
export interface FileRoutesByTo {
93101
'/': typeof IndexRoute
@@ -99,6 +107,7 @@ export interface FileRoutesByTo {
99107
'/shifts/reissue': typeof UnregisteredShiftsReissueRoute
100108
'/shifts/submit': typeof UnregisteredShiftsSubmitRoute
101109
'/shifts/view': typeof UnregisteredShiftsViewRoute
110+
'/shifts/submit/completed': typeof UnregisteredShiftsSubmitCompletedRoute
102111
}
103112
export interface FileRoutesById {
104113
__root__: typeof rootRouteImport
@@ -113,6 +122,7 @@ export interface FileRoutesById {
113122
'/_unregistered/shifts/reissue': typeof UnregisteredShiftsReissueRoute
114123
'/_unregistered/shifts/submit': typeof UnregisteredShiftsSubmitRoute
115124
'/_unregistered/shifts/view': typeof UnregisteredShiftsViewRoute
125+
'/_unregistered/shifts/submit_/completed': typeof UnregisteredShiftsSubmitCompletedRoute
116126
}
117127
export interface FileRouteTypes {
118128
fileRoutesByFullPath: FileRoutesByFullPath
@@ -126,6 +136,7 @@ export interface FileRouteTypes {
126136
| '/shifts/reissue'
127137
| '/shifts/submit'
128138
| '/shifts/view'
139+
| '/shifts/submit/completed'
129140
fileRoutesByTo: FileRoutesByTo
130141
to:
131142
| '/'
@@ -137,6 +148,7 @@ export interface FileRouteTypes {
137148
| '/shifts/reissue'
138149
| '/shifts/submit'
139150
| '/shifts/view'
151+
| '/shifts/submit/completed'
140152
id:
141153
| '__root__'
142154
| '/'
@@ -150,6 +162,7 @@ export interface FileRouteTypes {
150162
| '/_unregistered/shifts/reissue'
151163
| '/_unregistered/shifts/submit'
152164
| '/_unregistered/shifts/view'
165+
| '/_unregistered/shifts/submit_/completed'
153166
fileRoutesById: FileRoutesById
154167
}
155168
export interface RootRouteChildren {
@@ -239,6 +252,13 @@ declare module '@tanstack/react-router' {
239252
preLoaderRoute: typeof AuthShiftboardRecruitmentIdRouteImport
240253
parentRoute: typeof AuthRoute
241254
}
255+
'/_unregistered/shifts/submit_/completed': {
256+
id: '/_unregistered/shifts/submit_/completed'
257+
path: '/shifts/submit/completed'
258+
fullPath: '/shifts/submit/completed'
259+
preLoaderRoute: typeof UnregisteredShiftsSubmitCompletedRouteImport
260+
parentRoute: typeof UnregisteredRoute
261+
}
242262
}
243263
}
244264

@@ -259,13 +279,16 @@ interface UnregisteredRouteChildren {
259279
UnregisteredShiftsReissueRoute: typeof UnregisteredShiftsReissueRoute
260280
UnregisteredShiftsSubmitRoute: typeof UnregisteredShiftsSubmitRoute
261281
UnregisteredShiftsViewRoute: typeof UnregisteredShiftsViewRoute
282+
UnregisteredShiftsSubmitCompletedRoute: typeof UnregisteredShiftsSubmitCompletedRoute
262283
}
263284

264285
const UnregisteredRouteChildren: UnregisteredRouteChildren = {
265286
UnregisteredWelcomeRoute: UnregisteredWelcomeRoute,
266287
UnregisteredShiftsReissueRoute: UnregisteredShiftsReissueRoute,
267288
UnregisteredShiftsSubmitRoute: UnregisteredShiftsSubmitRoute,
268289
UnregisteredShiftsViewRoute: UnregisteredShiftsViewRoute,
290+
UnregisteredShiftsSubmitCompletedRoute:
291+
UnregisteredShiftsSubmitCompletedRoute,
269292
}
270293

271294
const UnregisteredRouteWithChildren = UnregisteredRoute._addFileChildren(

src/routes/_unregistered/shifts.submit.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { createFileRoute } from "@tanstack/react-router";
1+
import { createFileRoute, useNavigate } from "@tanstack/react-router";
22
import { useMutation, useQuery } from "convex/react";
33
import { api } from "@/convex/_generated/api";
44
import type { Id } from "@/convex/_generated/dataModel";
@@ -44,6 +44,7 @@ function ShiftSubmitRoute() {
4444
}
4545

4646
function ShiftSubmitContent({ session }: { session: { sessionToken: string; recruitmentId: string } }) {
47+
const navigate = useNavigate();
4748
const data = useQuery(api.shiftSubmission.queries.getSubmissionPageData, {
4849
sessionToken: session.sessionToken,
4950
recruitmentId: session.recruitmentId as Id<"recruitments">,
@@ -62,6 +63,7 @@ function ShiftSubmitContent({ session }: { session: { sessionToken: string; recr
6263
recruitmentId: session.recruitmentId as Id<"recruitments">,
6364
requests,
6465
});
66+
await navigate({ to: "/shifts/submit/completed" });
6567
};
6668

6769
return <ShiftSubmitPage data={data} onSubmit={handleSubmit} />;
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { createFileRoute } from "@tanstack/react-router";
2+
import { SubmittedView } from "@/src/components/features/StaffSubmit/SubmittedView";
3+
import { buildMeta } from "@/src/helpers/seo";
4+
5+
export const Route = createFileRoute("/_unregistered/shifts/submit_/completed")({
6+
head: () => ({
7+
meta: buildMeta({ title: "シフト希望の提出完了", noindex: true }),
8+
}),
9+
component: ShiftSubmitCompletedRoute,
10+
});
11+
12+
function ShiftSubmitCompletedRoute() {
13+
return <SubmittedView />;
14+
}

0 commit comments

Comments
 (0)