diff --git a/src/components/dataref/item.tsx b/src/components/dataref/item.tsx index 41958324..d663815f 100644 --- a/src/components/dataref/item.tsx +++ b/src/components/dataref/item.tsx @@ -115,10 +115,10 @@ const DataRefEntry: FunctionComponent = memo(function Wrapped Actions - } > + } > Change Source - } onClick={ onClearDataRef } disabled={ !dataFile } > + } onClick={ onClearDataRef } disabled={ !dataFile } > Clear Buffer diff --git a/src/components/messages/inport.tsx b/src/components/messages/inport.tsx index 17bfc97e..0b69f747 100644 --- a/src/components/messages/inport.tsx +++ b/src/components/messages/inport.tsx @@ -78,7 +78,7 @@ const MessageInportEntry: FunctionComponent = memo(func Actions - } onClick={ toggleMetaEditor }> + } onClick={ toggleMetaEditor }> Edit Metadata diff --git a/src/components/messages/outport.tsx b/src/components/messages/outport.tsx index 896edbc9..d03c944f 100644 --- a/src/components/messages/outport.tsx +++ b/src/components/messages/outport.tsx @@ -67,7 +67,7 @@ const MessageOutportEntry: FunctionComponent = memo(fu Actions - } onClick={ toggleMetaEditor }> + } onClick={ toggleMetaEditor }> Edit Metadata diff --git a/src/components/parameter/item.tsx b/src/components/parameter/item.tsx index 975bebf3..59026453 100644 --- a/src/components/parameter/item.tsx +++ b/src/components/parameter/item.tsx @@ -94,7 +94,7 @@ const Parameter = memo(function WrappedParameter({ param, onSetNormalizedValue, Actions - } onClick={ toggleMetaEditor }> + } onClick={ toggleMetaEditor }> Edit Metadata diff --git a/src/components/patchers/item.tsx b/src/components/patchers/item.tsx index fccd5934..13d87ffa 100644 --- a/src/components/patchers/item.tsx +++ b/src/components/patchers/item.tsx @@ -125,8 +125,8 @@ export const PatcherItem: FunctionComponent = memo(function Wr Actions - } onClick={ toggleEditing } >Rename - } onClick={ onDeletePatcher } >Delete + } onClick={ toggleEditing } >Rename + } onClick={ onDeletePatcher } >Delete diff --git a/src/components/presets/item.tsx b/src/components/presets/item.tsx index 33c77eda..7780bee0 100644 --- a/src/components/presets/item.tsx +++ b/src/components/presets/item.tsx @@ -138,9 +138,9 @@ export const PresetItem: FunctionComponent = memo(function Wrap Actions - } onClick={ toggleEditing } >Rename - { onSetInitial && } onClick={ onSetInitialPreset } >Load on Startup } - } onClick={ onDeletePreset } >Delete + } onClick={ toggleEditing } >Rename + { onSetInitial && } onClick={ onSetInitialPreset } >Load on Startup } + } onClick={ onDeletePreset } >Delete diff --git a/src/components/sets/index.tsx b/src/components/sets/index.tsx index d72096e0..72b461b3 100644 --- a/src/components/sets/index.tsx +++ b/src/components/sets/index.tsx @@ -17,6 +17,7 @@ export type SetsDrawerProps = { onLoadSet: (set: GraphSetRecord) => any; onRenameSet: (set: GraphSetRecord, name: string) => any; onSaveSet: (name: string) => any; + onSaveSetAs: (set: GraphSetRecord) => any; open: boolean; sets: Seq.Indexed; } @@ -30,7 +31,8 @@ const SetsDrawer: FunctionComponent = memo(function WrappedSets onDeleteSet, onLoadSet, onRenameSet, - onSaveSet + onSaveSet, + onSaveSetAs }) { @@ -86,7 +88,7 @@ const SetsDrawer: FunctionComponent = memo(function WrappedSets Saved Sets { - sets.map(set => ) + sets.map(set => ) } diff --git a/src/components/sets/item.tsx b/src/components/sets/item.tsx index c90ee9a0..a4710fc1 100644 --- a/src/components/sets/item.tsx +++ b/src/components/sets/item.tsx @@ -2,7 +2,7 @@ import { ChangeEvent, FormEvent, FunctionComponent, KeyboardEvent, MouseEvent, m import { GraphSetRecord } from "../../models/set"; import { ActionIcon, Button, Group, Menu, TextInput, Tooltip } from "@mantine/core"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { faCheck, faClose, faEllipsisVertical, faPen, faTrash, faClock } from "@fortawesome/free-solid-svg-icons"; +import { faCheck, faClose, faEllipsisVertical, faPen, faTrash, faClock, faFileArrowDown } from "@fortawesome/free-solid-svg-icons"; import classes from "./sets.module.css"; import { keyEventIsValidForName, replaceInvalidNameChars } from "../../lib/util"; @@ -11,13 +11,15 @@ export type GraphSetItemProps = { onDelete: (set: GraphSetRecord) => any; onLoad: (set: GraphSetRecord) => any; onRename: (set: GraphSetRecord, name: string) => any; + onSave: (set: GraphSetRecord) => any; }; export const GraphSetItem: FunctionComponent = memo(function WrappedGraphSet({ set, onDelete, onLoad, - onRename + onRename, + onSave }: GraphSetItemProps) { const [isEditing, setIsEditing] = useState(false); @@ -49,6 +51,10 @@ export const GraphSetItem: FunctionComponent = memo(function onDelete(set); }, [onDelete, set]); + const onSaveSet = useCallback((_e: MouseEvent) => { + onSave(set); + }, [onSave, set]); + const onChange = useCallback((e: ChangeEvent) => { setName(replaceInvalidNameChars(e.target.value)); if (error && e.target.value?.length) setError(undefined); @@ -128,8 +134,9 @@ export const GraphSetItem: FunctionComponent = memo(function Actions - } onClick={ toggleEditing } >Rename - } onClick={ onDeleteSet } >Delete + } onClick={ onSaveSet } >{ set.latest ? "Save Changes" : "Overwrite" } + } onClick={ toggleEditing } >Rename + } onClick={ onDeleteSet } >Delete diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 6a763f7f..dce25892 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,4 +1,4 @@ -import { Button, Group, Stack } from "@mantine/core"; +import { Button, Group, Stack, Text } from "@mantine/core"; import { FunctionComponent, useCallback } from "react"; import { useAppDispatch, useAppSelector } from "../hooks/useAppDispatch"; import { RootStateType } from "../lib/store"; @@ -24,6 +24,7 @@ import PatcherDrawer from "../components/patchers"; import { PatcherRecord } from "../models/patcher"; import { SortOrder } from "../lib/constants"; import { GraphSetRecord } from "../models/set"; +import { modals } from "@mantine/modals"; const Index: FunctionComponent> = () => { @@ -97,6 +98,27 @@ const Index: FunctionComponent> = () => { dispatch(saveGraphSetOnRemote(name)); }, [dispatch]); + const onSaveSetAs = useCallback((set: GraphSetRecord) => { + if (set.latest) { + dispatch(saveGraphSetOnRemote(set.name)); + } else { + modals.openConfirmModal({ + title: "Overwrite Set", + centered: true, + children: ( + + Are you sure you want to overwrite the set named { `"${set.name}"` }? + + ), + labels: { confirm: "Overwrite", cancel: "Cancel" }, + confirmProps: { color: "red" }, + onConfirm: () => { + dispatch(saveGraphSetOnRemote(set.name)); + } + }); + } + }, [dispatch]); + // Presets const onLoadPreset = useCallback((preset: PresetRecord) => { dispatch(loadSetPresetOnRemote(preset)); @@ -163,6 +185,7 @@ const Index: FunctionComponent> = () => { onLoadSet={ onLoadSet } onRenameSet={ onRenameSet } onSaveSet={ onSaveSet } + onSaveSetAs={ onSaveSetAs } open={ setDrawerIsOpen } sets={ graphSets } />