From ce9eb438e0d755076e799211d9d3c57b4c2ee175 Mon Sep 17 00:00:00 2001 From: Derick M <58572875+TurtIeSocks@users.noreply.github.com> Date: Sat, 27 Jan 2024 19:28:45 -0500 Subject: [PATCH] fix: saving and closing webhooks while editing --- .../layout/dialogs/webhooks/Manage.jsx | 3 +- .../layout/dialogs/webhooks/WebhookAdv.jsx | 16 +++---- .../layout/dialogs/webhooks/store.js | 2 +- .../dialogs/webhooks/tiles/TrackedTile.jsx | 45 ++++++++++--------- 4 files changed, 36 insertions(+), 30 deletions(-) diff --git a/src/components/layout/dialogs/webhooks/Manage.jsx b/src/components/layout/dialogs/webhooks/Manage.jsx index 74add726e..2993b0ba8 100644 --- a/src/components/layout/dialogs/webhooks/Manage.jsx +++ b/src/components/layout/dialogs/webhooks/Manage.jsx @@ -38,6 +38,7 @@ export default function Manage() { const feedbackLink = useMemory((s) => s.config.links.feedbackLink) const filters = useGenFullFilters() + const liveFilters = useWebhookStore((s) => s.tempFilters) /** @type {ReturnType>} */ const dialogRef = React.useRef(null) @@ -124,7 +125,7 @@ export default function Manage() { return category !== 'human' && addNew.open ? ( { - if (save) { + const realSave = typeof save === 'boolean' && save + if (realSave) { useWebhookStore.setState((prev) => { if (filterId === 'global' && filterToSave) { const newFilters = {} const wc = wildCards[category] || ['0-0'] if (filterToSave.everything_individually !== false) { selectedIds.forEach((item) => { - if (!wc.includes(item)) { - newFilters[item] = { - ...prev.tempFilters[item], - ...filterToSave, - enabled: true, - } + newFilters[item] = { + ...prev.tempFilters[item], + ...filterToSave, + enabled: true, } }) } else { @@ -810,13 +809,14 @@ export default function WebhookAdvanced() { }, } } + return prev }) } else { useWebhookStore.setState((prev) => ({ tempFilters: { ...prev.tempFilters, [filterId]: { ...info?.defaults } }, })) } - if (onClose) onClose(poracleValues) + if (onClose) onClose(poracleValues, realSave) useWebhookStore.setState((prev) => ({ advanced: { ...prev.advanced, open: false, selectedIds: [] }, })) diff --git a/src/components/layout/dialogs/webhooks/store.js b/src/components/layout/dialogs/webhooks/store.js index f6518df04..6b46dee95 100644 --- a/src/components/layout/dialogs/webhooks/store.js +++ b/src/components/layout/dialogs/webhooks/store.js @@ -34,7 +34,7 @@ import { create } from 'zustand' * category: string * selectedIds: string[] * open: boolean - * onClose?: (newFilters: object) => void + * onClose?: (newFilters: object, save?: boolean) => void * } * }} WebhookStore * @type {import("zustand").UseBoundStore>} diff --git a/src/components/layout/dialogs/webhooks/tiles/TrackedTile.jsx b/src/components/layout/dialogs/webhooks/tiles/TrackedTile.jsx index acb94aeef..0683e75d7 100644 --- a/src/components/layout/dialogs/webhooks/tiles/TrackedTile.jsx +++ b/src/components/layout/dialogs/webhooks/tiles/TrackedTile.jsx @@ -1,7 +1,11 @@ import * as React from 'react' import DeleteForever from '@mui/icons-material/DeleteForever' import Edit from '@mui/icons-material/Edit' -import { Grid, Typography, IconButton, Checkbox, Box } from '@mui/material' +import Grid2 from '@mui/material/Unstable_Grid2/Grid2' +import Typography from '@mui/material/Typography' +import IconButton from '@mui/material/IconButton' +import Checkbox from '@mui/material/Checkbox' +import Box from '@mui/material/Box' import Utility from '@services/Utility' import Poracle from '@services/Poracle' @@ -14,7 +18,7 @@ import { useWebhookStore, setSelected } from '../store' export default function TrackedTile({ index }) { const category = useWebhookStore((s) => s.category) const item = useWebhookStore((s) => s[category][index]) - const id = Poracle.getId(item, category) + const id = Poracle.getId(item) const advOpen = useWebhookStore((s) => s.advanced) const selected = useWebhookStore((s) => (item ? s.selected[item.uid] : false)) const defaults = useWebhookStore((s) => s.context.ui[category].defaults) @@ -31,15 +35,17 @@ export default function TrackedTile({ index }) { }, [advOpen, id, item]) const onClose = React.useCallback( - (newFilter) => { - apolloClient.mutate({ - mutation: webhookNodes[category], - variables: { - data: Poracle.processor(category, [newFilter], defaults), - status: 'POST', - category, - }, - }) + (newFilter, save) => { + if (save) { + apolloClient.mutate({ + mutation: webhookNodes[category], + variables: { + data: Poracle.processor(category, [newFilter], defaults), + status: 'POST', + category, + }, + }) + } }, [category, defaults], ) @@ -47,28 +53,27 @@ export default function TrackedTile({ index }) { if (!item) return   return ( - - + {id} - - + + {item.description || Poracle.generateDescription(item, category)} - - + + - - + + ) }