feat(typesContext.tsx): add deleteComponent function to typesContext to allow deleting components from savedComponentsJSON
fix(extraSidebarComponent/index.tsx): update references to data object to use dataFilter object to prevent errors when filtering data fix(sideBarDraggableComponent/index.tsx): add deleteComponent function from typesContext to handleSelectChange function to delete components
This commit is contained in:
parent
3abbd5c5e4
commit
d0cdcc0f22
4 changed files with 44 additions and 5 deletions
|
|
@ -37,6 +37,7 @@ const initialValue: typesContextType = {
|
||||||
setFilterEdge: (filter) => {},
|
setFilterEdge: (filter) => {},
|
||||||
getFilterEdge: [],
|
getFilterEdge: [],
|
||||||
saveComponent: (component: NodeDataType, key: string) => {},
|
saveComponent: (component: NodeDataType, key: string) => {},
|
||||||
|
deleteComponent: (key: string) => {},
|
||||||
};
|
};
|
||||||
|
|
||||||
export const typesContext = createContext<typesContextType>(initialValue);
|
export const typesContext = createContext<typesContextType>(initialValue);
|
||||||
|
|
@ -154,9 +155,29 @@ export function TypesProvider({ children }: { children: ReactNode }) {
|
||||||
return newData;
|
return newData;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function deleteComponent(key: string) {
|
||||||
|
let savedComponentsJSON: localStorageUserType = { components: {} };
|
||||||
|
if (checkLocalStorageKey(userData?.id!)) {
|
||||||
|
let savedComponents = localStorage.getItem(userData?.id!)!;
|
||||||
|
savedComponentsJSON = JSON.parse(savedComponents);
|
||||||
|
}
|
||||||
|
let components = savedComponentsJSON.components;
|
||||||
|
delete components[key];
|
||||||
|
savedComponentsJSON.components = components;
|
||||||
|
localStorage.setItem(userData?.id!, JSON.stringify(savedComponentsJSON));
|
||||||
|
setData((prev) => {
|
||||||
|
let newData = _.cloneDeep(prev);
|
||||||
|
//clone to prevent reference erro
|
||||||
|
delete newData["custom_components"][key];
|
||||||
|
return newData;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<typesContext.Provider
|
<typesContext.Provider
|
||||||
value={{
|
value={{
|
||||||
|
deleteComponent,
|
||||||
saveComponent,
|
saveComponent,
|
||||||
types,
|
types,
|
||||||
setTypes,
|
setTypes,
|
||||||
|
|
|
||||||
|
|
@ -239,7 +239,9 @@ export default function ExtraSidebar(): JSX.Element {
|
||||||
.sort()
|
.sort()
|
||||||
.map((SBItemName: string, index) => (
|
.map((SBItemName: string, index) => (
|
||||||
<ShadTooltip
|
<ShadTooltip
|
||||||
content={data[SBSectionName][SBItemName].display_name}
|
content={
|
||||||
|
dataFilter[SBSectionName][SBItemName].display_name
|
||||||
|
}
|
||||||
side="right"
|
side="right"
|
||||||
key={index}
|
key={index}
|
||||||
>
|
>
|
||||||
|
|
@ -249,15 +251,15 @@ export default function ExtraSidebar(): JSX.Element {
|
||||||
onDragStart(event, {
|
onDragStart(event, {
|
||||||
//split type to remove type in nodes saved with same name removing it's
|
//split type to remove type in nodes saved with same name removing it's
|
||||||
type: removeCountFromString(SBItemName),
|
type: removeCountFromString(SBItemName),
|
||||||
node: data[SBSectionName][SBItemName],
|
node: dataFilter[SBSectionName][SBItemName],
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
color={nodeColors[SBSectionName]}
|
color={nodeColors[SBSectionName]}
|
||||||
itemName={SBItemName}
|
itemName={SBItemName}
|
||||||
//convert error to boolean
|
//convert error to boolean
|
||||||
error={!!data[SBSectionName][SBItemName].error}
|
error={!!dataFilter[SBSectionName][SBItemName].error}
|
||||||
display_name={
|
display_name={
|
||||||
data[SBSectionName][SBItemName].display_name
|
dataFilter[SBSectionName][SBItemName].display_name
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
</ShadTooltip>
|
</ShadTooltip>
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { DragEventHandler, useRef } from "react";
|
import { DragEventHandler, useContext, useRef } from "react";
|
||||||
import IconComponent from "../../../../../components/genericIconComponent";
|
import IconComponent from "../../../../../components/genericIconComponent";
|
||||||
import {
|
import {
|
||||||
Select,
|
Select,
|
||||||
|
|
@ -6,6 +6,7 @@ import {
|
||||||
SelectItem,
|
SelectItem,
|
||||||
SelectTrigger,
|
SelectTrigger,
|
||||||
} from "../../../../../components/ui/select-custom";
|
} from "../../../../../components/ui/select-custom";
|
||||||
|
import { typesContext } from "../../../../../contexts/typesContext";
|
||||||
|
|
||||||
export default function SidebarDraggableComponent({
|
export default function SidebarDraggableComponent({
|
||||||
display_name,
|
display_name,
|
||||||
|
|
@ -21,9 +22,23 @@ export default function SidebarDraggableComponent({
|
||||||
onDragStart: DragEventHandler<HTMLDivElement>;
|
onDragStart: DragEventHandler<HTMLDivElement>;
|
||||||
}) {
|
}) {
|
||||||
const open = useRef(false);
|
const open = useRef(false);
|
||||||
|
const { deleteComponent } = useContext(typesContext);
|
||||||
|
|
||||||
|
function handleSelectChange(value: string) {
|
||||||
|
switch (value) {
|
||||||
|
case "share":
|
||||||
|
break;
|
||||||
|
case "download":
|
||||||
|
break;
|
||||||
|
case "delete":
|
||||||
|
deleteComponent(itemName);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Select
|
<Select
|
||||||
|
onValueChange={handleSelectChange}
|
||||||
onOpenChange={(change) => (open.current = change)}
|
onOpenChange={(change) => (open.current = change)}
|
||||||
open={open.current}
|
open={open.current}
|
||||||
>
|
>
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ export type typesContextType = {
|
||||||
setFilterEdge: (newState) => void;
|
setFilterEdge: (newState) => void;
|
||||||
getFilterEdge: any[];
|
getFilterEdge: any[];
|
||||||
saveComponent: (component: NodeDataType, key: string) => void;
|
saveComponent: (component: NodeDataType, key: string) => void;
|
||||||
|
deleteComponent: (key: string) => void;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type alertContextType = {
|
export type alertContextType = {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue