Commit 86bf854d authored by Yechang's avatar Yechang
Browse files

fix: fix time selection when create new problems

parent 216ab70b
Loading
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
import { error, redirect } from '@sveltejs/kit';
import { error } from '@sveltejs/kit';
import type { PageParentData, PageServerLoad } from './$types';

import { message, superValidate } from 'sveltekit-superforms';
import { zod } from 'sveltekit-superforms/adapters';
import { problemFromSchema } from './form.svelte';
import { fail, type Actions } from '@sveltejs/kit';
import { createAssignment } from '$lib/server/db/assignment';
import _ from 'lodash';
import { createProblem } from '$lib/server/db/problem';
import { problemFromSchema } from './schema';

export const load = (async ({ parent }) => {
	const parentData: PageParentData = await parent();
+15 −47
Original line number Diff line number Diff line
<script lang="ts" context="module">
	import { z } from 'zod';

	export const problemFromSchema = z.object({
		classId: z.number(),
		name: z
			.string({
				required_error: 'Required.'
			})
			.min(3, 'Name must be at least 3 characters.')
			.max(30, 'Name must not be longer than 30 characters'),
		title: z
			.string({
				required_error: 'Required.'
			})
			.min(3, 'Name must be at least 3 characters.')
			.max(30, 'Name must not be longer than 30 characters'),
		description: z.string(),
		judgementArgs: z.string(),
		start: z
			.string()
			.datetime()
			.refine((date) => (date === undefined ? false : true), 'Please select a valid date.'),
		end: z
			.string()
			.datetime()
			.refine((date) => (date === undefined ? false : true), 'Please select a valid date.')
	});

	export type ProblemFormSchema = typeof problemFromSchema;
</script>

<script lang="ts">
	import CalendarIcon from 'svelte-radix/Calendar.svelte';
	import SuperDebug, {
@@ -58,24 +26,24 @@
	import _ from 'lodash';
	import MdEditor from '$lib/components/md-editor.svelte';
	import MonacoEditor from '$lib/components/monaco/MonacoEditor.svelte';
	import { problemFromSchema, type ProblemFormSchema } from './schema';
	import { onMount } from 'svelte';

	export let data: SuperValidated<Infer<ProblemFormSchema>>;

	const form = superForm(data, {
		dataType: 'json',
		validators: zodClient(problemFromSchema)
	});
	const { form: formData, enhance, validate } = form;

	const df = new DateFormatter('en-US', {
		dateStyle: 'long'
	});
	let startTime: ZonedDateTime = now(getLocalTimeZone()).set({ minute: 0, second: 0, millisecond: 0 });
	let endTime: ZonedDateTime = now(getLocalTimeZone()).set({ minute: 0, second: 0, millisecond: 0 });

	let startTime: ZonedDateTime = $formData.start
		? parseZonedDateTime($formData.start)
		: now(getLocalTimeZone()).set({ minute: 0, second: 0, millisecond: 0 });
	let endTime: ZonedDateTime = $formData.end
		? parseZonedDateTime($formData.end)
		: now(getLocalTimeZone()).set({ minute: 0, second: 0, millisecond: 0 });
	onMount(() => {
		startTime = now(getLocalTimeZone()).set({ minute: 0, second: 0, millisecond: 0 });
		endTime = now(getLocalTimeZone()).set({ minute: 0, second: 0, millisecond: 0 });
	})

	$: {
		$formData.start = moment(startTime.toDate()).toISOString();
@@ -159,7 +127,7 @@
							const currDateObj = currDate.toDate(getLocalTimeZone());
							const today = new Date();

							if (currDateObj > today || currDate.year < 2017) return true;
							if (currDate.year < 2017) return true;

							return false;
						}}
@@ -192,12 +160,12 @@
					<Calendar
						bind:value={endTime}
						isDateDisabled={(currDate) => {
							const currDateObj = currDate.toDate(getLocalTimeZone());
							const today = new Date();
							// const currDateObj = currDate.toDate(getLocalTimeZone());
							// const today = new Date();

							if (currDateObj < startTime.toDate()) {
								return true;
							}
							// if (currDateObj < startTime.toDate()) {
							// 	return true;
							// }

							return false;
						}}
+29 −0
Original line number Diff line number Diff line
import { z } from 'zod';

export const problemFromSchema = z.object({
	classId: z.number(),
	name: z
		.string({
			required_error: 'Required.'
		})
		.min(3, 'Name must be at least 3 characters.')
		.max(30, 'Name must not be longer than 30 characters'),
	title: z
		.string({
			required_error: 'Required.'
		})
		.min(3, 'Name must be at least 3 characters.')
		.max(30, 'Name must not be longer than 30 characters'),
	description: z.string(),
	judgementArgs: z.string(),
	start: z
		.string()
		.datetime()
		.refine((date) => (date === undefined ? false : true), 'Please select a valid date.'),
	end: z
		.string()
		.datetime()
		.refine((date) => (date === undefined ? false : true), 'Please select a valid date.')
});

export type ProblemFormSchema = typeof problemFromSchema;
+3 −12
Original line number Diff line number Diff line
@@ -19,12 +19,8 @@
	import {
		getLocalTimeZone,
		ZonedDateTime,
		parseZonedDateTime,
		now,
		toCalendarDateTime,

		parseAbsoluteToLocal

	} from '@internationalized/date';
	import TimePicker from '$lib/components/ui/timer-picker/TimePicker.svelte';
	import moment from 'moment';
@@ -40,20 +36,16 @@

	const form = superForm(data, {
		dataType: 'json',
		validators: zodClient(problemFromSchema),
		onChange(event) {
			console.log(event)
		},
		validators: zodClient(problemFromSchema)
	});
	const { form: formData, enhance, validate, message } = form;

	console.log('what happened');
	let startTime: ZonedDateTime = $formData.start
		? parseAbsoluteToLocal($formData.start)
		: now(getLocalTimeZone()).set({ minute: 0, second: 0, millisecond: 0 });
	let endTime: ZonedDateTime = $formData.end
		? parseAbsoluteToLocal($formData.end)
		: now(getLocalTimeZone()).set({ minute: 1, second: 1, millisecond: 1 });
		: now(getLocalTimeZone()).set({ minute: 0, second: 0, millisecond: 0 });

	$: {
		$formData.start = moment(startTime.toDate()).toISOString();
@@ -62,11 +54,10 @@
	$: {
		$formData.end = moment(endTime.toDate()).toISOString();
		validate('end');
		console.log('changed');
	}
	$: bindName = true;
	$: {
		const expected = _.join(_.words(_.toLower($formData.title)), '-')
		const expected = _.join(_.words(_.toLower($formData.title)), '-');
		if (bindName && $formData.name !== expected) {
			$formData.name = expected;
		}