Skip to content

Commit 0aec190

Browse files
committed
feat: show more infos for questionnaires in admin
1 parent af32a09 commit 0aec190

File tree

4 files changed

+49
-60
lines changed

4 files changed

+49
-60
lines changed

apps/backend/src/research/questionnaires/questionnaires.service.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,17 +51,19 @@ export class QuestionnairesService {
5151
throw e;
5252
}
5353

54-
return (await questionnaire.populate(["entries", "entries.carer", "entries.entryLanguages.language", "participant"])).toObject();
54+
return (await questionnaire.populate(["entries", "entries.carer", "entries.entryLanguages.language", "participant", "study"])).toObject();
5555
}
5656

5757
async findAll() {
58-
return (await this.questionnaireRepository.findAll()).map((questionnaire) => questionnaire.toObject());
58+
return (await this.questionnaireRepository.findAll({ populate: ["study", "participant"] })).map((questionnaire) =>
59+
questionnaire.toObject()
60+
);
5961
}
6062

6163
async findOne(id: number) {
6264
return (
6365
await this.questionnaireRepository.findOneOrFail(id, {
64-
populate: ["entries", "entries.carer", "entries.entryLanguages.language", "participant"],
66+
populate: ["entries", "entries.carer", "entries.entryLanguages.language", "participant", "study"],
6567
})
6668
).toObject();
6769
}
@@ -76,7 +78,7 @@ export class QuestionnairesService {
7678

7779
async update(id: number, questionnaireMutationDto: QuestionnaireMutationDto) {
7880
const questionnaire = await this.questionnaireRepository.findOneOrFail(id, {
79-
populate: ["entries", "entries.carer", "entries.entryLanguages.language", "participant"],
81+
populate: ["entries", "entries.carer", "entries.entryLanguages.language", "participant", "study"],
8082
});
8183
questionnaire.assign(questionnaireMutationDto);
8284

apps/frontend/src/api.gen.ts

Lines changed: 0 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -296,23 +296,6 @@ export interface paths {
296296
patch: operations["QuestionnairesController_update"];
297297
trace?: never;
298298
};
299-
"/questionnaires/{id}/complete": {
300-
parameters: {
301-
query?: never;
302-
header?: never;
303-
path?: never;
304-
cookie?: never;
305-
};
306-
get?: never;
307-
put?: never;
308-
post?: never;
309-
delete?: never;
310-
options?: never;
311-
head?: never;
312-
/** Completes the questionnaire by ID */
313-
patch: operations["QuestionnairesController_complete"];
314-
trace?: never;
315-
};
316299
"/entry-languages": {
317300
parameters: {
318301
query?: never;
@@ -2003,27 +1986,6 @@ export interface operations {
20031986
};
20041987
};
20051988
};
2006-
QuestionnairesController_complete: {
2007-
parameters: {
2008-
query?: never;
2009-
header?: never;
2010-
path: {
2011-
id: string;
2012-
};
2013-
cookie?: never;
2014-
};
2015-
requestBody?: never;
2016-
responses: {
2017-
200: {
2018-
headers: {
2019-
[name: string]: unknown;
2020-
};
2021-
content: {
2022-
"application/json": Record<string, never>;
2023-
};
2024-
};
2025-
};
2026-
};
20271989
EntryLanguagesController_index: {
20281990
parameters: {
20291991
query?: never;

apps/frontend/src/routes/_auth/administration/questionnaires/edit.$id.tsx

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { createFileRoute, useNavigate } from "@tanstack/react-router";
22
import { $api } from "../../../../stores/api";
33
import { useQueryClient, useSuspenseQuery } from "@tanstack/react-query";
4-
import { Button, DateInput, Divider, Group, Stack, Textarea, TextInput, useForm } from "@quassel/ui";
4+
import { Button, DateInput, Divider, Group, Stack, Table, Textarea, TextInput, useForm } from "@quassel/ui";
55
import { useEffect } from "react";
66
import { QuestionnaireEntries } from "../../../../components/questionnaire/QuestionnaireEntries";
7-
import { i18n } from "../../../../stores/i18n";
7+
import { format, i18n } from "../../../../stores/i18n";
88
import { useStore } from "@nanostores/react";
99

1010
type FormValues = {
@@ -19,6 +19,8 @@ const messages = i18n("questionnairesEdit", {
1919
labelTitle: "Title",
2020
labelEndedAt: "End date",
2121
labelStartedAt: "Start date",
22+
labelParticipant: "Participant",
23+
labelStudy: "Study",
2224
});
2325

2426
function AdministrationQuestionnairesEdit() {
@@ -27,6 +29,7 @@ function AdministrationQuestionnairesEdit() {
2729
const q = useQueryClient();
2830

2931
const t = useStore(messages);
32+
const { time } = useStore(format);
3033

3134
const { data, isSuccess } = useSuspenseQuery(
3235
$api.queryOptions("get", "/questionnaires/{id}", {
@@ -60,6 +63,21 @@ function AdministrationQuestionnairesEdit() {
6063

6164
return (
6265
<Stack gap="xl">
66+
<Table>
67+
<Table.Tbody>
68+
<Table.Tr>
69+
<Table.Th>{t.labelParticipant}</Table.Th>
70+
<Table.Td>{data.participant.id}</Table.Td>
71+
<Table.Td>{data.participant.birthday && time(new Date(data.participant.birthday))}</Table.Td>
72+
</Table.Tr>
73+
<Table.Tr>
74+
<Table.Th>{t.labelStudy}</Table.Th>
75+
<Table.Td>{data?.study.id}</Table.Td>
76+
<Table.Td>{data?.study.title}</Table.Td>
77+
</Table.Tr>
78+
</Table.Tbody>
79+
</Table>
80+
6381
<form autoComplete="off" onSubmit={f.onSubmit(handleSubmit)}>
6482
<Stack>
6583
<TextInput {...f.getInputProps("title")} label={t.labelTitle} />

apps/frontend/src/routes/_auth/administration/questionnaires/index.tsx

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { createFileRoute, Link } from "@tanstack/react-router";
22
import { $api } from "../../../../stores/api";
3-
import { Button, Table } from "@quassel/ui";
3+
import { Button, Group, Table } from "@quassel/ui";
44
import { $session } from "../../../../stores/session";
55
import { useStore } from "@nanostores/react";
66

@@ -16,29 +16,36 @@ function AdministrationQuestionnairesIndex() {
1616
<Table.Thead>
1717
<Table.Tr>
1818
<Table.Th>Id</Table.Th>
19-
<Table.Th>Name</Table.Th>
19+
<Table.Th>Child</Table.Th>
20+
<Table.Th>Title</Table.Th>
21+
<Table.Th>Study</Table.Th>
2022
</Table.Tr>
2123
</Table.Thead>
2224
<Table.Tbody>
2325
{data?.map((q) => (
2426
<Table.Tr key={q.id}>
2527
<Table.Td>{q.id}</Table.Td>
28+
<Table.Td>{q.participant.id}</Table.Td>
29+
<Table.Td>{q.title}</Table.Td>
30+
<Table.Td>{q.study.title}</Table.Td>
2631
<Table.Td>
27-
<Button variant="default" renderRoot={(props) => <Link to={`/administration/questionnaires/edit/${q.id}`} {...props} />}>
28-
Edit
29-
</Button>
30-
{sessionStore.role === "ADMIN" && (
31-
<Button
32-
variant="default"
33-
onClick={() =>
34-
deleteQuestionnaireMutation.mutate({
35-
params: { path: { id: q.id.toString() } },
36-
})
37-
}
38-
>
39-
Delete
32+
<Group>
33+
<Button variant="default" renderRoot={(props) => <Link to={`/administration/questionnaires/edit/${q.id}`} {...props} />}>
34+
Edit
4035
</Button>
41-
)}
36+
{sessionStore.role === "ADMIN" && (
37+
<Button
38+
variant="default"
39+
onClick={() =>
40+
deleteQuestionnaireMutation.mutate({
41+
params: { path: { id: q.id.toString() } },
42+
})
43+
}
44+
>
45+
Delete
46+
</Button>
47+
)}
48+
</Group>
4249
</Table.Td>
4350
</Table.Tr>
4451
))}

0 commit comments

Comments
 (0)