import { Meta, StoryObj } from '@storybook/react-webpack5';
import { within, userEvent, expect } from 'storybook/test';
import { Lock } from '@transferwise/icons';
import { useState } from 'react';
import MoneyInput, { CurrencyOptionItem } from '.';
import { Field } from '../field/Field';
import translations from '../i18n/en.json';
export default {
component: MoneyInput,
title: 'Forms/MoneyInput',
render: function Render({ id, ...args }) {
const [selectedCurrency, setSelectedCurrency] = useState(args.selectedCurrency);
const handleOnCurrencyChange = (value: CurrencyOptionItem) => setSelectedCurrency(value);
return (
);
},
args: {
amount: 1000,
id: 'moneyInput',
searchPlaceholder: '',
onAmountChange: () => {},
onCurrencyChange: () => {},
},
argTypes: {
searchPlaceholder: {
table: {
defaultValue: {
summary: `"${translations['neptune.MoneyInput.Select.searchPlaceholder']}"`,
},
},
},
},
} satisfies Meta;
type Story = StoryObj;
const exampleCurrency = {
eur: {
value: 'EUR',
label: 'EUR',
note: 'Euro',
currency: 'eur',
searchable: 'Spain, Germany, France, Austria',
},
gbp: {
value: 'GBP',
label: 'GBP',
note: 'British pound',
currency: 'gbp',
searchable: 'England, Scotland, Wales',
},
usd: {
value: 'USD',
label: 'USD',
note: 'United States dollar',
currency: 'usd',
searchable: 'Hong Kong, Saudi Arabia',
},
hkd: {
value: 'HKD',
label: 'HKD',
note: 'Hong Kong dollar',
currency: 'hkd',
searchable: 'Hong Kong, Saudi Arabia',
},
aud: {
value: 'AUD',
label: 'AUD',
note: 'Australian dollar',
currency: 'aud',
searchable: 'Kenguru',
},
cny: {
value: 'CNY',
label: 'CNY',
note: 'Chinese yuan',
currency: 'cny',
searchable: 'China',
},
jpy: {
value: 'JPY',
label: 'JPY',
note: 'Japanese yen',
currency: 'jpy',
searchable: 'Japan',
},
} as const;
const exampleBalanceCurrency = {
eur: {
...exampleCurrency.eur,
label: '123.45 EUR',
},
gbp: {
...exampleCurrency.gbp,
label: '12.34 GBP',
},
} as const;
export const SingleCurrency: Story = {
args: {
currencies: [],
selectedCurrency: exampleCurrency.eur,
},
};
export const MultipleCurrencies: Story = {
args: {
addon: ,
currencies: [
{
header: 'Popular currencies',
},
exampleCurrency.eur,
exampleCurrency.gbp,
exampleCurrency.usd,
exampleCurrency.hkd,
{ header: 'All currencies' },
exampleCurrency.eur,
exampleCurrency.gbp,
exampleCurrency.usd,
exampleCurrency.aud,
exampleCurrency.jpy,
],
customActionLabel: 'Custom message with custom action',
onCustomAction: () => {
console.log('Custom action');
},
selectedCurrency: exampleCurrency.usd,
id: 'moneyInput',
},
};
export const BalanceCurrencies: Story = {
args: {
currencies: [
{
header: 'Balance currencies',
},
exampleBalanceCurrency.eur,
exampleBalanceCurrency.gbp,
],
selectedCurrency: exampleBalanceCurrency.eur,
},
};
export const WithDecimals: Story = {
args: {
currencies: [],
selectedCurrency: exampleCurrency.eur,
decimals: 4,
amount: 1234.1412,
},
};
export const OpenedInput: Story = {
...MultipleCurrencies,
play: async ({ canvasElement }) => {
const canvas = within(canvasElement);
await userEvent.click(canvas.getByRole('combobox'));
},
};
export const SmallInput: Story = {
render: ({ id, ...args }) => {
return (
<>
>
);
},
args: {
size: 'sm',
},
};
export const MediumInput: Story = {
...SmallInput,
args: {
size: 'md',
},
};
export const LargeInput: Story = {
...SmallInput,
args: {
size: 'lg',
},
};