forked from github-starred/komodo
invalidate list tags when creating a tag
This commit is contained in:
@@ -10,6 +10,7 @@ import {
|
|||||||
CommandItem,
|
CommandItem,
|
||||||
} from "@ui/command";
|
} from "@ui/command";
|
||||||
import { Popover, PopoverContent, PopoverTrigger } from "@ui/popover";
|
import { Popover, PopoverContent, PopoverTrigger } from "@ui/popover";
|
||||||
|
import { useToast } from "@ui/use-toast";
|
||||||
import { Pen, PlusCircle } from "lucide-react";
|
import { Pen, PlusCircle } from "lucide-react";
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
|
|
||||||
@@ -44,6 +45,10 @@ export const ManageTags = ({ target }: { target: TargetExcludingSystem }) => {
|
|||||||
onSuccess: () => inv([`List${type}s`]),
|
onSuccess: () => inv([`List${type}s`]),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const { mutateAsync: create } = useWrite("CreateTag", {
|
||||||
|
onSuccess: () => inv([`ListTags`]),
|
||||||
|
});
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!open && !!resource && !!tags) update({ target, tags });
|
if (!open && !!resource && !!tags) update({ target, tags });
|
||||||
}, [target, open, resource, tags, update]);
|
}, [target, open, resource, tags, update]);
|
||||||
@@ -52,23 +57,25 @@ export const ManageTags = ({ target }: { target: TargetExcludingSystem }) => {
|
|||||||
if (resource && !tags) setTags(resource.tags);
|
if (resource && !tags) setTags(resource.tags);
|
||||||
}, [resource, tags]);
|
}, [resource, tags]);
|
||||||
|
|
||||||
const { mutateAsync: create } = useWrite("CreateTag");
|
|
||||||
|
|
||||||
const update_tags = (tag: Types.CustomTag) => {
|
const update_tags = (tag: Types.CustomTag) => {
|
||||||
const exists = tags?.some((id) => id === tag._id?.$oid);
|
const exists = tags?.some((id) => id === tag._id?.$oid);
|
||||||
if (exists) return setTags((t) => t?.filter((id) => id !== tag._id?.$oid));
|
if (exists) return setTags((t) => t?.filter((id) => id !== tag._id?.$oid));
|
||||||
else return setTags((t) => [...(t ?? []), tag._id?.$oid as string]);
|
else return setTags((t) => [...(t ?? []), tag._id?.$oid as string]);
|
||||||
};
|
};
|
||||||
|
|
||||||
const create_tag = async () =>
|
const { toast } = useToast();
|
||||||
!!input && update_tags(await create({ name: input }));
|
const create_tag = async () => {
|
||||||
|
if (!input) return toast({ title: "Must provide tag name in input" });
|
||||||
|
update_tags(await create({ name: input }));
|
||||||
|
setOpen(false);
|
||||||
|
};
|
||||||
|
|
||||||
if (!resource) return null;
|
if (!resource) return null;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Popover open={open} onOpenChange={setOpen}>
|
<Popover open={open} onOpenChange={setOpen}>
|
||||||
<PopoverTrigger>
|
<PopoverTrigger>
|
||||||
<Badge className="flex gap-2">
|
<Badge className="flex gap-2" variant="outline">
|
||||||
Edit Tags <Pen className="w-3" />
|
Edit Tags <Pen className="w-3" />
|
||||||
</Badge>
|
</Badge>
|
||||||
</PopoverTrigger>
|
</PopoverTrigger>
|
||||||
@@ -80,7 +87,10 @@ export const ManageTags = ({ target }: { target: TargetExcludingSystem }) => {
|
|||||||
value={input}
|
value={input}
|
||||||
onValueChange={setInput}
|
onValueChange={setInput}
|
||||||
/>
|
/>
|
||||||
<CommandEmpty className="justify-between" onClick={create_tag}>
|
<CommandEmpty
|
||||||
|
className="justify-between cursor-pointer hover:bg-accent m-1"
|
||||||
|
onClick={create_tag}
|
||||||
|
>
|
||||||
Create Tag
|
Create Tag
|
||||||
<PlusCircle className="w-4" />
|
<PlusCircle className="w-4" />
|
||||||
</CommandEmpty>
|
</CommandEmpty>
|
||||||
|
|||||||
Reference in New Issue
Block a user