89 lines
3.1 KiB
TypeScript
89 lines
3.1 KiB
TypeScript
import { DomainDirectoryMemberships, NetworkSharePublications } from "@metis/assets/client";
|
|
import { BrowserLink } from "@metis/core/client";
|
|
import { catalogApi, catalogKeys, companyApplicationEligible } from "@metis/resources/client";
|
|
import type { ResourceDTO } from "@metis/resources/common";
|
|
import { DetailPanel } from "@repo/rdx-ui/components/detail-panel";
|
|
import { KeyRoundIcon } from "@repo/rdx-ui/lib/icons";
|
|
import { useQuery } from "@tanstack/react-query";
|
|
import { useTranslation } from "react-i18next";
|
|
|
|
import type { CompanyDTO } from "../../../../common";
|
|
import { MailboxRelations } from "../../../mailboxes";
|
|
|
|
import { ApplicationResourceUsage } from "./application-resource-usage";
|
|
|
|
export function CompanyResourceRelatedContent({
|
|
company,
|
|
resource,
|
|
}: {
|
|
company: CompanyDTO;
|
|
resource: ResourceDTO;
|
|
}) {
|
|
const { t } = useTranslation("companies");
|
|
const directory = resource.directory;
|
|
const catalog = useQuery({
|
|
queryKey: catalogKeys.scope(company.id),
|
|
queryFn: () => catalogApi.get(company.id),
|
|
});
|
|
|
|
if (companyApplicationEligible(resource, catalog.data?.items ?? [])) {
|
|
return <ApplicationResourceUsage companyId={company.id} resourceId={resource.id} />;
|
|
}
|
|
|
|
if (resource.networkShare?.capability === "network:smb-share") {
|
|
return (
|
|
<div className="flex min-w-0 flex-col gap-5">
|
|
<NetworkSharePublications
|
|
anchor={{ type: "resources:resource", id: resource.id }}
|
|
canPublish={resource.values.active}
|
|
companyId={company.id}
|
|
key={resource.id}
|
|
/>
|
|
<DetailPanel icon={<KeyRoundIcon />} title={t("smb.access")}>
|
|
<div className="flex flex-wrap gap-3">
|
|
{(["need", "grant", "permission", "account", "group"] as const).map((kind) => (
|
|
<BrowserLink
|
|
href={`/companies/${company.id}/access?kind=${kind}&resourceId=${resource.id}`}
|
|
key={kind}
|
|
>
|
|
{t(`smb.${kind}`)}
|
|
</BrowserLink>
|
|
))}
|
|
</div>
|
|
<p className="mt-3 text-sm text-muted-foreground">{t("smb.documentary")}</p>
|
|
</DetailPanel>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
if (directory?.capability === "directory:domain") {
|
|
return (
|
|
<div className="min-w-0 space-y-5">
|
|
<DomainDirectoryMemberships
|
|
companyId={company.id}
|
|
domainId={resource.id}
|
|
key={resource.id}
|
|
/>
|
|
<DetailPanel icon={<KeyRoundIcon />} title={t("windowsDomain.accountsAndGroups")}>
|
|
<div className="flex flex-wrap gap-3">
|
|
<BrowserLink
|
|
href={`/companies/${company.id}/access?kind=account&environmentId=${directory.environmentId}`}
|
|
>
|
|
{t("windowsDomain.accounts")}
|
|
</BrowserLink>
|
|
<BrowserLink
|
|
href={`/companies/${company.id}/access?kind=group&environmentId=${directory.environmentId}`}
|
|
>
|
|
{t("windowsDomain.groups")}
|
|
</BrowserLink>
|
|
</div>
|
|
</DetailPanel>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
return resource.values.integration?.kind === "mailbox" ? (
|
|
<MailboxRelations company={company} mailboxId={resource.id} />
|
|
) : null;
|
|
}
|