diff --git a/src/lib/helpers/date.ts b/src/lib/helpers/date.ts index 8558f315f..68f9c31a7 100644 --- a/src/lib/helpers/date.ts +++ b/src/lib/helpers/date.ts @@ -1,5 +1,10 @@ export const toLocaleDate = (datetime: string) => { const date = new Date(datetime); + + if (isNaN(date.getTime())) { + return 'n/a'; + } + const options: Intl.DateTimeFormatOptions = { year: 'numeric', month: 'short', @@ -11,6 +16,11 @@ export const toLocaleDate = (datetime: string) => { export const toLocaleDateTime = (datetime: string | number) => { const date = new Date(datetime); + + if (isNaN(date.getTime())) { + return 'n/a'; + } + const options: Intl.DateTimeFormatOptions = { year: 'numeric', month: 'short', diff --git a/src/lib/stores/wizard.ts b/src/lib/stores/wizard.ts index 355eb7afc..0eccf0be0 100644 --- a/src/lib/stores/wizard.ts +++ b/src/lib/stores/wizard.ts @@ -1,11 +1,11 @@ import { trackEvent } from '$lib/actions/analytics'; -import type { SvelteComponent } from 'svelte'; +import type { ComponentType } from 'svelte'; import { writable } from 'svelte/store'; export type WizardStore = { show: boolean; media?: string; - component?: typeof SvelteComponent; + component?: ComponentType; interceptor?: () => Promise; }; @@ -20,10 +20,11 @@ function createWizardStore() { return { subscribe, set, - start: (component: typeof SvelteComponent, media: string = null) => + start: (component: ComponentType, media: string = null) => update((n) => { n.show = true; n.component = component; + n.interceptor = null; n.media = media; trackEvent('wizard_start'); return n; @@ -39,6 +40,7 @@ function createWizardStore() { update((n) => { n.show = false; n.component = null; + n.interceptor = null; n.media = null; return n; diff --git a/src/routes/console/project-[project]/auth/+page.svelte b/src/routes/console/project-[project]/auth/+page.svelte index 39252ec87..2dee0dbfb 100644 --- a/src/routes/console/project-[project]/auth/+page.svelte +++ b/src/routes/console/project-[project]/auth/+page.svelte @@ -19,7 +19,7 @@ TableRowLink } from '$lib/elements/table'; import { Pill } from '$lib/elements'; - import { toLocaleDateTime } from '$lib/helpers/date'; + import { toLocaleDate, toLocaleDateTime } from '$lib/helpers/date'; import { Container } from '$lib/layout'; import { base } from '$app/paths'; import { goto } from '$app/navigation'; @@ -32,7 +32,8 @@ // TODO: Remove this when the console SDK is updated const users = data.users.users.map((user) => { const labels: string[] = []; - return { labels, ...user }; + const accessedAt = ''; + return { accessedAt, labels, ...user }; }); let showCreate = false; @@ -57,6 +58,7 @@ ID Labels Joined + Last Activity {#each users as user} @@ -115,6 +117,9 @@ {toLocaleDateTime(user.registration)} + + {user.accessedAt ? toLocaleDate(user.accessedAt) : 'never'} + {/each} diff --git a/src/routes/console/project-[project]/auth/user-[user]/dangerZone.svelte b/src/routes/console/project-[project]/auth/user-[user]/dangerZone.svelte index 8fa2ff05d..a04d1cfc0 100644 --- a/src/routes/console/project-[project]/auth/user-[user]/dangerZone.svelte +++ b/src/routes/console/project-[project]/auth/user-[user]/dangerZone.svelte @@ -1,10 +1,14 @@ @@ -42,6 +46,7 @@ ? [$user.email, $user.phone].join(',') : $user.email || $user.phone}

+

Last activity: {accessedAt ? toLocaleDate(accessedAt) : 'never'}

diff --git a/src/routes/console/project-[project]/auth/user-[user]/updateStatus.svelte b/src/routes/console/project-[project]/auth/user-[user]/updateStatus.svelte index 60a2189d1..80fe968c8 100644 --- a/src/routes/console/project-[project]/auth/user-[user]/updateStatus.svelte +++ b/src/routes/console/project-[project]/auth/user-[user]/updateStatus.svelte @@ -5,7 +5,7 @@ import { Dependencies } from '$lib/constants'; import { Pill } from '$lib/elements'; import { Button } from '$lib/elements/forms'; - import { toLocaleDateTime } from '$lib/helpers/date'; + import { toLocaleDate, toLocaleDateTime } from '$lib/helpers/date'; import { addNotification } from '$lib/stores/notifications'; import { sdk } from '$lib/stores/sdk'; import { user } from './store'; @@ -71,6 +71,9 @@ trackError(error, Submit.UserUpdateStatus); } } + + // TODO: Remove this when the console SDK is updated + $: accessedAt = ($user as unknown as { accessedAt: string }).accessedAt; @@ -100,6 +103,7 @@

{$user.phone}

{/if}

Joined: {toLocaleDateTime($user.registration)}

+

Last activity: {accessedAt ? toLocaleDate(accessedAt) : 'never'}

{#if !$user.status} blocked diff --git a/src/routes/console/project-[project]/overview/keys/+page.svelte b/src/routes/console/project-[project]/overview/keys/+page.svelte index 714ccea79..92cc16287 100644 --- a/src/routes/console/project-[project]/overview/keys/+page.svelte +++ b/src/routes/console/project-[project]/overview/keys/+page.svelte @@ -9,7 +9,7 @@ TableHeader, TableRowLink } from '$lib/elements/table'; - import { toLocaleDateTime } from '$lib/helpers/date'; + import { toLocaleDate, toLocaleDateTime } from '$lib/helpers/date'; import { wizard } from '$lib/stores/wizard'; import type { PageData } from './$types'; import Wizard from './wizard.svelte'; @@ -46,7 +46,7 @@ {key.name} - {key.accessedAt ? toLocaleDateTime(key.accessedAt) : 'never'} + {key.accessedAt ? toLocaleDate(key.accessedAt) : 'never'} {key.expire ? toLocaleDateTime(key.expire) : 'never'} diff --git a/src/routes/console/project-[project]/overview/keys/[key]/+page@project-[project].svelte b/src/routes/console/project-[project]/overview/keys/[key]/+page@project-[project].svelte index e82edaeb4..62d563158 100644 --- a/src/routes/console/project-[project]/overview/keys/[key]/+page@project-[project].svelte +++ b/src/routes/console/project-[project]/overview/keys/[key]/+page@project-[project].svelte @@ -5,7 +5,7 @@ import { Dependencies } from '$lib/constants'; import { Button, Form, FormList, InputText } from '$lib/elements/forms'; import { symmetricDifference } from '$lib/helpers/array'; - import { toLocaleDateTime } from '$lib/helpers/date'; + import { toLocaleDate } from '$lib/helpers/date'; import { Container } from '$lib/layout'; import { addNotification } from '$lib/stores/notifications'; import { sdk } from '$lib/stores/sdk'; @@ -83,7 +83,7 @@ - {@const accessedAt = $key.accessedAt ? toLocaleDateTime($key.accessedAt) : 'never'} + {@const accessedAt = $key.accessedAt ? toLocaleDate($key.accessedAt) : 'never'}
{$key.name} diff --git a/tests/unit/helpers/date.test.ts b/tests/unit/helpers/date.test.ts index 16b5ff3f4..fab13619a 100644 --- a/tests/unit/helpers/date.test.ts +++ b/tests/unit/helpers/date.test.ts @@ -16,6 +16,10 @@ describe('local date', () => { expect(toLocaleDate(value)).toBe(expected); }); }); + + it('invalid date', () => { + expect(toLocaleDate('')).toBe('n/a'); + }); }); describe('local date time', () => { @@ -27,6 +31,10 @@ describe('local date time', () => { expect(toLocaleDateTime(value)).toBe(expected); }); }); + + it('invalid date', () => { + expect(toLocaleDateTime('')).toBe('n/a'); + }); }); describe('is same day', () => {