diff --git a/app/Http/Controllers/CandidateController.php b/app/Http/Controllers/CandidateController.php index c860088..ada4073 100644 --- a/app/Http/Controllers/CandidateController.php +++ b/app/Http/Controllers/CandidateController.php @@ -15,7 +15,7 @@ class CandidateController extends Controller { public function index() { - $candidates = Candidate::with(['user', 'documents'])->latest()->get(); + $candidates = Candidate::with(['user', 'documents', 'attempts'])->latest()->get(); return \Inertia\Inertia::render('Admin/Candidates/Index', [ 'candidates' => $candidates diff --git a/resources/js/Pages/Admin/Candidates/Index.vue b/resources/js/Pages/Admin/Candidates/Index.vue index 7500b6f..ae21f4c 100644 --- a/resources/js/Pages/Admin/Candidates/Index.vue +++ b/resources/js/Pages/Admin/Candidates/Index.vue @@ -46,6 +46,37 @@ const deleteCandidate = (id) => { const openPreview = (doc) => { selectedDocument.value = doc; }; + +// Sorting Logic +const sortKey = ref('user.name'); +const sortOrder = ref(1); // 1 = asc, -1 = desc + +const sortBy = (key) => { + if (sortKey.value === key) { + sortOrder.value *= -1; + } else { + sortKey.value = key; + sortOrder.value = 1; + } +}; + +const getNestedValue = (obj, path) => { + return path.split('.').reduce((o, i) => (o ? o[i] : null), obj); +}; + +const sortedCandidates = computed(() => { + return [...props.candidates].sort((a, b) => { + let valA = getNestedValue(a, sortKey.value); + let valB = getNestedValue(b, sortKey.value); + + if (typeof valA === 'string') valA = valA.toLowerCase(); + if (typeof valB === 'string') valB = valB.toLowerCase(); + + if (valA < valB) return -1 * sortOrder.value; + if (valA > valB) return 1 * sortOrder.value; + return 0; + }); +});