Cleared of the stuff the EnCoach team wanted changed
This commit is contained in:
@@ -20,6 +20,8 @@ import Modal from "@/components/Modal";
|
||||
import {checkAccess} from "@/utils/permissions";
|
||||
import useGroups from "@/hooks/useGroups";
|
||||
import Button from "@/components/Low/Button";
|
||||
import { EntityWithRoles } from "@/interfaces/entity";
|
||||
import { useAllowedEntities } from "@/hooks/useEntityPermissions";
|
||||
|
||||
const searchFields = [["module"], ["id"], ["createdBy"]];
|
||||
|
||||
@@ -56,13 +58,36 @@ const ExamOwnerSelector = ({options, exam, onSave}: {options: User[]; exam: Exam
|
||||
);
|
||||
};
|
||||
|
||||
export default function ExamList({user}: {user: User}) {
|
||||
export default function ExamList({user, entities = []}: {user: User, entities: EntityWithRoles[]}) {
|
||||
const [selectedExam, setSelectedExam] = useState<Exam>();
|
||||
|
||||
const {exams, reload} = useExams();
|
||||
const {users} = useUsers();
|
||||
const {groups} = useGroups({admin: user?.id, userType: user?.type});
|
||||
|
||||
const canViewReading = useAllowedEntities(user, entities, 'view_reading')
|
||||
const canViewListening = useAllowedEntities(user, entities, 'view_listening')
|
||||
const canViewWriting = useAllowedEntities(user, entities, 'view_writing')
|
||||
const canViewSpeaking = useAllowedEntities(user, entities, 'view_speaking')
|
||||
const canViewLevel = useAllowedEntities(user, entities, 'view_level')
|
||||
|
||||
const canDeleteReading = useAllowedEntities(user, entities, 'delete_reading')
|
||||
const canDeleteListening = useAllowedEntities(user, entities, 'delete_listening')
|
||||
const canDeleteWriting = useAllowedEntities(user, entities, 'delete_writing')
|
||||
const canDeleteSpeaking = useAllowedEntities(user, entities, 'delete_speaking')
|
||||
const canDeleteLevel = useAllowedEntities(user, entities, 'delete_level')
|
||||
|
||||
const modulePermissions = useMemo(() => ({
|
||||
reading: {view: canViewReading.length > 0, delete: canDeleteReading.length > 0},
|
||||
listening: {view: canViewListening.length > 0, delete: canDeleteListening.length > 0},
|
||||
writing: {view: canViewWriting.length > 0, delete: canDeleteWriting.length > 0},
|
||||
speaking: {view: canViewSpeaking.length > 0, delete: canDeleteSpeaking.length > 0},
|
||||
level: {view: canViewLevel.length > 0, delete: canDeleteLevel.length > 0},
|
||||
}),
|
||||
[
|
||||
canDeleteLevel.length, canDeleteListening.length, canDeleteReading.length, canDeleteSpeaking.length, canDeleteWriting.length, canViewLevel.length, canViewListening.length, canViewReading.length, canViewSpeaking.length, canViewWriting.length
|
||||
])
|
||||
|
||||
const filteredCorporates = useMemo(() => {
|
||||
const participantsAndAdmins = uniq(groups.flatMap((x) => [...x.participants, x.admin])).filter((x) => x !== user?.id);
|
||||
return users.filter((x) => participantsAndAdmins.includes(x.id) && x.type === "corporate");
|
||||
@@ -84,7 +109,10 @@ export default function ExamList({user}: {user: User}) {
|
||||
});
|
||||
}, [exams, users]);
|
||||
|
||||
const {rows: filteredRows, renderSearch} = useListSearch<Exam>(searchFields, parsedExams);
|
||||
const filteredExams = useMemo(() => parsedExams.filter(({module}) => modulePermissions[module].view),
|
||||
[parsedExams, modulePermissions])
|
||||
|
||||
const {rows: filteredRows, renderSearch} = useListSearch<Exam>(searchFields, filteredExams);
|
||||
|
||||
const setExams = useExamStore((state) => state.setExams);
|
||||
const setSelectedModules = useExamStore((state) => state.setSelectedModules);
|
||||
@@ -104,7 +132,7 @@ export default function ExamList({user}: {user: User}) {
|
||||
setExams([exam]);
|
||||
setSelectedModules([module]);
|
||||
|
||||
router.push("/exercises");
|
||||
router.push("/exam");
|
||||
};
|
||||
|
||||
const privatizeExam = async (exam: Exam) => {
|
||||
@@ -245,7 +273,7 @@ export default function ExamList({user}: {user: User}) {
|
||||
onClick={async () => await loadExam(row.original.module, row.original.id)}>
|
||||
<BsUpload className="hover:text-mti-purple-light transition ease-in-out duration-300" />
|
||||
</button>
|
||||
{PERMISSIONS.examManagement.delete.includes(user.type) && (
|
||||
{modulePermissions[row.original.module].delete && (
|
||||
<div data-tip="Delete" className="cursor-pointer tooltip" onClick={() => deleteExam(row.original)}>
|
||||
<BsTrash className="hover:text-mti-purple-light transition ease-in-out duration-300" />
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user