Skip to content

Commit 8eae0e1

Browse files
committed
wip: update membership system
1 parent fd13fd6 commit 8eae0e1

File tree

8 files changed

+511
-182
lines changed

8 files changed

+511
-182
lines changed

apps/dashboard/src/app/(internal)/brukere/components/membership-form.tsx

Lines changed: 46 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,16 @@ import {
88
MembershipWriteSchema,
99
getMembershipTypeName,
1010
getSpecializationName,
11+
getNextSemesterStart,
12+
getCurrentSemesterStart,
1113
} from "@dotkomonline/types"
12-
import { getCurrentUTC } from "@dotkomonline/utils"
13-
import { addYears, isBefore } from "date-fns"
14+
import { isBefore } from "date-fns"
1415
import type { z } from "zod"
16+
import { createNumberInput } from "@/components/forms/NumberInput"
17+
import { Code, Stack, Text } from "@mantine/core"
1518

1619
export const MembershipWriteFormSchema = MembershipWriteSchema.superRefine((data, ctx) => {
17-
if (isBefore(data.end, data.start)) {
20+
if (data.end && isBefore(data.end, data.start)) {
1821
ctx.addIssue({
1922
code: "custom",
2023
message: "Sluttdato må være etter startdato",
@@ -26,13 +29,14 @@ export const MembershipWriteFormSchema = MembershipWriteSchema.superRefine((data
2629
type MembershipWriteFormSchema = z.infer<typeof MembershipWriteFormSchema>
2730

2831
const DEFAULT_VALUES: Partial<MembershipWriteFormSchema> = {
29-
start: getCurrentUTC(),
30-
end: addYears(getCurrentUTC(), 1),
32+
start: getCurrentSemesterStart(),
33+
end: getNextSemesterStart(),
3134
specialization: null,
35+
semester: 0,
3236
}
3337

3438
interface UseMembershipWriteFormProps {
35-
onSubmit(data: z.infer<typeof MembershipWriteFormSchema>): void
39+
onSubmit(data: MembershipWriteFormSchema): void
3640
defaultValues?: Partial<MembershipWrite>
3741
label?: string
3842
}
@@ -59,6 +63,7 @@ export const useMembershipWriteForm = ({
5963
}),
6064
specialization: createSelectInput({
6165
label: "Spesialisering",
66+
description: "Masterspesialisering",
6267
required: false,
6368
clearable: true,
6469
placeholder: "Velg spesialisering",
@@ -68,6 +73,7 @@ export const useMembershipWriteForm = ({
6873
value: specialization,
6974
label: getSpecializationName(specialization) ?? specialization,
7075
})),
76+
disabled: false,
7177
}),
7278
start: createDateTimeInput({
7379
label: "Startdato",
@@ -77,6 +83,40 @@ export const useMembershipWriteForm = ({
7783
label: "Sluttdato",
7884
required: true,
7985
}),
86+
semester: createNumberInput({
87+
label: "Semester",
88+
description: (
89+
<Stack gap="xs">
90+
<Text size="xs" c="dimmed">
91+
Hvilket semester medlemskapet innebærer. 0-indeksert.
92+
</Text>
93+
<Stack gap="0.25rem">
94+
<Text size="xs" c="dimmed">
95+
<Code>0</Code> → 1. semester (1. årstrinn)
96+
</Text>
97+
<Text size="xs" c="dimmed">
98+
<Code>1</Code> → 2. semester (1. årstrinn)
99+
</Text>
100+
<Text size="xs" c="dimmed">
101+
<Code>2</Code> → 3. semester (2. årstrinn)
102+
</Text>
103+
<Text size="xs" c="dimmed">
104+
...
105+
</Text>
106+
<Text size="xs" c="dimmed">
107+
<Code>8</Code> → 9. semester (5. årstrinn)
108+
</Text>
109+
<Text size="xs" c="dimmed">
110+
<Code>9</Code> → 10. semester (5. årstrinn)
111+
</Text>
112+
</Stack>
113+
</Stack>
114+
),
115+
required: false,
116+
min: 0,
117+
max: 9,
118+
allowDecimal: false,
119+
}),
80120
},
81121
})
82122
}

0 commit comments

Comments
 (0)