fix: delete API when data has no category
This commit is contained in:
@@ -38,8 +38,8 @@ import {
|
|||||||
Avatar,
|
Avatar,
|
||||||
} from "@mui/material";
|
} from "@mui/material";
|
||||||
|
|
||||||
import {
|
import {
|
||||||
DataGrid,
|
DataGrid,
|
||||||
GridColDef,
|
GridColDef,
|
||||||
} from '@mui/x-data-grid';
|
} from '@mui/x-data-grid';
|
||||||
|
|
||||||
@@ -70,15 +70,15 @@ import {
|
|||||||
VisibilityOff as VisibilityOffIcon,
|
VisibilityOff as VisibilityOffIcon,
|
||||||
Clear as ClearIcon,
|
Clear as ClearIcon,
|
||||||
Add as AddIcon,
|
Add as AddIcon,
|
||||||
Rocket as RocketIcon,
|
Rocket as RocketIcon,
|
||||||
Webhook as WebhookIcon,
|
Webhook as WebhookIcon,
|
||||||
Air as AirIcon,
|
Air as AirIcon,
|
||||||
RocketLaunch as RocketLaunchIcon,
|
RocketLaunch as RocketLaunchIcon,
|
||||||
Send as SendIcon,
|
Send as SendIcon,
|
||||||
SmartToy as SmartToyIcon,
|
SmartToy as SmartToyIcon,
|
||||||
Settings as SettingsIcon,
|
Settings as SettingsIcon,
|
||||||
FilterAlt as FilterAltIcon,
|
FilterAlt as FilterAltIcon,
|
||||||
CompareArrows as CompareArrowsIcon,
|
CompareArrows as CompareArrowsIcon,
|
||||||
} from "@mui/icons-material";
|
} from "@mui/icons-material";
|
||||||
import { Context } from "../context/ContextApi.jsx";
|
import { Context } from "../context/ContextApi.jsx";
|
||||||
|
|
||||||
@@ -104,7 +104,7 @@ const useStyles = makeStyles({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
||||||
//const CacheView = (props) => {
|
//const CacheView = (props) => {
|
||||||
const CacheView = memo((props) => {
|
const CacheView = memo((props) => {
|
||||||
@@ -130,7 +130,7 @@ const CacheView = memo((props) => {
|
|||||||
const [cursors, setCursors] = useState({
|
const [cursors, setCursors] = useState({
|
||||||
0: "",
|
0: "",
|
||||||
})
|
})
|
||||||
const [_, setUpdate] = useState(Math.random())
|
const [_, setUpdate] = useState(Math.random())
|
||||||
const [selectedRows, setSelectedRows] = useState([]);
|
const [selectedRows, setSelectedRows] = useState([]);
|
||||||
// Direct category migration from ../components/Files.jsx
|
// Direct category migration from ../components/Files.jsx
|
||||||
const [selectAllChecked, setSelectAllChecked] = React.useState(false)
|
const [selectAllChecked, setSelectAllChecked] = React.useState(false)
|
||||||
@@ -170,7 +170,7 @@ const CacheView = memo((props) => {
|
|||||||
"key": "workflow_id",
|
"key": "workflow_id",
|
||||||
"value": "",
|
"value": "",
|
||||||
}],
|
}],
|
||||||
"icon": <AirIcon />,
|
"icon": <AirIcon />,
|
||||||
"enabled": false,
|
"enabled": false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -203,7 +203,7 @@ const CacheView = memo((props) => {
|
|||||||
"key": "webhook_url",
|
"key": "webhook_url",
|
||||||
"value": "",
|
"value": "",
|
||||||
}],
|
}],
|
||||||
"icon": <WebhookIcon />,
|
"icon": <WebhookIcon />,
|
||||||
"enabled": false,
|
"enabled": false,
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -237,7 +237,7 @@ const CacheView = memo((props) => {
|
|||||||
|
|
||||||
const [categoryAutomations, setCategoryAutomations] = useState(defaultAutomation)
|
const [categoryAutomations, setCategoryAutomations] = useState(defaultAutomation)
|
||||||
const [categoryConfig, setCategoryConfig] = useState(undefined)
|
const [categoryConfig, setCategoryConfig] = useState(undefined)
|
||||||
|
|
||||||
const { themeMode, brandColor } = useContext(Context);
|
const { themeMode, brandColor } = useContext(Context);
|
||||||
const theme = getTheme(themeMode, brandColor);
|
const theme = getTheme(themeMode, brandColor);
|
||||||
const classes = useStyles();
|
const classes = useStyles();
|
||||||
@@ -312,9 +312,9 @@ const CacheView = memo((props) => {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
getWorkflows()
|
getWorkflows()
|
||||||
getApps()
|
getApps()
|
||||||
|
|
||||||
var chosenCategory = selectedCategory
|
var chosenCategory = selectedCategory
|
||||||
const urlParams = new URLSearchParams(window.location.search)
|
const urlParams = new URLSearchParams(window.location.search)
|
||||||
const categoryParam = urlParams.get("category")
|
const categoryParam = urlParams.get("category")
|
||||||
if (categoryParam && categoryParam !== undefined && categoryParam !== "default" && categoryParam !== "") {
|
if (categoryParam && categoryParam !== undefined && categoryParam !== "default" && categoryParam !== "") {
|
||||||
@@ -335,7 +335,7 @@ const CacheView = memo((props) => {
|
|||||||
|
|
||||||
if (event.key === 'Escape'){ // not working for some reasons
|
if (event.key === 'Escape'){ // not working for some reasons
|
||||||
console.log('escape pressed')
|
console.log('escape pressed')
|
||||||
setRenderTextBox(false);
|
setRenderTextBox(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -359,7 +359,7 @@ const CacheView = memo((props) => {
|
|||||||
|
|
||||||
if (page !== undefined && page !== null && page >= 0) {
|
if (page !== undefined && page !== null && page >= 0) {
|
||||||
if (cursors[page-1] !== undefined && cursors[page-1] !== null && cursors[page-1] !== "") {
|
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
|
// Especially important during first load
|
||||||
if (index < 2 && (category === "default" || category === "" || category === undefined)) {
|
if (index < 2 && (category === "default" || category === "" || category === undefined)) {
|
||||||
// If it exists and isn't blank/default, load it
|
// If it exists and isn't blank/default, load it
|
||||||
const urlParams = new URLSearchParams(window.location.search);
|
const urlParams = new URLSearchParams(window.location.search);
|
||||||
const categoryParam = urlParams.get("category");
|
const categoryParam = urlParams.get("category");
|
||||||
if (categoryParam && categoryParam !== undefined && categoryParam !== "default" && categoryParam !== "") {
|
if (categoryParam && categoryParam !== undefined && categoryParam !== "default" && categoryParam !== "") {
|
||||||
@@ -414,7 +414,7 @@ const CacheView = memo((props) => {
|
|||||||
if (index === undefined || index === null) {
|
if (index === undefined || index === null) {
|
||||||
index = 0
|
index = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
listOrgCache(orgId, categoryParam, index+1, amount, page)
|
listOrgCache(orgId, categoryParam, index+1, amount, page)
|
||||||
} else {
|
} else {
|
||||||
setSelectedCategory("default");
|
setSelectedCategory("default");
|
||||||
@@ -478,10 +478,10 @@ const CacheView = memo((props) => {
|
|||||||
} else {
|
} else {
|
||||||
setCategoryAutomations(defaultAutomation)
|
setCategoryAutomations(defaultAutomation)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
//toast.warn("Failed to load keys. Please try again or contact support@shuffler if this persists.")
|
//toast.warn("Failed to load keys. Please try again or contact support@shuffler if this persists.")
|
||||||
|
|
||||||
if (category !== undefined && category !== null && category !== "" && category !== "default") {
|
if (category !== undefined && category !== null && category !== "" && category !== "default") {
|
||||||
toast.info(`No keys to load in category ${category}`)
|
toast.info(`No keys to load in category ${category}`)
|
||||||
setSelectedCategory(category)
|
setSelectedCategory(category)
|
||||||
@@ -495,6 +495,9 @@ const CacheView = memo((props) => {
|
|||||||
|
|
||||||
|
|
||||||
const deleteEntry = (orgId, key, itemCategory, refreshList) => {
|
const deleteEntry = (orgId, key, itemCategory, refreshList) => {
|
||||||
|
|
||||||
|
console.log(`Deleting entry for orgId: ${orgId}, key: ${key}, category: ${itemCategory}`);
|
||||||
|
|
||||||
const method = "POST"
|
const method = "POST"
|
||||||
const url = `${globalUrl}/api/v1/orgs/${orgId}/delete_cache`
|
const url = `${globalUrl}/api/v1/orgs/${orgId}/delete_cache`
|
||||||
var parsed = {
|
var parsed = {
|
||||||
@@ -534,8 +537,8 @@ const CacheView = memo((props) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const editOrgCache = (orgId) => {
|
const editOrgCache = (orgId) => {
|
||||||
var entry = {
|
var entry = {
|
||||||
key: dataValue.key,
|
key: dataValue.key,
|
||||||
value: value,
|
value: value,
|
||||||
category: selectedCategory,
|
category: selectedCategory,
|
||||||
}
|
}
|
||||||
@@ -587,10 +590,10 @@ const CacheView = memo((props) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const addOrgCache = (orgId) => {
|
const addOrgCache = (orgId) => {
|
||||||
const cache = {
|
const cache = {
|
||||||
key: key,
|
key: key,
|
||||||
value: value,
|
value: value,
|
||||||
category: selectedCategory,
|
category: selectedCategory,
|
||||||
}
|
}
|
||||||
|
|
||||||
setCacheInput([cache]);
|
setCacheInput([cache]);
|
||||||
@@ -709,7 +712,7 @@ const CacheView = memo((props) => {
|
|||||||
fullWidth={true}
|
fullWidth={true}
|
||||||
autoComplete="Key"
|
autoComplete="Key"
|
||||||
placeholder="abc"
|
placeholder="abc"
|
||||||
id="keyfield"
|
id="keyfield"
|
||||||
margin="normal"
|
margin="normal"
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
value={editCache ? dataValue.key : key}
|
value={editCache ? dataValue.key : key}
|
||||||
@@ -728,7 +731,7 @@ const CacheView = memo((props) => {
|
|||||||
autoFixJson(value)
|
autoFixJson(value)
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<AutoFixNormalIcon />
|
<AutoFixNormalIcon />
|
||||||
</IconButton>
|
</IconButton>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</div>
|
</div>
|
||||||
@@ -758,7 +761,7 @@ const CacheView = memo((props) => {
|
|||||||
/>
|
/>
|
||||||
|
|
||||||
|
|
||||||
{editCache ?
|
{editCache ?
|
||||||
<div>
|
<div>
|
||||||
<Typography variant="body2" color="textSecondary" style={{ marginTop: 10, }}>
|
<Typography variant="body2" color="textSecondary" style={{ marginTop: 10, }}>
|
||||||
Created: {timestamp(dataValue?.created)}
|
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)
|
editFileConfig(id, [...new Set(selectedSubOrg)], selectedCategory)
|
||||||
}
|
}
|
||||||
@@ -855,8 +858,8 @@ const CacheView = memo((props) => {
|
|||||||
category: category === undefined || category === "" || category === "default" ? "" : category,
|
category: category === undefined || category === "" || category === "default" ? "" : category,
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log("data: ", data);
|
console.log("data: ", data);
|
||||||
|
|
||||||
const url = `${globalUrl}/api/v1/orgs/${orgId}/cache/config`;
|
const url = `${globalUrl}/api/v1/orgs/${orgId}/cache/config`;
|
||||||
|
|
||||||
fetch(url, {
|
fetch(url, {
|
||||||
@@ -989,7 +992,7 @@ const CacheView = memo((props) => {
|
|||||||
const originalIcon = automation.icon
|
const originalIcon = automation.icon
|
||||||
if (typeof automation.icon !== "string") {
|
if (typeof automation.icon !== "string") {
|
||||||
automation.icon = "";
|
automation.icon = "";
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
const url = `${globalUrl}/api/v2/datastore/automate`
|
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) {
|
if (settings !== undefined && settings !== null && Object.keys(settings).length > 0) {
|
||||||
data["settings"] = settings
|
data["settings"] = settings
|
||||||
}
|
}
|
||||||
|
|
||||||
fetch(url, {
|
fetch(url, {
|
||||||
@@ -1049,7 +1052,7 @@ const CacheView = memo((props) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const runSave = () => {
|
const runSave = () => {
|
||||||
setUpdated(false)
|
setUpdated(false)
|
||||||
|
|
||||||
const newAutomations = [...categoryAutomations]
|
const newAutomations = [...categoryAutomations]
|
||||||
@@ -1062,11 +1065,11 @@ const CacheView = memo((props) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div key={index} style={{
|
<div key={index} style={{
|
||||||
marginBottom: 10,
|
marginBottom: 10,
|
||||||
backgroundColor: hovered ? theme.palette.hoverColor : "transparent",
|
backgroundColor: hovered ? theme.palette.hoverColor : "transparent",
|
||||||
paddingTop: 5,
|
paddingTop: 5,
|
||||||
}}
|
}}
|
||||||
onMouseEnter={() => setHovered(true)}
|
onMouseEnter={() => setHovered(true)}
|
||||||
onMouseLeave={() => setHovered(false)}
|
onMouseLeave={() => setHovered(false)}
|
||||||
>
|
>
|
||||||
@@ -1085,15 +1088,15 @@ const CacheView = memo((props) => {
|
|||||||
setUpdatedAutomation(updatedAutomation)
|
setUpdatedAutomation(updatedAutomation)
|
||||||
setUpdated(true)
|
setUpdated(true)
|
||||||
|
|
||||||
setUpdate(Math.random())
|
setUpdate(Math.random())
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
<div
|
<div
|
||||||
style={{
|
style={{
|
||||||
display: "flex",
|
display: "flex",
|
||||||
cursor: !automation?.disabled ? "pointer" : "not-allowed",
|
cursor: !automation?.disabled ? "pointer" : "not-allowed",
|
||||||
width: "100%",
|
width: "100%",
|
||||||
}}
|
}}
|
||||||
disabled={automation?.disabled === true}
|
disabled={automation?.disabled === true}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
@@ -1109,30 +1112,30 @@ const CacheView = memo((props) => {
|
|||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{typeof automation?.icon === "string" && automation?.icon?.length > 0 ?
|
{typeof automation?.icon === "string" && automation?.icon?.length > 0 ?
|
||||||
<img src={automation.icon} alt={automation.name} style={{ width: 20, height: 20, }} />
|
<img src={automation.icon} alt={automation.name} style={{ width: 20, height: 20, }} />
|
||||||
:
|
:
|
||||||
automation.icon
|
automation.icon
|
||||||
}
|
}
|
||||||
|
|
||||||
<Typography variant="body1" style={{
|
<Typography variant="body1" style={{
|
||||||
color: automation?.disabled === true ? theme.palette.text.secondary : theme.palette.text.primary,
|
color: automation?.disabled === true ? theme.palette.text.secondary : theme.palette.text.primary,
|
||||||
marginLeft: 10,
|
marginLeft: 10,
|
||||||
}}>
|
}}>
|
||||||
{automation.name}
|
{automation.name}
|
||||||
</Typography>
|
</Typography>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{automation?.disabled !== true ?
|
{automation?.disabled !== true ?
|
||||||
<Button
|
<Button
|
||||||
style={{
|
style={{
|
||||||
borderRadius: theme.palette.borderRadius,
|
borderRadius: theme.palette.borderRadius,
|
||||||
textTransform: 'none',
|
textTransform: 'none',
|
||||||
color: updated ? theme.palette.primary.main : theme.palette.text.secondary,
|
color: updated ? theme.palette.primary.main : theme.palette.text.secondary,
|
||||||
marginTop: -6,
|
marginTop: -6,
|
||||||
|
|
||||||
position: "absolute",
|
position: "absolute",
|
||||||
right: 25,
|
right: 25,
|
||||||
}}
|
}}
|
||||||
disabled={!updated}
|
disabled={!updated}
|
||||||
onClick={(e) => {
|
onClick={(e) => {
|
||||||
@@ -1187,7 +1190,7 @@ const CacheView = memo((props) => {
|
|||||||
if (newValue.length > 0) {
|
if (newValue.length > 0) {
|
||||||
updatedAutomation.enabled = true
|
updatedAutomation.enabled = true
|
||||||
} else {
|
} else {
|
||||||
updatedAutomation.enabled = false
|
updatedAutomation.enabled = false
|
||||||
}
|
}
|
||||||
|
|
||||||
updatedAutomation.options[optionIndex] = option
|
updatedAutomation.options[optionIndex] = option
|
||||||
@@ -1241,8 +1244,8 @@ const CacheView = memo((props) => {
|
|||||||
value={data}
|
value={data}
|
||||||
>
|
>
|
||||||
<Typography style={{
|
<Typography style={{
|
||||||
display: "flex",
|
display: "flex",
|
||||||
marginTop: 5,
|
marginTop: 5,
|
||||||
color: keyfound ? red : theme.palette.text.primary,
|
color: keyfound ? red : theme.palette.text.primary,
|
||||||
}}>
|
}}>
|
||||||
<div style={{marginRight: 10, }}>
|
<div style={{marginRight: 10, }}>
|
||||||
@@ -1296,7 +1299,7 @@ const CacheView = memo((props) => {
|
|||||||
/>
|
/>
|
||||||
)
|
)
|
||||||
} else if (option?.key === "workflow_id") {
|
} else if (option?.key === "workflow_id") {
|
||||||
return (
|
return (
|
||||||
<Autocomplete
|
<Autocomplete
|
||||||
key={optionIndex}
|
key={optionIndex}
|
||||||
|
|
||||||
@@ -1323,7 +1326,7 @@ const CacheView = memo((props) => {
|
|||||||
if (newValue.length > 0) {
|
if (newValue.length > 0) {
|
||||||
updatedAutomation.enabled = true
|
updatedAutomation.enabled = true
|
||||||
} else {
|
} else {
|
||||||
updatedAutomation.enabled = false
|
updatedAutomation.enabled = false
|
||||||
}
|
}
|
||||||
|
|
||||||
updatedAutomation.options[optionIndex] = option
|
updatedAutomation.options[optionIndex] = option
|
||||||
@@ -1435,8 +1438,8 @@ const CacheView = memo((props) => {
|
|||||||
fullWidth
|
fullWidth
|
||||||
style={{
|
style={{
|
||||||
...theme.palette.textFieldStyle,
|
...theme.palette.textFieldStyle,
|
||||||
marginBottom: 20,
|
marginBottom: 20,
|
||||||
marginTop: 10,
|
marginTop: 10,
|
||||||
}}
|
}}
|
||||||
InputProps={{
|
InputProps={{
|
||||||
style: {
|
style: {
|
||||||
@@ -1448,9 +1451,9 @@ const CacheView = memo((props) => {
|
|||||||
defaultValue={option.value}
|
defaultValue={option.value}
|
||||||
onBlur={(e) => {
|
onBlur={(e) => {
|
||||||
if (e.target.value === "") {
|
if (e.target.value === "") {
|
||||||
updatedAutomation.enabled = false
|
updatedAutomation.enabled = false
|
||||||
} else {
|
} else {
|
||||||
updatedAutomation.enabled = true
|
updatedAutomation.enabled = true
|
||||||
}
|
}
|
||||||
|
|
||||||
updatedAutomation.options[optionIndex].value = e.target.value;
|
updatedAutomation.options[optionIndex].value = e.target.value;
|
||||||
@@ -1468,7 +1471,7 @@ const CacheView = memo((props) => {
|
|||||||
|
|
||||||
const setCategorySettingsField = (field, value) => {
|
const setCategorySettingsField = (field, value) => {
|
||||||
// Check if categoryConfig.settings is set or not. Otherwise set it.
|
// Check if categoryConfig.settings is set or not. Otherwise set it.
|
||||||
var categoryConfig2 = categoryConfig
|
var categoryConfig2 = categoryConfig
|
||||||
if (categoryConfig === undefined || categoryConfig === null) {
|
if (categoryConfig === undefined || categoryConfig === null) {
|
||||||
categoryConfig2 = {}
|
categoryConfig2 = {}
|
||||||
}
|
}
|
||||||
@@ -1481,16 +1484,16 @@ const CacheView = memo((props) => {
|
|||||||
setCategoryConfig(categoryConfig2)
|
setCategoryConfig(categoryConfig2)
|
||||||
|
|
||||||
saveAutomation(
|
saveAutomation(
|
||||||
categoryAutomations,
|
categoryAutomations,
|
||||||
categoryConfig2.settings,
|
categoryConfig2.settings,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
const columns: GridColDef<(typeof rows)[number]>[] = [
|
const columns: GridColDef<(typeof rows)[number]>[] = [
|
||||||
{
|
{
|
||||||
field: 'key',
|
field: 'key',
|
||||||
headerName: 'Key',
|
headerName: 'Key',
|
||||||
width: 200,
|
width: 200,
|
||||||
filterable: true,
|
filterable: true,
|
||||||
sortable: true,
|
sortable: true,
|
||||||
},
|
},
|
||||||
@@ -1502,10 +1505,10 @@ const CacheView = memo((props) => {
|
|||||||
renderCell: (props) => {
|
renderCell: (props) => {
|
||||||
const data = props.row
|
const data = props.row
|
||||||
|
|
||||||
if (data?.category?.toLowerCase() === "protected") {
|
if (data?.category?.toLowerCase() === "protected") {
|
||||||
return (
|
return (
|
||||||
<Typography
|
<Typography
|
||||||
variant="body2"
|
variant="body2"
|
||||||
type="password"
|
type="password"
|
||||||
style={{maxHeight: 200, overflow: "hidden", }}
|
style={{maxHeight: 200, overflow: "hidden", }}
|
||||||
>
|
>
|
||||||
@@ -1532,7 +1535,7 @@ const CacheView = memo((props) => {
|
|||||||
backgroundColor: theme.palette.platformColor,
|
backgroundColor: theme.palette.platformColor,
|
||||||
border: theme.palette.defaultBorder,
|
border: theme.palette.defaultBorder,
|
||||||
padding: 5,
|
padding: 5,
|
||||||
minWidth: 500,
|
minWidth: 500,
|
||||||
maxHeight: 500,
|
maxHeight: 500,
|
||||||
overflowY: "auto",
|
overflowY: "auto",
|
||||||
}}
|
}}
|
||||||
@@ -1605,16 +1608,16 @@ const CacheView = memo((props) => {
|
|||||||
style={{
|
style={{
|
||||||
color: "white",
|
color: "white",
|
||||||
backgroundColor: iconDetails?.iconBackgroundColor || theme.palette.primary.secondary,
|
backgroundColor: iconDetails?.iconBackgroundColor || theme.palette.primary.secondary,
|
||||||
marginLeft: 15,
|
marginLeft: 15,
|
||||||
height: 30,
|
height: 30,
|
||||||
width: 30,
|
width: 30,
|
||||||
cursor: data.category !== "" && data.category !== "default" ? "pointer" : "default",
|
cursor: data.category !== "" && data.category !== "default" ? "pointer" : "default",
|
||||||
}}
|
}}
|
||||||
variant="rounded"
|
variant="rounded"
|
||||||
>
|
>
|
||||||
{iconDetails?.originalIcon ?
|
{iconDetails?.originalIcon ?
|
||||||
iconDetails?.originalIcon
|
iconDetails?.originalIcon
|
||||||
:
|
:
|
||||||
avatarLetter
|
avatarLetter
|
||||||
}
|
}
|
||||||
</Avatar>
|
</Avatar>
|
||||||
@@ -1633,7 +1636,7 @@ const CacheView = memo((props) => {
|
|||||||
renderCell: (props) => {
|
renderCell: (props) => {
|
||||||
const data = props.row
|
const data = props.row
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<span style={{ display: "flex" }}>
|
<span style={{ display: "flex" }}>
|
||||||
{data?.workflow_id === "" || data?.workflow_id === null || data?.workflow_id === undefined || data?.workflow_id?.length !== 36 ?
|
{data?.workflow_id === "" || data?.workflow_id === null || data?.workflow_id === undefined || data?.workflow_id?.length !== 36 ?
|
||||||
<IconButton
|
<IconButton
|
||||||
@@ -1643,7 +1646,7 @@ const CacheView = memo((props) => {
|
|||||||
<OpenInNewIcon
|
<OpenInNewIcon
|
||||||
style={{
|
style={{
|
||||||
color:
|
color:
|
||||||
data.workflow_id?.length === 36
|
data.workflow_id?.length === 36
|
||||||
? "#FF8444"
|
? "#FF8444"
|
||||||
: "grey",
|
: "grey",
|
||||||
}}
|
}}
|
||||||
@@ -1697,7 +1700,7 @@ const CacheView = memo((props) => {
|
|||||||
onClick={(e) => {
|
onClick={(e) => {
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
e.stopPropagation()
|
e.stopPropagation()
|
||||||
// Try to make the value JSON indented
|
// Try to make the value JSON indented
|
||||||
const valid = validateJson(data.value)
|
const valid = validateJson(data.value)
|
||||||
var newvalue = data.value
|
var newvalue = data.value
|
||||||
if (valid.valid) {
|
if (valid.valid) {
|
||||||
@@ -1867,23 +1870,23 @@ const CacheView = memo((props) => {
|
|||||||
const isAutomating = categoryAutomations?.find((automation) => automation.enabled) !== undefined
|
const isAutomating = categoryAutomations?.find((automation) => automation.enabled) !== undefined
|
||||||
return (
|
return (
|
||||||
<div style={{
|
<div style={{
|
||||||
minHeight: 2000,
|
minHeight: 2000,
|
||||||
height: isSelectedDataStore?"100%":null,
|
height: isSelectedDataStore?"100%":null,
|
||||||
|
|
||||||
paddingBottom: isSelectedDataStore?null:250,
|
paddingBottom: isSelectedDataStore?null:250,
|
||||||
boxSizing: "border-box",
|
boxSizing: "border-box",
|
||||||
width: isSelectedDataStore? "100%" :null,
|
width: isSelectedDataStore? "100%" :null,
|
||||||
transition: "width 0.3s ease",
|
transition: "width 0.3s ease",
|
||||||
padding:isSelectedDataStore?"27px 10px 27px 27px":null,
|
padding:isSelectedDataStore?"27px 10px 27px 27px":null,
|
||||||
color: isSelectedDataStore?'#ffffff':null,
|
color: isSelectedDataStore?'#ffffff':null,
|
||||||
backgroundColor: isSelectedDataStore? theme.palette.platformColor :null,
|
backgroundColor: isSelectedDataStore? theme.palette.platformColor :null,
|
||||||
borderTopRightRadius: isSelectedDataStore?'8px':null,
|
borderTopRightRadius: isSelectedDataStore?'8px':null,
|
||||||
borderBottomRightRadius: isSelectedDataStore?'8px':null,
|
borderBottomRightRadius: isSelectedDataStore?'8px':null,
|
||||||
borderLeft: theme.palette.defaultBorder
|
borderLeft: theme.palette.defaultBorder
|
||||||
}}>
|
}}>
|
||||||
{modalView}
|
{modalView}
|
||||||
|
|
||||||
<CollectIngestModal
|
<CollectIngestModal
|
||||||
globalUrl={globalUrl}
|
globalUrl={globalUrl}
|
||||||
open={showCollectIngestMenu}
|
open={showCollectIngestMenu}
|
||||||
setOpen={setShowCollectIngestMenu}
|
setOpen={setShowCollectIngestMenu}
|
||||||
@@ -1906,14 +1909,14 @@ const CacheView = memo((props) => {
|
|||||||
Shuffle Datastore
|
Shuffle Datastore
|
||||||
</Typography>
|
</Typography>
|
||||||
|
|
||||||
{userdata?.support === true ?
|
{userdata?.support === true ?
|
||||||
<Tooltip title={"Collect (support only)"} style={{}} aria-label={""}>
|
<Tooltip title={"Collect (support only)"} style={{}} aria-label={""}>
|
||||||
<span style={{position: "absolute", right: 0, }}>
|
<span style={{position: "absolute", right: 0, }}>
|
||||||
<Button
|
<Button
|
||||||
style={{
|
style={{
|
||||||
whiteSpace: "nowrap",
|
whiteSpace: "nowrap",
|
||||||
height: 35,
|
height: 35,
|
||||||
textTransform: 'none',
|
textTransform: 'none',
|
||||||
|
|
||||||
//border: isAutomating ? `1px solid ${theme.palette.primary.main}` : null,
|
//border: isAutomating ? `1px solid ${theme.palette.primary.main}` : null,
|
||||||
}}
|
}}
|
||||||
@@ -1924,10 +1927,10 @@ const CacheView = memo((props) => {
|
|||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<FilterAltIcon style={{marginRight: 10, }}/>
|
<FilterAltIcon style={{marginRight: 10, }}/>
|
||||||
Collect (beta)
|
Collect (beta)
|
||||||
</Button>
|
</Button>
|
||||||
</span>
|
</span>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
: null}
|
: null}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -1957,14 +1960,14 @@ const CacheView = memo((props) => {
|
|||||||
style={{textTransform: isSelectedDataStore ? 'capitalize':null, width : isSelectedDataStore ? 120 : null, height:isSelectedDataStore?40:null}}
|
style={{textTransform: isSelectedDataStore ? 'capitalize':null, width : isSelectedDataStore ? 120 : null, height:isSelectedDataStore?40:null}}
|
||||||
variant="contained"
|
variant="contained"
|
||||||
color="primary"
|
color="primary"
|
||||||
onClick={() =>{
|
onClick={() =>{
|
||||||
setEditCache(false)
|
setEditCache(false)
|
||||||
setModalOpen(true)
|
setModalOpen(true)
|
||||||
|
|
||||||
setValue("")
|
setValue("")
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
Add Key
|
Add Key
|
||||||
</Button>
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
style={{ marginRight: 15, width:isSelectedDataStore ? 81:null, height:isSelectedDataStore?40:null, }}
|
style={{ marginRight: 15, width:isSelectedDataStore ? 81:null, height:isSelectedDataStore?40:null, }}
|
||||||
@@ -2038,9 +2041,9 @@ const CacheView = memo((props) => {
|
|||||||
<MenuItem
|
<MenuItem
|
||||||
key={index}
|
key={index}
|
||||||
value={data}
|
value={data}
|
||||||
style={{
|
style={{
|
||||||
color: theme.palette.textFieldStyle.color,
|
color: theme.palette.textFieldStyle.color,
|
||||||
display: "flex",
|
display: "flex",
|
||||||
borderBottom: theme.palette.defaultBorder,
|
borderBottom: theme.palette.defaultBorder,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
@@ -2061,17 +2064,17 @@ const CacheView = memo((props) => {
|
|||||||
) : null}
|
) : null}
|
||||||
|
|
||||||
<div style={{display: "inline-flex", position:"relative", top: 8}}>
|
<div style={{display: "inline-flex", position:"relative", top: 8}}>
|
||||||
{renderTextBox ?
|
{renderTextBox ?
|
||||||
<Tooltip title={"Close"} style={{}} aria-label={""}>
|
<Tooltip title={"Close"} style={{}} aria-label={""}>
|
||||||
<Button
|
<Button
|
||||||
style={{
|
style={{
|
||||||
height: 35,
|
height: 35,
|
||||||
borderRadius: 4,
|
borderRadius: 4,
|
||||||
textTransform: 'none',
|
textTransform: 'none',
|
||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
borderRadius: "0px 5px 5px 0px",
|
borderRadius: "0px 5px 5px 0px",
|
||||||
|
|
||||||
marginRight: 10,
|
marginRight: 10,
|
||||||
}}
|
}}
|
||||||
color="secondary"
|
color="secondary"
|
||||||
variant="contained"
|
variant="contained"
|
||||||
@@ -2086,12 +2089,12 @@ const CacheView = memo((props) => {
|
|||||||
:
|
:
|
||||||
<Tooltip title={"Add or find category"} style={{}} aria-label={""}>
|
<Tooltip title={"Add or find category"} style={{}} aria-label={""}>
|
||||||
<Button
|
<Button
|
||||||
style={{
|
style={{
|
||||||
whiteSpace: "nowrap",
|
whiteSpace: "nowrap",
|
||||||
width: datastoreCategories !== undefined && datastoreCategories !== null && datastoreCategories.length > 1 ? 50 : 169,
|
width: datastoreCategories !== undefined && datastoreCategories !== null && datastoreCategories.length > 1 ? 50 : 169,
|
||||||
height: 35,
|
height: 35,
|
||||||
textTransform: 'none',
|
textTransform: 'none',
|
||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
|
|
||||||
borderRadius: "0px 5px 5px 0px",
|
borderRadius: "0px 5px 5px 0px",
|
||||||
}}
|
}}
|
||||||
@@ -2104,7 +2107,7 @@ const CacheView = memo((props) => {
|
|||||||
<AddIcon/>
|
<AddIcon/>
|
||||||
{datastoreCategories !== undefined && datastoreCategories !== null && datastoreCategories.length > 1 ? "" : "Category"}
|
{datastoreCategories !== undefined && datastoreCategories !== null && datastoreCategories.length > 1 ? "" : "Category"}
|
||||||
</Button>
|
</Button>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
}
|
}
|
||||||
|
|
||||||
{renderTextBox && <TextField
|
{renderTextBox && <TextField
|
||||||
@@ -2115,11 +2118,11 @@ const CacheView = memo((props) => {
|
|||||||
const foundValue = event.target.value.trim();
|
const foundValue = event.target.value.trim();
|
||||||
if(event.key === 'Enter' && foundValue?.length > 0){
|
if(event.key === 'Enter' && foundValue?.length > 0){
|
||||||
setUpdateToThisCategory(event.target.value)
|
setUpdateToThisCategory(event.target.value)
|
||||||
|
|
||||||
listOrgCache(orgId, event.target.value, 0, pageSize, 0)
|
listOrgCache(orgId, event.target.value, 0, pageSize, 0)
|
||||||
setPage(0)
|
setPage(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
style={{
|
style={{
|
||||||
height: 35,
|
height: 35,
|
||||||
@@ -2151,10 +2154,10 @@ const CacheView = memo((props) => {
|
|||||||
<Tooltip title={"Automate current Category"} style={{}} aria-label={""}>
|
<Tooltip title={"Automate current Category"} style={{}} aria-label={""}>
|
||||||
<span>
|
<span>
|
||||||
<Button
|
<Button
|
||||||
style={{
|
style={{
|
||||||
whiteSpace: "nowrap",
|
whiteSpace: "nowrap",
|
||||||
height: 35,
|
height: 35,
|
||||||
textTransform: 'none',
|
textTransform: 'none',
|
||||||
|
|
||||||
border: isAutomating ? `1px solid ${theme.palette.primary.main}` : null,
|
border: isAutomating ? `1px solid ${theme.palette.primary.main}` : null,
|
||||||
}}
|
}}
|
||||||
@@ -2162,27 +2165,27 @@ const CacheView = memo((props) => {
|
|||||||
color="secondary"
|
color="secondary"
|
||||||
disabled={selectedCategory === undefined || selectedCategory === "" || selectedCategory === "default"}
|
disabled={selectedCategory === undefined || selectedCategory === "" || selectedCategory === "default"}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
// Set up:
|
// Set up:
|
||||||
// Workflow triggers for when a key is added/edited/deleted.
|
// Workflow triggers for when a key is added/edited/deleted.
|
||||||
// Automatic ingest mechanisms:
|
// Automatic ingest mechanisms:
|
||||||
// - IOCs (monitor URLs)
|
// - IOCs (monitor URLs)
|
||||||
// - Singul ingest
|
// - Singul ingest
|
||||||
setShowAutomationMenu(true)
|
setShowAutomationMenu(true)
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{isAutomating ? <RocketLaunchIcon style={{color: theme.palette.primary.main, marginRight: 10 }}/> : <RocketIcon style={{marginRight: 10, color: theme.palette.secondary.main, }} />}
|
{isAutomating ? <RocketLaunchIcon style={{color: theme.palette.primary.main, marginRight: 10 }}/> : <RocketIcon style={{marginRight: 10, color: theme.palette.secondary.main, }} />}
|
||||||
Automate (beta)
|
Automate (beta)
|
||||||
</Button>
|
</Button>
|
||||||
</span>
|
</span>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
|
|
||||||
<Tooltip title={"Other category settings"} style={{}} aria-label={""}>
|
<Tooltip title={"Other category settings"} style={{}} aria-label={""}>
|
||||||
<Button
|
<Button
|
||||||
style={{
|
style={{
|
||||||
whiteSpace: "nowrap",
|
whiteSpace: "nowrap",
|
||||||
height: 35,
|
height: 35,
|
||||||
textTransform: 'none',
|
textTransform: 'none',
|
||||||
marginLeft: 3,
|
marginLeft: 3,
|
||||||
}}
|
}}
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
color="secondary"
|
color="secondary"
|
||||||
@@ -2193,10 +2196,10 @@ const CacheView = memo((props) => {
|
|||||||
>
|
>
|
||||||
<SettingsIcon style={{color: theme.palette.secondary.main, }} />
|
<SettingsIcon style={{color: theme.palette.secondary.main, }} />
|
||||||
</Button>
|
</Button>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</ButtonGroup>
|
</ButtonGroup>
|
||||||
|
|
||||||
{showAutomationMenu || showSettingsMenu ?
|
{showAutomationMenu || showSettingsMenu ?
|
||||||
<Dialog
|
<Dialog
|
||||||
open={showAutomationMenu || showSettingsMenu}
|
open={showAutomationMenu || showSettingsMenu}
|
||||||
onClose={() => {
|
onClose={() => {
|
||||||
@@ -2227,7 +2230,7 @@ const CacheView = memo((props) => {
|
|||||||
<DialogTitle>
|
<DialogTitle>
|
||||||
</DialogTitle>
|
</DialogTitle>
|
||||||
<DialogContent style={{ paddingLeft: "30px", paddingRight: '30px', backgroundColor: theme.palette.DialogStyle.backgroundColor, }}>
|
<DialogContent style={{ paddingLeft: "30px", paddingRight: '30px', backgroundColor: theme.palette.DialogStyle.backgroundColor, }}>
|
||||||
{showSettingsMenu === true ?
|
{showSettingsMenu === true ?
|
||||||
<div>
|
<div>
|
||||||
<Typography variant="h6" style={{ color: theme.palette.text.primary, marginBottom: 20 }}>
|
<Typography variant="h6" style={{ color: theme.palette.text.primary, marginBottom: 20 }}>
|
||||||
<SettingsIcon style={{ verticalAlign: "middle", marginRight: 10 }} />
|
<SettingsIcon style={{ verticalAlign: "middle", marginRight: 10 }} />
|
||||||
@@ -2237,7 +2240,7 @@ const CacheView = memo((props) => {
|
|||||||
<div style={{display: "flex", marginTop: 50, }}>
|
<div style={{display: "flex", marginTop: 50, }}>
|
||||||
<div style={{flex: 2, }}>
|
<div style={{flex: 2, }}>
|
||||||
<Typography variant="body1" style={{ color: theme.palette.text.primary, }}>
|
<Typography variant="body1" style={{ color: theme.palette.text.primary, }}>
|
||||||
Timeout
|
Timeout
|
||||||
</Typography>
|
</Typography>
|
||||||
<Typography variant="body2" style={{ color: theme.palette.text.secondary, marginBottom: 20 }}>
|
<Typography variant="body2" style={{ color: theme.palette.text.secondary, marginBottom: 20 }}>
|
||||||
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 <b>EDITED</b> time.
|
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 <b>EDITED</b> time.
|
||||||
@@ -2266,7 +2269,7 @@ const CacheView = memo((props) => {
|
|||||||
toast.info("Timeout must be a number. Setting to 0.")
|
toast.info("Timeout must be a number. Setting to 0.")
|
||||||
} else {
|
} else {
|
||||||
timeoutValue = parseInt(e.target.value, 10)
|
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.")
|
toast.info("Timeout must be between 60 seconds or more. Setting to 0.")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2283,7 +2286,7 @@ const CacheView = memo((props) => {
|
|||||||
<div style={{display: "flex", marginTop: 25, }}>
|
<div style={{display: "flex", marginTop: 25, }}>
|
||||||
<div style={{flex: 3, }}>
|
<div style={{flex: 3, }}>
|
||||||
<Typography variant="body1" style={{ color: theme.palette.text.primary, }}>
|
<Typography variant="body1" style={{ color: theme.palette.text.primary, }}>
|
||||||
{categoryConfig?.settings?.public === true ? "" : "NOT"} Public
|
{categoryConfig?.settings?.public === true ? "" : "NOT"} Public
|
||||||
</Typography>
|
</Typography>
|
||||||
<Typography variant="body2" style={{ color: theme.palette.text.secondary, marginBottom: 20 }}>
|
<Typography variant="body2" style={{ color: theme.palette.text.secondary, marginBottom: 20 }}>
|
||||||
This will make the url for this category public. Metadata will be cleared, except for timestamps. Types: keys,ndjson,csv,values,json,meta
|
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
|
When
|
||||||
</Typography>
|
</Typography>
|
||||||
<Typography variant="body1" style={{ color: theme.palette.text.primary, marginBottom: 20 }}>
|
<Typography variant="body1" style={{ color: theme.palette.text.primary, marginBottom: 20 }}>
|
||||||
A key is edited
|
A key is edited
|
||||||
</Typography>
|
</Typography>
|
||||||
|
|
||||||
<Typography variant="body2" style={{ color: theme.palette.text.secondary, marginTop: 100, marginBottom: 20 }}>
|
<Typography variant="body2" style={{ color: theme.palette.text.secondary, marginTop: 100, marginBottom: 20 }}>
|
||||||
@@ -2339,16 +2342,16 @@ const CacheView = memo((props) => {
|
|||||||
{categoryAutomations.map((automation, index) => {
|
{categoryAutomations.map((automation, index) => {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<AutomationOptions
|
<AutomationOptions
|
||||||
key={index}
|
key={index}
|
||||||
automation={automation}
|
automation={automation}
|
||||||
index={index}
|
index={index}
|
||||||
/>
|
/>
|
||||||
)
|
)
|
||||||
})}
|
})}
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
</DialogContent>
|
</DialogContent>
|
||||||
</Dialog>
|
</Dialog>
|
||||||
: null}
|
: null}
|
||||||
@@ -2374,17 +2377,17 @@ const CacheView = memo((props) => {
|
|||||||
setSelectedRows(newSelection);
|
setSelectedRows(newSelection);
|
||||||
}}
|
}}
|
||||||
keepNonExistentRowsSelected={false}
|
keepNonExistentRowsSelected={false}
|
||||||
getRowId={(row) => `${row?.key}_${row?.category}`}
|
getRowId={(row) => row?.category ? `${row.key}_${row.category}` : row.key}
|
||||||
|
|
||||||
autoHeight={true}
|
autoHeight={true}
|
||||||
sx={{
|
sx={{
|
||||||
marginTop: 1,
|
marginTop: 1,
|
||||||
height: listCache.length*52+500,
|
height: listCache.length*52+500,
|
||||||
width: "100%",
|
width: "100%",
|
||||||
'.MuiTablePagination-selectLabel, .MuiTablePagination-select, .MuiTablePagination-selectIcon': {
|
'.MuiTablePagination-selectLabel, .MuiTablePagination-select, .MuiTablePagination-selectIcon': {
|
||||||
display: 'none',
|
display: 'none',
|
||||||
},
|
},
|
||||||
marginBottom: 20,
|
marginBottom: 20,
|
||||||
}}
|
}}
|
||||||
|
|
||||||
loading={cachedLoaded === false}
|
loading={cachedLoaded === false}
|
||||||
@@ -2404,7 +2407,7 @@ const CacheView = memo((props) => {
|
|||||||
|
|
||||||
setCursors({
|
setCursors({
|
||||||
0: "",
|
0: "",
|
||||||
})
|
})
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
|
||||||
@@ -2441,20 +2444,20 @@ const CacheView = memo((props) => {
|
|||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<div style={{
|
<div style={{
|
||||||
width: 1200,
|
width: 1200,
|
||||||
margin: "auto",
|
margin: "auto",
|
||||||
padding: 10,
|
padding: 10,
|
||||||
backgroundColor: theme.palette.platformColor,
|
backgroundColor: theme.palette.platformColor,
|
||||||
borderRadius: 4,
|
borderRadius: 4,
|
||||||
border: "1px solid rgba(255, 255, 255, 0.5)",
|
border: "1px solid rgba(255, 255, 255, 0.5)",
|
||||||
|
|
||||||
display: "flex",
|
display: "flex",
|
||||||
textAlign: "center",
|
textAlign: "center",
|
||||||
}}>
|
}}>
|
||||||
<Typography variant="body2" style={{ color: theme.palette.text.primary, marginRight: 50, marginTop: 6, marginLeft: 350, }}>
|
<Typography variant="body2" style={{ color: theme.palette.text.primary, marginRight: 50, marginTop: 6, marginLeft: 350, }}>
|
||||||
{page * pageSize + 1} - {Math.min((page + 1) * pageSize, totalAmount)} of {totalAmount}
|
{page * pageSize + 1} - {Math.min((page + 1) * pageSize, totalAmount)} of {totalAmount}
|
||||||
</Typography>
|
</Typography>
|
||||||
|
|
||||||
<Pagination
|
<Pagination
|
||||||
count={Number.parseInt(totalAmount/pageSize)}
|
count={Number.parseInt(totalAmount/pageSize)}
|
||||||
page={page+1}
|
page={page+1}
|
||||||
@@ -2462,7 +2465,7 @@ const CacheView = memo((props) => {
|
|||||||
var disabled = false
|
var disabled = false
|
||||||
if (item?.type === "page") {
|
if (item?.type === "page") {
|
||||||
if (cursors[item.page-1] === undefined) {
|
if (cursors[item.page-1] === undefined) {
|
||||||
disabled = true
|
disabled = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (item?.type === "previous") {
|
if (item?.type === "previous") {
|
||||||
@@ -2470,7 +2473,7 @@ const CacheView = memo((props) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (cachedLoaded === false) {
|
if (cachedLoaded === false) {
|
||||||
disabled = true
|
disabled = true
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -2530,10 +2533,10 @@ const CacheView = memo((props) => {
|
|||||||
variant={"outlined"}
|
variant={"outlined"}
|
||||||
color="secondary"
|
color="secondary"
|
||||||
>
|
>
|
||||||
<DeleteOutlineIcon
|
<DeleteOutlineIcon
|
||||||
style={{
|
style={{
|
||||||
color: red,
|
color: red,
|
||||||
marginRight: 10,
|
marginRight: 10,
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
Delete {selectedRows.length} Key{ selectedRows.length > 1 ? "s" : "" }
|
Delete {selectedRows.length} Key{ selectedRows.length > 1 ? "s" : "" }
|
||||||
|
|||||||
Reference in New Issue
Block a user