import { styled } from '@linaria/react'; import { type ComponentType, useContext } from 'react'; import { SettingsListSkeletonCard } from '@/settings/components/SettingsListSkeletonCard'; import { type IconComponent, IconPlus } from 'twenty-ui/display'; import { Card, CardFooter } from 'twenty-ui/layout'; import { ThemeContext, themeCssVariables } from 'twenty-ui/theme-constants'; import { SettingsListItemCardContent } from './SettingsListItemCardContent'; const StyledFooterContainer = styled.div` > * { align-items: center; display: flex; padding: ${themeCssVariables.spacing[1]}; } `; const StyledButton = styled.button` align-items: center; background: ${themeCssVariables.background.primary}; border: none; border-radius: ${themeCssVariables.border.radius.sm}; color: ${themeCssVariables.font.color.secondary}; cursor: pointer; display: flex; flex: 1 0 0; gap: ${themeCssVariables.spacing[2]}; height: ${themeCssVariables.spacing[8]}; padding: 0 ${themeCssVariables.spacing[1]}; padding-left: ${themeCssVariables.spacing[2]}; width: 100%; &:hover { background: ${themeCssVariables.background.transparent.light}; } `; type SettingsListCardProps = { items: ListItem[]; getItemLabel: (item: ListItem) => string; getItemDescription?: (item: ListItem) => string; hasFooter?: boolean; isLoading?: boolean; onRowClick?: (item: ListItem) => void; RowIcon?: IconComponent; RowIconFn?: (item: ListItem) => IconComponent; RowIconColor?: string; RowRightComponent: ComponentType<{ item: ListItem }>; footerButtonLabel?: string; onFooterButtonClick?: () => void; to?: (item: ListItem) => string; rounded?: boolean; }; export const SettingsListCard = < ListItem extends { id: string } = { id: string; }, >({ items, getItemLabel, getItemDescription, hasFooter, isLoading, onRowClick, RowIcon, RowIconFn, RowIconColor, RowRightComponent, onFooterButtonClick, footerButtonLabel, to, rounded, }: SettingsListCardProps) => { const { theme } = useContext(ThemeContext); if (isLoading === true) return ; return ( {items.map((item, index) => ( } divider={index < items.length - 1} onClick={onRowClick ? () => onRowClick?.(item) : undefined} to={to?.(item)} /> ))} {hasFooter && ( {footerButtonLabel} )} ); };