// Copyright 2023 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only import React, { useCallback, useState } from 'react'; import type { Meta, StoryFn } from '@storybook/react'; import { action } from '@storybook/addon-actions'; import enMessages from '../../_locales/en/messages.json'; import { UsernameLinkState } from '../state/ducks/usernameEnums'; import { setupI18n } from '../util/setupI18n'; import { SignalService as Proto } from '../protobuf'; import type { PropsType } from './UsernameLinkModalBody'; import { UsernameLinkModalBody } from './UsernameLinkModalBody'; import { Modal } from './Modal'; const ColorEnum = Proto.AccountRecord.UsernameLink.Color; const i18n = setupI18n('en', enMessages); export default { component: UsernameLinkModalBody, title: 'Components/UsernameLinkModalBody', argTypes: { link: { control: { type: 'text' }, }, username: { control: { type: 'text' }, }, usernameLinkCorrupted: { control: 'boolean', }, usernameLinkState: { control: { type: 'select' }, options: [ UsernameLinkState.Ready, UsernameLinkState.Updating, UsernameLinkState.Error, ], }, colorId: { control: { type: 'select' }, mapping: { blue: ColorEnum.BLUE, white: ColorEnum.WHITE, grey: ColorEnum.GREY, olive: ColorEnum.OLIVE, green: ColorEnum.GREEN, orange: ColorEnum.ORANGE, pink: ColorEnum.PINK, purple: ColorEnum.PURPLE, }, }, }, args: { i18n, link: 'https://signal.me/#eu/n-AJkmmykrFB7j6UODGndSycxcMdp_v6ppRp9rFu5Ad39q_9Ngi_k9-TARWfT43t', username: 'alice.12', usernameLinkState: UsernameLinkState.Ready, colorId: ColorEnum.BLUE, showToast: action('showToast'), resetUsernameLink: action('resetUsernameLink'), setUsernameLinkColor: action('setUsernameLinkColor'), onBack: action('onBack'), }, } satisfies Meta; // eslint-disable-next-line react/function-component-definition const Template: StoryFn = args => { const [attachment, setAttachment] = useState(); const saveAttachment = useCallback(({ data }: { data?: Uint8Array }) => { if (!data) { setAttachment(undefined); return; } const blob = new Blob([data], { type: 'image/png', }); setAttachment(oldURL => { if (oldURL) { URL.revokeObjectURL(oldURL); } return URL.createObjectURL(blob); }); }, []); return ( <> {attachment && printable qr code} ); }; export const Normal = Template.bind({}); export const NoLink = Template.bind({}); NoLink.args = { link: '' };