Files
UT-Registration-Plus/src/stories/components/Dropdown.stories.tsx
Razboy20 d4611952d4 build: update storybook (#214)
* chore: Update updatedAt dates in schedules

Set updatedAt dates to be fixed to '2024-01-01 12:00' for all schedules in
UserScheduleStore.

* build: update storybook

* chore: Removed unnecessary eslint-disable-next-line statements.
2024-05-20 17:08:36 -05:00

103 lines
3.3 KiB
TypeScript

import { UserScheduleStore } from '@shared/storage/UserScheduleStore';
import { UserSchedule } from '@shared/types/UserSchedule';
import { generateRandomId } from '@shared/util/random';
import type { Meta, StoryObj } from '@storybook/react';
import List from '@views/components/common/List';
import type { ScheduleDropdownProps } from '@views/components/common/ScheduleDropdown';
import ScheduleDropdown from '@views/components/common/ScheduleDropdown';
import ScheduleListItem from '@views/components/common/ScheduleListItem';
import useSchedules, { getActiveSchedule, switchSchedule } from '@views/hooks/useSchedules';
import type { Serialized } from 'chrome-extension-toolkit';
import React, { useEffect } from 'react';
import { exampleSchedule } from '../injected/mocked';
const schedules: UserSchedule[] = new Array(10).fill(exampleSchedule).map(
(schedule: UserSchedule, index) =>
new UserSchedule({
...schedule,
id: generateRandomId(),
name: `Schedule ${index + 1}`,
})
);
UserScheduleStore.set(
'schedules',
schedules.reduce((acc, schedule) => {
acc.push(schedule);
return acc;
}, [] as Serialized<UserSchedule>[])
);
UserScheduleStore.set('activeIndex', 0);
const meta: Meta<typeof ScheduleDropdown> = {
title: 'Components/Common/Dropdown',
component: ScheduleDropdown,
parameters: {
layout: 'centered',
},
tags: ['autodocs'],
render: (args: ScheduleDropdownProps) => {
const [activeSchedule, schedules] = useSchedules();
useEffect(() => {
console.log(activeSchedule);
}, [activeSchedule]);
return (
<div className='w-80'>
<ScheduleDropdown {...args}>
<List
draggables={schedules}
itemKey={s => s.id}
onReordered={reordered => {
const activeSchedule = getActiveSchedule();
const activeIndex = reordered.findIndex(s => s.id === activeSchedule.id);
// don't care about the promise
UserScheduleStore.set('schedules', reordered);
UserScheduleStore.set('activeIndex', activeIndex);
}}
gap={10}
>
{(schedule, handleProps) => (
<ScheduleListItem
schedule={schedule}
onClick={() => {
switchSchedule(schedule.id);
}}
dragHandleProps={handleProps}
/>
)}
</List>
</ScheduleDropdown>
</div>
);
},
} satisfies Meta<typeof ScheduleDropdown>;
export default meta;
type Story = StoryObj<typeof meta>;
export const Hidden: Story = {
parameters: {
design: {
type: 'figma',
url: 'https://www.figma.com/file/8tsCay2FRqctrdcZ3r9Ahw/UTRP?type=design&node-id=1579-5083&mode=dev',
},
},
args: {
defaultOpen: false,
},
};
export const Visible: Story = {
args: {
defaultOpen: true,
},
};