@@ -9,12 +9,14 @@ import {
99 getMembershipTypeName ,
1010 getSpecializationName ,
1111} from "@dotkomonline/types"
12- import { getCurrentUTC } from "@dotkomonline/utils"
13- import { addYears , isBefore } from "date-fns"
12+ import { getNextSemesterStart , getCurrentSemesterStart } from "@dotkomonline/utils"
13+ import { isBefore } from "date-fns"
1414import type { z } from "zod"
15+ import { createNumberInput } from "@/components/forms/NumberInput"
16+ import { Code , Stack , Text } from "@mantine/core"
1517
1618export const MembershipWriteFormSchema = MembershipWriteSchema . superRefine ( ( data , ctx ) => {
17- if ( isBefore ( data . end , data . start ) ) {
19+ if ( data . end && isBefore ( data . end , data . start ) ) {
1820 ctx . addIssue ( {
1921 code : "custom" ,
2022 message : "Sluttdato må være etter startdato" ,
@@ -26,13 +28,14 @@ export const MembershipWriteFormSchema = MembershipWriteSchema.superRefine((data
2628type MembershipWriteFormSchema = z . infer < typeof MembershipWriteFormSchema >
2729
2830const DEFAULT_VALUES : Partial < MembershipWriteFormSchema > = {
29- start : getCurrentUTC ( ) ,
30- end : addYears ( getCurrentUTC ( ) , 1 ) ,
31+ start : getCurrentSemesterStart ( ) ,
32+ end : getNextSemesterStart ( ) ,
3133 specialization : null ,
34+ semester : 0 ,
3235}
3336
3437interface UseMembershipWriteFormProps {
35- onSubmit ( data : z . infer < typeof MembershipWriteFormSchema > ) : void
38+ onSubmit ( data : MembershipWriteFormSchema ) : void
3639 defaultValues ?: Partial < MembershipWrite >
3740 label ?: string
3841}
@@ -59,6 +62,7 @@ export const useMembershipWriteForm = ({
5962 } ) ,
6063 specialization : createSelectInput ( {
6164 label : "Spesialisering" ,
65+ description : "Masterspesialisering" ,
6266 required : false ,
6367 clearable : true ,
6468 placeholder : "Velg spesialisering" ,
@@ -68,6 +72,7 @@ export const useMembershipWriteForm = ({
6872 value : specialization ,
6973 label : getSpecializationName ( specialization ) ?? specialization ,
7074 } ) ) ,
75+ disabled : false ,
7176 } ) ,
7277 start : createDateTimeInput ( {
7378 label : "Startdato" ,
@@ -77,6 +82,40 @@ export const useMembershipWriteForm = ({
7782 label : "Sluttdato" ,
7883 required : true ,
7984 } ) ,
85+ semester : createNumberInput ( {
86+ label : "Semester" ,
87+ description : (
88+ < Stack gap = "xs" >
89+ < Text size = "xs" c = "dimmed" >
90+ Hvilket semester medlemskapet innebærer. 0-indeksert.
91+ </ Text >
92+ < Stack gap = "0.25rem" >
93+ < Text size = "xs" c = "dimmed" >
94+ < Code > 0</ Code > → 1. semester (1. årstrinn)
95+ </ Text >
96+ < Text size = "xs" c = "dimmed" >
97+ < Code > 1</ Code > → 2. semester (1. årstrinn)
98+ </ Text >
99+ < Text size = "xs" c = "dimmed" >
100+ < Code > 2</ Code > → 3. semester (2. årstrinn)
101+ </ Text >
102+ < Text size = "xs" c = "dimmed" >
103+ ...
104+ </ Text >
105+ < Text size = "xs" c = "dimmed" >
106+ < Code > 8</ Code > → 9. semester (5. årstrinn)
107+ </ Text >
108+ < Text size = "xs" c = "dimmed" >
109+ < Code > 9</ Code > → 10. semester (5. årstrinn)
110+ </ Text >
111+ </ Stack >
112+ </ Stack >
113+ ) ,
114+ required : false ,
115+ min : 0 ,
116+ max : 9 ,
117+ allowDecimal : false ,
118+ } ) ,
80119 } ,
81120 } )
82121}
0 commit comments