import { debounce } from "lodash-es"; import { action, runInAction } from "mobx"; import { observer } from "mobx-react"; import { FC, useState } from "react"; import { ChromePicker } from "react-color"; import { useTranslation } from "react-i18next"; import isDefined from "../../Core/isDefined"; import CommonStrata from "../../Models/Definition/CommonStrata"; import { SelectableDimensionColor as SelectableDimensionColorModel } from "../../Models/SelectableDimensions/SelectableDimensions"; import { RawButton } from "../../Styled/Button"; import { TextSpan } from "../../Styled/Text"; const debounceSetColorDimensionValue = debounce( action((dim: SelectableDimensionColorModel, value: string) => { // Only update value if it has changed if (dim.value !== value) { dim.setDimensionValue(CommonStrata.user, value); } }), 100 ); export const SelectableDimensionColor: FC<{ id: string; dim: SelectableDimensionColorModel; }> = observer(({ dim }) => { const [open, setIsOpen] = useState(false); const { t } = useTranslation(); return (
{dim.value ? (
setIsOpen(true)} >
) : null} {/* Show "Add" button if value is undefined */} {!dim.value ? ( <>   runInAction(() => dim.setDimensionValue(CommonStrata.user, "#000000") ) } activeStyles fullHeight > {t("selectableDimensions.colorAdd")} ) : null} {/* Show "Clear" button if `allowUndefined` */} {dim.value && dim.allowUndefined ? ( <>   runInAction(() => dim.setDimensionValue(CommonStrata.user, undefined) ) } activeStyles fullHeight > {t("selectableDimensions.colorRemove")} ) : null} {open ? (
setIsOpen(false)} /> { const colorString = isDefined(evt.rgb.a) ? `rgba(${evt.rgb.r},${evt.rgb.g},${evt.rgb.b},${evt.rgb.a})` : `rgb(${evt.rgb.r},${evt.rgb.g},${evt.rgb.b})`; debounceSetColorDimensionValue(dim, colorString); }} />
) : null}
); });