This commit is contained in:
Fred KISSIE
2026-05-08 18:21:09 +02:00
parent 72524db52d
commit 840cc214e3
2 changed files with 74 additions and 32 deletions

View File

@@ -1125,7 +1125,9 @@
"idpErrorNotFound": "IdP not found", "idpErrorNotFound": "IdP not found",
"inviteInvalid": "Invalid Invite", "inviteInvalid": "Invalid Invite",
"labels": "Labels", "labels": "Labels",
"addLabelsButtonText": "Add labels", "addLabels": "Add labels",
"siteLabelsTab": "Labels",
"siteLabelsDescription": "Manage labels associated with this site.",
"inviteInvalidDescription": "The invite link is invalid.", "inviteInvalidDescription": "The invite link is invalid.",
"inviteErrorWrongUser": "Invite is not for this user", "inviteErrorWrongUser": "Invite is not for this user",
"inviteErrorUserNotExists": "User does not exist. Please create an account first.", "inviteErrorUserNotExists": "User does not exist. Please create an account first.",

View File

@@ -94,6 +94,7 @@ export default function SitesTable({
const [selectedSite, setSelectedSite] = useState<SiteRow | null>(null); const [selectedSite, setSelectedSite] = useState<SiteRow | null>(null);
const [resourcesDialogSite, setResourcesDialogSite] = const [resourcesDialogSite, setResourcesDialogSite] =
useState<SiteRow | null>(null); useState<SiteRow | null>(null);
const [isLabelsDialogOpen, setIsLabelsDialogOpen] = useState(false);
const [isRefreshing, startTransition] = useTransition(); const [isRefreshing, startTransition] = useTransition();
const [isNavigatingToAddPage, startNavigation] = useTransition(); const [isNavigatingToAddPage, startNavigation] = useTransition();
@@ -453,18 +454,7 @@ export default function SitesTable({
accessorKey: "labels", accessorKey: "labels",
header: () => <span className="p-3">{t("labels")}</span>, header: () => <span className="p-3">{t("labels")}</span>,
cell: ({ row }) => { cell: ({ row }) => {
return ( return <></>;
<Button
className="rounded-full inline-flex gap-1 items-center py-0.5"
size="sm"
variant="outline"
>
<PlusIcon className="size-3 flex-none" />{" "}
<span className="text-xs">
{t("addLabelsButtonText")}
</span>
</Button>
);
} }
}, },
{ {
@@ -507,6 +497,14 @@ export default function SitesTable({
{t("sitesTableViewPrivateResources")} {t("sitesTableViewPrivateResources")}
</DropdownMenuItem> </DropdownMenuItem>
</Link> </Link>
<DropdownMenuItem
onClick={() => {
setSelectedSite(siteRow);
setIsLabelsDialogOpen(true);
}}
>
<span>{t("addLabels")}</span>
</DropdownMenuItem>
<DropdownMenuItem <DropdownMenuItem
onClick={() => { onClick={() => {
setSelectedSite(siteRow); setSelectedSite(siteRow);
@@ -597,25 +595,33 @@ export default function SitesTable({
</Credenza> </Credenza>
{selectedSite && ( {selectedSite && (
<ConfirmDeleteDialog <>
open={isDeleteModalOpen} <ConfirmDeleteDialog
setOpen={(val) => { open={isDeleteModalOpen}
setIsDeleteModalOpen(val); setOpen={(val) => {
setSelectedSite(null); setIsDeleteModalOpen(val);
}} setSelectedSite(null);
dialog={ }}
<div className="space-y-2"> dialog={
<p>{t("siteQuestionRemove")}</p> <div className="space-y-2">
<p>{t("siteMessageRemove")}</p> <p>{t("siteQuestionRemove")}</p>
</div> <p>{t("siteMessageRemove")}</p>
} </div>
buttonText={t("siteConfirmDelete")} }
onConfirm={async () => buttonText={t("siteConfirmDelete")}
startTransition(() => deleteSite(selectedSite!.id)) onConfirm={async () =>
} startTransition(() => deleteSite(selectedSite!.id))
string={selectedSite.name} }
title={t("siteDelete")} string={selectedSite.name}
/> title={t("siteDelete")}
/>
<SiteLabelsDialog
isOpen={isLabelsDialogOpen}
setIsOpen={setIsLabelsDialogOpen}
site={selectedSite}
/>
</>
)} )}
<ControlledDataTable <ControlledDataTable
@@ -651,3 +657,37 @@ export default function SitesTable({
</> </>
); );
} }
type SiteLabelsDialogProps = {
site: SiteRow;
isOpen: boolean;
setIsOpen: (open: boolean) => void;
};
function SiteLabelsDialog({ site, isOpen, setIsOpen }: SiteLabelsDialogProps) {
const t = useTranslations();
return (
<Credenza open={isOpen} onOpenChange={setIsOpen}>
<CredenzaContent className="">
<CredenzaHeader>
<CredenzaTitle>{t("siteLabelsTab")}</CredenzaTitle>
<CredenzaDescription>
{t("siteLabelsDescription")}
</CredenzaDescription>
</CredenzaHeader>
<CredenzaBody>
<></>
</CredenzaBody>
<CredenzaFooter>
<Button
type="button"
variant="outline"
onClick={() => setIsOpen(false)}
>
{t("close")}
</Button>
</CredenzaFooter>
</CredenzaContent>
</Credenza>
);
}