Browse Source

wip form

pull/1/head
Stian Fredrik Aune 4 years ago
parent
commit
79fc2a319c
  1. 49
      webui/src/dialogs/ColorDialog.tsx
  2. 14
      webui/src/primitives/Forms.sass
  3. 4
      webui/src/primitives/Forms.tsx

49
webui/src/dialogs/ColorDialog.tsx

@ -1,4 +1,4 @@
import React, {useCallback, useContext, useState} from "react";
import React, {useCallback, useContext, useEffect, useState} from "react";
import {ColorPreset} from "../models/Colors"; import {ColorPreset} from "../models/Colors";
import DialogContext from "../contexts/DialogContext"; import DialogContext from "../contexts/DialogContext";
import {DialogType} from "../models/Dialog"; import {DialogType} from "../models/Dialog";
@ -10,6 +10,18 @@ interface ColorDialogProps {
data?: ColorPreset 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) { export default function ColorDialog({data}: ColorDialogProps) {
const {setDialog, clearDialog} = useContext(DialogContext); const {setDialog, clearDialog} = useContext(DialogContext);
@ -18,21 +30,42 @@ export default function ColorDialog({data}: ColorDialogProps) {
const [sat, setSat] = useState(data?.value?.s || 0); const [sat, setSat] = useState(data?.value?.s || 0);
const [kelvin, setKelvin] = useState(data?.value?.kelvin || 0); const [kelvin, setKelvin] = useState(data?.value?.kelvin || 0);
const onClose = useCallback(() => {
const [colorType, setColorType] = useState(COLOR_TYPE_OPTIONS[0].value);
const [isInit, setIsInit] = useState(false);
const onSave = useCallback(() => {
setDialog({type: DialogType.None}); setDialog({type: DialogType.None});
}, [setDialog]); }, [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 ( return (
<Dialog title={data ? "Endre farge" : "Ny farge"} buttons={[ <Dialog title={data ? "Endre farge" : "Ny farge"} buttons={[
{icon: LuciferIcon.Check, text: "Lagre"},
{icon: LuciferIcon.Check, text: "Lagre", onClick: onSave},
{icon: LuciferIcon.Cross, text: "Avbryt", onClick: clearDialog}, {icon: LuciferIcon.Cross, text: "Avbryt", onClick: clearDialog},
]}> ]}>
<Input label="Navn" value={name} onChange={setName}/> <Input label="Navn" value={name} onChange={setName}/>
<HSColorPicker h={hue} s={sat} onChange={(h, s) => {
setHue(h);
setSat(s);
}}/>
<KelvinColorPicker kelvin={kelvin} onChange={setKelvin}/>
{colorType !== ColorType.Kelvin && (
<HSColorPicker h={hue} s={sat} onChange={(h, s) => {
setHue(h);
setSat(s);
}}/>
)}
{colorType !== ColorType.HueSat && (
<KelvinColorPicker kelvin={kelvin} onChange={setKelvin}/>
)}
</Dialog> </Dialog>
); );
} }

14
webui/src/primitives/Forms.sass

@ -1,10 +1,20 @@
@import "../res/colors" @import "../res/colors"
.FormLine .FormLine
margin: 0.5em 1ch
padding: 0.5em 1ch
width: 100%
&:first-of-type &:first-of-type
margin-top: 0 margin-top: 0
input
input, select
display: block display: block
width: 100%
font: inherit
background-color: $color-background-elevated
color: $color-foreground
border: none
padding: 0.25em 0.5ch
&:focus, &:active
outline: 1px solid $color-foreground-elevated

4
webui/src/primitives/Forms.tsx

@ -115,7 +115,7 @@ export const KelvinColorPicker: React.FC<KelvinColorPickerProps> = ({label, kelv
}); });
colorPicker.on("input:end", (color: iro.Color) => { colorPicker.on("input:end", (color: iro.Color) => {
onChange(color.kelvin);
onChange(Math.floor(color.kelvin));
}); });
return () => { return () => {
@ -130,7 +130,7 @@ export const KelvinColorPicker: React.FC<KelvinColorPickerProps> = ({label, kelv
return ( return (
<FormLine label={label || "KV-farge"}> <FormLine label={label || "KV-farge"}>
<div id={myId} style={{margin: "0 auto"}}/>
<div title={`${kelvin}K`} id={myId} style={{margin: "0 auto"}}/>
</FormLine> </FormLine>
); );
} }
Loading…
Cancel
Save