You've already forked isop-mirror
fix: update date handling in InternshipEditor
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import type { CompanyData } from '~/types/company_data';
|
import type { CompanyData } from '~/types/company_data';
|
||||||
import type { Internship, NewInternship } from '~/types/internships';
|
import { convertDate, type Internship, type NewInternship } from '~/types/internships';
|
||||||
import type { User } from '~/types/user';
|
import type { User } from '~/types/user';
|
||||||
|
|
||||||
const rules = {
|
const rules = {
|
||||||
@@ -48,8 +48,8 @@ const props = defineProps<{
|
|||||||
|
|
||||||
const isValid = ref(false);
|
const isValid = ref(false);
|
||||||
const form = ref({
|
const form = ref({
|
||||||
start: props.internship?.start || "",
|
start: props.internship?.start ? convertDate(props.internship.start) : null,
|
||||||
end: props.internship?.end || "",
|
end: props.internship?.end ? convertDate(props.internship.end) : null,
|
||||||
year_of_study: props.internship?.year_of_study || 2025,
|
year_of_study: props.internship?.year_of_study || 2025,
|
||||||
semester: props.internship?.semester || "WINTER",
|
semester: props.internship?.semester || "WINTER",
|
||||||
company_id: props.internship?.company?.id == undefined ? null : props.internship.company.id,
|
company_id: props.internship?.company?.id == undefined ? null : props.internship.company.id,
|
||||||
@@ -59,11 +59,7 @@ const form = ref({
|
|||||||
|
|
||||||
const user = useSanctumUser<User>();
|
const user = useSanctumUser<User>();
|
||||||
|
|
||||||
function dateTimeFixup(datetime: Date | string) {
|
function dateTimeFixup(datetime: Date) {
|
||||||
if (typeof datetime === 'string') {
|
|
||||||
return datetime;
|
|
||||||
}
|
|
||||||
|
|
||||||
const year = datetime.getFullYear()
|
const year = datetime.getFullYear()
|
||||||
const month = String(datetime.getMonth() + 1).padStart(2, '0')
|
const month = String(datetime.getMonth() + 1).padStart(2, '0')
|
||||||
const day = String(datetime.getDate()).padStart(2, '0')
|
const day = String(datetime.getDate()).padStart(2, '0')
|
||||||
@@ -74,8 +70,8 @@ function triggerSubmit() {
|
|||||||
const new_internship: NewInternship = {
|
const new_internship: NewInternship = {
|
||||||
user_id: user.value?.id!,
|
user_id: user.value?.id!,
|
||||||
company_id: form.value.company_id!,
|
company_id: form.value.company_id!,
|
||||||
start: dateTimeFixup(form.value.start as any),
|
start: dateTimeFixup(form.value.start!),
|
||||||
end: dateTimeFixup(form.value.end as any),
|
end: dateTimeFixup(form.value.end!),
|
||||||
year_of_study: form.value.year_of_study,
|
year_of_study: form.value.year_of_study,
|
||||||
semester: form.value.semester,
|
semester: form.value.semester,
|
||||||
position_description: form.value.description
|
position_description: form.value.description
|
||||||
|
|||||||
@@ -25,4 +25,28 @@ export interface NewInternship {
|
|||||||
year_of_study: number;
|
year_of_study: number;
|
||||||
semester: string;
|
semester: string;
|
||||||
position_description: string;
|
position_description: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export function convertDate(date: string): Date {
|
||||||
|
const matcher = /^\d\d.\d\d.\d\d\d\d$/;
|
||||||
|
|
||||||
|
if (!matcher.test(date)) {
|
||||||
|
throw new Error(`Invalid date or format: '${date}'`);
|
||||||
|
}
|
||||||
|
|
||||||
|
const [day, month, year] = date.split('.').map(Number);
|
||||||
|
|
||||||
|
if (day === undefined || month === undefined || year === undefined) {
|
||||||
|
throw new Error(`Unable to parse date parts: '${date}'`);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (month < 1 || month > 12) {
|
||||||
|
throw new Error(`Invalid month: ${month}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (day < 1 || day > 31) {
|
||||||
|
throw new Error(`Invalid day: ${day}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Date(year, month - 1, day);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user