import React from 'react'
import { Colors, getColor, visible } from '@monorail/helpers/exports'
import styled, { css } from '@monorail/helpers/styled-components'
import { isNotNil } from '@monorail/sharedHelpers/typeGuards'
import { ButtonDisplay } from '@monorail/visualComponents/buttons/buttonTypes'
import { IconButton } from '@monorail/visualComponents/buttons/IconButton'
import {
ListItemProps,
OptionsList,
RenderChoiceProps,
} from '@monorail/visualComponents/cardList/OptionsList'
import { EmptyState } from '@monorail/visualComponents/emptyState/EmptyState'
import { IconType } from '@monorail/visualComponents/icon/IconType'
import {
SimpleListItem,
StyledListItemIcon,
} from '@monorail/visualComponents/list/List'
const IconButtonContainer = styled.div`
${visible(false)}
`
type RenderSelectedItemParams = {
readonly onRemoveItem: (item: A) => void
/**
* A function that returns the corresponding `IconType` for an item. If not
* provided, no icon will be rendered.
*/
readonly toIcon?: (item: A) => IconType
readonly toListItem: (item: A) => ListItemProps
}
const StyledSimpleListItem = styled(SimpleListItem)`
padding: 4px 8px;
${StyledListItemIcon} {
color: ${getColor(Colors.Gray54)};
font-size: 24px;
}
&:hover {
${IconButtonContainer} {
${visible(true)}
}
}
`
/**
* Common use case for rendering a selected item in the `CardList` view mode
*/
export const renderDefaultSelectedItem = ({
onRemoveItem,
toIcon,
toListItem,
}: RenderSelectedItemParams) => (item: A) => {
const { id, primaryText, secondaryText } = toListItem(item)
const leftIcon = isNotNil(toIcon) ? toIcon(item) : undefined
return (
onRemoveItem(item)}
/>
)
}
export const renderDefaultEmptyState = ({
icon = 'ghost_empty',
message = "There's no one here but me.",
isSearchOpen,
openSearch,
}: {
icon?: IconType
message?: string
isSearchOpen: boolean
openSearch: () => void
}) => (
)
export const renderDefaultOptionsList = (
options: ReadonlyArray>,
) =>