core/identity (Customer/ExternalIdentity/ContactChannel models + VkIdGateway/ token/mock) and a standalone VkIdLoginComponent, per Sprint 0.1's "VK ID first" decision and v3.1 §14. Against docs/backend/PHASE-8-IDENTITY-MESSAGING-CONTRACT.md §1-2. Deliberately not wired into TelegramLoginComponent's dialog - that's the live, working QR-login surface for both customer and admin auth (components/telegram-login/), and splicing a second provider into it needs a real VK OAuth app to test against, not a mock bolt-on next to nine other phases. The button is a standalone, ready-to-place component; integrating it into checkout/login flows is follow-up work once VK credentials exist. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
38 lines
1.4 KiB
TypeScript
38 lines
1.4 KiB
TypeScript
import { ChangeDetectionStrategy, Component, inject, signal } from '@angular/core';
|
|
import { CommonModule } from '@angular/common';
|
|
import { take } from 'rxjs/operators';
|
|
import { VK_ID_GATEWAY } from '../../core/identity/services/vk-id-gateway.token';
|
|
import { IconComponent } from '../../shared/ui/icon/icon.component';
|
|
|
|
/**
|
|
* Standalone VK ID login button, per Sprint 0.1 ("do all after vk" - VK ID
|
|
* is the primary storefront social login going forward, per v3.1 §14).
|
|
* Deliberately not wired into TelegramLoginComponent's dialog yet - that
|
|
* component is the live, working customer/admin login surface, and
|
|
* splicing a second provider into it needs its own careful pass once a
|
|
* real VK OAuth app exists to test against, not a mock-backed bolt-on.
|
|
*/
|
|
@Component({
|
|
selector: 'app-vk-id-login',
|
|
standalone: true,
|
|
imports: [CommonModule, IconComponent],
|
|
templateUrl: './vk-id-login.component.html',
|
|
styleUrls: ['./vk-id-login.component.scss'],
|
|
changeDetection: ChangeDetectionStrategy.OnPush
|
|
})
|
|
export class VkIdLoginComponent {
|
|
private readonly gateway = inject(VK_ID_GATEWAY);
|
|
|
|
readonly loading = signal(false);
|
|
|
|
startLogin(): void {
|
|
this.loading.set(true);
|
|
this.gateway.getAuthorizeUrl().pipe(take(1)).subscribe(url => {
|
|
this.loading.set(false);
|
|
if (typeof window !== 'undefined') {
|
|
window.location.href = url;
|
|
}
|
|
});
|
|
}
|
|
}
|