import { Meta } from '@storybook/react'; import { ReactNode } from 'react'; import { Briefcase } from 'lucide-react'; import { init as initFeatureService } from '@/react/portainer/feature-flags/feature-flags.service'; import { Edition, FeatureId } from '@/react/portainer/feature-flags/enums'; import Docker from '@/assets/ico/vendor/docker.svg?c'; import { IconProps } from '@@/Icon'; import { BoxSelectorItem } from './BoxSelectorItem'; import { BoxSelectorOption } from './types'; const meta: Meta = { title: 'BoxSelector/Item', args: { selected: false, description: 'description', icon: Briefcase, label: 'label', }, }; export default meta; interface ExampleProps { selected?: boolean; description?: string; icon?: IconProps['icon']; label?: string; feature?: FeatureId; } function Template({ selected = false, description = 'description', icon, label = 'label', feature, }: ExampleProps) { const option: BoxSelectorOption<number> = { description, icon, id: 'id', label, value: 1, feature, }; return ( <div className="boxselector_wrapper"> <BoxSelectorItem onSelect={() => {}} option={option} radioName="radio" isSelected={() => selected} /> </div> ); } export const Example = Template.bind({}); export function SelectedItem() { return <Template selected />; } SelectedItem.args = { selected: true, }; export function LimitedFeatureItem() { initFeatureService(Edition.CE); return <Template feature={FeatureId.ACTIVITY_AUDIT} />; } export function SelectedLimitedFeatureItem() { initFeatureService(Edition.CE); return <Template feature={FeatureId.ACTIVITY_AUDIT} selected />; } function IconTemplate({ icon, iconType, }: { icon: ReactNode; iconType: 'raw' | 'logo' | 'badge'; }) { return ( <BoxSelectorItem onSelect={() => {}} option={{ description: 'description', icon, iconType, label: 'label', id: 'id', value: 'value', }} isSelected={() => false} radioName="radio" slim /> ); } export function LogoItem() { return <IconTemplate icon={Docker} iconType="logo" />; } export function BadgeItem() { return <IconTemplate icon={Briefcase} iconType="badge" />; }