diff --git a/manifest.json b/manifest.json index 55a7b2b..f8dcec7 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "id": "google-calendar", "name": "Google Calendar", - "version": "1.10.12", + "version": "1.10.13", "minAppVersion": "0.12.0", "description": "Interact with your Google Calendar from Inside Obsidian", "author": "YukiGasai", diff --git a/package.json b/package.json index a4d9614..af1c4e5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "google-calendar", - "version": "1.10.12", + "version": "1.10.13", "description": "Interact with your Google Calendar from Inside Obsidian", "main": "main.js", "scripts": { diff --git a/src/svelte/views/EventDetails.svelte b/src/svelte/views/EventDetails.svelte index cc69efb..589e96e 100644 --- a/src/svelte/views/EventDetails.svelte +++ b/src/svelte/views/EventDetails.svelte @@ -36,6 +36,9 @@ let recurringText = ""; let eventNoteQueryResult = findEventNote(event, plugin); + let endDateTimeElement:HTMLInputElement = null; + let endDateElement:HTMLInputElement = null; + // Make sure the date is always rounded to the next 15 minutes function getEmptyDate() { const minutes = 15; @@ -211,8 +214,27 @@ } } - const updateEvent = async () => { + const checkIfEndDateIsValid = () => { + if(fullDay) { + const isValid = window.moment(inputStartDate).isSameOrBefore(window.moment(inputEndDate)) + if(!isValid && endDateElement instanceof HTMLInputElement) { + endDateElement.setCustomValidity("End date must be after start date"); + endDateElement.reportValidity(); + } + return isValid; + } + const isValid = window.moment(inputStartDateTime).isBefore(window.moment(inputEndDateTime)) + if(!isValid && endDateTimeElement instanceof HTMLInputElement) { + endDateTimeElement.setCustomValidity("End date must be after start date"); + endDateTimeElement.reportValidity(); + } + return isValid; + } + const updateEvent = async () => { + if(!checkIfEndDateIsValid()) { + return; + } const cleanEvent = addEventDate(event); let updatedEvent; if(cleanEvent.recurringEventId){ @@ -226,7 +248,9 @@ } const updateAllEvents = async () => { - + if(!checkIfEndDateIsValid()) { + return; + } const updatedEvent = await googleUpdateEvent(addEventDate(event), true) if(updatedEvent.id){ closeFunction(); @@ -239,6 +263,9 @@ } const createNote = async () => { + if(!checkIfEndDateIsValid()) { + return; + } if (plugin.settings.useDefaultTemplate && plugin.settings.defaultFolder && plugin.settings.defaultFolder) { createNoteFromEvent(event, plugin.settings.defaultFolder, plugin.settings.defaultTemplate) } else { @@ -249,17 +276,39 @@ const openInBrowser = () => { window.open(event.htmlLink); } + + const changeStartDateTime = (e) => { + if(!e.target.value || !window.moment(e.target.value).isValid()){ + e.preventDefault(); + return; + } + inputStartDateTime = e.target.value + } + + const changeEndDateTime = (e) => { + if(!e.target.value || !window.moment(e.target.value).isValid()){ + e.preventDefault(); + return; + } + inputEndDateTime = e.target.value + } -$: { - //Update End Date if start date is before End Date - const start = window.moment(inputStartDateTime); - const end = window.moment(inputEndDateTime); + const changeStartDate = (e) => { + if(!e.target.value || !window.moment(e.target.value).isValid()){ + e.preventDefault(); + return; + } + inputStartDate = e.target.value + } - if(end.isBefore(start)){ - inputEndDateTime = start.add(1, 'hour').format("YYYY-MM-DDTHH:mm"); + const changeEndDate = (e) => { + if(!e.target.value || !window.moment(e.target.value).isValid()){ + e.preventDefault(); + return; + } + inputEndDate = e.target.value } -} @@ -292,17 +341,17 @@ $: { {#if fullDay} - + - + {:else} - + - + {/if}