feat(sprint18): editor autosave/reset, admin auth, QR reuse, Ed25519 prep
Some checks failed
Architecture Governance / architecture (push) Has been cancelled

- Project editor: persist draft to localStorage, restore on reload,
  last-saved/draft-restored status indicators, section/whole-draft reset
  with confirmation.
- Extract shared QR/polling/expiry engine from TelegramLoginComponent
  (shared/qr-login) and reuse it for a new admin login flow.
- Admin authentication kept fully separate from customer session:
  own cookie/localStorage keys, signals, guard, and header interceptor
  (core/admin-auth).
- ?login=true / ?adminLogin=true open the respective login dialog for
  manual testing.
- Ed25519 challenge/verify interfaces (fail-closed no-op binding) ready
  for backend delivery.
- Document autosave/reset/admin-auth/QR-reuse/Ed25519 model and the
  remaining full-field-coverage gap in docs/Project-Editor.md.
This commit is contained in:
sdarbinyan
2026-07-14 09:50:03 +04:00
parent c6482f0037
commit 3877b70fdf
33 changed files with 1423 additions and 171 deletions

View File

@@ -16,12 +16,28 @@ export type ProjectEditorSectionId =
export interface ProjectEditorState {
bootstrap: BootstrapConfig | null;
originalBootstrap: BootstrapConfig | null;
importError: string | null;
activeSection: ProjectEditorSectionId;
status: 'draft' | 'published';
lastSavedBootstrap: BootstrapConfig | null;
lastSavedAt: number | null;
draftRestored: boolean;
}
export const EDITOR_SECTION_BOOTSTRAP_KEYS: Partial<Record<ProjectEditorSectionId, (keyof BootstrapConfig)[]>> = {
general: ['tenant', 'seo'],
branding: ['branding'],
theme: ['theme'],
header: ['header'],
footer: ['footer', 'company'],
homepage: ['pages'],
widgets: ['pages'],
features: ['featureFlags', 'userExperience', 'catalog', 'productPage'],
languages: ['localization'],
navigation: ['navigation'],
};
export interface ProjectEditorWidgetPreset {
id: string;
type: string;