signal-desktop/ts/components/Inbox.stories.tsx

77 lines
2 KiB
TypeScript
Raw Normal View History

2023-03-28 20:31:24 +00:00
// Copyright 2023 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import React, { useState, useEffect, useMemo } from 'react';
import type { Meta, StoryFn } from '@storybook/react';
2023-03-28 20:31:24 +00:00
import { noop } from 'lodash';
import { Inbox } from './Inbox';
import type { PropsType } from './Inbox';
import { DAY, SECOND } from '../util/durations';
import { setupI18n } from '../util/setupI18n';
import enMessages from '../../_locales/en/messages.json';
const i18n = setupI18n('en', enMessages);
export default {
title: 'Components/Inbox',
args: {
i18n,
hasInitialLoadCompleted: false,
2024-07-03 21:15:54 +00:00
isAlpha: false,
isCustomizingPreferredReactions: false,
2023-03-28 20:31:24 +00:00
},
2024-07-02 20:31:51 +00:00
argTypes: {
daysAgo: { control: { type: 'number' } },
2024-07-03 21:15:54 +00:00
isAlpha: { control: { type: 'boolean' } },
2024-07-02 20:31:51 +00:00
},
} satisfies Meta<PropsType & { daysAgo?: number }>;
2023-03-28 20:31:24 +00:00
// eslint-disable-next-line react/function-component-definition
const Template: StoryFn<PropsType & { daysAgo?: number }> = ({
2023-03-28 20:31:24 +00:00
daysAgo,
...args
}) => {
const now = useMemo(() => Date.now(), []);
2023-03-29 16:47:06 +00:00
const [dayOffset, setDayOffset] = useState(0);
2023-03-28 20:31:24 +00:00
useEffect(() => {
2024-07-02 20:31:51 +00:00
if (!daysAgo) {
2023-03-29 16:47:06 +00:00
setDayOffset(0);
2023-03-28 20:31:24 +00:00
return noop;
}
const interval = setInterval(() => {
2023-03-29 16:47:06 +00:00
// Increment day offset by 1 / 24 of a day (an hour), and wrap it when it
// reaches `daysAgo` value.
setDayOffset(prevValue => (prevValue + 1 / 24) % daysAgo);
2023-03-28 20:31:24 +00:00
}, SECOND / 10);
return () => clearInterval(interval);
}, [now, daysAgo]);
const firstEnvelopeTimestamp =
daysAgo === undefined ? undefined : now - daysAgo * DAY;
const envelopeTimestamp =
firstEnvelopeTimestamp === undefined
? undefined
2023-03-29 16:47:06 +00:00
: firstEnvelopeTimestamp + dayOffset * DAY;
2023-03-28 20:31:24 +00:00
return (
<Inbox
{...args}
firstEnvelopeTimestamp={firstEnvelopeTimestamp}
envelopeTimestamp={envelopeTimestamp}
renderCustomizingPreferredReactionsModal={() => <div />}
/>
);
};
export const Default = Template.bind({});
2024-07-02 20:31:51 +00:00
export const FourDaysAgo = Template.bind({});
FourDaysAgo.args = {
daysAgo: 4,
};