import React, { forwardRef, memo, useState } from 'react';
import { Chip } from '@cleartrip/ct-design-chip';
import { Box } from '@cleartrip/ct-design-box';
import { Container, ContainerRef } from '@cleartrip/ct-design-container';
import { Typography } from '@cleartrip/ct-design-typography';
import { useStyles } from '@cleartrip/ct-design-style-manager';
import useIsomorphicEffect from '@cleartrip/ct-design-use-isomorphic-effect';
import { ISingleSelectProps, SingleChipProps } from './type';
import { ChipOrientation } from './constants';
import { singleSelectChipStaticStyles } from './style';
interface ChipAtomsProps {
data: SingleChipProps[];
selectedChip: string | null;
onClickCb: (chip: SingleChipProps) => () => void;
chipStyleConfig?: ISingleSelectProps['styleConfig'] extends infer T
? T extends { chip?: infer C }
? C
: never
: never;
}
const ChipAtoms = memo(({ data, selectedChip, onClickCb, chipStyleConfig }: ChipAtomsProps) => {
return (
<>
{data.map((item) => {
const isSelected = item?.id === selectedChip;
return (
);
})}
>
);
});
ChipAtoms.displayName = 'ChipAtoms';
const SingleSelectChip = forwardRef(
({ onChange, data, orientation = ChipOrientation.row, selected = null, prompt, styleConfig = {} }, ref) => {
const { hasError = false, Icon: promptIcon, message: promptMessage } = prompt || {};
const {
root: customRootStyles = [],
chipContainer: chipContainerStyles = [],
promptBox: promptBoxStyles = [],
promptIconContainer: promptIconContainerStyles = [],
promptMessageTypography: promptMessageTypographyStyles,
chip: chipStyleConfig,
} = styleConfig;
const [selectedChip, setSelectedChip] = useState(selected ?? null);
useIsomorphicEffect(() => {
if ((selected ?? null) !== selectedChip) {
setSelectedChip(selected ?? null);
}
}, [selected]);
const onClickCb = (chip: SingleChipProps) => () => {
const { id } = chip ?? {};
if (selectedChip !== id) {
setSelectedChip(id);
onChange?.(id);
}
};
const dynamicStyles = useStyles(
() => ({
chipWrapper: {
flexDirection: orientation === ChipOrientation.row ? 'row' : 'column',
},
}),
[orientation],
);
return (
{(promptIcon || promptMessage) && (
{promptIcon && (
{promptIcon}
)}
{promptMessage && (
{promptMessage}
)}
)}
);
},
);
SingleSelectChip.displayName = 'SingleSelectChip';
export default memo(SingleSelectChip);