From 222899f1895e6261b37e3f03a90e75762cb4780a Mon Sep 17 00:00:00 2001 From: Aditya <60684641+0x0elliot@users.noreply.github.com> Date: Tue, 4 Nov 2025 01:14:40 +0530 Subject: [PATCH] fix: delete API when data has no category --- frontend/src/components/CacheView.jsx | 311 +++++++++++++------------- 1 file changed, 157 insertions(+), 154 deletions(-) diff --git a/frontend/src/components/CacheView.jsx b/frontend/src/components/CacheView.jsx index 3c19da36..564af782 100644 --- a/frontend/src/components/CacheView.jsx +++ b/frontend/src/components/CacheView.jsx @@ -38,8 +38,8 @@ import { Avatar, } from "@mui/material"; -import { - DataGrid, +import { + DataGrid, GridColDef, } from '@mui/x-data-grid'; @@ -70,15 +70,15 @@ import { VisibilityOff as VisibilityOffIcon, Clear as ClearIcon, Add as AddIcon, - Rocket as RocketIcon, - Webhook as WebhookIcon, - Air as AirIcon, - RocketLaunch as RocketLaunchIcon, + Rocket as RocketIcon, + Webhook as WebhookIcon, + Air as AirIcon, + RocketLaunch as RocketLaunchIcon, Send as SendIcon, SmartToy as SmartToyIcon, Settings as SettingsIcon, FilterAlt as FilterAltIcon, - CompareArrows as CompareArrowsIcon, + CompareArrows as CompareArrowsIcon, } from "@mui/icons-material"; import { Context } from "../context/ContextApi.jsx"; @@ -104,7 +104,7 @@ const useStyles = makeStyles({ }, }); -// +// //const CacheView = (props) => { const CacheView = memo((props) => { @@ -130,7 +130,7 @@ const CacheView = memo((props) => { const [cursors, setCursors] = useState({ 0: "", }) - const [_, setUpdate] = useState(Math.random()) + const [_, setUpdate] = useState(Math.random()) const [selectedRows, setSelectedRows] = useState([]); // Direct category migration from ../components/Files.jsx const [selectAllChecked, setSelectAllChecked] = React.useState(false) @@ -170,7 +170,7 @@ const CacheView = memo((props) => { "key": "workflow_id", "value": "", }], - "icon": , + "icon": , "enabled": false, }, { @@ -203,7 +203,7 @@ const CacheView = memo((props) => { "key": "webhook_url", "value": "", }], - "icon": , + "icon": , "enabled": false, }, @@ -237,7 +237,7 @@ const CacheView = memo((props) => { const [categoryAutomations, setCategoryAutomations] = useState(defaultAutomation) const [categoryConfig, setCategoryConfig] = useState(undefined) - + const { themeMode, brandColor } = useContext(Context); const theme = getTheme(themeMode, brandColor); const classes = useStyles(); @@ -312,9 +312,9 @@ const CacheView = memo((props) => { useEffect(() => { getWorkflows() - getApps() + getApps() - var chosenCategory = selectedCategory + var chosenCategory = selectedCategory const urlParams = new URLSearchParams(window.location.search) const categoryParam = urlParams.get("category") if (categoryParam && categoryParam !== undefined && categoryParam !== "default" && categoryParam !== "") { @@ -335,7 +335,7 @@ const CacheView = memo((props) => { if (event.key === 'Escape'){ // not working for some reasons console.log('escape pressed') - setRenderTextBox(false); + setRenderTextBox(false); } } @@ -359,7 +359,7 @@ const CacheView = memo((props) => { if (page !== undefined && page !== null && page >= 0) { if (cursors[page-1] !== undefined && cursors[page-1] !== null && cursors[page-1] !== "") { - url += "&cursor=" + cursors[page-1] + url += "&cursor=" + cursors[page-1] } } @@ -405,8 +405,8 @@ const CacheView = memo((props) => { } // Especially important during first load - if (index < 2 && (category === "default" || category === "" || category === undefined)) { - // If it exists and isn't blank/default, load it + if (index < 2 && (category === "default" || category === "" || category === undefined)) { + // If it exists and isn't blank/default, load it const urlParams = new URLSearchParams(window.location.search); const categoryParam = urlParams.get("category"); if (categoryParam && categoryParam !== undefined && categoryParam !== "default" && categoryParam !== "") { @@ -414,7 +414,7 @@ const CacheView = memo((props) => { if (index === undefined || index === null) { index = 0 } - + listOrgCache(orgId, categoryParam, index+1, amount, page) } else { setSelectedCategory("default"); @@ -478,10 +478,10 @@ const CacheView = memo((props) => { } else { setCategoryAutomations(defaultAutomation) } - } + } } else { //toast.warn("Failed to load keys. Please try again or contact support@shuffler if this persists.") - + if (category !== undefined && category !== null && category !== "" && category !== "default") { toast.info(`No keys to load in category ${category}`) setSelectedCategory(category) @@ -495,6 +495,9 @@ const CacheView = memo((props) => { const deleteEntry = (orgId, key, itemCategory, refreshList) => { + + console.log(`Deleting entry for orgId: ${orgId}, key: ${key}, category: ${itemCategory}`); + const method = "POST" const url = `${globalUrl}/api/v1/orgs/${orgId}/delete_cache` var parsed = { @@ -534,8 +537,8 @@ const CacheView = memo((props) => { }; const editOrgCache = (orgId) => { - var entry = { - key: dataValue.key, + var entry = { + key: dataValue.key, value: value, category: selectedCategory, } @@ -587,10 +590,10 @@ const CacheView = memo((props) => { }; const addOrgCache = (orgId) => { - const cache = { - key: key, + const cache = { + key: key, value: value, - category: selectedCategory, + category: selectedCategory, } setCacheInput([cache]); @@ -709,7 +712,7 @@ const CacheView = memo((props) => { fullWidth={true} autoComplete="Key" placeholder="abc" - id="keyfield" + id="keyfield" margin="normal" variant="outlined" value={editCache ? dataValue.key : key} @@ -728,7 +731,7 @@ const CacheView = memo((props) => { autoFixJson(value) }} > - + @@ -758,7 +761,7 @@ const CacheView = memo((props) => { /> - {editCache ? + {editCache ?
Created: {timestamp(dataValue?.created)} @@ -841,7 +844,7 @@ const CacheView = memo((props) => { } }; - const changeDistribution = (id, selectedSubOrg) => { + const changeDistribution = (id, selectedSubOrg) => { editFileConfig(id, [...new Set(selectedSubOrg)], selectedCategory) } @@ -855,8 +858,8 @@ const CacheView = memo((props) => { category: category === undefined || category === "" || category === "default" ? "" : category, } - console.log("data: ", data); - + console.log("data: ", data); + const url = `${globalUrl}/api/v1/orgs/${orgId}/cache/config`; fetch(url, { @@ -989,7 +992,7 @@ const CacheView = memo((props) => { const originalIcon = automation.icon if (typeof automation.icon !== "string") { automation.icon = ""; - } + } }) const url = `${globalUrl}/api/v2/datastore/automate` @@ -999,7 +1002,7 @@ const CacheView = memo((props) => { } if (settings !== undefined && settings !== null && Object.keys(settings).length > 0) { - data["settings"] = settings + data["settings"] = settings } fetch(url, { @@ -1049,7 +1052,7 @@ const CacheView = memo((props) => { } } - const runSave = () => { + const runSave = () => { setUpdated(false) const newAutomations = [...categoryAutomations] @@ -1062,11 +1065,11 @@ const CacheView = memo((props) => { } return ( -
setHovered(true)} onMouseLeave={() => setHovered(false)} > @@ -1085,15 +1088,15 @@ const CacheView = memo((props) => { setUpdatedAutomation(updatedAutomation) setUpdated(true) - setUpdate(Math.random()) + setUpdate(Math.random()) }} /> -
{ @@ -1109,30 +1112,30 @@ const CacheView = memo((props) => { } }} > - {typeof automation?.icon === "string" && automation?.icon?.length > 0 ? + {typeof automation?.icon === "string" && automation?.icon?.length > 0 ? {automation.name} : automation.icon } - {automation.name}
- {automation?.disabled !== true ? + {automation?.disabled !== true ? - + : null}
@@ -1957,14 +1960,14 @@ const CacheView = memo((props) => { style={{textTransform: isSelectedDataStore ? 'capitalize':null, width : isSelectedDataStore ? 120 : null, height:isSelectedDataStore?40:null}} variant="contained" color="primary" - onClick={() =>{ + onClick={() =>{ setEditCache(false) setModalOpen(true) setValue("") }} > - Add Key + Add Key - + } {renderTextBox && { const foundValue = event.target.value.trim(); if(event.key === 'Enter' && foundValue?.length > 0){ setUpdateToThisCategory(event.target.value) - + listOrgCache(orgId, event.target.value, 0, pageSize, 0) setPage(0) } - + }} style={{ height: 35, @@ -2151,10 +2154,10 @@ const CacheView = memo((props) => { - + - + - {showAutomationMenu || showSettingsMenu ? + {showAutomationMenu || showSettingsMenu ? { @@ -2227,7 +2230,7 @@ const CacheView = memo((props) => { - {showSettingsMenu === true ? + {showSettingsMenu === true ?
@@ -2237,7 +2240,7 @@ const CacheView = memo((props) => {
- Timeout + Timeout You can set a timeout for the category. This will delete all keys in this category after the specified time. Timeout is in seconds and based on last EDITED time. @@ -2266,7 +2269,7 @@ const CacheView = memo((props) => { toast.info("Timeout must be a number. Setting to 0.") } else { timeoutValue = parseInt(e.target.value, 10) - if (timeoutValue < 60) { + if (timeoutValue < 60) { toast.info("Timeout must be between 60 seconds or more. Setting to 0.") } @@ -2283,7 +2286,7 @@ const CacheView = memo((props) => {
- {categoryConfig?.settings?.public === true ? "" : "NOT"} Public + {categoryConfig?.settings?.public === true ? "" : "NOT"} Public This will make the url for this category public. Metadata will be cleared, except for timestamps. Types: keys,ndjson,csv,values,json,meta @@ -2330,7 +2333,7 @@ const CacheView = memo((props) => { When - A key is edited + A key is edited @@ -2339,16 +2342,16 @@ const CacheView = memo((props) => { {categoryAutomations.map((automation, index) => { return ( - + automation={automation} + index={index} + /> ) })}
} - +
: null} @@ -2374,17 +2377,17 @@ const CacheView = memo((props) => { setSelectedRows(newSelection); }} keepNonExistentRowsSelected={false} - getRowId={(row) => `${row?.key}_${row?.category}`} + getRowId={(row) => row?.category ? `${row.key}_${row.category}` : row.key} autoHeight={true} sx={{ - marginTop: 1, + marginTop: 1, height: listCache.length*52+500, width: "100%", '.MuiTablePagination-selectLabel, .MuiTablePagination-select, .MuiTablePagination-selectIcon': { display: 'none', }, - marginBottom: 20, + marginBottom: 20, }} loading={cachedLoaded === false} @@ -2404,7 +2407,7 @@ const CacheView = memo((props) => { setCursors({ 0: "", - }) + }) }} @@ -2441,20 +2444,20 @@ const CacheView = memo((props) => { }} >
{page * pageSize + 1} - {Math.min((page + 1) * pageSize, totalAmount)} of {totalAmount} - + { var disabled = false if (item?.type === "page") { if (cursors[item.page-1] === undefined) { - disabled = true + disabled = true } } if (item?.type === "previous") { @@ -2470,7 +2473,7 @@ const CacheView = memo((props) => { } if (cachedLoaded === false) { - disabled = true + disabled = true } return ( @@ -2530,10 +2533,10 @@ const CacheView = memo((props) => { variant={"outlined"} color="secondary" > - Delete {selectedRows.length} Key{ selectedRows.length > 1 ? "s" : "" }