import type { ReactNode } from 'react'; import { components, type GroupBase, type MultiValueProps, type MultiValueRemoveProps, } from 'react-select'; import { TooltipWithChildren } from '@@/Tip/TooltipWithChildren'; import { type Option } from './PortainerSelect'; /** Extends Option with an optional tooltip shown when the item is disabled. */ export interface DisabledOption extends Option { disabledMessage?: ReactNode; } export function DisabledMultiValue({ data, ...props }: MultiValueProps, true, GroupBase>>) { const disabledMessage = (data as DisabledOption).disabledMessage; const value = ( {props.children} ); if (data.disabled && disabledMessage) { return ( document.body} > {value} ); } return value; } export function DisabledMultiValueRemove({ data, ...props }: MultiValueRemoveProps, true, GroupBase>>) { if (data.disabled) { return null; } return ( ); } export function preserveProtectedValues( selectedValues: T[], protectedValues: T[] ): T[] { return [...new Set([...selectedValues, ...protectedValues])]; }