aboutsummaryrefslogtreecommitdiffstats
path: root/old-apps/projects/src/app/pages/views/entry-form/sections/date-time.svelte
diff options
context:
space:
mode:
authorivarlovlie <git@ivarlovlie.no>2022-09-20 09:24:27 +0200
committerivarlovlie <git@ivarlovlie.no>2022-09-20 09:24:27 +0200
commita9072370ca1eb9a5cce928b1d487db0f307edea6 (patch)
tree59c3c23df930a8b5f888dc7813923abf4ceefed4 /old-apps/projects/src/app/pages/views/entry-form/sections/date-time.svelte
parent56fa963a1d63cbe0bf28e29e717cceaa417c45c1 (diff)
downloadgreatoffice-a9072370ca1eb9a5cce928b1d487db0f307edea6.tar.xz
greatoffice-a9072370ca1eb9a5cce928b1d487db0f307edea6.zip
feat: Move old apps into it's own directory
Diffstat (limited to 'old-apps/projects/src/app/pages/views/entry-form/sections/date-time.svelte')
-rw-r--r--old-apps/projects/src/app/pages/views/entry-form/sections/date-time.svelte167
1 files changed, 167 insertions, 0 deletions
diff --git a/old-apps/projects/src/app/pages/views/entry-form/sections/date-time.svelte b/old-apps/projects/src/app/pages/views/entry-form/sections/date-time.svelte
new file mode 100644
index 0000000..b91f1a4
--- /dev/null
+++ b/old-apps/projects/src/app/pages/views/entry-form/sections/date-time.svelte
@@ -0,0 +1,167 @@
+<script lang="ts">
+ import LL from "$app/lib/i18n/i18n-svelte";
+ import { Temporal } from "@js-temporal/polyfill";
+
+ // TIME
+ let fromTimeValue = "";
+ let fromTimeError = "";
+ let toTimeValue = "";
+ let toTimeError = "";
+
+ function handle_from_time_changed(e) {
+ fromTimeValue = e.target.value;
+ if (fromTimeValue) {
+ fromTimeError = "";
+ }
+ }
+
+ function handle_to_time_changed(e) {
+ toTimeValue = e.target.value;
+ if (toTimeValue) {
+ toTimeError = "";
+ }
+ }
+
+ // DATE
+ let date = Temporal.Now.plainDateTimeISO().toString().substring(0, 10);
+ let dateError = "";
+
+ function is_valid() {
+ let isValid = true;
+ let focusIsSet = false;
+ if (!date) {
+ dateError = $LL.views.entryForm.dateTime.errDateIsRequired();
+ isValid = false;
+ if (!focusIsSet) {
+ document.getElementById("date")?.focus();
+ focusIsSet = true;
+ }
+ } else {
+ dateError = "";
+ }
+
+ if (!fromTimeValue) {
+ fromTimeError = $LL.views.entryForm.dateTime.errFromIsRequired();
+ isValid = false;
+ if (!focusIsSet) {
+ document.getElementById("from")?.focus();
+ focusIsSet = true;
+ }
+ } else if (toTimeValue && fromTimeValue > toTimeValue) {
+ fromTimeError = $LL.views.entryForm.dateTime.errFromAfterTo();
+ isValid = false;
+ if (!focusIsSet) {
+ document.getElementById("from")?.focus();
+ focusIsSet = true;
+ }
+ } else if (fromTimeValue === toTimeValue) {
+ fromTimeError = $LL.views.entryForm.dateTime.errFromEqTo();
+
+ isValid = false;
+ if (!focusIsSet) {
+ document.getElementById("from")?.focus();
+ focusIsSet = true;
+ }
+ } else {
+ fromTimeError = "";
+ }
+
+ if (!toTimeValue) {
+ toTimeError = $LL.views.entryForm.dateTime.errToIsRequired();
+ isValid = false;
+ if (!focusIsSet) {
+ document.getElementById("to")?.focus();
+ focusIsSet = true;
+ }
+ } else if (fromTimeValue && toTimeValue < fromTimeValue) {
+ toTimeError = $LL.views.entryForm.dateTime.errToBeforeFrom();
+ isValid = false;
+ if (!focusIsSet) {
+ document.getElementById("to")?.focus();
+ focusIsSet = true;
+ }
+ } else {
+ toTimeError = "";
+ }
+
+ return isValid;
+ }
+
+ export const functions = {
+ get_from_time_value() {
+ return fromTimeValue;
+ },
+ get_to_time_value() {
+ return toTimeValue;
+ },
+ get_date() {
+ return date;
+ },
+ is_valid,
+ reset(focusDate = false) {
+ fromTimeValue = "";
+ toTimeValue = "";
+ if (focusDate) {
+ document.getElementById("date")?.focus();
+ }
+ console.log($LL.views.entryForm.dateTime._logReset());
+ },
+ set_times(value) {
+ fromTimeValue = value.from.toPlainTime().toString().substring(0, 5);
+ toTimeValue = value.to.toPlainTime().toString().substring(0, 5);
+ },
+ set_date(new_date: Temporal.PlainDate) {
+ date = new_date.toString();
+ },
+ set_values(values) {
+ const currentTimeZone = Temporal.Now.timeZone().id;
+ const startDate = Temporal.Instant.from(values.start);
+ const stopDate = Temporal.Instant.from(values.stop);
+ fromTimeValue = startDate.toZonedDateTimeISO(currentTimeZone).toPlainTime().toString().substring(0, 5);
+ toTimeValue = stopDate.toZonedDateTimeISO(currentTimeZone).toPlainTime().toString().substring(0, 5);
+ date = startDate.toZonedDateTimeISO(currentTimeZone).toPlainDate().toString();
+ }
+ };
+</script>
+
+<div class="grid gap-xs">
+ <div class="col-4">
+ <label for="date"
+ class="form-label margin-bottom-xxs">{$LL.views.entryForm.dateTime.date()}</label>
+ <input type="date"
+ id="date"
+ class="form-control width-100%"
+ bind:value={date}>
+ {#if dateError}
+ <small class="color-error">{dateError}</small>
+ {/if}
+ </div>
+ <div class="col-4">
+ <label for="from"
+ class="form-label margin-bottom-xxs">{$LL.views.entryForm.dateTime.from()}</label>
+ <input id="from"
+ class="form-control width-100%"
+ pattern="[0-9][0-9]:[0-9][0-9]"
+ type="time"
+ bind:value={fromTimeValue}
+ on:input={handle_from_time_changed}
+ />
+ {#if fromTimeError}
+ <small class="color-error">{fromTimeError}</small>
+ {/if}
+ </div>
+ <div class="col-4">
+ <label for="to"
+ class="form-label margin-bottom-xxs">{$LL.views.entryForm.dateTime.to()}</label>
+ <input id="to"
+ class="form-control width-100%"
+ pattern="[0-9][0-9]:[0-9][0-9]"
+ type="time"
+ bind:value={toTimeValue}
+ on:input={handle_to_time_changed}
+ />
+ {#if toTimeError}
+ <small class="color-error">{toTimeError}</small>
+ {/if}
+ </div>
+</div>