@@ -15,8 +15,8 @@ export enum SemesterNumber {
1515/**
1616 * Takes a yearSemesterNumber and returns a yearSemesterNumber representing the semester previous to the given semester
1717 *
18- * @param { Object } yearSemesterNumber
19- * @returns
18+ * @param param0 YearSemesterNumber, e.g. { year: 2024, semesterNumber: 1 }
19+ * @returns YearSemesterNumber, e.g. { year: 2023, semesterNumber: 2 }
2020 */
2121export const calcPreviousSemester = ( { year, semesterNumber } : YearSemesterNumber ) => {
2222 if ( semesterNumber === 2 ) {
@@ -33,16 +33,27 @@ export const calcPreviousSemester = ({ year, semesterNumber }: YearSemesterNumbe
3333}
3434
3535/**
36+ * Takes a KTH semester in string or number format, returns an array with year at index 0
37+ * and semester number at index 1.
38+ * YearSemesterNumberArray is a legacy format, which is used in some parts of our code.
39+ * The preferred format is YearSemesterNumber.
3640 *
37- * @param { number } semester
38- * @returns
41+ * @param semester "20241" or 20241
42+ * @returns [2024, 1]
3943 */
4044export const parseSemesterIntoYearSemesterNumberArray = ( semester : string | number ) => {
4145 const yearSemesterNumberArrayStrings = semester . toString ( ) . match ( / .{ 1 , 4 } / g)
4246
4347 return yearSemesterNumberArrayStrings . map ( str => Number ( str ) )
4448}
4549
50+ // TODO Refactor this, confusing name as "Period" is ladok-speak, but here we create a KTH semester string
51+ /**
52+ * Returns a KTH semester string.
53+ *
54+ * @param date
55+ * @returns a KTH semester string "20241"
56+ */
4657export const getPeriodCodeForDate = ( date : Date ) => {
4758 const JULY = 6
4859 const year = date . getFullYear ( )
@@ -51,6 +62,15 @@ export const getPeriodCodeForDate = (date: Date) => {
5162 return `${ year } ${ semester } `
5263}
5364
65+ /**
66+ * Takes a string in LadokPeriod format and returns a YearSemesterNumberArray
67+ * Note that YearSemesterNumberArray is a legacy format.
68+ * YearSemesterNumber or AcademicSemester are preferred.
69+ * If possible, use {parseSemesterIntoYearSemesterNumber}.
70+ *
71+ * @param semester Semester string in ladok format, e.g. "VT2024"
72+ * @returns YearSemesterNumberArray, e.g. [2024, 1]
73+ */
5474const parseLadokSemester = ( semester : string ) => {
5575 let match = undefined
5676 if ( semester ) {
@@ -65,6 +85,15 @@ const parseLadokSemester = (semester: string) => {
6585 return [ Number ( year ) , semesterNumber ]
6686}
6787
88+ /**
89+ * Takes a string in KTH semester format and returns a YearSemesterNumberArray
90+ * Note that YearSemesterNumberArray is a legacy format.
91+ * YearSemesterNumber or AcademicSemester are preferred.
92+ * If possible, use {parseSemesterIntoYearSemesterNumber}.
93+ *
94+ * @param semester Semester string in KTH format, e.g. 20241
95+ * @returns YearSemesterNumberArray, e.g. [2024, 1]
96+ */
6897export const parseSemester = ( semester : string ) => {
6998 let match = undefined
7099 if ( semester ) {
@@ -80,6 +109,13 @@ export const parseSemester = (semester: string) => {
80109 return [ Number ( year ) , semesterNumber ]
81110}
82111
112+ /**
113+ * Takes a semester, either in LadokPeriod string format or KTH Semester string or number format.
114+ * Returns a YearSemesterNumber.
115+ *
116+ * @param semester A semester string|number in either KTH or Ladok format, e.g. "VT2024", "20241", 20241
117+ * @returns YearSemesterNumber, e.g. { year: 2024, semesterNumber: 1 }
118+ */
83119export const parseSemesterIntoYearSemesterNumber = ( semester : string | number ) : YearSemesterNumber => {
84120 const semesterString = semester . toString ( )
85121 const semesterRegex = / ^ ( [ A - Z a - z ] { 2 } \d { 4 } ) $ /
0 commit comments