import React, {useCallback, useContext, useEffect, useState} from "react"; import {ColorPreset} from "../models/Colors"; import DialogContext from "../contexts/DialogContext"; import {DialogType} from "../models/Dialog"; import {Dialog} from "../primitives/Layout"; import {LuciferIcon} from "../models/Icons"; import {HSColorPicker, Input, KelvinColorPicker} from "../primitives/Forms"; interface ColorDialogProps { data?: ColorPreset } enum ColorType { HueSat, Kelvin, HueSatKelvin, } const COLOR_TYPE_OPTIONS = [ {value: ColorType.HueSat, name: "Bare Nyanse (H) og metning (S)"}, {value: ColorType.Kelvin, name: "Bare temperatur (K)"}, {value: ColorType.HueSatKelvin, name: "Nyanse (H), metning (K) og kelvin (S)"}, ]; export default function ColorDialog({data}: ColorDialogProps) { const {setDialog, clearDialog} = useContext(DialogContext); const [name, setName] = useState(data?.name || ""); const [hue, setHue] = useState(data?.value?.h || 0); const [sat, setSat] = useState(data?.value?.s || 0); const [kelvin, setKelvin] = useState(data?.value?.kelvin || 0); const [colorType, setColorType] = useState(COLOR_TYPE_OPTIONS[0].value); const [isInit, setIsInit] = useState(false); const onSave = useCallback(() => { setDialog({type: DialogType.None}); }, [setDialog]); useEffect(() => { if (!isInit && data) { const v = data.value; if (v.kelvin !== undefined && v.kelvin > 0) { setColorType((v.h || v.s) ? ColorType.HueSatKelvin : ColorType.Kelvin); } } if (!isInit) { setIsInit(true); } }, [isInit, data, colorType]); return ( {colorType !== ColorType.Kelvin && ( { setHue(h); setSat(s); }}/> )} {colorType !== ColorType.HueSat && ( )} ); }