Skip to content

Commit d0388f3

Browse files
committed
feat: hide study delete button when there already are questionnaires
1 parent 84aa1ee commit d0388f3

File tree

4 files changed

+34
-20
lines changed

4 files changed

+34
-20
lines changed

apps/backend/src/research/studies/study.dto.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ class StudyBaseDto {
1313
title: string;
1414
}
1515

16-
export class StudyResponseDto extends StudyBaseDto {}
16+
export class StudyResponseDto extends StudyBaseDto {
17+
@ApiProperty({example: 1, description: "The count of questionnaires tracked to this study"})
18+
@Expose()
19+
questionnairesCount?: number;
20+
}
1721
export class StudyCreationDto extends StudyBaseDto {}
1822
export class StudyMutationDto extends PartialType(StudyBaseDto) {}

apps/backend/src/research/studies/study.entity.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Collection, Entity, OneToMany, Property } from "@mikro-orm/core";
1+
import { Collection, Entity, Formula, OneToMany, Property } from "@mikro-orm/core";
22
import { BaseEntity } from "../../common/entities/base.entity";
33
import { Questionnaire } from "../questionnaires/questionnaire.entity";
44

@@ -9,4 +9,7 @@ export class Study extends BaseEntity {
99

1010
@OneToMany(() => Questionnaire, (questionnaire) => questionnaire.study)
1111
questionnaires = new Collection<Questionnaire>(this);
12+
13+
@Formula((alias) => `(select count(*) from questionnaire q where q.study_id = ${alias}.id)`)
14+
questionnairesCount? = 0;
1215
}

apps/frontend/src/api.gen.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -536,6 +536,11 @@ export interface components {
536536
* @example Series 1
537537
*/
538538
title: string;
539+
/**
540+
* @description The count of questionnaires tracked to this study
541+
* @example 1
542+
*/
543+
questionnairesCount?: number;
539544
};
540545
QuestionnaireResponseDto: {
541546
/**
@@ -1310,19 +1315,19 @@ export interface operations {
13101315
};
13111316
ReportsController_get: {
13121317
parameters: {
1313-
query?: {
1314-
studyId?: string;
1318+
query: {
1319+
studyId: string;
13151320
};
13161321
header?: never;
13171322
path?: never;
13181323
cookie?: never;
13191324
};
13201325
requestBody?: never;
13211326
responses: {
1322-
/** @description Database dump file */
1327+
/** @description Report file */
13231328
200: {
13241329
headers: {
1325-
/** @description Attachment dump */
1330+
/** @description Report */
13261331
"Content-Disposition"?: string;
13271332
[name: string]: unknown;
13281333
};

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

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -26,21 +26,23 @@ function AdministrationStudiesIndex() {
2626
<Table.Td>{s.id}</Table.Td>
2727
<Table.Td>{s.title}</Table.Td>
2828
<Table.Td>
29-
<Button variant="default" renderRoot={(props) => <Link to={`/administration/studies/edit/${s.id}`} {...props} />}>
30-
Edit
31-
</Button>
32-
{sessionStore.role === "ADMIN" && (
33-
<Button
34-
variant="default"
35-
onClick={() =>
36-
deleteStudyMutation.mutate({
37-
params: { path: { id: s.id.toString() } },
38-
})
39-
}
40-
>
41-
Delete
29+
<Button.Group>
30+
<Button variant="default" renderRoot={(props) => <Link to={`/administration/studies/edit/${s.id}`} {...props} />}>
31+
Edit
4232
</Button>
43-
)}
33+
{sessionStore.role === "ADMIN" && (s.questionnairesCount ?? 0) < 1 && (
34+
<Button
35+
variant="default"
36+
onClick={() =>
37+
deleteStudyMutation.mutate({
38+
params: { path: { id: s.id.toString() } },
39+
})
40+
}
41+
>
42+
Delete
43+
</Button>
44+
)}
45+
</Button.Group>
4446
</Table.Td>
4547
</Table.Tr>
4648
))}

0 commit comments

Comments
 (0)