@@ -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"
1415import type { z } from "zod"
16+ import { createNumberInput } from "@/components/forms/NumberInput"
17+ import { Code , Stack , Text } from "@mantine/core"
1518
1619export 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
2629type MembershipWriteFormSchema = z . infer < typeof MembershipWriteFormSchema >
2730
2831const 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
3438interface 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