Some quick changes to permissions

This commit is contained in:
Tiago Ribeiro
2024-12-02 17:09:22 +00:00
parent cd14ac537d
commit 2e5545f181
5 changed files with 63 additions and 49 deletions

View File

@@ -4,22 +4,22 @@ import Select from "@/components/Low/Select";
import useCodes from "@/hooks/useCodes";
import useUser from "@/hooks/useUser";
import useUsers from "@/hooks/useUsers";
import {Code, User} from "@/interfaces/user";
import {USER_TYPE_LABELS} from "@/resources/user";
import {createColumnHelper, flexRender, getCoreRowModel, useReactTable} from "@tanstack/react-table";
import { Code, User } from "@/interfaces/user";
import { USER_TYPE_LABELS } from "@/resources/user";
import { createColumnHelper, flexRender, getCoreRowModel, useReactTable } from "@tanstack/react-table";
import axios from "axios";
import moment from "moment";
import {useEffect, useState, useMemo} from "react";
import {BsTrash} from "react-icons/bs";
import {toast} from "react-toastify";
import { useEffect, useState, useMemo } from "react";
import { BsTrash } from "react-icons/bs";
import { toast } from "react-toastify";
import ReactDatePicker from "react-datepicker";
import clsx from "clsx";
import {checkAccess} from "@/utils/permissions";
import { checkAccess } from "@/utils/permissions";
import usePermissions from "@/hooks/usePermissions";
const columnHelper = createColumnHelper<Code>();
const CreatorCell = ({id, users}: {id: string; users: User[]}) => {
const CreatorCell = ({ id, users }: { id: string; users: User[] }) => {
const [creatorUser, setCreatorUser] = useState<User>();
useEffect(() => {
@@ -34,18 +34,16 @@ const CreatorCell = ({id, users}: {id: string; users: User[]}) => {
);
};
export default function CodeList({user}: {user: User}) {
export default function CodeList({ user, canDeleteCodes }: { user: User, canDeleteCodes?: boolean }) {
const [selectedCodes, setSelectedCodes] = useState<string[]>([]);
const [filteredCorporate, setFilteredCorporate] = useState<User | undefined>(user?.type === "corporate" ? user : undefined);
const [filterAvailability, setFilterAvailability] = useState<"in-use" | "unused">();
const {permissions} = usePermissions(user?.id || "");
const { permissions } = usePermissions(user?.id || "");
// const [filteredCodes, setFilteredCodes] = useState<Code[]>([]);
const {users} = useUsers();
const {codes, reload} = useCodes(user?.type === "corporate" ? user?.id : undefined);
const { users } = useUsers();
const { codes, reload } = useCodes(user?.type === "corporate" ? user?.id : undefined);
const [startDate, setStartDate] = useState<Date | null>(moment("01/01/2023").toDate());
const [endDate, setEndDate] = useState<Date | null>(moment().endOf("day").toDate());
@@ -80,6 +78,7 @@ export default function CodeList({user}: {user: User}) {
};
const deleteCodes = async (codes: string[]) => {
if (!canDeleteCodes) return
if (!confirm(`Are you sure you want to delete these ${codes.length} code(s)?`)) return;
const params = new URLSearchParams();
@@ -108,6 +107,7 @@ export default function CodeList({user}: {user: User}) {
};
const deleteCode = async (code: Code) => {
if (!canDeleteCodes) return
if (!confirm(`Are you sure you want to delete this "${code.code}" code?`)) return;
axios
@@ -129,8 +129,6 @@ export default function CodeList({user}: {user: User}) {
.finally(reload);
};
const allowedToDelete = checkAccess(user, ["developer", "admin", "corporate", "mastercorporate"], permissions, "deleteCodes");
const defaultColumns = [
columnHelper.accessor("code", {
id: "codeCheckbox",
@@ -183,10 +181,10 @@ export default function CodeList({user}: {user: User}) {
{
header: "",
id: "actions",
cell: ({row}: {row: {original: Code}}) => {
cell: ({ row }: { row: { original: Code } }) => {
return (
<div className="flex gap-4">
{allowedToDelete && !row.original.userId && (
{canDeleteCodes && !row.original.userId && (
<div data-tip="Delete" className="cursor-pointer tooltip" onClick={() => deleteCode(row.original)}>
<BsTrash className="hover:text-mti-purple-light transition ease-in-out duration-300" />
</div>
@@ -215,21 +213,19 @@ export default function CodeList({user}: {user: User}) {
value={
filteredCorporate
? {
label: `${
filteredCorporate?.type === "corporate"
? filteredCorporate.corporateInformation?.companyInformation?.name || filteredCorporate.name
: filteredCorporate.name
label: `${filteredCorporate?.type === "corporate"
? filteredCorporate.corporateInformation?.companyInformation?.name || filteredCorporate.name
: filteredCorporate.name
} (${USER_TYPE_LABELS[filteredCorporate?.type]})`,
value: filteredCorporate.id,
}
value: filteredCorporate.id,
}
: null
}
options={users
.filter((x) => ["admin", "developer", "corporate"].includes(x.type))
.map((x) => ({
label: `${x.type === "corporate" ? x.corporateInformation?.companyInformation?.name || x.name : x.name} (${
USER_TYPE_LABELS[x.type]
})`,
label: `${x.type === "corporate" ? x.corporateInformation?.companyInformation?.name || x.name : x.name} (${USER_TYPE_LABELS[x.type]
})`,
value: x.id,
user: x,
}))}
@@ -240,8 +236,8 @@ export default function CodeList({user}: {user: User}) {
placeholder="Availability"
isClearable
options={[
{label: "In Use", value: "in-use"},
{label: "Unused", value: "unused"},
{ label: "In Use", value: "in-use" },
{ label: "Unused", value: "unused" },
]}
onChange={(value) => setFilterAvailability(value ? (value.value as typeof filterAvailability) : undefined)}
/>
@@ -266,7 +262,7 @@ export default function CodeList({user}: {user: User}) {
}}
/>
</div>
{allowedToDelete && (
{canDeleteCodes && (
<div className="flex gap-4 items-center">
<span>{selectedCodes.length} code(s) selected</span>
<Button