Fix setting values

This commit is contained in:
Conor 2023-03-11 20:35:57 +00:00
parent 1d5344319c
commit f62234862d
Signed by: CADawg
GPG Key ID: A28C6F51829932B9
2 changed files with 18 additions and 17 deletions

View File

@ -14,17 +14,23 @@ import {faTrash} from "@fortawesome/free-solid-svg-icons/faTrash";
export default function SettingCard(props: { flag: FlagRecord, originalValue: ValueRecordString, value: ValueRecordString, onDelete: (e: Event, flag: FlagRecord) => void, setValue: (values: ValueRecordString) => void, saveValue: (value: ValueRecordString) => tPocketbaseAsyncResponse }) {
const [lastSaveStatus, setLastSaveStatus] = useState<tPocketbaseResponse | null>(null);
const {flag, originalValue, value, setValue, saveValue} = props;
const {flag, originalValue, value, setValue: setValue2, saveValue} = props;
function setValue(value: string) {
let clone = props.value.clone() as ValueRecordString;
clone.value = value;
setValue2(clone);
}
const [setDialogShowing, dialog] = useDialog(<DialogWide>
<DialogHeader>
<h1 className="dialog-heading">Update {flag.name} Value</h1>
</DialogHeader>
<DialogBody>
<textarea className="dialog-input-large" value={value.value}
onInput={e => setValue({
...value,
value: e.currentTarget.value
} as ValueRecordString)}/>
onInput={e => setValue(e.currentTarget.value)}/>
</DialogBody>
<DialogFooter>
<button className="dialog-action dialog-action__save"
@ -71,20 +77,17 @@ export default function SettingCard(props: { flag: FlagRecord, originalValue: Va
switch (inputType) {
case "text":
input = <input type={inputType} value={value.value} class="setting-card-value"
onInput={e => setValue({...value, value: e.currentTarget.value} as ValueRecordString)}/>;
onInput={e => setValue(e.currentTarget.value)}/>;
break;
case "number":
input = <input type={inputType} value={value.value} class="setting-card-value"
onInput={e => setValue({...value, value: e.currentTarget.value} as ValueRecordString)}/>
onInput={e => setValue(e.currentTarget.value)}/>
inputExpandButton = null;
break;
case "checkbox":
input = <label className="setting-card-value-switch">
<input type={inputType} checked={value.value === "true"} className="setting-card-value"
onClick={e => setValue({
...value,
value: e.currentTarget.checked ? "true" : "false"
} as ValueRecordString)}/>
onClick={e => setValue(e.currentTarget.checked ? "true" : "false")}/>
<span className="setting-card-value-slider"></span>
</label>;
inputExpandButton = null;
@ -93,7 +96,7 @@ export default function SettingCard(props: { flag: FlagRecord, originalValue: Va
const onReset = (e: Event) => {
e.preventDefault();
setValue(originalValue);
setValue(originalValue.value);
}
function getLastSaveStatusMessage() {

View File

@ -69,7 +69,6 @@ function specialJsonLoad(value: any, type: any) {
}
function specialJsonParse(value: string, type: any) {
console.log(value, type)
switch (type) {
case 'json':
return JSON.parse(value);
@ -135,7 +134,6 @@ export default function Config() {
}, [flagsData]);
useEffect(() => {
console.log(valuesInDB, flagsData)
const newValues = valuesInDB.map((v) => {
const type = flagsData.find(f => f.id === v.flag)?.type;
@ -146,8 +144,8 @@ export default function Config() {
return v as ValueRecordString;
});
setOriginalValues(JSON.parse(JSON.stringify(newValues)));
setEditedValues(JSON.parse(JSON.stringify(newValues)));
setOriginalValues(newValues.map(v => v.clone() as ValueRecordString));
setEditedValues(newValues.map(v => v.clone() as ValueRecordString));
}, [valuesInDB, flagsData]);
useEffect(() => {
@ -343,7 +341,7 @@ export default function Config() {
if (JSON.stringify(previousValue.value) !== JSON.stringify(editedValues[i].value)) {
const editedValueClone = editedValue.clone();
editedValueClone.value = specialJsonStringify(editedValue.value, flagsData.find((f) => f.id === editedValue.flag)?.type);
editedValueClone.value = specialJsonParse(editedValue.value, flagsData.find((f) => f.id === editedValue.flag)?.type);
pocketbase.collection('value').update(editedValue.id, editedValueClone);
setOriginalValue(editedValue); // the function ensures it'll be a distinct clone