diff --git a/backend/go-app/go.mod b/backend/go-app/go.mod
index 664123ab..02239000 100644
--- a/backend/go-app/go.mod
+++ b/backend/go-app/go.mod
@@ -5,6 +5,7 @@ go 1.24.0
toolchain go1.24.3
//replace github.com/shuffle/shuffle-shared => ../../../shuffle-shared
+
//replace github.com/frikky/schemaless => ../../../schemaless
//replace github.com/frikky/kin-openapi => ../../../../git/kin-openapi
@@ -25,8 +26,8 @@ require (
github.com/gorilla/mux v1.8.1
github.com/h2non/filetype v1.1.3
github.com/satori/go.uuid v1.2.0
- github.com/shuffle/shuffle-shared v0.9.40
- github.com/shuffle/singul v0.0.19
+ github.com/shuffle/shuffle-shared v0.9.51
+ github.com/shuffle/singul v0.0.20
golang.org/x/crypto v0.40.0
google.golang.org/api v0.236.0
google.golang.org/grpc v1.72.2
@@ -74,7 +75,7 @@ require (
github.com/envoyproxy/go-control-plane/envoy v1.32.4 // indirect
github.com/envoyproxy/protoc-gen-validate v1.2.1 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
- github.com/frikky/schemaless v0.0.23 // indirect
+ github.com/frikky/schemaless v0.0.24 // indirect
github.com/fxamacker/cbor/v2 v2.7.0 // indirect
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
github.com/go-jose/go-jose/v4 v4.0.5 // indirect
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.icon
}
-
{automation.name}
- {automation?.disabled !== true ?
+ {automation?.disabled !== true ?