diff --git a/package-lock.json b/package-lock.json index 408264c..56eabe8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@trusona/touchpoint-sdk", - "version": "0.0.3", + "version": "0.0.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@trusona/touchpoint-sdk", - "version": "0.0.3", + "version": "0.0.4", "license": "MIT", "dependencies": { "lit": "^2.8.0", diff --git a/package.json b/package.json index f8b735c..44836b1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@trusona/touchpoint-sdk", - "version": "0.0.3", + "version": "0.0.4", "repository": { "type": "git", "url": "git+https://github.com/trusona/auth-cloud-touchpoint-sdk.git" diff --git a/src/components/fido-passkey-details-card/fido-passkey-details-card.stories.ts b/src/components/fido-passkey-details-card/fido-passkey-details-card.stories.ts index 7525467..ea75c5a 100644 --- a/src/components/fido-passkey-details-card/fido-passkey-details-card.stories.ts +++ b/src/components/fido-passkey-details-card/fido-passkey-details-card.stories.ts @@ -10,22 +10,23 @@ export default { layout: 'centered', }, argTypes: { - savedText: { - description: "Text to indicate the Created Date" - }, - lastUsedText: { - description: "Text to indicate the Last Used Date" - }, - lastUsedIsMobile: { - description: "Boolean to indicate if the Last Usage was on Mobile", - table: {defaultValue: {summary: 'false'}} - }, - prevLastUsedText: { - description: "[Optional] Text to indicate the Previous Last Used Date" - }, - prevLastUsedIsMobile: { - description: "[Optional] Boolean to indicate if the Previous Last Usage was on Mobile", - table: {defaultValue: {summary: 'false'}} + passkeyDetails: { + description: `PasskeyDetails Object: + + PasskeyDetails { + createdAt: string, + isSync: boolean, + createdOperatingSystem: string, + passkeyActivity: Array< PasskeyActivity > + } + + PasskeyActivity { + lastUsedAt: string, + operatingSystem: string + }`, + control: { + type: 'object' + } } } } as Meta @@ -33,6 +34,7 @@ export default { let passkeyDetails: PasskeyDetails = { createdAt: '2023-10-12T17:12:13.183221Z', + isSync: true, createdOperatingSystem: 'Mac OS', passkeyActivity: [ { diff --git a/src/components/fido-passkey-details-card/fido-passkey-details-card.ts b/src/components/fido-passkey-details-card/fido-passkey-details-card.ts index b9245d0..514afb6 100644 --- a/src/components/fido-passkey-details-card/fido-passkey-details-card.ts +++ b/src/components/fido-passkey-details-card/fido-passkey-details-card.ts @@ -1,8 +1,8 @@ -import {LitElement, html, css, TemplateResult} from 'lit' -import {customElement, property} from 'lit/decorators.js' -import {repeat} from 'lit/directives/repeat.js' -import {sharedStyles} from '../../shared/style' -import {DateTime} from 'luxon'; +import { LitElement, html, css, TemplateResult } from 'lit' +import { customElement, property } from 'lit/decorators.js' +import { repeat } from 'lit/directives/repeat.js' +import { sharedStyles } from '../../shared/style' +import { DateTime } from 'luxon' const componentStyle = css` @@ -85,26 +85,25 @@ const componentStyle = css` ` export interface PasskeyActivity { - lastUsedAt: string - operatingSystem: string + lastUsedAt: string + operatingSystem: string } export interface PasskeyDetails { - createdAt: string - createdOperatingSystem: string - passkeyActivity: Array + createdAt: string + isSync: boolean + createdOperatingSystem: string + passkeyActivity: PasskeyActivity[] } @customElement('fido-passkey-details-card') class FidoPasskeyDetailsCard extends LitElement { + @property({ type: Object }) passkeyDetails?: PasskeyDetails - @property({type: Object}) passkeyDetails?: PasskeyDetails + static styles = [sharedStyles, componentStyle] - static styles = [sharedStyles, componentStyle] - - render(): TemplateResult { - // console.log(this.passkeyDetails) - return html` + render (): TemplateResult { + return html`
@@ -133,67 +132,67 @@ class FidoPasskeyDetailsCard extends LitElement {
` - } + } - private getCreatedAtText(): string { - const createdAt = this.passkeyDetails?.createdAt - const os = this.passkeyDetails?.createdOperatingSystem - const formattedDate = this.getFormattedDate(createdAt ?? "") - if (formattedDate) { - return `Saved with ${os ?? "--"} on ${formattedDate}` - } else { - return "" - } + private getCreatedAtText (): string { + const createdAt = this.passkeyDetails?.createdAt + const os = this.passkeyDetails?.createdOperatingSystem + const formattedDate = this.getFormattedDate(createdAt ?? '') + const syncText = this.passkeyDetails?.isSync === true ? '.' : '' + if (formattedDate) { + return `Saved with ${os ?? '--'} on ${formattedDate}${syncText}` + } else { + return '' } + } - private getLastUsedAtText(lastUsedAt?: string, lastUsedOs?: String): string { - const formattedDate = this.getFormattedDate(lastUsedAt ?? "") - return `${lastUsedOs ?? ""}, ${formattedDate}` - } + private getLastUsedAtText (lastUsedAt?: string, lastUsedOs?: String): string { + const formattedDate = this.getFormattedDate(lastUsedAt ?? '') + return `${lastUsedOs ?? ''}, ${formattedDate}` + } - private getFormattedDate(date: string) { - const parsedDate = DateTime.fromISO(date); - if (parsedDate.isValid) { - return parsedDate.toFormat("MMM d, yyyy, h:mm a ZZZZ") - } else { - return "" - } + private getFormattedDate (date: string) { + const parsedDate = DateTime.fromISO(date) + if (parsedDate.isValid) { + return parsedDate.toFormat('MMM d, yyyy, h:mm a ZZZZ') + } else { + return '' } + } - private getLastUsedActivity(): TemplateResult { - const activityList = this.passkeyDetails?.passkeyActivity - if (Array.isArray(activityList) && activityList.length > 0) { - return html` + private getLastUsedActivity (): TemplateResult { + const activityList = this.passkeyDetails?.passkeyActivity + if (Array.isArray(activityList) && activityList.length > 0) { + return html` ${repeat(this.passkeyDetails?.passkeyActivity ?? [], (activity: PasskeyActivity) => html` ${this.getActivityRow(activity)} `)}` - } else { - return html` + } else { + return html` ${this.getActivityRow({ - lastUsedAt: this.passkeyDetails?.createdAt ?? "", - operatingSystem: this.passkeyDetails?.createdOperatingSystem ?? "" + lastUsedAt: this.passkeyDetails?.createdAt ?? '', + operatingSystem: this.passkeyDetails?.createdOperatingSystem ?? '' })} ` - } } + } + private isMobile (operatingSystem?: string) { + return operatingSystem?.toLowerCase().includes('android') || operatingSystem?.toLowerCase().includes('ios') + } - private isMobile(operatingSystem?: string) { - return operatingSystem?.toLowerCase().includes('android') || operatingSystem?.toLowerCase().includes('ios') - } - - private getActivityRow(activity: PasskeyActivity): TemplateResult { - return html` + private getActivityRow (activity: PasskeyActivity): TemplateResult { + return html`
${this.getIcon(this.isMobile(activity.operatingSystem) ?? false)}

${this.getLastUsedAtText(activity.lastUsedAt, activity.operatingSystem)}

` - } + } - private getIcon(isMobile: boolean): TemplateResult { - if (isMobile) { - return html` + private getIcon (isMobile: boolean): TemplateResult { + if (isMobile) { + return html` ` - } else { - return html` + } else { + return html` ` - } } + } } declare global { - interface HTMLElementTagNameMap { - 'fido-passkey-details-card': FidoPasskeyDetailsCard - } + interface HTMLElementTagNameMap { + 'fido-passkey-details-card': FidoPasskeyDetailsCard + } } diff --git a/src/fido/fido-passkey-details/fido-passkey-details.stories.ts b/src/fido/fido-passkey-details/fido-passkey-details.stories.ts index ccb7c1c..1d2740a 100644 --- a/src/fido/fido-passkey-details/fido-passkey-details.stories.ts +++ b/src/fido/fido-passkey-details/fido-passkey-details.stories.ts @@ -14,22 +14,27 @@ export default { description: `Array of PasskeyDetails Objects. PasskeyDetails { - savedText: string, - lastUsedText: string - lastUsedIsMobile: boolean - prevLastUsedText?: string | null - prevLastUsedIsMobile?: boolean | null + createdAt: string, + isSync: boolean, + createdOperatingSystem: string, + passkeyActivity: Array< PasskeyActivity > + } + + PasskeyActivity { + lastUsedAt: string, + operatingSystem: string }`, control: { type: 'object' } - }, + } } } as Meta let passkeyDetails: PasskeyDetails[] = [ { createdAt: '2023-10-12T17:12:13.183221Z', + isSync: true, createdOperatingSystem: 'Mac OS', passkeyActivity: [ { @@ -43,6 +48,7 @@ let passkeyDetails: PasskeyDetails[] = [ ] }, { createdAt: '2023-10-10T17:12:13.183221Z', + isSync: false, createdOperatingSystem: 'Android 13' }, { diff --git a/src/fido/fido-passkey-details/fido-passkey-details.ts b/src/fido/fido-passkey-details/fido-passkey-details.ts index 13cc01d..6489be2 100644 --- a/src/fido/fido-passkey-details/fido-passkey-details.ts +++ b/src/fido/fido-passkey-details/fido-passkey-details.ts @@ -1,8 +1,8 @@ -import {LitElement, html, css, TemplateResult} from 'lit' -import {repeat} from 'lit/directives/repeat.js' -import {customElement, property} from 'lit/decorators.js' -import {sharedStyles} from '../../shared/style' -import {PasskeyDetails} from "../../components/fido-passkey-details-card/fido-passkey-details-card"; +import { LitElement, html, css, TemplateResult } from 'lit' +import { repeat } from 'lit/directives/repeat.js' +import { customElement, property } from 'lit/decorators.js' +import { sharedStyles } from '../../shared/style' +import { PasskeyDetails } from '../../components/fido-passkey-details-card/fido-passkey-details-card' const componentStyle = css` @@ -57,12 +57,12 @@ const componentStyle = css` @customElement('fido-passkey-details') class FidoPasskeyDetails extends LitElement { - @property({type: Array}) passkeyDetails: PasskeyDetails[] = new Array() + @property({ type: Array }) passkeyDetails: PasskeyDetails[] = new Array() - static styles = [sharedStyles, componentStyle] + static styles = [sharedStyles, componentStyle] - render(): TemplateResult { - return html` + render (): TemplateResult { + return html`

Passkeys

${this.getPasskeys()} @@ -85,20 +85,20 @@ class FidoPasskeyDetails extends LitElement {
` - } + } - private getPasskeys(): TemplateResult { - return html` + private getPasskeys (): TemplateResult { + return html` ${repeat(this.passkeyDetails, (details: PasskeyDetails) => html` `)} ` - } + } } declare global { - interface HTMLElementTagNameMap { - 'fido-passkey-details': FidoPasskeyDetails - } + interface HTMLElementTagNameMap { + 'fido-passkey-details': FidoPasskeyDetails + } } diff --git a/testpages/components/fido-passkey-details-card.html b/testpages/components/fido-passkey-details-card.html index 43eefdf..3ac2498 100644 --- a/testpages/components/fido-passkey-details-card.html +++ b/testpages/components/fido-passkey-details-card.html @@ -4,12 +4,13 @@ Auth Cloud SDK Demo - + +