Skip to content

Commit 12deab2

Browse files
committed
SCRUM-275: nuxt fe(feature): hide button to add student if they have a supervisor already
1 parent c0a353f commit 12deab2

File tree

3 files changed

+72
-4
lines changed

3 files changed

+72
-4
lines changed

Frontend/pages/admin/dashboard.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
>{{ t("admin.availableSpots") }}
2121
</span>
2222
</div>
23-
<hr class="border-base-300" />
23+
<hr class="border-base-300" >
2424
<div class="p-8 gap-4 admin-overview-grid">
2525
<FontAwesomeIcon class="opacity-75" icon="user-group" />
2626
<span class="text-body text-primary"

Frontend/pages/profiles/[id].vue

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,8 @@
8484
left-icon="message"
8585
@click="managePendingRequest"
8686
/>
87-
<!-- TODO: conditionally render if student doesnt have an accepted supervisor -->
8887
<CustomButton
89-
v-if="isStudent && !studentPendingRequest"
88+
v-if="isStudent && !studentPendingRequest && !hasSupervisor"
9089
:text="t('generic.addStudent')"
9190
block
9291
color="default"
@@ -221,10 +220,25 @@ const isSupervisor = computed(() => {
221220
const isStudent = computed(() => {
222221
return routeParamUser.value.role === UserRoles.STUDENT;
223222
});
223+
//hacky solution, begin with true to not show the button. IF no supervisor, turn it false
224+
const hasSupervisor = ref(true)
224225
225226
onMounted(async() => {
226227
if (isStudent.value) {
227228
await supervisorStore.getSupervisionRequests();
229+
const data = await $fetch(
230+
`/api/supervision-requests/count/${routeParamUserId}`,
231+
{
232+
method: HttpMethods.GET,
233+
query: {
234+
request_state: supervisionRequestStatus.ACCEPTED,
235+
},
236+
}
237+
);
238+
if (data.request_count === 0) {
239+
hasSupervisor.value = false;
240+
}
241+
console.log("requests", supervisorStore.supervisionRequests);
228242
}
229243
});
230244
@@ -236,7 +250,10 @@ const routeParamUser = data;
236250
237251
const studentPendingRequest = computed(() => {
238252
return supervisorStore.supervisionRequests?.find(
239-
request => request.student.user_id === routeParamUser.value.id
253+
request =>
254+
request.student.user_id === routeParamUser.value.id &&
255+
request.request_state === supervisionRequestStatus.PENDING
256+
240257
);
241258
});
242259
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import { requestStateSchema } from "#shared/validationSchemas/validationSchemas";
2+
import { ZodError } from "zod";
3+
4+
export default defineEventHandler ( async (event) => {
5+
const request_state = getQuery(event).request_state
6+
7+
let parsedRequestState: string | undefined = undefined;
8+
if (request_state !== undefined) {
9+
try {
10+
parsedRequestState = requestStateSchema.parse(request_state);
11+
} catch (e) {
12+
if (e instanceof ZodError) {
13+
const errorMessage = e.errors.map(err => err.message).join(', ');
14+
return sendError(event, createError({
15+
statusCode: 400,
16+
statusMessage: `Invalid QueryParameter: ${errorMessage}`
17+
}));
18+
}
19+
return sendError(event, createError({
20+
statusCode: 400,
21+
statusMessage: 'Invalid QueryParameter'
22+
}));
23+
}
24+
}
25+
26+
27+
// standard setup for every endpoint
28+
const token = await getBearerToken(event)
29+
const targetPath = getTargetPath(event)
30+
31+
const queryParams: Record<string, string> = {};
32+
if (parsedRequestState !== undefined) {
33+
queryParams.request_state = parsedRequestState;
34+
}
35+
36+
// Send request to Nest API
37+
return await fetchNest(targetPath, {
38+
method: event.method,
39+
headers: {
40+
Authorization: `Bearer ${token}`,
41+
accept: 'application/json',
42+
},
43+
query: queryParams
44+
45+
}).catch((error) => {
46+
throw createError({
47+
statusCode: error.statusCode || 500,
48+
statusMessage: error.message || 'Internal Server Error',
49+
})
50+
})
51+
})

0 commit comments

Comments
 (0)