Skip to content

Commit 455439b

Browse files
yn1323claude
andcommitted
feat: ShiftSubmit関連コンポーネントのStorybook追加
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 51649d5 commit 455439b

File tree

4 files changed

+232
-0
lines changed

4 files changed

+232
-0
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import type { Meta, StoryObj } from "@storybook/react-vite";
2+
import { fn } from "@storybook/test";
3+
import { ConfirmView } from "./ConfirmView";
4+
5+
const meta = {
6+
title: "features/ShiftSubmit/ConfirmView",
7+
component: ConfirmView,
8+
parameters: {
9+
layout: "centered",
10+
},
11+
args: {
12+
onBack: fn(),
13+
},
14+
} satisfies Meta<typeof ConfirmView>;
15+
16+
export default meta;
17+
type Story = StoryObj<typeof meta>;
18+
19+
const mockEntries = [
20+
{ date: "2026-03-02", isAvailable: true, startTime: "09:00", endTime: "17:00" },
21+
{ date: "2026-03-03", isAvailable: false },
22+
{ date: "2026-03-04", isAvailable: true, startTime: "10:00", endTime: "18:00" },
23+
{ date: "2026-03-05", isAvailable: false },
24+
{ date: "2026-03-06", isAvailable: true, startTime: "09:00", endTime: "17:00" },
25+
{ date: "2026-03-07", isAvailable: true, startTime: "13:00", endTime: "22:00" },
26+
{ date: "2026-03-08", isAvailable: false },
27+
];
28+
29+
export const Basic: Story = {
30+
args: {
31+
entries: mockEntries,
32+
onSubmit: fn(() => new Promise((resolve) => setTimeout(resolve, 1000))),
33+
},
34+
};
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
import { Box } from "@chakra-ui/react";
2+
import type { Meta, StoryObj } from "@storybook/react-vite";
3+
import { fn } from "@storybook/test";
4+
import { DayCard } from "./DayCard";
5+
6+
const meta = {
7+
title: "features/ShiftSubmit/DayCard",
8+
component: DayCard,
9+
parameters: {
10+
layout: "centered",
11+
},
12+
decorators: [
13+
(Story) => (
14+
<Box maxW="400px" w="full">
15+
<Story />
16+
</Box>
17+
),
18+
],
19+
args: {
20+
onUpdate: fn(),
21+
},
22+
} satisfies Meta<typeof DayCard>;
23+
24+
export default meta;
25+
type Story = StoryObj<typeof meta>;
26+
27+
const mockShop = { timeUnit: 30, openTime: "09:00", closeTime: "22:00" };
28+
29+
const mockFrequentTimePatterns = [
30+
{ startTime: "09:00", endTime: "17:00", count: 5 },
31+
{ startTime: "10:00", endTime: "18:00", count: 3 },
32+
{ startTime: "13:00", endTime: "22:00", count: 2 },
33+
];
34+
35+
export const Unselected: Story = {
36+
args: {
37+
entry: { date: "2026-03-03", isAvailable: false },
38+
frequentTimePatterns: mockFrequentTimePatterns,
39+
shop: mockShop,
40+
},
41+
};
42+
43+
export const Selected: Story = {
44+
args: {
45+
entry: { date: "2026-03-04", isAvailable: true, startTime: "09:00", endTime: "17:00" },
46+
frequentTimePatterns: mockFrequentTimePatterns,
47+
shop: mockShop,
48+
},
49+
};
50+
51+
export const Saturday: Story = {
52+
args: {
53+
entry: { date: "2026-03-07", isAvailable: true, startTime: "10:00", endTime: "18:00" },
54+
frequentTimePatterns: mockFrequentTimePatterns,
55+
shop: mockShop,
56+
},
57+
};
58+
59+
export const Sunday: Story = {
60+
args: {
61+
entry: { date: "2026-03-08", isAvailable: true, startTime: "13:00", endTime: "22:00" },
62+
frequentTimePatterns: mockFrequentTimePatterns,
63+
shop: mockShop,
64+
},
65+
};
66+
67+
export const NoPatterns: Story = {
68+
args: {
69+
entry: { date: "2026-03-02", isAvailable: true },
70+
frequentTimePatterns: [],
71+
shop: mockShop,
72+
},
73+
};
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import type { Meta, StoryObj } from "@storybook/react-vite";
2+
import { fn } from "@storybook/test";
3+
import { SubmittedView } from "./SubmittedView";
4+
5+
const meta = {
6+
title: "features/ShiftSubmit/SubmittedView",
7+
component: SubmittedView,
8+
parameters: {
9+
layout: "centered",
10+
},
11+
args: {
12+
onEdit: fn(),
13+
},
14+
} satisfies Meta<typeof SubmittedView>;
15+
16+
export default meta;
17+
type Story = StoryObj<typeof meta>;
18+
19+
const mockEntries = [
20+
{ date: "2026-03-02", isAvailable: true, startTime: "09:00", endTime: "17:00" },
21+
{ date: "2026-03-03", isAvailable: false },
22+
{ date: "2026-03-04", isAvailable: true, startTime: "10:00", endTime: "18:00" },
23+
{ date: "2026-03-05", isAvailable: false },
24+
{ date: "2026-03-06", isAvailable: true, startTime: "09:00", endTime: "17:00" },
25+
{ date: "2026-03-07", isAvailable: true, startTime: "13:00", endTime: "22:00" },
26+
{ date: "2026-03-08", isAvailable: false },
27+
];
28+
29+
export const Basic: Story = {
30+
args: {
31+
entries: mockEntries,
32+
submittedAt: Date.now(),
33+
deadline: "2026-12-31",
34+
},
35+
};
36+
37+
export const AfterDeadline: Story = {
38+
args: {
39+
entries: mockEntries,
40+
submittedAt: Date.now() - 7 * 24 * 60 * 60 * 1000,
41+
deadline: "2026-01-01",
42+
},
43+
};
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
import type { Meta, StoryObj } from "@storybook/react-vite";
2+
import { ShiftSubmit } from ".";
3+
4+
const meta = {
5+
title: "features/ShiftSubmit",
6+
component: ShiftSubmit,
7+
parameters: {
8+
layout: "fullscreen",
9+
},
10+
} satisfies Meta<typeof ShiftSubmit>;
11+
12+
export default meta;
13+
type Story = StoryObj<typeof meta>;
14+
15+
const mockShop = {
16+
shopName: "カフェ テスト店",
17+
timeUnit: 30,
18+
openTime: "09:00",
19+
closeTime: "22:00",
20+
};
21+
22+
const mockStaff = { _id: "staff_1", displayName: "田中太郎" };
23+
24+
const mockRecruitment = {
25+
_id: "recruitment_1",
26+
startDate: "2026-03-02",
27+
endDate: "2026-03-08",
28+
deadline: "2026-02-25",
29+
};
30+
31+
const mockFrequentTimePatterns = [
32+
{ startTime: "09:00", endTime: "17:00", count: 5 },
33+
{ startTime: "10:00", endTime: "18:00", count: 3 },
34+
{ startTime: "13:00", endTime: "22:00", count: 2 },
35+
];
36+
37+
const mockPreviousRequest = {
38+
entries: [
39+
{ date: "2026-02-23", isAvailable: true, startTime: "09:00", endTime: "17:00" },
40+
{ date: "2026-02-24", isAvailable: false },
41+
{ date: "2026-02-25", isAvailable: true, startTime: "10:00", endTime: "18:00" },
42+
{ date: "2026-02-26", isAvailable: false },
43+
{ date: "2026-02-27", isAvailable: true, startTime: "09:00", endTime: "17:00" },
44+
{ date: "2026-02-28", isAvailable: true, startTime: "13:00", endTime: "22:00" },
45+
{ date: "2026-03-01", isAvailable: false },
46+
],
47+
};
48+
49+
export const Basic: Story = {
50+
args: {
51+
token: "mock-token",
52+
staff: mockStaff,
53+
shop: mockShop,
54+
recruitment: mockRecruitment,
55+
existingRequest: null,
56+
previousRequest: mockPreviousRequest,
57+
frequentTimePatterns: mockFrequentTimePatterns,
58+
},
59+
};
60+
61+
export const Submitted: Story = {
62+
args: {
63+
token: "mock-token",
64+
staff: mockStaff,
65+
shop: mockShop,
66+
recruitment: mockRecruitment,
67+
existingRequest: {
68+
entries: [
69+
{ date: "2026-03-02", isAvailable: true, startTime: "09:00", endTime: "17:00" },
70+
{ date: "2026-03-03", isAvailable: false },
71+
{ date: "2026-03-04", isAvailable: true, startTime: "10:00", endTime: "18:00" },
72+
{ date: "2026-03-05", isAvailable: false },
73+
{ date: "2026-03-06", isAvailable: true, startTime: "09:00", endTime: "17:00" },
74+
{ date: "2026-03-07", isAvailable: true, startTime: "13:00", endTime: "22:00" },
75+
{ date: "2026-03-08", isAvailable: false },
76+
],
77+
submittedAt: Date.now(),
78+
},
79+
previousRequest: null,
80+
frequentTimePatterns: mockFrequentTimePatterns,
81+
},
82+
};

0 commit comments

Comments
 (0)