Skip to content

Commit daed1cc

Browse files
feat: use passkey
Signed-off-by: David Dal Busco <[email protected]>
1 parent bb51447 commit daed1cc

File tree

7 files changed

+54
-26
lines changed

7 files changed

+54
-26
lines changed
Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,5 @@
1-
<app-button (click)="signIn({ internet_identity: {} })">Sign in</app-button>
1+
<div class="gap flex flex-col">
2+
<app-passkey />
3+
4+
<app-button (click)="signIn({ internet_identity: {} })">Sign in</app-button>
5+
</div>

templates/angular-example/src/app/components/login/login.component.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
import { Component } from '@angular/core';
22
import { signIn } from '@junobuild/core';
33
import { ButtonComponent } from '../button/button.component';
4+
import { PasskeyComponent } from '../passkey/passkey/passkey.component';
45

56
@Component({
67
selector: 'app-login',
7-
imports: [ButtonComponent],
8+
imports: [ButtonComponent, PasskeyComponent],
89
templateUrl: './login.component.html',
910
})
1011
export class LoginComponent {

templates/angular-example/src/app/components/passkey/create-passkey/create-passkey.component.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ import {
22
Component,
33
computed,
44
ElementRef,
5-
input, output,
5+
input,
6+
output,
67
signal,
78
ViewChild,
89
} from '@angular/core';

templates/angular-example/src/app/components/passkey/passkey/passkey.component.html

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,15 @@
99
aria-modal="true"
1010
aria-labelledby="modalTitle"
1111
>
12-
<div class="w-full max-w-md rounded-sm border-[3px] border-black bg-white px-4 py-3 shadow-[5px_5px_0px_rgba(0,0,0,1)]">
13-
@if (progress === undefined || ('setup' in progress)) {
12+
<div
13+
class="w-full max-w-md rounded-sm border-[3px] border-black bg-white px-4 py-3 shadow-[5px_5px_0px_rgba(0,0,0,1)]"
14+
>
15+
@if (progress === undefined || "setup" in progress) {
1416
<div class="flex items-start justify-between">
15-
<h2 id="modalTitle" class="text-xl font-bold text-gray-900 sm:text-2xl">
17+
<h2
18+
id="modalTitle"
19+
class="text-xl font-bold text-gray-900 sm:text-2xl"
20+
>
1621
Hey 👋
1722
</h2>
1823

@@ -22,9 +27,19 @@ <h2 id="modalTitle" class="text-xl font-bold text-gray-900 sm:text-2xl">
2227
aria-label="Close"
2328
(click)="close()"
2429
>
25-
<svg xmlns="http://www.w3.org/2000/svg" class="size-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
26-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
27-
d="M6 18L18 6M6 6l12 12" />
30+
<svg
31+
xmlns="http://www.w3.org/2000/svg"
32+
class="size-5"
33+
fill="none"
34+
viewBox="0 0 24 24"
35+
stroke="currentColor"
36+
>
37+
<path
38+
stroke-linecap="round"
39+
stroke-linejoin="round"
40+
stroke-width="2"
41+
d="M6 18L18 6M6 6l12 12"
42+
/>
2843
</svg>
2944
</button>
3045
</div>
@@ -46,4 +61,3 @@ <h2 id="modalTitle" class="text-xl font-bold text-gray-900 sm:text-2xl">
4661

4762
<app-backdrop></app-backdrop>
4863
}
49-

templates/angular-example/src/app/components/passkey/passkey/passkey.component.ts

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Component, signal } from '@angular/core';
1+
import { Component, signal, OnInit } from '@angular/core';
22
import { isWebAuthnAvailable } from '@junobuild/core';
33
import { PasskeyProgress } from '../../../types/passkey';
44
import { ButtonComponent } from '../../button/button.component';
@@ -8,21 +8,22 @@ import { UsePasskeyComponent } from '../use-passkey/use-passkey.component';
88
@Component({
99
selector: 'app-passkey',
1010
templateUrl: './passkey.component.html',
11-
imports: [
12-
ButtonComponent,
13-
CreatePasskeyComponent,
14-
UsePasskeyComponent
15-
]
11+
imports: [ButtonComponent, CreatePasskeyComponent, UsePasskeyComponent],
1612
})
17-
export class PasskeyComponent {
18-
13+
export class PasskeyComponent implements OnInit {
1914
readonly #passkeySupported = signal(true);
2015
#showModal = signal(false);
2116
#passkeyProgress = signal<PasskeyProgress | undefined>(undefined);
2217

23-
get passkeySupported(): boolean { return this.#passkeySupported(); }
24-
get showModal(): boolean { return this.#showModal(); }
25-
get progress(): PasskeyProgress | undefined { return this.#passkeyProgress(); }
18+
get passkeySupported(): boolean {
19+
return this.#passkeySupported();
20+
}
21+
get showModal(): boolean {
22+
return this.#showModal();
23+
}
24+
get progress(): PasskeyProgress | undefined {
25+
return this.#passkeyProgress();
26+
}
2627

2728
ngOnInit() {
2829
isWebAuthnAvailable().then((withWebAuthn) =>

templates/angular-example/src/app/components/passkey/use-passkey/use-passkey.component.html

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
<app-button (click)="doSignIn()">Use your passkey</app-button>
55
} @else if (progress !== null) {
66
<app-progress>
7-
@if (progress.step === WebAuthnSignInProgressStep.RequestingUserCredential) {
7+
@if (
8+
progress.step === WebAuthnSignInProgressStep.RequestingUserCredential
9+
) {
810
<span>Requesting user credential...</span>
911
}
1012
@if (progress.step === WebAuthnSignInProgressStep.FinalizingCredential) {

templates/angular-example/src/app/components/passkey/use-passkey/use-passkey.component.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ import type { PasskeyProgress } from '../../../types/passkey';
99
import { ButtonComponent } from '../../button/button.component';
1010
import { ProgressComponent } from '../progress/progress.component';
1111

12-
type ProgressSignIn = SignProgress<WebAuthnSignInProgressStep> | undefined | null;
12+
type ProgressSignIn =
13+
| SignProgress<WebAuthnSignInProgressStep>
14+
| undefined
15+
| null;
1316

1417
@Component({
1518
selector: 'app-use-passkey',
@@ -27,14 +30,16 @@ export class UsePasskeyComponent {
2730

2831
return progress === undefined
2932
? undefined
30-
: "signIn" in progress ? progress.signIn : null;
33+
: 'signIn' in progress
34+
? progress.signIn
35+
: null;
3136
});
3237

3338
get progress(): ProgressSignIn {
3439
return this.#computedProgress();
3540
}
3641

37-
async doSignIn () {
42+
async doSignIn() {
3843
const onProgress: SignProgressFn<WebAuthnSignInProgressStep> = (progress) =>
3944
this.wizardOnProgress.emit({ signIn: progress });
4045

@@ -51,5 +56,5 @@ export class UsePasskeyComponent {
5156
// it is one to ignore - for example when the user cancel the flow.
5257
throw error;
5358
}
54-
};
59+
}
5560
}

0 commit comments

Comments
 (0)