* feat: setup schema for workspace roles * chore: regen migration * feat: add publicId to workspace roles * feat: setup default permissions * feat: add repo funcs * feat: setup basic router interactions * feat: add card permissions * feat: assert permissions for lists * feat: assert board permissions * feat: assert permission for remaining routes * feat: add permissions page to settings * feat: enable updating member roles * feat: order members by role and createdAt * feat: allow editing individual permissions * feat: reset role defaults * feat: clear all permission overrides * feat: allow users to delete entities they have created * feat: set roleId when inviting new members * feat: disable UI elements if user does not have permissions * feat: allow admins to assign the admin role to other users * feat: allow delete:list as default * refactor: centre permissions modal * chore: translations
59 lines
1.4 KiB
TypeScript
59 lines
1.4 KiB
TypeScript
import { t } from "@lingui/core/macro";
|
|
import {
|
|
HiEllipsisHorizontal,
|
|
HiOutlineCheckCircle,
|
|
HiOutlineTrash,
|
|
} from "react-icons/hi2";
|
|
|
|
import { authClient } from "@kan/auth/client";
|
|
|
|
import Dropdown from "~/components/Dropdown";
|
|
import { usePermissions } from "~/hooks/usePermissions";
|
|
import { useModal } from "~/providers/modal";
|
|
|
|
export default function CardDropdown({
|
|
cardCreatedBy,
|
|
}: {
|
|
cardCreatedBy?: string | null;
|
|
}) {
|
|
const { openModal } = useModal();
|
|
const { canEditCard, canDeleteCard } = usePermissions();
|
|
const { data: session } = authClient.useSession();
|
|
const isCreator = cardCreatedBy && session?.user.id === cardCreatedBy;
|
|
|
|
const items = [
|
|
...(canEditCard
|
|
? [
|
|
{
|
|
label: t`Add checklist`,
|
|
action: () => openModal("ADD_CHECKLIST"),
|
|
icon: (
|
|
<HiOutlineCheckCircle className="h-[16px] w-[16px] text-dark-900" />
|
|
),
|
|
},
|
|
]
|
|
: []),
|
|
...(canDeleteCard || isCreator
|
|
? [
|
|
{
|
|
label: t`Delete card`,
|
|
action: () => openModal("DELETE_CARD"),
|
|
icon: (
|
|
<HiOutlineTrash className="h-[16px] w-[16px] text-dark-900" />
|
|
),
|
|
},
|
|
]
|
|
: []),
|
|
];
|
|
|
|
if (items.length === 0) {
|
|
return null;
|
|
}
|
|
|
|
return (
|
|
<Dropdown items={items}>
|
|
<HiEllipsisHorizontal className="h-5 w-5 text-dark-900" />
|
|
</Dropdown>
|
|
);
|
|
}
|