diff --git a/.gitignore b/.gitignore index 8ee54e8..514d5db 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,5 @@ coverage *.sw? *.tsbuildinfo + +.env diff --git a/index.html b/index.html index 9c7ebc3..a8cdba7 100644 --- a/index.html +++ b/index.html @@ -11,6 +11,8 @@ + Outils — TTTools + diff --git a/package-lock.json b/package-lock.json index 9ebd87e..981256b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,17 +1,19 @@ { - "name": "vue-project", - "version": "0.0.0", + "name": "leim-tool", + "version": "0.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "vue-project", - "version": "0.0.0", + "name": "leim-tool", + "version": "0.1.0", "dependencies": { "@phosphor-icons/vue": "^2.2.1", + "@supabase/supabase-js": "^2.43.1", "@vueuse/core": "^10.9.0", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", + "jwt-decode": "^4.0.0", "lucide-vue-next": "^0.364.0", "pinia": "^2.1.7", "radix-vue": "^1.6.1", @@ -1143,6 +1145,73 @@ "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", "dev": true }, + "node_modules/@supabase/auth-js": { + "version": "2.64.2", + "resolved": "https://registry.npmjs.org/@supabase/auth-js/-/auth-js-2.64.2.tgz", + "integrity": "sha512-s+lkHEdGiczDrzXJ1YWt2y3bxRi+qIUnXcgkpLSrId7yjBeaXBFygNjTaoZLG02KNcYwbuZ9qkEIqmj2hF7svw==", + "dependencies": { + "@supabase/node-fetch": "^2.6.14" + } + }, + "node_modules/@supabase/functions-js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.3.1.tgz", + "integrity": "sha512-QyzNle/rVzlOi4BbVqxLSH828VdGY1RElqGFAj+XeVypj6+PVtMlD21G8SDnsPQDtlqqTtoGRgdMlQZih5hTuw==", + "dependencies": { + "@supabase/node-fetch": "^2.6.14" + } + }, + "node_modules/@supabase/node-fetch": { + "version": "2.6.15", + "resolved": "https://registry.npmjs.org/@supabase/node-fetch/-/node-fetch-2.6.15.tgz", + "integrity": "sha512-1ibVeYUacxWYi9i0cf5efil6adJ9WRyZBLivgjs+AUpewx1F3xPi7gLgaASI2SmIQxPoCEjAsLAzKPgMJVgOUQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/@supabase/postgrest-js": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.15.2.tgz", + "integrity": "sha512-9/7pUmXExvGuEK1yZhVYXPZnLEkDTwxgMQHXLrN5BwPZZm4iUCL1YEyep/Z2lIZah8d8M433mVAUEGsihUj5KQ==", + "dependencies": { + "@supabase/node-fetch": "^2.6.14" + } + }, + "node_modules/@supabase/realtime-js": { + "version": "2.9.5", + "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.9.5.tgz", + "integrity": "sha512-TEHlGwNGGmKPdeMtca1lFTYCedrhTAv3nZVoSjrKQ+wkMmaERuCe57zkC5KSWFzLYkb5FVHW8Hrr+PX1DDwplQ==", + "dependencies": { + "@supabase/node-fetch": "^2.6.14", + "@types/phoenix": "^1.5.4", + "@types/ws": "^8.5.10", + "ws": "^8.14.2" + } + }, + "node_modules/@supabase/storage-js": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.5.5.tgz", + "integrity": "sha512-OpLoDRjFwClwc2cjTJZG8XviTiQH4Ik8sCiMK5v7et0MDu2QlXjCAW3ljxJB5+z/KazdMOTnySi+hysxWUPu3w==", + "dependencies": { + "@supabase/node-fetch": "^2.6.14" + } + }, + "node_modules/@supabase/supabase-js": { + "version": "2.43.1", + "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.43.1.tgz", + "integrity": "sha512-A+RV50mWNtyKo6M0u4G6AOqEifQD+MoOjZcpRkPMPpEAFgMsc2dt3kBlBlR/MgZizWQgUKhsvrwKk0efc8g6Ug==", + "dependencies": { + "@supabase/auth-js": "2.64.2", + "@supabase/functions-js": "2.3.1", + "@supabase/node-fetch": "2.6.15", + "@supabase/postgrest-js": "1.15.2", + "@supabase/realtime-js": "2.9.5", + "@supabase/storage-js": "2.5.5" + } + }, "node_modules/@swc/helpers": { "version": "0.5.8", "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.8.tgz", @@ -1173,11 +1242,15 @@ "version": "20.12.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.2.tgz", "integrity": "sha512-zQ0NYO87hyN6Xrclcqp7f8ZbXNbRfoGWNcMvHTPQp9UUrwI0mI7XBz+cu7/W6/VClYo2g63B0cjull/srU7LgQ==", - "dev": true, "dependencies": { "undici-types": "~5.26.4" } }, + "node_modules/@types/phoenix": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.6.4.tgz", + "integrity": "sha512-B34A7uot1Cv0XtaHRYDATltAdKx0BvVKNgYNqE4WjtPUa4VQJM7kxeXcVKaH+KS+kCmZ+6w+QaUdcljiheiBJA==" + }, "node_modules/@types/semver": { "version": "7.5.8", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", @@ -1201,6 +1274,14 @@ "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==" }, + "node_modules/@types/ws": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/yauzl": { "version": "2.10.3", "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", @@ -4029,6 +4110,14 @@ "verror": "1.10.0" } }, + "node_modules/jwt-decode": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz", + "integrity": "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==", + "engines": { + "node": ">=18" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -5862,6 +5951,11 @@ "node": ">= 4.0.0" } }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, "node_modules/ts-api-utils": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", @@ -5942,8 +6036,7 @@ "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" }, "node_modules/universalify": { "version": "2.0.1", @@ -6199,6 +6292,20 @@ "node": ">=12.0.0" } }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -6253,6 +6360,26 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, + "node_modules/ws": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", + "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/xml-name-validator": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", diff --git a/package.json b/package.json index 41441a6..b389171 100644 --- a/package.json +++ b/package.json @@ -18,10 +18,12 @@ }, "dependencies": { "@phosphor-icons/vue": "^2.2.1", - "lucide-vue-next": "^0.364.0", + "@supabase/supabase-js": "^2.43.1", "@vueuse/core": "^10.9.0", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", + "jwt-decode": "^4.0.0", + "lucide-vue-next": "^0.364.0", "pinia": "^2.1.7", "radix-vue": "^1.6.1", "tailwind-merge": "^2.2.2", diff --git a/src/stores/CalendarStore.ts b/src/stores/CalendarStore.ts index 0d63f99..88cce91 100644 --- a/src/stores/CalendarStore.ts +++ b/src/stores/CalendarStore.ts @@ -7,7 +7,6 @@ import { type LeimPeriod, type LeimPeriodShort } from '@/models/Date' -import { isDigit, isInt, isSignedInt } from '@/utils/Regex' import { useStorage, useUrlSearchParams } from '@vueuse/core' import { defineStore } from 'pinia' import { computed, ref, type ComputedRef, type Ref } from 'vue' @@ -76,11 +75,6 @@ export const useCalendar = defineStore('calendar', () => { 'century' ]) - // Get date from URL params - const params = useUrlSearchParams('history', { - write: true - }) - // Default date settings (current day in the world) const defaultDay: number = 23 const defaultMonth: number = 8 @@ -93,6 +87,16 @@ export const useCalendar = defineStore('calendar', () => { } }) + // Get date from URL params + const params = useUrlSearchParams('history', { + write: false, + initialValue: { + day: defaultDate.value.day.toString(), + month: defaultDate.value.month.toString(), + year: defaultDate.value.year.toString() + } + }) + const currentDay = computed(() => { return Number(params.day) }) @@ -180,19 +184,6 @@ export const useCalendar = defineStore('calendar', () => { } }) - function validateUrlParams(): void { - // Assign default values if no params exist in URL - if (!params.day || typeof params.day === 'object' || !isInt(params.day)) { - params.day = defaultDate.value.day.toString() - } - if (!params.month || typeof params.month === 'object' || !isDigit(params.month)) { - params.month = defaultDate.value.month.toString() - } - if (!params.year || typeof params.year === 'object' || !isSignedInt(params.year)) { - params.year = defaultDate.value.year.toString() - } - } - /** * Moves the current date forward one month */ @@ -404,7 +395,6 @@ export const useCalendar = defineStore('calendar', () => { selectedDate, selectDate, params, - validateUrlParams, getPeriodOfYear, incrementMonth, decrementMonth, diff --git a/src/views/meta.ts b/src/utils/meta.ts similarity index 100% rename from src/views/meta.ts rename to src/utils/meta.ts diff --git a/src/views/CalendarPage.vue b/src/views/CalendarPage.vue index ee245b3..ef558c0 100644 --- a/src/views/CalendarPage.vue +++ b/src/views/CalendarPage.vue @@ -1,20 +1,59 @@