import { clsx } from 'clsx';
import Button from '../button';
import {
AriaLabelProperty,
CommonProps,
Priority,
PriorityPrimary,
PrioritySecondary,
PriorityTertiary,
} from '../common';
import Option from '../common/Option';
import { ButtonPriority } from '../button/Button.types';
type ActionOptionPriority =
| PriorityPrimary
| PrioritySecondary
| PriorityTertiary
| 'secondary-send';
export type ActionOptionProps = {
complex?: boolean;
content?: React.ReactNode;
disabled?: boolean;
media?: React.ReactNode;
showMediaAtAllSizes?: boolean;
onClick: () => void;
title: React.ReactNode;
additionalContent?: React.ReactNode;
action: React.ReactNode;
priority?: ActionOptionPriority;
showMediaCircle?: boolean;
isContainerAligned?: boolean;
as?: React.ElementType;
} & CommonProps &
AriaLabelProperty;
/**
* @deprecated Use `` instead (run codemod to migrate: **`npx @wise/wds-codemods@latest list-item`**).
* @deprecatedSince 46.104.0
* @see [Source](../listItem/ListItem.tsx)
* @see [Storybook](https://storybook.wise.design/?path=/docs/content-listitem--docs)
* @see [Design docs](https://wise.design/components/list-item)
* @see [Release notes](https://transferwise.atlassian.net/wiki/spaces/DS/pages/3647251055/List+Item+release+notes)
*/
const ActionOption = ({
action,
priority = Priority.PRIMARY,
disabled,
onClick,
media,
title,
content,
additionalContent,
complex,
className,
showMediaAtAllSizes,
showMediaCircle,
isContainerAligned,
as,
'aria-label': ariaLabel,
}: ActionOptionProps) => {
const sharedProps = {
media,
title,
content,
complex,
disabled,
showMediaAtAllSizes,
showMediaCircle,
className: clsx('tw-action-option', className),
isContainerAligned,
additionalContent,
as,
};
const getAriaLabel = (): string | undefined => {
if (ariaLabel) {
return ariaLabel;
}
const generatedLabels: string[] = [];
if (typeof title === 'string') {
generatedLabels.push(title);
}
if (typeof action === 'string') {
generatedLabels.push(action);
}
return generatedLabels.join(', ') || undefined;
};
const mapPriority = (priority: ActionOptionPriority): ButtonPriority => {
switch (priority) {
case 'primary':
return 'primary';
case 'secondary':
return 'secondary-neutral';
case 'tertiary':
return 'tertiary';
case 'secondary-send':
return 'secondary';
default:
return 'primary';
}
};
return (