@trismegisto/spine 3.3.3 → 3.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -2
- package/fesm2022/trismegisto-spine-audit.mjs +6 -6
- package/fesm2022/trismegisto-spine-audit.mjs.map +1 -1
- package/fesm2022/{trismegisto-spine-auto-service-auto-service-client.component-BAfeLyTB.mjs → trismegisto-spine-auto-service-auto-service-client.component-kAXaCM5W.mjs} +8 -8
- package/fesm2022/{trismegisto-spine-auto-service-auto-service-client.component-BAfeLyTB.mjs.map → trismegisto-spine-auto-service-auto-service-client.component-kAXaCM5W.mjs.map} +1 -1
- package/fesm2022/{trismegisto-spine-auto-service-auto-service-groups.component-BYjIQ9ID.mjs → trismegisto-spine-auto-service-auto-service-groups.component-DE2QIGRH.mjs} +251 -85
- package/fesm2022/trismegisto-spine-auto-service-auto-service-groups.component-DE2QIGRH.mjs.map +1 -0
- package/fesm2022/{trismegisto-spine-auto-service-auto-service-news-page.component-CBemH4hr.mjs → trismegisto-spine-auto-service-auto-service-news-page.component-BW7BJ0oD.mjs} +2 -2
- package/fesm2022/{trismegisto-spine-auto-service-auto-service-news-page.component-CBemH4hr.mjs.map → trismegisto-spine-auto-service-auto-service-news-page.component-BW7BJ0oD.mjs.map} +1 -1
- package/fesm2022/{trismegisto-spine-auto-service-auto-service-ratings-page.component-C_THGTkw.mjs → trismegisto-spine-auto-service-auto-service-ratings-page.component-CHPU-QLJ.mjs} +2 -2
- package/fesm2022/{trismegisto-spine-auto-service-auto-service-ratings-page.component-C_THGTkw.mjs.map → trismegisto-spine-auto-service-auto-service-ratings-page.component-CHPU-QLJ.mjs.map} +1 -1
- package/fesm2022/trismegisto-spine-auto-service-auto-service-suggestions-page.component-CkiCTmXD.mjs +3733 -0
- package/fesm2022/trismegisto-spine-auto-service-auto-service-suggestions-page.component-CkiCTmXD.mjs.map +1 -0
- package/fesm2022/{trismegisto-spine-auto-service-auto-service.component-QsIQ61w2.mjs → trismegisto-spine-auto-service-auto-service.component-D58Ht9PH.mjs} +7 -7
- package/fesm2022/{trismegisto-spine-auto-service-auto-service.component-QsIQ61w2.mjs.map → trismegisto-spine-auto-service-auto-service.component-D58Ht9PH.mjs.map} +1 -1
- package/fesm2022/{trismegisto-spine-auto-service-groups.technical-_jQrg1Qh.mjs → trismegisto-spine-auto-service-groups.technical-CB1D3ANC.mjs} +12 -3
- package/fesm2022/trismegisto-spine-auto-service-groups.technical-CB1D3ANC.mjs.map +1 -0
- package/fesm2022/{trismegisto-spine-auto-service-groups.usage-OvWjNeeT.mjs → trismegisto-spine-auto-service-groups.usage-De2MhlE7.mjs} +7 -2
- package/fesm2022/{trismegisto-spine-auto-service-groups.usage-OvWjNeeT.mjs.map → trismegisto-spine-auto-service-groups.usage-De2MhlE7.mjs.map} +1 -1
- package/fesm2022/{trismegisto-spine-auto-service-suggestions.technical-BtUK6sKD.mjs → trismegisto-spine-auto-service-suggestions.technical-CGBBzAR8.mjs} +14 -1
- package/fesm2022/{trismegisto-spine-auto-service-suggestions.technical-BtUK6sKD.mjs.map → trismegisto-spine-auto-service-suggestions.technical-CGBBzAR8.mjs.map} +1 -1
- package/fesm2022/{trismegisto-spine-auto-service-suggestions.usage-BwO9Hjsx.mjs → trismegisto-spine-auto-service-suggestions.usage-DnAJS-Z0.mjs} +26 -3
- package/fesm2022/trismegisto-spine-auto-service-suggestions.usage-DnAJS-Z0.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-auto-service.mjs +24 -11
- package/fesm2022/trismegisto-spine-auto-service.mjs.map +1 -1
- package/fesm2022/{trismegisto-spine-layout-suggestions-page.component-xI2gDMok.mjs → trismegisto-spine-layout-suggestions-page.component-CEKMqera.mjs} +3 -3
- package/fesm2022/{trismegisto-spine-layout-suggestions-page.component-xI2gDMok.mjs.map → trismegisto-spine-layout-suggestions-page.component-CEKMqera.mjs.map} +1 -1
- package/fesm2022/{trismegisto-spine-layout-trismegisto-spine-layout-Clphrsgc.mjs → trismegisto-spine-layout-trismegisto-spine-layout-DiAfxIGP.mjs} +428 -93
- package/fesm2022/trismegisto-spine-layout-trismegisto-spine-layout-DiAfxIGP.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-layout.mjs +1 -1
- package/fesm2022/trismegisto-spine-side-panel.mjs +1 -1
- package/fesm2022/trismegisto-spine-side-panel.mjs.map +1 -1
- package/fesm2022/trismegisto-spine.mjs +528 -10
- package/fesm2022/trismegisto-spine.mjs.map +1 -1
- package/package.json +6 -6
- package/types/trismegisto-spine-auto-service.d.ts +20 -4
- package/types/trismegisto-spine-auto-service.d.ts.map +1 -1
- package/types/trismegisto-spine-layout.d.ts +327 -63
- package/types/trismegisto-spine-layout.d.ts.map +1 -1
- package/types/trismegisto-spine.d.ts +221 -3
- package/types/trismegisto-spine.d.ts.map +1 -1
- package/fesm2022/trismegisto-spine-auto-service-auto-service-groups.component-BYjIQ9ID.mjs.map +0 -1
- package/fesm2022/trismegisto-spine-auto-service-auto-service-suggestions-page.component-mMjE3JOL.mjs +0 -2179
- package/fesm2022/trismegisto-spine-auto-service-auto-service-suggestions-page.component-mMjE3JOL.mjs.map +0 -1
- package/fesm2022/trismegisto-spine-auto-service-groups.technical-_jQrg1Qh.mjs.map +0 -1
- package/fesm2022/trismegisto-spine-auto-service-suggestions.usage-BwO9Hjsx.mjs.map +0 -1
- package/fesm2022/trismegisto-spine-layout-trismegisto-spine-layout-Clphrsgc.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trismegisto-spine-auto-service-auto-service-client.component-BAfeLyTB.mjs","sources":["../../../projects/ui/auto-service/src/tabs/auto-service-routes/route-path.validator.ts","../../../projects/ui/auto-service/src/tabs/auto-service-routes/auto-service-routes.component.ts","../../../projects/ui/auto-service/src/tabs/auto-service-routes/auto-service-routes.component.html","../../../projects/ui/auto-service/src/tabs/auto-service-routers/modals/routers-reorder/auto-service-routers-reorder.component.ts","../../../projects/ui/auto-service/src/tabs/auto-service-routers/modals/routers-reorder/auto-service-routers-reorder.component.html","../../../projects/ui/auto-service/src/tabs/auto-service-routers/auto-service-routers.component.ts","../../../projects/ui/auto-service/src/tabs/auto-service-routers/auto-service-routers.component.html","../../../projects/ui/auto-service/src/tabs/auto-service-access/modals/access-create/auto-service-access-create.component.ts","../../../projects/ui/auto-service/src/tabs/auto-service-access/modals/access-create/auto-service-access-create.component.html","../../../projects/ui/auto-service/src/tabs/auto-service-access/modals/access-guards/auto-service-access-guards.component.ts","../../../projects/ui/auto-service/src/tabs/auto-service-access/modals/access-guards/auto-service-access-guards.component.html","../../../projects/ui/auto-service/src/tabs/auto-service-access/auto-service-access.component.ts","../../../projects/ui/auto-service/src/tabs/auto-service-access/auto-service-access.component.html","../../../projects/ui/auto-service/src/auto-service-client.component.ts","../../../projects/ui/auto-service/src/auto-service-client.component.html"],"sourcesContent":["import { AbstractControl, ValidationErrors } from '@angular/forms';\n\n/**\n * Caminho de UMA rota = um trecho só do endereço (`dashboard`, `ordens-servico`). O `/` entre níveis\n * é o roteador que monta, juntando o caminho de cada rota da composição (header→…→page). Um `/`\n * dentro do caminho (ex.: `laboratorio/dashboard` numa rota só) desalinha a cadeia que o `ViewGuard`\n * resolve por nível e a tela cai no fallback (volta para o início) — achado real, 2026-10-07.\n *\n * Só letras minúsculas e hífen, sem hífen no início/fim nem dois seguidos. Mesma regra do admin-server\n * do Argos (`route-path.ts`), que é quem de fato recusa — aqui é só para avisar antes de enviar.\n */\nexport const ROUTE_PATH_PATTERN = /^[a-z]+(?:-[a-z]+)*$/;\n\n/** Vazio passa (rota \"pasta\", só agrupa o menu); preenchido precisa casar com `ROUTE_PATH_PATTERN`. */\nexport function routePathValidator(control: AbstractControl<string>): ValidationErrors | null {\n const value = control.value ?? '';\n return value === '' || ROUTE_PATH_PATTERN.test(value) ? null : { routePath: true };\n}\n","import { Component, Input, OnChanges, SimpleChanges, ChangeDetectionStrategy, inject, computed, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport {\n ButtonComponent, CheckboxComponent, ComboboxComponent, ComboboxOption, CopyButtonComponent, DataGridActionTriggered, DataGridCellDirective,\n DataGridComponent, DataGridRowAction, InputComponent, GridColumn, IconComponent, ModalComponent, TagComponent,\n TextareaComponent,\n} from '@trismegisto/angular';\nimport { HERMES_ICONS } from '@trismegisto/icons/catalog';\nimport { formatMessage } from '@trismegisto/primitives';\nimport { AutoServiceDeleteFeedback } from '../../auto-service-delete';\nimport { AutoServiceService } from '../../auto-service.service';\nimport { SPINE_MESSAGES } from '@trismegisto/spine';\nimport { routePathValidator } from './route-path.validator';\nimport { optionalIdBody, optionalIdValidator } from '../../optional-id.validator';\n\ninterface RouteRow {\n id: string; name: string; display_name?: string; icon?: string; path?: string; info?: string; excludable: boolean;\n /** Cópia de uma rota de template: pertence ao template, o auto-serviço só exibe (o admin-server recusa com 403). */\n templated?: boolean;\n}\n\n@Component({\n selector: 'spine-auto-service-routes',\n standalone: true,\n imports: [\n CommonModule, ReactiveFormsModule, ButtonComponent, CheckboxComponent, ComboboxComponent, IconComponent, InputComponent,\n TextareaComponent, ModalComponent, DataGridComponent, DataGridCellDirective, TagComponent, CopyButtonComponent,\n ],\n templateUrl: './auto-service-routes.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['./auto-service-routes.component.scss'],\n})\nexport class AutoServiceRoutesComponent implements OnChanges {\n protected readonly text = inject(SPINE_MESSAGES).autoService;\n /** Telas com estado em campo comum, preenchido depois de `await`: marca a view ao terminar (app sem zone.js). */\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly deletion = inject(AutoServiceDeleteFeedback);\n @Input() clientId = '';\n routes: RouteRow[] = [];\n loading = false;\n showRouteModal = false;\n editingRouteId = '';\n\n /** Id opcional só na criação (mesma rota com o mesmo id em homologação e produção). */\n readonly newId = new FormControl('', { nonNullable: true, validators: [optionalIdValidator] });\n protected readonly idMessages = computed(() => ({ optionalId: this.text.optionalIdInvalid }));\n readonly name = new FormControl('', { nonNullable: true });\n readonly displayName = new FormControl('', { nonNullable: true });\n readonly icon = new FormControl('', { nonNullable: true });\n /** Catálogo inteiro do @trismegisto/icons, em ordem alfabética, cada opção com o próprio ícone — mesmo seletor\n * da tela de rotas do Argos central. */\n readonly iconOptions: readonly ComboboxOption[] = [...HERMES_ICONS]\n .sort((a, b) => a.name.localeCompare(b.name))\n .map((icon) => ({ value: icon.name, label: icon.name, icon: icon.name }));\n readonly path = new FormControl('', { nonNullable: true, validators: [routePathValidator] });\n readonly info = new FormControl('', { nonNullable: true });\n /** Rota protegida (`excludable: false`) é travada aqui: o auto-serviço não libera a exclusão — o\n * admin-server também recusa (403), isto só evita oferecer o que vai ser negado. */\n readonly excludable = new FormControl(true, { nonNullable: true });\n /** Mensagem do erro `routePath` no `hm-input` (chave do validador → texto). */\n protected readonly pathMessages = computed(() => ({ routePath: this.text.pathInvalid }));\n\n constructor(private service: AutoServiceService) {}\n\n readonly rowId = (r: RouteRow) => r.id;\n readonly columns = computed<GridColumn<RouteRow>[]>(() => [\n { key: 'name', title: this.text.colName, value: (r) => r.name, sortable: true },\n { key: 'display_name', title: this.text.colDisplay, value: (r) => r.display_name || '—', sortable: true },\n { key: 'icon', title: this.text.colIcon, value: (r) => r.icon || '—' },\n { key: 'path', title: this.text.colPath, value: (r) => r.path || '—', sortable: true },\n {\n key: 'excludable', title: this.text.colExcludable, sortable: true,\n value: (r) => (r.excludable ? this.text.excludableYes : this.text.excludableNo),\n },\n { key: 'id', title: this.text.colId, value: (r) => r.id },\n ]);\n\n /** Nome acessível do botão de copiar: diz de qual rota é o id. */\n copyIdLabel(r: RouteRow): string {\n return formatMessage(this.text.copyRouteId, { name: r.display_name || r.name });\n }\n // Rota de template não se edita nem se exclui aqui (403 no admin-server); excluir, além disso, só em rota\n // excluível (409). Linha sem ação nenhuma fica sem o kebab.\n readonly rowActions = computed<DataGridRowAction<RouteRow>[]>(() => [\n { id: 'edit', icon: 'pencil', label: this.text.edit, available: (r) => !r.templated },\n {\n id: 'delete', icon: 'trash', label: this.text.delete, danger: true, separatorAbove: true,\n available: (r) => !r.templated && r.excludable,\n confirm: (r) => ({ heading: this.text.confirmDeleteRouteHeading, message: formatMessage(this.text.confirmDeleteRoute, { name: r.display_name || r.name }) }),\n },\n ]);\n\n ngOnChanges(changes: SimpleChanges) { if (changes['clientId']) this.load(); }\n\n async load() {\n if (!this.clientId) { this.routes = []; return; }\n this.loading = true;\n try { const res = await this.service.getWebRoutes(this.clientId); this.routes = res.routes; }\n finally { this.loading = false; this.cdr.markForCheck(); }\n }\n\n private resetForm(r?: RouteRow) {\n this.name.setValue(r?.name ?? '');\n this.displayName.setValue(r?.display_name ?? '');\n this.icon.setValue(r?.icon ?? '');\n this.path.setValue(r?.path ?? '');\n this.info.setValue(r?.info ?? '');\n this.excludable.setValue(r?.excludable ?? true);\n // Protegida só destrava no Argos central. Nova rota (sem `r`) sempre pode escolher.\n if (r && !r.excludable) this.excludable.disable();\n else this.excludable.enable();\n // Sem isso, abrir o modal de novo mostraria o erro do caminho da vez anterior antes de digitar.\n this.path.markAsPristine();\n this.path.markAsUntouched();\n }\n\n /** Editando rota protegida — mostra por que o \"Excluível\" está travado. */\n get excludableLocked(): boolean {\n return this.excludable.disabled;\n }\n\n openCreateRoute() {\n this.editingRouteId = '';\n this.resetForm();\n this.newId.reset('');\n this.showRouteModal = true;\n }\n\n openEditRoute(r: RouteRow) {\n if (r.templated) return;\n this.editingRouteId = r.id;\n this.resetForm(r);\n this.showRouteModal = true;\n }\n\n async saveRoute() {\n // O botão já fica desabilitado; a guarda cobre chamadas diretas (ex.: Enter no form).\n if (!this.name.value || this.path.invalid || (!this.editingRouteId && this.newId.invalid)) return;\n const body = {\n name: this.name.value, display_name: this.displayName.value, icon: this.icon.value,\n path: this.path.value, info: this.info.value, excludable: this.excludable.value,\n };\n if (this.editingRouteId) { await this.service.updateWebRoute(this.clientId, this.editingRouteId, body); }\n else { await this.service.createWebRoute(this.clientId, { ...optionalIdBody('route_id', this.newId.value), ...body }); }\n this.showRouteModal = false;\n await this.load();\n }\n\n async deleteRoute(r: RouteRow) {\n if (r.templated || !r.excludable) return;\n // Já confirmado pelo `confirm` da ação na grade.\n if (await this.deletion.run(() => this.service.deleteWebRoute(this.clientId, r.id))) await this.load();\n }\n\n onAction(e: DataGridActionTriggered<RouteRow>): void {\n if (e.action === 'edit') this.openEditRoute(e.row);\n if (e.action === 'delete') void this.deleteRoute(e.row);\n }\n}\n","<hm-data-grid\n [columns]=\"columns()\"\n [rows]=\"routes\"\n [rowId]=\"rowId\"\n [caption]=\"text.routesCaption\"\n [loading]=\"loading\"\n [rowActions]=\"rowActions()\"\n (actionTriggered)=\"onAction($event)\"\n [emptyMessage]=\"text.noRoutes\"\n>\n <hm-button dataGridActions icon=\"plus\" (clicked)=\"openCreateRoute()\">{{ text.newRoute }}</hm-button>\n <ng-template hmCell=\"name\" let-r>\n <span class=\"name-cell\">\n {{ r.name }}\n <hm-tag *ngIf=\"r.templated\" [name]=\"text.templateTag\" color=\"info\" [title]=\"text.templateLocked\" />\n </span>\n </ng-template>\n <ng-template hmCell=\"icon\" let-r>\n <span class=\"icon-cell\">\n <hm-icon *ngIf=\"r.icon\" [shape]=\"r.icon\"></hm-icon>\n {{ r.icon || '—' }}\n </span>\n </ng-template>\n <!-- UUID da rota: só o botão de copiar (para criar a mesma rota com o mesmo id no outro ambiente). -->\n <ng-template hmCell=\"id\" let-r>\n <hm-copy-button [value]=\"r.id\" [label]=\"copyIdLabel(r)\" [copiedLabel]=\"text.idCopied\" />\n </ng-template>\n</hm-data-grid>\n\n<!-- Modal: criar/editar rota -->\n<hm-modal [open]=\"showRouteModal\" (openChange)=\"showRouteModal = $event\" [heading]=\"editingRouteId ? text.editRoute : text.newRoute\" (closed)=\"showRouteModal = false\">\n <div class=\"form-stack\">\n @if (!editingRouteId) {\n <hm-input [formControl]=\"newId\" [label]=\"text.optionalId\" [placeholder]=\"text.optionalIdPlaceholder\" [hint]=\"text.optionalIdHint\" [messages]=\"idMessages()\" />\n }\n <hm-input [formControl]=\"name\" [label]=\"text.internalName\" />\n <hm-input [formControl]=\"displayName\" [label]=\"text.displayName\" />\n <hm-combobox [options]=\"iconOptions\" [formControl]=\"icon\" [label]=\"text.icon\" [placeholder]=\"text.iconPlaceholder\" />\n <hm-input [formControl]=\"path\" [label]=\"text.path\" [placeholder]=\"text.pathPlaceholder\" [hint]=\"text.pathHint\" [messages]=\"pathMessages()\" />\n <hm-textarea [formControl]=\"info\" [label]=\"text.info\" />\n <hm-checkbox [formControl]=\"excludable\" [label]=\"text.excludable\" />\n <p *ngIf=\"excludableLocked\" class=\"field-note\">{{ text.excludableLocked }}</p>\n </div>\n\n <ng-container footer>\n <hm-button emphasis=\"medium\" (clicked)=\"showRouteModal = false\">{{ text.cancel }}</hm-button>\n <hm-button [disabled]=\"!name.value || path.invalid || (!editingRouteId && newId.invalid)\" (clicked)=\"saveRoute()\">\n {{ editingRouteId ? text.save : text.create }}\n </hm-button>\n </ng-container>\n</hm-modal>\n","import {\n ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, Injector, Input, OnChanges, Output,\n SimpleChanges, afterNextRender, inject,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n AlertComponent, ButtonComponent, IconButtonComponent, IconComponent, ModalComponent, ReorderListComponent, ReorderListItem,\n TagComponent,\n} from '@trismegisto/angular';\nimport { SPINE_MESSAGES } from '@trismegisto/spine';\nimport { formatMessage, moveItem, pluralMessage } from '@trismegisto/primitives';\nimport { AutoServiceService, RouterOrderNode, RouterOrderType } from '../../../../auto-service.service';\n\n/** Linha da lista ordenável: o item do `hm-reorder-list` mais o nó da árvore que ele representa. */\ninterface OrderItem extends ReorderListItem { readonly node: RouterOrderNode }\n\n/**\n * Modal \"Reordenar menu\" da aba Roteadores: a mesma ferramenta do Argos central (árvore do menu, ordem\n * por nível de irmãos, `PATCH /routers/reorder` com um grupo `{type, router_ids}` por item), mas navegando\n * pelos níveis em vez de escolher cada nível num combobox. Cada nível alterado guarda a ordem nova até o\n * \"Salvar ordem\", que grava um nível por chamada. Reordena por arrasto (alça do `hm-reorder-list`, que\n * também funciona no teclado) e pelos botões subir/descer de cada linha.\n */\n@Component({\n selector: 'spine-auto-service-routers-reorder',\n standalone: true,\n imports: [CommonModule, AlertComponent, ButtonComponent, IconButtonComponent, IconComponent, ModalComponent, ReorderListComponent, TagComponent],\n templateUrl: './auto-service-routers-reorder.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['./auto-service-routers-reorder.component.scss'],\n})\nexport class AutoServiceRoutersReorderComponent implements OnChanges {\n protected readonly messages = inject(SPINE_MESSAGES);\n protected readonly text = this.messages.autoService;\n /** Estado em campo comum, preenchido depois de `await`: marca a view ao terminar (app sem zone.js). */\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n private readonly service = inject(AutoServiceService);\n\n @Input() clientId = '';\n @Input() open = false;\n @Output() openChange = new EventEmitter<boolean>();\n /** Gravou ao menos um nível: quem abriu recarrega o que mostra. */\n @Output() saved = new EventEmitter<void>();\n\n tree: RouterOrderNode[] = [];\n /** Nós abertos, do topo até o nível mostrado (vazio = topo do menu). */\n path: RouterOrderNode[] = [];\n items: OrderItem[] = [];\n loading = false;\n saving = false;\n error = '';\n /** Anúncio da região viva (mover por botão). */\n announcement = '';\n /** Níveis com ordem nova ainda não gravada: o nó pai (`null` = topo) → os irmãos na ordem nova. */\n private readonly pending = new Map<RouterOrderNode | null, RouterOrderNode[]>();\n\n ngOnChanges(changes: SimpleChanges) { if (changes['open'] && this.open) void this.load(); }\n\n get hasChanges(): boolean { return this.pending.size > 0; }\n get parent(): RouterOrderNode | null { return this.path[this.path.length - 1] ?? null; }\n get levelName(): string { return this.parent ? this.nodeName(this.parent) : this.text.reorderRoot; }\n get listLabel(): string { return formatMessage(this.text.reorderListLabel, { name: this.levelName }); }\n\n async load() {\n this.loading = true;\n this.error = '';\n this.pending.clear();\n this.path = [];\n this.tree = [];\n this.items = [];\n try {\n this.tree = (await this.service.getRouterTree(this.clientId)).tree ?? [];\n this.showLevel();\n } catch {\n this.error = this.text.reorderLoadError;\n } finally { this.loading = false; this.cdr.markForCheck(); }\n }\n\n nodeName(n: RouterOrderNode): string { return n.route_display_name || n.route_name; }\n\n typeLabel(type: RouterOrderType): string {\n const t = this.text;\n return { header: t.levelHeader, navigation: t.levelNavigation, menu: t.levelMenu, item: t.levelItem, submenu: t.levelSubmenu, page: t.colPage }[type] ?? type;\n }\n\n childCount(n: RouterOrderNode): string { return pluralMessage(this.text.childCount, n.children.length, this.messages.meta.locale); }\n\n label(key: 'moveUp' | 'moveDown' | 'openLevel', item: OrderItem): string { return formatMessage(this.text[key], { name: item.label }); }\n\n /** Entra no item: passa a ordenar os filhos dele. */\n enter(item: OrderItem) {\n if (!item.node.children.length) return;\n this.path = [...this.path, item.node];\n this.showLevel();\n this.focusFirstHandle();\n }\n\n /** Volta a um nível da trilha (`-1` = topo do menu). */\n goTo(index: number) {\n this.path = this.path.slice(0, index + 1);\n this.showLevel();\n this.focusFirstHandle();\n }\n\n /** Ordem nova vinda do arrasto (ou do teclado na alça) do `hm-reorder-list`. */\n onItemsChange(items: readonly ReorderListItem[]) { this.apply((items as readonly OrderItem[]).map((i) => i.node)); }\n\n /** Botões subir/descer: move uma posição, anuncia e mantém o foco num botão da mesma linha. */\n move(index: number, delta: -1 | 1) {\n const to = index + delta;\n if (to < 0 || to >= this.items.length) return;\n const item = this.items[index];\n this.apply(moveItem(this.items, index, to).map((i) => i.node));\n this.announcement = formatMessage(this.text.movedTo, { name: item.label, position: to + 1, total: this.items.length });\n // A linha muda de lugar no DOM: devolve o foco ao botão clicado (ou ao outro, se este ficou desabilitado).\n const wanted = delta < 0 && to === 0 ? 'down' : delta > 0 && to === this.items.length - 1 ? 'up' : delta < 0 ? 'up' : 'down';\n afterNextRender(() => {\n this.host.nativeElement\n .querySelector<HTMLElement>(`[data-move=\"${wanted}\"][data-item=\"${CSS.escape(item.id)}\"] button`)\n ?.focus();\n }, { injector: this.injector });\n }\n\n async save() {\n if (!this.hasChanges || this.saving) return;\n this.saving = true;\n this.error = '';\n let wrote = false;\n try {\n for (const [parent, siblings] of [...this.pending]) {\n await this.service.reorderRouters(this.clientId, siblings.map((n) => ({ type: n.route_type, router_ids: n.router_ids })));\n this.pending.delete(parent);\n wrote = true;\n }\n this.saved.emit();\n this.close();\n } catch {\n // O que já foi gravado sai da fila; o resto continua pendente para tentar de novo.\n this.error = this.text.reorderSaveError;\n if (wrote) this.saved.emit();\n } finally { this.saving = false; this.cdr.markForCheck(); }\n }\n\n close() { this.open = false; this.openChange.emit(false); }\n\n private siblingsOf(parent: RouterOrderNode | null): RouterOrderNode[] { return parent ? parent.children : this.tree; }\n\n /** Troca os irmãos do nível mostrado pela ordem nova e marca o nível como pendente. */\n private apply(next: RouterOrderNode[]) {\n const parent = this.parent;\n if (parent) parent.children = next; else this.tree = next;\n this.pending.set(parent, next);\n this.showLevel();\n }\n\n private showLevel() {\n this.items = this.siblingsOf(this.parent).map((node) => ({\n id: `${node.route_type}:${node.routed_id}`, label: this.nodeName(node), node,\n }));\n }\n\n private focusFirstHandle() {\n afterNextRender(() => this.host.nativeElement.querySelector<HTMLElement>('.hm-reorder-list__handle')?.focus(), { injector: this.injector });\n }\n}\n","<hm-modal [open]=\"open\" (openChange)=\"open = $event\" [heading]=\"text.reorderTitle\" size=\"large\" (closed)=\"close()\">\n <div class=\"reorder\">\n <p class=\"muted reorder__hint\">{{ text.reorderHint }}</p>\n\n <hm-alert *ngIf=\"error\" variant=\"error\">{{ error }}</hm-alert>\n\n <div *ngIf=\"loading\" class=\"reorder__loading\">{{ text.loading }}</div>\n\n <ng-container *ngIf=\"!loading && tree.length\">\n <!-- Trilha dos níveis abertos: cada degrau anterior volta para aquele nível. -->\n <nav class=\"reorder__path\" [attr.aria-label]=\"text.reorderPath\">\n <ol>\n <li>\n <hm-button *ngIf=\"path.length; else rootCurrent\" emphasis=\"minimal\" size=\"small\" (clicked)=\"goTo(-1)\">{{ text.reorderRoot }}</hm-button>\n <ng-template #rootCurrent><span aria-current=\"location\">{{ text.reorderRoot }}</span></ng-template>\n </li>\n <li *ngFor=\"let node of path; let i = index; let last = last\">\n <hm-icon shape=\"angle\" direction=\"right\" class=\"reorder__sep\" />\n <hm-button *ngIf=\"!last\" emphasis=\"minimal\" size=\"small\" (clicked)=\"goTo(i)\">{{ nodeName(node) }}</hm-button>\n <span *ngIf=\"last\" aria-current=\"location\">{{ nodeName(node) }}</span>\n </li>\n </ol>\n </nav>\n\n <hm-reorder-list [label]=\"listLabel\" [labelHidden]=\"true\" [items]=\"items\" (itemsChange)=\"onItemsChange($event)\" [disabled]=\"saving\">\n <ng-template let-item let-index=\"index\">\n <div class=\"reorder__row\">\n <hm-icon *ngIf=\"item.node.route_icon\" [shape]=\"item.node.route_icon\" class=\"reorder__icon\" />\n <span class=\"reorder__name\">\n <span class=\"reorder__label\">{{ item.label }}</span>\n <span *ngIf=\"item.node.children.length\" class=\"reorder__count\">{{ childCount(item.node) }}</span>\n </span>\n <hm-tag [name]=\"typeLabel(item.node.route_type)\" color=\"neutral\" />\n <span class=\"reorder__actions\">\n <hm-icon-button\n emphasis=\"subtle\" size=\"small\" icon=\"arrow\" iconDirection=\"up\" [label]=\"label('moveUp', item)\"\n [attr.data-move]=\"'up'\" [attr.data-item]=\"item.id\"\n [disabled]=\"saving || index === 0\" (clicked)=\"move(index, -1)\" />\n <hm-icon-button\n emphasis=\"subtle\" size=\"small\" icon=\"arrow\" iconDirection=\"down\" [label]=\"label('moveDown', item)\"\n [attr.data-move]=\"'down'\" [attr.data-item]=\"item.id\"\n [disabled]=\"saving || index === items.length - 1\" (clicked)=\"move(index, 1)\" />\n <hm-icon-button\n *ngIf=\"item.node.children.length\"\n emphasis=\"subtle\" size=\"small\" icon=\"angle\" iconDirection=\"right\" [label]=\"label('openLevel', item)\"\n (clicked)=\"enter(item)\" />\n </span>\n </div>\n </ng-template>\n </hm-reorder-list>\n </ng-container>\n\n <div *ngIf=\"!loading && !error && !tree.length\" class=\"reorder__empty\">\n <hm-icon shape=\"sort-vertical\" size=\"xl\" />\n <p>{{ text.reorderEmpty }}</p>\n </div>\n\n <div class=\"hm-visually-hidden\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">{{ announcement }}</div>\n </div>\n\n <ng-container footer>\n <hm-button emphasis=\"medium\" (clicked)=\"close()\">{{ text.cancel }}</hm-button>\n <hm-button [disabled]=\"!hasChanges\" [loading]=\"saving\" (clicked)=\"save()\">{{ text.reorderSave }}</hm-button>\n </ng-container>\n</hm-modal>\n","import { Component, Input, OnChanges, SimpleChanges, ChangeDetectionStrategy, inject, computed, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport {\n AlertComponent, ButtonComponent, CheckboxComponent, ComboboxComponent, ComboboxMultiComponent, ComboboxOption, CopyButtonComponent, DataGridActionTriggered, DataGridCellDirective,\n DataGridComponent, DataGridRowAction, DividerComponent, GridColumn, InputComponent, ModalComponent, TagComponent, TextareaComponent,\n} from '@trismegisto/angular';\nimport { formatMessage } from '@trismegisto/primitives';\nimport { AutoServiceDeleteFeedback } from '../../auto-service-delete';\nimport { autoServiceErrorText } from '../../auto-service-errors';\nimport { optionalIdBody, optionalIdValidator } from '../../optional-id.validator';\nimport { AutoServiceGroupType, AutoServiceService } from '../../auto-service.service';\nimport { AutoServiceRoutersReorderComponent } from './modals/routers-reorder/auto-service-routers-reorder.component';\nimport { SPINE_MESSAGES } from '@trismegisto/spine';\n\n/** Níveis do roteador acima da página, de cima para baixo. */\nexport const HIERARCHY_LEVELS = ['header_id', 'navigation_id', 'menu_id', 'item_id', 'submenu_id'] as const;\nexport type HierarchyLevel = (typeof HIERARCHY_LEVELS)[number];\n\n/**\n * A hierarquia é de cima para baixo: um nível preenchido com algum vazio acima dele é um \"buraco\" (o argos-admin recusa\n * com 400 `router_hierarchy_gap`). A página é a folha e não entra na conta.\n */\nexport function hasHierarchyGap(levels: Partial<Record<HierarchyLevel, string | null | undefined>>): boolean {\n let emptyAbove = false;\n for (const level of HIERARCHY_LEVELS) {\n if (!levels[level]) emptyAbove = true;\n else if (emptyAbove) return true;\n }\n return false;\n}\n\ninterface RouterRow {\n id: string; page_id: string; header_id?: string; navigation_id?: string; menu_id?: string; item_id?: string; submenu_id?: string;\n is_private: boolean; built_path: string; description?: string | null;\n /** Cópia de um router de template: pertence ao template, o auto-serviço só exibe (o admin-server recusa com 403). */\n templated?: boolean;\n /** Tipos de grupo (crachás) que podem receber guard para a tela; vazio = qualquer crachá. */\n allowed_type_ids?: string[];\n}\n\nconst emptyRouterForm = () => ({\n page_id: '', header_id: '', navigation_id: '', menu_id: '', item_id: '', submenu_id: '', is_private: true, description: '',\n allowed_type_ids: [] as string[],\n});\n\n@Component({\n selector: 'spine-auto-service-routers',\n standalone: true,\n imports: [\n CommonModule, FormsModule, ReactiveFormsModule, AlertComponent, ButtonComponent, CheckboxComponent, ComboboxComponent, ComboboxMultiComponent, DividerComponent,\n InputComponent, ModalComponent, DataGridComponent, DataGridCellDirective, TagComponent, TextareaComponent, AutoServiceRoutersReorderComponent,\n CopyButtonComponent,\n ],\n templateUrl: './auto-service-routers.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['./auto-service-routers.component.scss'],\n})\nexport class AutoServiceRoutersComponent implements OnChanges {\n protected readonly text = inject(SPINE_MESSAGES).autoService;\n /** Id opcional só na criação (mesmo roteador com o mesmo id em homologação e produção). */\n readonly newId = new FormControl('', { nonNullable: true, validators: [optionalIdValidator] });\n protected readonly idMessages = computed(() => ({ optionalId: this.text.optionalIdInvalid }));\n /** Telas com estado em campo comum, preenchido depois de `await`: marca a view ao terminar (app sem zone.js). */\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly deletion = inject(AutoServiceDeleteFeedback);\n @Input() clientId = '';\n routes: any[] = [];\n routers: RouterRow[] = [];\n loading = false;\n showRouterModal = false;\n /** Modal \"Reordenar menu\" (ordem dos itens no menu do app, por nível). */\n showReorder = false;\n editingRouterId = '';\n routerForm = emptyRouterForm();\n /**\n * Tipos de grupo do realm (`GET /group-types`). Todos entram, inclusive o Administrador (`assignable: false` só\n * impede criar grupo com o tipo; aqui é quem pode ver a tela), como no modal de roteador do argos-admin.\n */\n groupTypes: AutoServiceGroupType[] = [];\n groupTypeOptions: ComboboxOption[] = [];\n savingRouter = false;\n /** Falha ao gravar o roteador, mostrada no modal. */\n routerError: string | null = null;\n constructor(private service: AutoServiceService) {}\n\n readonly rowId = (r: RouterRow) => r.id;\n readonly columns = computed<GridColumn<RouterRow>[]>(() => [\n { key: 'page', title: this.text.colPage, value: (r) => this.routeName(r.page_id), sortable: true },\n { key: 'built_path', title: this.text.colBuiltPath, value: (r) => r.built_path },\n { key: 'description', title: this.text.colDescription, value: (r) => r.description ?? '' },\n { key: 'is_private', title: this.text.colVisibility, value: (r) => (r.is_private ? this.text.private : this.text.public), sortable: true },\n { key: 'allowed_type_ids', title: this.text.colAllowedBadges, value: (r) => this.allowedTypeNames(r.allowed_type_ids).join(', ') || this.text.anyBadge },\n { key: 'id', title: this.text.colId, value: (r) => r.id },\n ]);\n\n /** Nome acessível do botão de copiar: diz de qual roteador é o id (o caminho montado identifica a tela). */\n copyIdLabel(r: RouterRow): string {\n return formatMessage(this.text.copyRouterId, { name: r.built_path || this.routeName(r.page_id) });\n }\n // Router de template não se edita nem se exclui aqui (403 no admin-server): a linha fica sem o kebab.\n readonly rowActions = computed<DataGridRowAction<RouterRow>[]>(() => [\n { id: 'edit', icon: 'pencil', label: this.text.edit, available: (r) => !r.templated },\n {\n id: 'delete', icon: 'trash', label: this.text.delete, danger: true, separatorAbove: true, available: (r) => !r.templated,\n confirm: (r) => ({ heading: this.text.confirmDeleteRouterHeading, message: formatMessage(this.text.confirmDeleteRouter, { path: r.built_path }) }),\n },\n ]);\n\n get routeOptions(): ComboboxOption[] {\n return this.routes.map((r) => ({ value: r.id, label: r.display_name || r.name }));\n }\n\n ngOnChanges(changes: SimpleChanges) { if (changes['clientId']) this.load(); }\n\n async load() {\n if (!this.clientId) { this.routes = []; this.routers = []; this.setGroupTypes([]); return; }\n this.loading = true;\n try {\n const [routesRes, routersRes, typesRes] = await Promise.all([\n this.service.getWebRoutes(this.clientId),\n this.service.getRouters(this.clientId),\n // Sem os tipos a tabela abre igual; os crachás aparecem pelo id e o campo fica sem opção.\n this.service.getGroupTypes(this.clientId).catch(() => ({ group_types: [] as AutoServiceGroupType[] })),\n ]);\n this.routes = routesRes.routes;\n this.setGroupTypes(typesRes.group_types ?? []);\n this.routers = routersRes.routers.map((r: any) => ({ ...r, built_path: this.builtPath(r) }));\n } finally { this.loading = false; this.cdr.markForCheck(); }\n }\n\n private setGroupTypes(types: AutoServiceGroupType[]) {\n this.groupTypes = types;\n this.groupTypeOptions = types.map((t) => ({ value: t.id, label: t.name }));\n }\n\n /** Nomes dos crachás permitidos (id sem tipo conhecido aparece como o próprio id). */\n allowedTypeNames(typeIds: readonly string[] | undefined): string[] {\n return (typeIds ?? []).map((id) => this.groupTypes.find((t) => t.id === id)?.name ?? id);\n }\n\n routeName(id: string | null): string { if (!id) return '—'; return this.routes.find(r => r.id === id)?.name ?? id; }\n\n private readonly pathLevels: Array<'header_id' | 'navigation_id' | 'menu_id' | 'item_id' | 'submenu_id' | 'page_id'> =\n ['header_id', 'navigation_id', 'menu_id', 'item_id', 'submenu_id', 'page_id'];\n\n builtPath(r: any): string {\n const segments = this.pathLevels\n .map(level => this.routes.find(x => x.id === r[level])?.path)\n .filter((p): p is string => !!p)\n .map(p => p.replace(/^\\/+|\\/+$/g, ''));\n return segments.length ? '/' + segments.join('/') : '—';\n }\n\n openCreateRouter() {\n this.editingRouterId = '';\n this.routerError = null;\n this.routerForm = emptyRouterForm();\n this.newId.reset('');\n this.showRouterModal = true;\n }\n\n openEditRouter(r: RouterRow) {\n this.editingRouterId = r.id;\n this.routerError = null;\n this.routerForm = {\n page_id: r.page_id, header_id: r.header_id ?? '', navigation_id: r.navigation_id ?? '',\n menu_id: r.menu_id ?? '', item_id: r.item_id ?? '', submenu_id: r.submenu_id ?? '', is_private: r.is_private ?? true,\n description: r.description ?? '', allowed_type_ids: [...(r.allowed_type_ids ?? [])],\n };\n this.showRouterModal = true;\n }\n\n /** Níveis da hierarquia, de cima para baixo (a página é a folha e fica fora: sempre obrigatória). */\n readonly hierarchyLevels: readonly HierarchyLevel[] = HIERARCHY_LEVELS;\n\n /**\n * Nível bloqueado: o de cima está vazio (navegação só com header, menu só com navegação, item só com menu, submenu só\n * com item). Um valor já gravado fora da regra (roteador antigo) continua editável, para dar para limpar.\n */\n levelLocked(level: HierarchyLevel): boolean {\n const index = HIERARCHY_LEVELS.indexOf(level);\n if (index <= 0 || this.routerForm[level]) return false;\n return !this.routerForm[HIERARCHY_LEVELS[index - 1]];\n }\n\n /** Grava o nível; limpar um nível limpa todos os de baixo. */\n setLevel(level: HierarchyLevel, value: string | null | undefined) {\n this.routerForm[level] = value ?? '';\n this.routerError = null;\n if (!value) {\n for (const below of HIERARCHY_LEVELS.slice(HIERARCHY_LEVELS.indexOf(level) + 1)) this.routerForm[below] = '';\n }\n }\n\n /** Algum nível preenchido com um vazio acima dele (o argos-admin recusa com 400 `router_hierarchy_gap`). */\n get hierarchyGap(): boolean { return hasHierarchyGap(this.routerForm); }\n\n levelLabel(level: HierarchyLevel): string {\n switch (level) {\n case 'header_id': return this.text.levelHeader;\n case 'navigation_id': return this.text.levelNavigation;\n case 'menu_id': return this.text.levelMenu;\n case 'item_id': return this.text.levelItem;\n default: return this.text.levelSubmenu;\n }\n }\n\n async saveRouter() {\n if (!this.routerForm.page_id || this.hierarchyGap || this.savingRouter || (!this.editingRouterId && this.newId.invalid)) return;\n const body = {\n page_id: this.routerForm.page_id,\n header_id: this.routerForm.header_id || null,\n navigation_id: this.routerForm.navigation_id || null,\n menu_id: this.routerForm.menu_id || null,\n item_id: this.routerForm.item_id || null,\n submenu_id: this.routerForm.submenu_id || null,\n is_private: this.routerForm.is_private,\n description: this.routerForm.description.trim() || null,\n allowed_type_ids: [...this.routerForm.allowed_type_ids],\n };\n this.savingRouter = true;\n this.routerError = null;\n this.cdr.markForCheck();\n try {\n if (this.editingRouterId) { await this.service.updateRouter(this.clientId, this.editingRouterId, body); }\n else { await this.service.createRouter(this.clientId, { ...optionalIdBody('router_id', this.newId.value), ...body }); }\n } catch (err) {\n // O modal fica aberto com o motivo no idioma ativo (ex.: router_hierarchy_gap).\n this.routerError = autoServiceErrorText(err, this.text, this.text.routerSaveError);\n return;\n } finally {\n this.savingRouter = false;\n this.cdr.markForCheck();\n }\n this.showRouterModal = false;\n await this.load();\n }\n\n /** Já confirmado pelo `confirm` da ação na grade. */\n async deleteRouter(routerId: string) {\n if (await this.deletion.run(() => this.service.deleteRouter(this.clientId, routerId))) await this.load();\n }\n\n onAction(e: DataGridActionTriggered<RouterRow>): void {\n if (e.row.templated) return;\n if (e.action === 'edit') this.openEditRouter(e.row);\n if (e.action === 'delete') void this.deleteRouter(e.row.id);\n }\n}\n","<hm-data-grid\n [columns]=\"columns()\"\n [rows]=\"routers\"\n [rowId]=\"rowId\"\n [caption]=\"text.routersCaption\"\n [loading]=\"loading\"\n [rowActions]=\"rowActions()\"\n (actionTriggered)=\"onAction($event)\"\n [emptyMessage]=\"text.noRouters\"\n>\n <hm-button dataGridActions emphasis=\"medium\" icon=\"sort-vertical\" [disabled]=\"!routers.length\" (clicked)=\"showReorder = true\">{{ text.reorder }}</hm-button>\n <hm-button dataGridActions icon=\"plus\" [disabled]=\"!routes.length\" (clicked)=\"openCreateRouter()\">{{ text.newRouter }}</hm-button>\n <ng-template hmCell=\"page\" let-r>\n <span class=\"name-cell\">\n {{ routeName(r.page_id) }}\n <hm-tag *ngIf=\"r.templated\" [name]=\"text.templateTag\" color=\"info\" [title]=\"text.templateLocked\" />\n </span>\n </ng-template>\n <ng-template hmCell=\"is_private\" let-r>\n <hm-tag [name]=\"r.is_private ? text.private : text.public\" [color]=\"r.is_private ? 'warning' : 'success'\" />\n </ng-template>\n <ng-template hmCell=\"allowed_type_ids\" let-r>\n <span *ngIf=\"!r.allowed_type_ids?.length; else badges\" class=\"muted\">{{ text.anyBadge }}</span>\n <ng-template #badges>\n <span class=\"name-cell\">\n <hm-tag *ngFor=\"let name of allowedTypeNames(r.allowed_type_ids)\" [name]=\"name\" color=\"info\" />\n </span>\n </ng-template>\n </ng-template>\n <ng-template hmCell=\"built_path\" let-r>\n <code>{{ r.built_path }}</code>\n </ng-template>\n <!-- UUID do roteador: só o botão de copiar (para criar o mesmo roteador com o mesmo id no outro ambiente). -->\n <ng-template hmCell=\"id\" let-r>\n <hm-copy-button [value]=\"r.id\" [label]=\"copyIdLabel(r)\" [copiedLabel]=\"text.idCopied\" />\n </ng-template>\n</hm-data-grid>\n\n<!-- Modal: ordem dos itens no menu do app (vale também para roteadores de template) -->\n<spine-auto-service-routers-reorder [clientId]=\"clientId\" [open]=\"showReorder\" (openChange)=\"showReorder = $event\" (saved)=\"load()\" />\n\n<!-- Modal: criar/editar roteador -->\n<hm-modal [open]=\"showRouterModal\" (openChange)=\"showRouterModal = $event\" [heading]=\"editingRouterId ? text.editRouter : text.newRouter\" size=\"large\" (closed)=\"showRouterModal = false\">\n <div class=\"form-stack\">\n <hm-alert *ngIf=\"routerError\" variant=\"error\">{{ routerError }}</hm-alert>\n @if (!editingRouterId) {\n <hm-input [formControl]=\"newId\" [label]=\"text.optionalId\" [placeholder]=\"text.optionalIdPlaceholder\" [hint]=\"text.optionalIdHint\" [messages]=\"idMessages()\" />\n }\n <hm-combobox [label]=\"text.page\" [options]=\"routeOptions\" [value]=\"routerForm.page_id\" (valueChange)=\"routerForm.page_id = $event\"></hm-combobox>\n <hm-textarea [label]=\"text.routerDescription\" [rows]=\"2\" [hint]=\"text.routerDescriptionHint\" [(ngModel)]=\"routerForm.description\" />\n\n <hm-divider [label]=\"text.hierarchy\" />\n <p class=\"hierarchy-hint muted\">{{ text.hierarchyHint }}</p>\n\n <!-- De cima para baixo: cada nível só abre com o de cima escolhido; limpar um nível limpa os de baixo. -->\n <hm-combobox *ngFor=\"let level of hierarchyLevels\" [label]=\"levelLabel(level)\" [options]=\"routeOptions\" [clearable]=\"true\"\n [disabled]=\"levelLocked(level)\" [value]=\"routerForm[level]\" (valueChange)=\"setLevel(level, $event)\"></hm-combobox>\n <hm-alert *ngIf=\"hierarchyGap\" variant=\"warning\">{{ text.routerErrors.hierarchyGap }}</hm-alert>\n\n <hm-divider />\n <hm-checkbox [(ngModel)]=\"routerForm.is_private\" [label]=\"text.privateHint\" />\n <!-- Vazio = qualquer crachá (mesma regra do modal de roteador do argos-admin). -->\n <hm-combobox-multi [label]=\"text.colAllowedBadges\" [options]=\"groupTypeOptions\" [placeholder]=\"text.anyBadge\"\n [hint]=\"text.allowedBadgesHint\" [visibleChipsLimit]=\"null\" [selected]=\"routerForm.allowed_type_ids\"\n (selectedChange)=\"routerForm.allowed_type_ids = [...$event]; routerError = null\" />\n </div>\n\n <ng-container footer>\n <hm-button emphasis=\"medium\" (clicked)=\"showRouterModal = false\">{{ text.cancel }}</hm-button>\n <hm-button [disabled]=\"!routerForm.page_id || hierarchyGap || (!editingRouterId && newId.invalid)\" [loading]=\"savingRouter\" (clicked)=\"saveRouter()\">\n {{ editingRouterId ? text.save : text.create }}\n </hm-button>\n </ng-container>\n</hm-modal>\n","import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges, ChangeDetectionStrategy, inject, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonComponent, ComboboxComponent, ComboboxOption, ModalComponent } from '@trismegisto/angular';\nimport { AutoServiceService } from '../../../../auto-service.service';\nimport { SPINE_MESSAGES } from '@trismegisto/spine';\n\n@Component({\n selector: 'spine-auto-service-access-create',\n standalone: true,\n imports: [CommonModule, ButtonComponent, ComboboxComponent, ModalComponent],\n templateUrl: './auto-service-access-create.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['./auto-service-access-create.component.scss'],\n})\nexport class AutoServiceAccessCreateComponent implements OnChanges {\n protected readonly text = inject(SPINE_MESSAGES).autoService;\n /** Telas com estado em campo comum, preenchido depois de `await`: marca a view ao terminar (app sem zone.js). */\n private readonly cdr = inject(ChangeDetectorRef);\n @Input() clientId = '';\n @Input() availableGroups: any[] = [];\n @Input() open = false;\n @Output() openChange = new EventEmitter<boolean>();\n @Output() created = new EventEmitter<void>();\n groupId = '';\n saving = false;\n constructor(private service: AutoServiceService) {}\n\n get groupOptions(): ComboboxOption[] {\n return this.availableGroups.map((g) => ({ value: g.id, label: g.type ? `${g.name} (${g.type.name})` : g.name }));\n }\n\n ngOnChanges(changes: SimpleChanges) { if (changes['open'] && this.open) { this.groupId = ''; } }\n onModalOpenChange(value: boolean) { this.open = value; this.openChange.emit(value); }\n close() { this.onModalOpenChange(false); }\n\n async save() {\n if (!this.groupId) return;\n this.saving = true;\n try { await this.service.createAccess(this.clientId, this.groupId); this.created.emit(); this.close(); }\n finally { this.saving = false; this.cdr.markForCheck(); }\n }\n}\n","<hm-modal [open]=\"open\" (openChange)=\"onModalOpenChange($event)\" [heading]=\"text.newAccessHeading\" (closed)=\"close()\">\n <hm-combobox [label]=\"text.group\" [options]=\"groupOptions\" [value]=\"groupId\" (valueChange)=\"groupId = $event\"></hm-combobox>\n\n <ng-container footer>\n <hm-button emphasis=\"medium\" (clicked)=\"close()\">{{ text.cancel }}</hm-button>\n <hm-button [disabled]=\"!groupId\" [loading]=\"saving\" (clicked)=\"save()\">{{ text.create }}</hm-button>\n </ng-container>\n</hm-modal>\n","import {\n Component, Input, Output, EventEmitter, OnChanges, SimpleChanges, ChangeDetectionStrategy, inject, ChangeDetectorRef, computed, signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonComponent, DataGridActionBarComponent, DrawerComponent, IconComponent, TreeComponent } from '@trismegisto/angular';\nimport { AutoServiceService } from '../../../../auto-service.service';\nimport { SPINE_MESSAGES } from '@trismegisto/spine';\nimport { TreeNode, TreeSelectionChange, formatMessage } from '@trismegisto/primitives';\n\n/** Nó da árvore de rotas: pastas são os níveis do menu (header…submenu) e a folha é a página (um roteador). */\nexport interface RouteTreeNode {\n key: string; name: string; isFolder: boolean; routerId?: string; guardId?: string; selected?: boolean; children: RouteTreeNode[];\n}\n\n/**\n * \"Gerenciar rotas\" de um acesso do client: as telas privadas que o grupo pode receber (roteadores sem restrição de\n * crachá ou que aceitam o crachá do grupo), em `hm-tree` pelos níveis do menu, como no painel do Argos. No topo, só o\n * filtro; a seleção guarda só folhas (páginas) e a diferença vira guard criado ou removido ao confirmar.\n */\n@Component({\n selector: 'spine-auto-service-access-guards',\n standalone: true,\n imports: [CommonModule, ButtonComponent, DataGridActionBarComponent, IconComponent, DrawerComponent, TreeComponent],\n templateUrl: './auto-service-access-guards.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['./auto-service-access-guards.component.scss'],\n})\nexport class AutoServiceAccessGuardsComponent implements OnChanges {\n protected readonly text = inject(SPINE_MESSAGES).autoService;\n /** Telas com estado em campo comum, preenchido depois de `await`: marca a view ao terminar (app sem zone.js). */\n private readonly cdr = inject(ChangeDetectorRef);\n protected readonly fmt = formatMessage;\n @Input() clientId = '';\n @Input() access: any = null;\n @Input() open = false;\n @Output() openChange = new EventEmitter<boolean>();\n\n availableRouters: any[] = [];\n availableRoutes: any[] = [];\n clientPrivateRouters: any[] = [];\n guards: any[] = [];\n loading = false;\n saving = false;\n\n readonly tree = signal<RouteTreeNode[]>([]);\n /** Termo do filtro no topo do drawer; a árvore mostrada é `visibleTree`. */\n readonly filter = signal('');\n readonly visibleTree = computed(() => filterRouteTree(this.tree(), this.filter()));\n readonly treeNodes = computed<readonly TreeNode[]>(() => this.visibleTree().map(n => toTreeNode(n)));\n /** Só folhas (páginas): o que tem guard agora na árvore. */\n readonly selectedIds = signal<ReadonlySet<string>>(new Set());\n readonly expandedIds = signal<ReadonlySet<string>>(new Set());\n private originalSelectedIds: ReadonlySet<string> = new Set();\n private readonly nodesByKey = computed(() => indexByKey(this.tree()));\n /** Nós visíveis por chave: marcar uma pasta com o filtro ativo só mexe nas páginas que aparecem. */\n private readonly visibleByKey = computed(() => indexByKey(this.visibleTree()));\n\n constructor(private service: AutoServiceService) {}\n\n ngOnChanges(changes: SimpleChanges) { if (changes['open'] && this.open) { this.reset(); } }\n close() { this.open = false; this.openChange.emit(false); }\n\n async reset() {\n this.loading = true;\n try {\n const [routersRes, routesRes] = await Promise.all([this.service.getRouters(this.clientId), this.service.getWebRoutes(this.clientId)]);\n this.availableRouters = routersRes.routers;\n this.availableRoutes = routesRes.routes;\n this.clientPrivateRouters = this.availableRouters.filter((r: any) =>\n r.is_private && (!r.allowed_type_ids?.length || r.allowed_type_ids.includes(this.access.group_type_id))\n );\n await this.loadGuards();\n this.buildTree();\n } finally { this.loading = false; this.cdr.markForCheck(); }\n }\n\n async loadGuards() { const res = await this.service.getGuards(this.clientId, this.access.access_id); this.guards = res.guards; }\n\n private routeName(id: string | null): string {\n if (!id) return '—';\n return this.availableRoutes.find((r: any) => r.id === id)?.name ?? id;\n }\n\n private readonly levels: Array<'header_id' | 'navigation_id' | 'menu_id' | 'item_id' | 'submenu_id'> =\n ['header_id', 'navigation_id', 'menu_id', 'item_id', 'submenu_id'];\n\n buildTree() {\n const root: RouteTreeNode[] = [];\n for (const router of this.clientPrivateRouters) {\n let currentLevel = root;\n for (const level of this.levels) {\n const id = router[level];\n if (!id) continue;\n const key = `${level}:${id}`;\n let node = currentLevel.find(n => n.key === key);\n if (!node) { node = { key, name: this.routeName(id), isFolder: true, children: [] }; currentLevel.push(node); }\n currentLevel = node.children;\n }\n const guard = this.guards.find((g: any) => g.router_id === router.id);\n currentLevel.push({\n key: `page:${router.id}`, name: router.page_name || this.routeName(router.page_id), isFolder: false,\n routerId: router.id, guardId: guard?.guard_id, selected: !!guard, children: [],\n });\n }\n this.tree.set(root);\n const original = new Set(root.flatMap(collectLeaves).filter(l => l.selected).map(l => l.key));\n this.originalSelectedIds = original;\n this.selectedIds.set(new Set(original));\n this.expandedIds.set(new Set());\n this.filter.set('');\n }\n\n /** Filtrar abre as pastas que sobraram, para as telas encontradas aparecerem sem clique. */\n onFilterChange(term: string) {\n this.filter.set(term);\n if (!term.trim()) return;\n this.expandedIds.update(current => new Set([...current, ...folderKeys(this.visibleTree())]));\n }\n\n /** Com caixas o hm-tree emite folhas (ou a pasta sem folhas): pasta vira as páginas dela que estão à vista. */\n onTreeChanged(changes: readonly TreeSelectionChange[]) {\n this.selectedIds.update(current => {\n const next = new Set(current);\n for (const change of changes) {\n const node = this.visibleByKey().get(change.id);\n if (!node) continue;\n for (const leaf of collectLeaves(node)) {\n if (change.selected) next.add(leaf.key); else next.delete(leaf.key);\n }\n }\n return next;\n });\n }\n\n get hasChanges(): boolean {\n const selected = this.selectedIds();\n if (selected.size !== this.originalSelectedIds.size) return true;\n for (const id of selected) if (!this.originalSelectedIds.has(id)) return true;\n return false;\n }\n\n /** Folha (página) pela chave; `undefined` para pasta ou chave desconhecida. */\n private leafByKey(key: string): RouteTreeNode | undefined {\n const node = this.nodesByKey().get(key);\n return node && !node.isFolder ? node : undefined;\n }\n\n async confirm() {\n const selected = this.selectedIds();\n const isLeaf = (l: RouteTreeNode | undefined): l is RouteTreeNode => !!l;\n const toAdd = [...selected].filter(id => !this.originalSelectedIds.has(id)).map(id => this.leafByKey(id)).filter(isLeaf);\n const toRemove = [...this.originalSelectedIds].filter(id => !selected.has(id)).map(id => this.leafByKey(id)).filter(isLeaf);\n if (toAdd.length === 0 && toRemove.length === 0) { this.close(); return; }\n this.saving = true;\n try {\n for (const l of toAdd) { await this.service.addGuard(this.clientId, this.access.access_id, l.routerId!); }\n for (const l of toRemove) { await this.service.removeGuard(this.clientId, this.access.access_id, l.guardId!); }\n this.close();\n } finally { this.saving = false; this.cdr.markForCheck(); }\n }\n}\n\nfunction toTreeNode(node: RouteTreeNode): TreeNode {\n return {\n id: node.key, label: node.name, leaf: !node.isFolder,\n children: node.isFolder ? node.children.map(toTreeNode) : undefined,\n };\n}\n\nfunction collectLeaves(node: RouteTreeNode): RouteTreeNode[] {\n return node.isFolder ? node.children.flatMap(collectLeaves) : [node];\n}\n\nfunction indexByKey(root: RouteTreeNode[]): Map<string, RouteTreeNode> {\n const map = new Map<string, RouteTreeNode>();\n const walk = (nodes: RouteTreeNode[]) => { for (const n of nodes) { map.set(n.key, n); walk(n.children); } };\n walk(root);\n return map;\n}\n\nfunction folderKeys(root: RouteTreeNode[]): string[] {\n return [...indexByKey(root).values()].filter(n => n.isFolder).map(n => n.key);\n}\n\n/** Minúsculo e sem acento: \"operacao\" casa com \"Operação\". */\nfunction normalize(value: string | undefined): string {\n return (value ?? '').normalize('NFD').replace(/[̀-ͯ]/g, '').toLowerCase();\n}\n\n/** A árvore só com as telas cujo nome casa com o termo; a pasta que casa pelo nome vem inteira. Termo vazio = tudo. */\nexport function filterRouteTree(nodes: RouteTreeNode[], term: string): RouteTreeNode[] {\n const needle = normalize(term.trim());\n if (!needle) return nodes;\n const walk = (list: RouteTreeNode[]): RouteTreeNode[] => list.flatMap((n) => {\n if (n.isFolder) {\n if (normalize(n.name).includes(needle)) return [n];\n const children = walk(n.children);\n return children.length ? [{ ...n, children }] : [];\n }\n return normalize(n.name).includes(needle) ? [n] : [];\n });\n return walk(nodes);\n}\n","<hm-drawer [open]=\"open\" (openChange)=\"open = $event\" [heading]=\"fmt(text.routesOf, { group: access?.group_name ?? '' })\" (closed)=\"close()\">\n <div *ngIf=\"loading\" class=\"loading-row\">\n <span>{{ text.loading }}</span>\n </div>\n\n <!-- Topo sem mensagens: só o filtro, com o mesmo visual da busca das grades. -->\n <hm-data-grid-action-bar *ngIf=\"!loading && tree().length\"\n [search]=\"filter()\" (searchChange)=\"onFilterChange($event)\"\n [placeholder]=\"text.filterRoutes\" [label]=\"text.filterRoutes\" />\n\n <hm-tree\n *ngIf=\"!loading && treeNodes().length\"\n [nodes]=\"treeNodes()\"\n [label]=\"text.routesTreeLabel\"\n [selected]=\"selectedIds()\"\n [(expanded)]=\"expandedIds\"\n (changed)=\"onTreeChanged($event)\"\n />\n\n <div class=\"empty-state\" *ngIf=\"!loading && tree().length > 0 && treeNodes().length === 0\">\n <hm-icon shape=\"search\" size=\"xl\"></hm-icon>\n <p>{{ fmt(text.noFilterMatch, { term: filter() }) }}</p>\n </div>\n\n <div class=\"empty-state\" *ngIf=\"!loading && tree().length === 0\">\n <hm-icon shape=\"filter-grid\" size=\"xl\"></hm-icon>\n <p>{{ text.noPrivateRoutes }}</p>\n </div>\n\n <ng-container footer>\n <hm-button emphasis=\"medium\" (clicked)=\"close()\">{{ text.cancel }}</hm-button>\n <hm-button [disabled]=\"!hasChanges\" [loading]=\"saving\" (clicked)=\"confirm()\">{{ text.confirmChanges }}</hm-button>\n </ng-container>\n</hm-drawer>\n","import { Component, Input, OnChanges, SimpleChanges, ChangeDetectionStrategy, inject, computed, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n AvatarGroupComponent, AvatarGroupPerson, ButtonComponent, DataGridActionTriggered, DataGridCellDirective, DataGridComponent, DataGridRowAction,\n GridColumn, IconComponent, TagComponent,\n} from '@trismegisto/angular';\nimport { formatMessage } from '@trismegisto/primitives';\nimport { AutoServiceDeleteFeedback } from '../../auto-service-delete';\nimport { AutoServiceService } from '../../auto-service.service';\nimport { AutoServiceAccessCreateComponent } from './modals/access-create/auto-service-access-create.component';\nimport { AutoServiceAccessGuardsComponent } from './modals/access-guards/auto-service-access-guards.component';\nimport { SPINE_MESSAGES } from '@trismegisto/spine';\n\ninterface AccessRow {\n access_id: string; group_id: string; group_name: string; group_type_name: string; group_type_id: string;\n /** Acesso do grupo de administração: não é do auto-serviço (servidor antigo ainda devolve; a tela descarta). */\n group_is_admin?: boolean;\n /** Resumo dos membros do grupo (servidor que já manda): total e os primeiros, com foto. */\n members_count?: number;\n members_preview?: { user_id: string; username: string; name: string | null; picture: string | null }[];\n}\n\n@Component({\n selector: 'spine-auto-service-access',\n standalone: true,\n imports: [\n CommonModule, AvatarGroupComponent, ButtonComponent, IconComponent, DataGridComponent, DataGridCellDirective, TagComponent,\n AutoServiceAccessCreateComponent, AutoServiceAccessGuardsComponent,\n ],\n templateUrl: './auto-service-access.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['./auto-service-access.component.scss'],\n})\nexport class AutoServiceAccessComponent implements OnChanges {\n protected readonly text = inject(SPINE_MESSAGES).autoService;\n /** Telas com estado em campo comum, preenchido depois de `await`: marca a view ao terminar (app sem zone.js). */\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly deletion = inject(AutoServiceDeleteFeedback);\n @Input() clientId = '';\n entries: AccessRow[] = [];\n availableGroups: any[] = [];\n loading = false;\n showCreate = false;\n showGuards = false;\n activeAccess: AccessRow | null = null;\n constructor(private service: AutoServiceService) {}\n\n readonly rowId = (a: AccessRow) => a.access_id;\n\n /** Rostos do resumo de membros (nome para as iniciais e o leitor de tela). */\n protected fmtMembers(a: AccessRow): string {\n return formatMessage(this.text.membersOf, { group: a.group_name });\n }\n\n protected peopleOf(a: AccessRow): AvatarGroupPerson[] {\n return (a.members_preview ?? []).map((m) => ({ name: m.name || m.username, imageUrl: m.picture }));\n }\n readonly columns = computed<GridColumn<AccessRow>[]>(() => [\n { key: 'group_name', title: this.text.colGroup, value: (a) => a.group_name, sortable: true },\n { key: 'group_type_name', title: this.text.colType, value: (a) => a.group_type_name, sortable: true },\n { key: 'members', title: this.text.colMembers, value: (a) => String(a.members_count ?? 0), raw: (a) => a.members_count ?? 0, sortable: true },\n // Como no painel do Argos: \"Gerenciar rotas\" é um botão na linha, não um item do menu.\n { key: 'guards', title: this.text.colGuards, value: () => '' },\n ]);\n readonly rowActions = computed<DataGridRowAction<AccessRow>[]>(() => [\n {\n id: 'delete', icon: 'trash', label: this.text.remove, danger: true,\n confirm: (a) => ({ heading: this.text.confirmRemoveAccessHeading, message: formatMessage(this.text.confirmRemoveAccess, { group: a.group_name }) }),\n },\n ]);\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['clientId']) { this.load(); this.loadGroups(); }\n }\n\n async load() {\n if (!this.clientId) { this.entries = []; return; }\n this.loading = true;\n try {\n const res = await this.service.getAccess(this.clientId);\n this.entries = (res.access ?? []).filter((a: AccessRow) => !a.group_is_admin);\n }\n finally { this.loading = false; this.cdr.markForCheck(); }\n }\n\n async loadGroups() {\n if (!this.clientId) { this.availableGroups = []; return; }\n const res = await this.service.getGroups(this.clientId);\n this.availableGroups = (res.groups ?? []).filter((g) => !g.is_admin);\n this.cdr.markForCheck();\n }\n\n /** Grupos oferecidos em \"Novo acesso\": os do projeto que ainda não têm acesso (os da tabela não aparecem de novo). */\n get offeredGroups(): any[] {\n const granted = new Set(this.entries.map((e) => e.group_id).filter(Boolean));\n return this.availableGroups.filter((g) => !granted.has(g.id));\n }\n\n openCreate() { this.showCreate = true; }\n async onCreated() { await this.load(); }\n /** Já confirmado pelo `confirm` da ação na grade. */\n async deleteAccess(accessId: string) {\n if (await this.deletion.run(() => this.service.deleteAccess(this.clientId, accessId))) await this.load();\n }\n openGuards(access: AccessRow) { this.activeAccess = access; this.showGuards = true; }\n\n onAction(e: DataGridActionTriggered<AccessRow>): void {\n if (e.action === 'delete') void this.deleteAccess(e.row.access_id);\n }\n}\n","<hm-data-grid\n [columns]=\"columns()\"\n [rows]=\"entries\"\n [rowId]=\"rowId\"\n [caption]=\"text.accessCaption\"\n [loading]=\"loading\"\n [rowActions]=\"rowActions()\"\n (actionTriggered)=\"onAction($event)\"\n [emptyMessage]=\"text.noAccess\"\n>\n <hm-button dataGridActions icon=\"plus\" (clicked)=\"openCreate()\">{{ text.newAccess }}</hm-button>\n <ng-template hmCell=\"group_type_name\" let-a>\n <hm-tag [name]=\"a.group_type_name\" color=\"neutral\" />\n </ng-template>\n <ng-template hmCell=\"members\" let-a>\n @if (a.members_count) {\n <hm-avatar-group size=\"small\" [max]=\"4\" [people]=\"peopleOf(a)\" [total]=\"a.members_count\" [label]=\"fmtMembers(a)\" />\n } @else {\n <span class=\"access-muted\">—</span>\n }\n </ng-template>\n <ng-template hmCell=\"guards\" let-a>\n <hm-button emphasis=\"minimal\" icon=\"shield\" (clicked)=\"openGuards(a)\">{{ text.manageRoutes }}</hm-button>\n </ng-template>\n</hm-data-grid>\n\n<spine-auto-service-access-create\n [clientId]=\"clientId\"\n [availableGroups]=\"offeredGroups\"\n [open]=\"showCreate\"\n (openChange)=\"showCreate = $event\"\n (created)=\"onCreated()\">\n</spine-auto-service-access-create>\n\n<spine-auto-service-access-guards\n *ngIf=\"activeAccess\"\n [clientId]=\"clientId\"\n [access]=\"activeAccess\"\n [open]=\"showGuards\"\n (openChange)=\"showGuards = $event\">\n</spine-auto-service-access-guards>\n","import { Component, ChangeDetectionStrategy, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TabComponent, TabContentDirective, TabsComponent } from '@trismegisto/angular';\nimport { AutoServiceClient, AutoServiceClientPickerComponent } from './client-picker/auto-service-client-picker.component';\nimport { AutoServiceRoutesComponent } from './tabs/auto-service-routes/auto-service-routes.component';\nimport { AutoServiceRoutersComponent } from './tabs/auto-service-routers/auto-service-routers.component';\nimport { AutoServiceAccessComponent } from './tabs/auto-service-access/auto-service-access.component';\nimport { SPINE_MESSAGES } from '@trismegisto/spine';\n\n// Novidades, Sugestões e Avaliações saíram daqui: são telas próprias na raiz do menu (`pages/`, migration 0036 do argos).\ntype Tab = 'routes' | 'routers' | 'access';\n\n@Component({\n selector: 'spine-auto-service-client',\n standalone: true,\n imports: [\n CommonModule, TabsComponent, TabComponent, TabContentDirective,\n AutoServiceClientPickerComponent, AutoServiceRoutesComponent, AutoServiceRoutersComponent, AutoServiceAccessComponent,\n ],\n templateUrl: './auto-service-client.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['./auto-service-client.component.scss'],\n})\nexport class AutoServiceClientComponent {\n protected readonly text = inject(SPINE_MESSAGES).autoService;\n client: AutoServiceClient | null = null;\n activeTab: Tab = 'routes';\n onClientChange(c: AutoServiceClient | null) { this.client = c; }\n setTab(tab: Tab) { this.activeTab = tab; }\n}\n","<!-- Título e descrição da tela vêm da barra da página (nome + description do router). -->\n<div class=\"as-stack\">\n <spine-auto-service-client-picker (clientChange)=\"onClientChange($event)\"></spine-auto-service-client-picker>\n\n <!-- Conteúdo de cada aba é preguiçoso (*hmTabContent): só busca na API quando a aba é aberta. -->\n <hm-tabs *ngIf=\"client as c\" [label]=\"text.clientSections\" [active]=\"activeTab\" (activeChange)=\"setTab($any($event))\">\n <hm-tab id=\"routes\" [label]=\"text.tabRoutes\">\n <spine-auto-service-routes *hmTabContent [clientId]=\"c.id\"></spine-auto-service-routes>\n </hm-tab>\n <hm-tab id=\"routers\" [label]=\"text.tabRouters\">\n <spine-auto-service-routers *hmTabContent [clientId]=\"c.id\"></spine-auto-service-routers>\n </hm-tab>\n <hm-tab id=\"access\" [label]=\"text.tabAccess\">\n <spine-auto-service-access *hmTabContent [clientId]=\"c.id\"></spine-auto-service-access>\n </hm-tab>\n </hm-tabs>\n</div>\n"],"names":["i1.AutoServiceService","i3","i1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"trismegisto-spine-auto-service-auto-service-client.component-kAXaCM5W.mjs","sources":["../../../projects/ui/auto-service/src/tabs/auto-service-routes/route-path.validator.ts","../../../projects/ui/auto-service/src/tabs/auto-service-routes/auto-service-routes.component.ts","../../../projects/ui/auto-service/src/tabs/auto-service-routes/auto-service-routes.component.html","../../../projects/ui/auto-service/src/tabs/auto-service-routers/modals/routers-reorder/auto-service-routers-reorder.component.ts","../../../projects/ui/auto-service/src/tabs/auto-service-routers/modals/routers-reorder/auto-service-routers-reorder.component.html","../../../projects/ui/auto-service/src/tabs/auto-service-routers/auto-service-routers.component.ts","../../../projects/ui/auto-service/src/tabs/auto-service-routers/auto-service-routers.component.html","../../../projects/ui/auto-service/src/tabs/auto-service-access/modals/access-create/auto-service-access-create.component.ts","../../../projects/ui/auto-service/src/tabs/auto-service-access/modals/access-create/auto-service-access-create.component.html","../../../projects/ui/auto-service/src/tabs/auto-service-access/modals/access-guards/auto-service-access-guards.component.ts","../../../projects/ui/auto-service/src/tabs/auto-service-access/modals/access-guards/auto-service-access-guards.component.html","../../../projects/ui/auto-service/src/tabs/auto-service-access/auto-service-access.component.ts","../../../projects/ui/auto-service/src/tabs/auto-service-access/auto-service-access.component.html","../../../projects/ui/auto-service/src/auto-service-client.component.ts","../../../projects/ui/auto-service/src/auto-service-client.component.html"],"sourcesContent":["import { AbstractControl, ValidationErrors } from '@angular/forms';\n\n/**\n * Caminho de UMA rota = um trecho só do endereço (`dashboard`, `ordens-servico`). O `/` entre níveis\n * é o roteador que monta, juntando o caminho de cada rota da composição (header→…→page). Um `/`\n * dentro do caminho (ex.: `laboratorio/dashboard` numa rota só) desalinha a cadeia que o `ViewGuard`\n * resolve por nível e a tela cai no fallback (volta para o início) — achado real, 2026-10-07.\n *\n * Só letras minúsculas e hífen, sem hífen no início/fim nem dois seguidos. Mesma regra do admin-server\n * do Argos (`route-path.ts`), que é quem de fato recusa — aqui é só para avisar antes de enviar.\n */\nexport const ROUTE_PATH_PATTERN = /^[a-z]+(?:-[a-z]+)*$/;\n\n/** Vazio passa (rota \"pasta\", só agrupa o menu); preenchido precisa casar com `ROUTE_PATH_PATTERN`. */\nexport function routePathValidator(control: AbstractControl<string>): ValidationErrors | null {\n const value = control.value ?? '';\n return value === '' || ROUTE_PATH_PATTERN.test(value) ? null : { routePath: true };\n}\n","import { Component, Input, OnChanges, SimpleChanges, ChangeDetectionStrategy, inject, computed, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport {\n ButtonComponent, CheckboxComponent, ComboboxComponent, ComboboxOption, CopyButtonComponent, DataGridActionTriggered, DataGridCellDirective,\n DataGridComponent, DataGridRowAction, InputComponent, GridColumn, IconComponent, ModalComponent, TagComponent,\n TextareaComponent,\n} from '@trismegisto/angular';\nimport { HERMES_ICONS } from '@trismegisto/icons/catalog';\nimport { formatMessage } from '@trismegisto/primitives';\nimport { AutoServiceDeleteFeedback } from '../../auto-service-delete';\nimport { AutoServiceService } from '../../auto-service.service';\nimport { SPINE_MESSAGES } from '@trismegisto/spine';\nimport { routePathValidator } from './route-path.validator';\nimport { optionalIdBody, optionalIdValidator } from '../../optional-id.validator';\n\ninterface RouteRow {\n id: string; name: string; display_name?: string; icon?: string; path?: string; info?: string; excludable: boolean;\n /** Cópia de uma rota de template: pertence ao template, o auto-serviço só exibe (o admin-server recusa com 403). */\n templated?: boolean;\n}\n\n@Component({\n selector: 'spine-auto-service-routes',\n standalone: true,\n imports: [\n CommonModule, ReactiveFormsModule, ButtonComponent, CheckboxComponent, ComboboxComponent, IconComponent, InputComponent,\n TextareaComponent, ModalComponent, DataGridComponent, DataGridCellDirective, TagComponent, CopyButtonComponent,\n ],\n templateUrl: './auto-service-routes.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['./auto-service-routes.component.scss'],\n})\nexport class AutoServiceRoutesComponent implements OnChanges {\n protected readonly text = inject(SPINE_MESSAGES).autoService;\n /** Telas com estado em campo comum, preenchido depois de `await`: marca a view ao terminar (app sem zone.js). */\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly deletion = inject(AutoServiceDeleteFeedback);\n @Input() clientId = '';\n routes: RouteRow[] = [];\n loading = false;\n showRouteModal = false;\n editingRouteId = '';\n\n /** Id opcional só na criação (mesma rota com o mesmo id em homologação e produção). */\n readonly newId = new FormControl('', { nonNullable: true, validators: [optionalIdValidator] });\n protected readonly idMessages = computed(() => ({ optionalId: this.text.optionalIdInvalid }));\n readonly name = new FormControl('', { nonNullable: true });\n readonly displayName = new FormControl('', { nonNullable: true });\n readonly icon = new FormControl('', { nonNullable: true });\n /** Catálogo inteiro do @trismegisto/icons, em ordem alfabética, cada opção com o próprio ícone — mesmo seletor\n * da tela de rotas do Argos central. */\n readonly iconOptions: readonly ComboboxOption[] = [...HERMES_ICONS]\n .sort((a, b) => a.name.localeCompare(b.name))\n .map((icon) => ({ value: icon.name, label: icon.name, icon: icon.name }));\n readonly path = new FormControl('', { nonNullable: true, validators: [routePathValidator] });\n readonly info = new FormControl('', { nonNullable: true });\n /** Rota protegida (`excludable: false`) é travada aqui: o auto-serviço não libera a exclusão — o\n * admin-server também recusa (403), isto só evita oferecer o que vai ser negado. */\n readonly excludable = new FormControl(true, { nonNullable: true });\n /** Mensagem do erro `routePath` no `hm-input` (chave do validador → texto). */\n protected readonly pathMessages = computed(() => ({ routePath: this.text.pathInvalid }));\n\n constructor(private service: AutoServiceService) {}\n\n readonly rowId = (r: RouteRow) => r.id;\n readonly columns = computed<GridColumn<RouteRow>[]>(() => [\n { key: 'name', title: this.text.colName, value: (r) => r.name, sortable: true },\n { key: 'display_name', title: this.text.colDisplay, value: (r) => r.display_name || '—', sortable: true },\n { key: 'icon', title: this.text.colIcon, value: (r) => r.icon || '—' },\n { key: 'path', title: this.text.colPath, value: (r) => r.path || '—', sortable: true },\n {\n key: 'excludable', title: this.text.colExcludable, sortable: true,\n value: (r) => (r.excludable ? this.text.excludableYes : this.text.excludableNo),\n },\n { key: 'id', title: this.text.colId, value: (r) => r.id },\n ]);\n\n /** Nome acessível do botão de copiar: diz de qual rota é o id. */\n copyIdLabel(r: RouteRow): string {\n return formatMessage(this.text.copyRouteId, { name: r.display_name || r.name });\n }\n // Rota de template não se edita nem se exclui aqui (403 no admin-server); excluir, além disso, só em rota\n // excluível (409). Linha sem ação nenhuma fica sem o kebab.\n readonly rowActions = computed<DataGridRowAction<RouteRow>[]>(() => [\n { id: 'edit', icon: 'pencil', label: this.text.edit, available: (r) => !r.templated },\n {\n id: 'delete', icon: 'trash', label: this.text.delete, danger: true, separatorAbove: true,\n available: (r) => !r.templated && r.excludable,\n confirm: (r) => ({ heading: this.text.confirmDeleteRouteHeading, message: formatMessage(this.text.confirmDeleteRoute, { name: r.display_name || r.name }) }),\n },\n ]);\n\n ngOnChanges(changes: SimpleChanges) { if (changes['clientId']) this.load(); }\n\n async load() {\n if (!this.clientId) { this.routes = []; return; }\n this.loading = true;\n try { const res = await this.service.getWebRoutes(this.clientId); this.routes = res.routes; }\n finally { this.loading = false; this.cdr.markForCheck(); }\n }\n\n private resetForm(r?: RouteRow) {\n this.name.setValue(r?.name ?? '');\n this.displayName.setValue(r?.display_name ?? '');\n this.icon.setValue(r?.icon ?? '');\n this.path.setValue(r?.path ?? '');\n this.info.setValue(r?.info ?? '');\n this.excludable.setValue(r?.excludable ?? true);\n // Protegida só destrava no Argos central. Nova rota (sem `r`) sempre pode escolher.\n if (r && !r.excludable) this.excludable.disable();\n else this.excludable.enable();\n // Sem isso, abrir o modal de novo mostraria o erro do caminho da vez anterior antes de digitar.\n this.path.markAsPristine();\n this.path.markAsUntouched();\n }\n\n /** Editando rota protegida — mostra por que o \"Excluível\" está travado. */\n get excludableLocked(): boolean {\n return this.excludable.disabled;\n }\n\n openCreateRoute() {\n this.editingRouteId = '';\n this.resetForm();\n this.newId.reset('');\n this.showRouteModal = true;\n }\n\n openEditRoute(r: RouteRow) {\n if (r.templated) return;\n this.editingRouteId = r.id;\n this.resetForm(r);\n this.showRouteModal = true;\n }\n\n async saveRoute() {\n // O botão já fica desabilitado; a guarda cobre chamadas diretas (ex.: Enter no form).\n if (!this.name.value || this.path.invalid || (!this.editingRouteId && this.newId.invalid)) return;\n const body = {\n name: this.name.value, display_name: this.displayName.value, icon: this.icon.value,\n path: this.path.value, info: this.info.value, excludable: this.excludable.value,\n };\n if (this.editingRouteId) { await this.service.updateWebRoute(this.clientId, this.editingRouteId, body); }\n else { await this.service.createWebRoute(this.clientId, { ...optionalIdBody('route_id', this.newId.value), ...body }); }\n this.showRouteModal = false;\n await this.load();\n }\n\n async deleteRoute(r: RouteRow) {\n if (r.templated || !r.excludable) return;\n // Já confirmado pelo `confirm` da ação na grade.\n if (await this.deletion.run(() => this.service.deleteWebRoute(this.clientId, r.id))) await this.load();\n }\n\n onAction(e: DataGridActionTriggered<RouteRow>): void {\n if (e.action === 'edit') this.openEditRoute(e.row);\n if (e.action === 'delete') void this.deleteRoute(e.row);\n }\n}\n","<hm-data-grid\n [columns]=\"columns()\"\n [rows]=\"routes\"\n [rowId]=\"rowId\"\n [caption]=\"text.routesCaption\"\n [loading]=\"loading\"\n [rowActions]=\"rowActions()\"\n (actionTriggered)=\"onAction($event)\"\n [emptyMessage]=\"text.noRoutes\"\n>\n <hm-button dataGridActions icon=\"plus\" (clicked)=\"openCreateRoute()\">{{ text.newRoute }}</hm-button>\n <ng-template hmCell=\"name\" let-r>\n <span class=\"name-cell\">\n {{ r.name }}\n <hm-tag *ngIf=\"r.templated\" [name]=\"text.templateTag\" color=\"info\" [title]=\"text.templateLocked\" />\n </span>\n </ng-template>\n <ng-template hmCell=\"icon\" let-r>\n <span class=\"icon-cell\">\n <hm-icon *ngIf=\"r.icon\" [shape]=\"r.icon\"></hm-icon>\n {{ r.icon || '—' }}\n </span>\n </ng-template>\n <!-- UUID da rota: só o botão de copiar (para criar a mesma rota com o mesmo id no outro ambiente). -->\n <ng-template hmCell=\"id\" let-r>\n <hm-copy-button [value]=\"r.id\" [label]=\"copyIdLabel(r)\" [copiedLabel]=\"text.idCopied\" />\n </ng-template>\n</hm-data-grid>\n\n<!-- Modal: criar/editar rota -->\n<hm-modal [open]=\"showRouteModal\" (openChange)=\"showRouteModal = $event\" [heading]=\"editingRouteId ? text.editRoute : text.newRoute\" (closed)=\"showRouteModal = false\">\n <div class=\"form-stack\">\n @if (!editingRouteId) {\n <hm-input [formControl]=\"newId\" [label]=\"text.optionalId\" [placeholder]=\"text.optionalIdPlaceholder\" [hint]=\"text.optionalIdHint\" [messages]=\"idMessages()\" />\n }\n <hm-input [formControl]=\"name\" [label]=\"text.internalName\" />\n <hm-input [formControl]=\"displayName\" [label]=\"text.displayName\" />\n <hm-combobox [options]=\"iconOptions\" [formControl]=\"icon\" [label]=\"text.icon\" [placeholder]=\"text.iconPlaceholder\" />\n <hm-input [formControl]=\"path\" [label]=\"text.path\" [placeholder]=\"text.pathPlaceholder\" [hint]=\"text.pathHint\" [messages]=\"pathMessages()\" />\n <hm-textarea [formControl]=\"info\" [label]=\"text.info\" />\n <hm-checkbox [formControl]=\"excludable\" [label]=\"text.excludable\" />\n <p *ngIf=\"excludableLocked\" class=\"field-note\">{{ text.excludableLocked }}</p>\n </div>\n\n <ng-container footer>\n <hm-button emphasis=\"medium\" (clicked)=\"showRouteModal = false\">{{ text.cancel }}</hm-button>\n <hm-button [disabled]=\"!name.value || path.invalid || (!editingRouteId && newId.invalid)\" (clicked)=\"saveRoute()\">\n {{ editingRouteId ? text.save : text.create }}\n </hm-button>\n </ng-container>\n</hm-modal>\n","import {\n ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, Injector, Input, OnChanges, Output,\n SimpleChanges, afterNextRender, inject,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n AlertComponent, ButtonComponent, IconButtonComponent, IconComponent, ModalComponent, ReorderListComponent, ReorderListItem,\n TagComponent,\n} from '@trismegisto/angular';\nimport { SPINE_MESSAGES } from '@trismegisto/spine';\nimport { formatMessage, moveItem, pluralMessage } from '@trismegisto/primitives';\nimport { AutoServiceService, RouterOrderNode, RouterOrderType } from '../../../../auto-service.service';\n\n/** Linha da lista ordenável: o item do `hm-reorder-list` mais o nó da árvore que ele representa. */\ninterface OrderItem extends ReorderListItem { readonly node: RouterOrderNode }\n\n/**\n * Modal \"Reordenar menu\" da aba Roteadores: a mesma ferramenta do Argos central (árvore do menu, ordem\n * por nível de irmãos, `PATCH /routers/reorder` com um grupo `{type, router_ids}` por item), mas navegando\n * pelos níveis em vez de escolher cada nível num combobox. Cada nível alterado guarda a ordem nova até o\n * \"Salvar ordem\", que grava um nível por chamada. Reordena por arrasto (alça do `hm-reorder-list`, que\n * também funciona no teclado) e pelos botões subir/descer de cada linha.\n */\n@Component({\n selector: 'spine-auto-service-routers-reorder',\n standalone: true,\n imports: [CommonModule, AlertComponent, ButtonComponent, IconButtonComponent, IconComponent, ModalComponent, ReorderListComponent, TagComponent],\n templateUrl: './auto-service-routers-reorder.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['./auto-service-routers-reorder.component.scss'],\n})\nexport class AutoServiceRoutersReorderComponent implements OnChanges {\n protected readonly messages = inject(SPINE_MESSAGES);\n protected readonly text = this.messages.autoService;\n /** Estado em campo comum, preenchido depois de `await`: marca a view ao terminar (app sem zone.js). */\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n private readonly service = inject(AutoServiceService);\n\n @Input() clientId = '';\n @Input() open = false;\n @Output() openChange = new EventEmitter<boolean>();\n /** Gravou ao menos um nível: quem abriu recarrega o que mostra. */\n @Output() saved = new EventEmitter<void>();\n\n tree: RouterOrderNode[] = [];\n /** Nós abertos, do topo até o nível mostrado (vazio = topo do menu). */\n path: RouterOrderNode[] = [];\n items: OrderItem[] = [];\n loading = false;\n saving = false;\n error = '';\n /** Anúncio da região viva (mover por botão). */\n announcement = '';\n /** Níveis com ordem nova ainda não gravada: o nó pai (`null` = topo) → os irmãos na ordem nova. */\n private readonly pending = new Map<RouterOrderNode | null, RouterOrderNode[]>();\n\n ngOnChanges(changes: SimpleChanges) { if (changes['open'] && this.open) void this.load(); }\n\n get hasChanges(): boolean { return this.pending.size > 0; }\n get parent(): RouterOrderNode | null { return this.path[this.path.length - 1] ?? null; }\n get levelName(): string { return this.parent ? this.nodeName(this.parent) : this.text.reorderRoot; }\n get listLabel(): string { return formatMessage(this.text.reorderListLabel, { name: this.levelName }); }\n\n async load() {\n this.loading = true;\n this.error = '';\n this.pending.clear();\n this.path = [];\n this.tree = [];\n this.items = [];\n try {\n this.tree = (await this.service.getRouterTree(this.clientId)).tree ?? [];\n this.showLevel();\n } catch {\n this.error = this.text.reorderLoadError;\n } finally { this.loading = false; this.cdr.markForCheck(); }\n }\n\n nodeName(n: RouterOrderNode): string { return n.route_display_name || n.route_name; }\n\n typeLabel(type: RouterOrderType): string {\n const t = this.text;\n return { header: t.levelHeader, navigation: t.levelNavigation, menu: t.levelMenu, item: t.levelItem, submenu: t.levelSubmenu, page: t.colPage }[type] ?? type;\n }\n\n childCount(n: RouterOrderNode): string { return pluralMessage(this.text.childCount, n.children.length, this.messages.meta.locale); }\n\n label(key: 'moveUp' | 'moveDown' | 'openLevel', item: OrderItem): string { return formatMessage(this.text[key], { name: item.label }); }\n\n /** Entra no item: passa a ordenar os filhos dele. */\n enter(item: OrderItem) {\n if (!item.node.children.length) return;\n this.path = [...this.path, item.node];\n this.showLevel();\n this.focusFirstHandle();\n }\n\n /** Volta a um nível da trilha (`-1` = topo do menu). */\n goTo(index: number) {\n this.path = this.path.slice(0, index + 1);\n this.showLevel();\n this.focusFirstHandle();\n }\n\n /** Ordem nova vinda do arrasto (ou do teclado na alça) do `hm-reorder-list`. */\n onItemsChange(items: readonly ReorderListItem[]) { this.apply((items as readonly OrderItem[]).map((i) => i.node)); }\n\n /** Botões subir/descer: move uma posição, anuncia e mantém o foco num botão da mesma linha. */\n move(index: number, delta: -1 | 1) {\n const to = index + delta;\n if (to < 0 || to >= this.items.length) return;\n const item = this.items[index];\n this.apply(moveItem(this.items, index, to).map((i) => i.node));\n this.announcement = formatMessage(this.text.movedTo, { name: item.label, position: to + 1, total: this.items.length });\n // A linha muda de lugar no DOM: devolve o foco ao botão clicado (ou ao outro, se este ficou desabilitado).\n const wanted = delta < 0 && to === 0 ? 'down' : delta > 0 && to === this.items.length - 1 ? 'up' : delta < 0 ? 'up' : 'down';\n afterNextRender(() => {\n this.host.nativeElement\n .querySelector<HTMLElement>(`[data-move=\"${wanted}\"][data-item=\"${CSS.escape(item.id)}\"] button`)\n ?.focus();\n }, { injector: this.injector });\n }\n\n async save() {\n if (!this.hasChanges || this.saving) return;\n this.saving = true;\n this.error = '';\n let wrote = false;\n try {\n for (const [parent, siblings] of [...this.pending]) {\n await this.service.reorderRouters(this.clientId, siblings.map((n) => ({ type: n.route_type, router_ids: n.router_ids })));\n this.pending.delete(parent);\n wrote = true;\n }\n this.saved.emit();\n this.close();\n } catch {\n // O que já foi gravado sai da fila; o resto continua pendente para tentar de novo.\n this.error = this.text.reorderSaveError;\n if (wrote) this.saved.emit();\n } finally { this.saving = false; this.cdr.markForCheck(); }\n }\n\n close() { this.open = false; this.openChange.emit(false); }\n\n private siblingsOf(parent: RouterOrderNode | null): RouterOrderNode[] { return parent ? parent.children : this.tree; }\n\n /** Troca os irmãos do nível mostrado pela ordem nova e marca o nível como pendente. */\n private apply(next: RouterOrderNode[]) {\n const parent = this.parent;\n if (parent) parent.children = next; else this.tree = next;\n this.pending.set(parent, next);\n this.showLevel();\n }\n\n private showLevel() {\n this.items = this.siblingsOf(this.parent).map((node) => ({\n id: `${node.route_type}:${node.routed_id}`, label: this.nodeName(node), node,\n }));\n }\n\n private focusFirstHandle() {\n afterNextRender(() => this.host.nativeElement.querySelector<HTMLElement>('.hm-reorder-list__handle')?.focus(), { injector: this.injector });\n }\n}\n","<hm-modal [open]=\"open\" (openChange)=\"open = $event\" [heading]=\"text.reorderTitle\" size=\"large\" (closed)=\"close()\">\n <div class=\"reorder\">\n <p class=\"muted reorder__hint\">{{ text.reorderHint }}</p>\n\n <hm-alert *ngIf=\"error\" variant=\"error\">{{ error }}</hm-alert>\n\n <div *ngIf=\"loading\" class=\"reorder__loading\">{{ text.loading }}</div>\n\n <ng-container *ngIf=\"!loading && tree.length\">\n <!-- Trilha dos níveis abertos: cada degrau anterior volta para aquele nível. -->\n <nav class=\"reorder__path\" [attr.aria-label]=\"text.reorderPath\">\n <ol>\n <li>\n <hm-button *ngIf=\"path.length; else rootCurrent\" emphasis=\"minimal\" size=\"small\" (clicked)=\"goTo(-1)\">{{ text.reorderRoot }}</hm-button>\n <ng-template #rootCurrent><span aria-current=\"location\">{{ text.reorderRoot }}</span></ng-template>\n </li>\n <li *ngFor=\"let node of path; let i = index; let last = last\">\n <hm-icon shape=\"angle\" direction=\"right\" class=\"reorder__sep\" />\n <hm-button *ngIf=\"!last\" emphasis=\"minimal\" size=\"small\" (clicked)=\"goTo(i)\">{{ nodeName(node) }}</hm-button>\n <span *ngIf=\"last\" aria-current=\"location\">{{ nodeName(node) }}</span>\n </li>\n </ol>\n </nav>\n\n <hm-reorder-list [label]=\"listLabel\" [labelHidden]=\"true\" [items]=\"items\" (itemsChange)=\"onItemsChange($event)\" [disabled]=\"saving\">\n <ng-template let-item let-index=\"index\">\n <div class=\"reorder__row\">\n <hm-icon *ngIf=\"item.node.route_icon\" [shape]=\"item.node.route_icon\" class=\"reorder__icon\" />\n <span class=\"reorder__name\">\n <span class=\"reorder__label\">{{ item.label }}</span>\n <span *ngIf=\"item.node.children.length\" class=\"reorder__count\">{{ childCount(item.node) }}</span>\n </span>\n <hm-tag [name]=\"typeLabel(item.node.route_type)\" color=\"neutral\" />\n <span class=\"reorder__actions\">\n <hm-icon-button\n emphasis=\"subtle\" size=\"small\" icon=\"arrow\" iconDirection=\"up\" [label]=\"label('moveUp', item)\"\n [attr.data-move]=\"'up'\" [attr.data-item]=\"item.id\"\n [disabled]=\"saving || index === 0\" (clicked)=\"move(index, -1)\" />\n <hm-icon-button\n emphasis=\"subtle\" size=\"small\" icon=\"arrow\" iconDirection=\"down\" [label]=\"label('moveDown', item)\"\n [attr.data-move]=\"'down'\" [attr.data-item]=\"item.id\"\n [disabled]=\"saving || index === items.length - 1\" (clicked)=\"move(index, 1)\" />\n <hm-icon-button\n *ngIf=\"item.node.children.length\"\n emphasis=\"subtle\" size=\"small\" icon=\"angle\" iconDirection=\"right\" [label]=\"label('openLevel', item)\"\n (clicked)=\"enter(item)\" />\n </span>\n </div>\n </ng-template>\n </hm-reorder-list>\n </ng-container>\n\n <div *ngIf=\"!loading && !error && !tree.length\" class=\"reorder__empty\">\n <hm-icon shape=\"sort-vertical\" size=\"xl\" />\n <p>{{ text.reorderEmpty }}</p>\n </div>\n\n <div class=\"hm-visually-hidden\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">{{ announcement }}</div>\n </div>\n\n <ng-container footer>\n <hm-button emphasis=\"medium\" (clicked)=\"close()\">{{ text.cancel }}</hm-button>\n <hm-button [disabled]=\"!hasChanges\" [loading]=\"saving\" (clicked)=\"save()\">{{ text.reorderSave }}</hm-button>\n </ng-container>\n</hm-modal>\n","import { Component, Input, OnChanges, SimpleChanges, ChangeDetectionStrategy, inject, computed, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport {\n AlertComponent, ButtonComponent, CheckboxComponent, ComboboxComponent, ComboboxMultiComponent, ComboboxOption, CopyButtonComponent, DataGridActionTriggered, DataGridCellDirective,\n DataGridComponent, DataGridRowAction, DividerComponent, GridColumn, InputComponent, ModalComponent, TagComponent, TextareaComponent,\n} from '@trismegisto/angular';\nimport { formatMessage } from '@trismegisto/primitives';\nimport { AutoServiceDeleteFeedback } from '../../auto-service-delete';\nimport { autoServiceErrorText } from '../../auto-service-errors';\nimport { optionalIdBody, optionalIdValidator } from '../../optional-id.validator';\nimport { AutoServiceGroupType, AutoServiceService } from '../../auto-service.service';\nimport { AutoServiceRoutersReorderComponent } from './modals/routers-reorder/auto-service-routers-reorder.component';\nimport { SPINE_MESSAGES } from '@trismegisto/spine';\n\n/** Níveis do roteador acima da página, de cima para baixo. */\nexport const HIERARCHY_LEVELS = ['header_id', 'navigation_id', 'menu_id', 'item_id', 'submenu_id'] as const;\nexport type HierarchyLevel = (typeof HIERARCHY_LEVELS)[number];\n\n/**\n * A hierarquia é de cima para baixo: um nível preenchido com algum vazio acima dele é um \"buraco\" (o argos-admin recusa\n * com 400 `router_hierarchy_gap`). A página é a folha e não entra na conta.\n */\nexport function hasHierarchyGap(levels: Partial<Record<HierarchyLevel, string | null | undefined>>): boolean {\n let emptyAbove = false;\n for (const level of HIERARCHY_LEVELS) {\n if (!levels[level]) emptyAbove = true;\n else if (emptyAbove) return true;\n }\n return false;\n}\n\ninterface RouterRow {\n id: string; page_id: string; header_id?: string; navigation_id?: string; menu_id?: string; item_id?: string; submenu_id?: string;\n is_private: boolean; built_path: string; description?: string | null;\n /** Cópia de um router de template: pertence ao template, o auto-serviço só exibe (o admin-server recusa com 403). */\n templated?: boolean;\n /** Tipos de grupo (crachás) que podem receber guard para a tela; vazio = qualquer crachá. */\n allowed_type_ids?: string[];\n}\n\nconst emptyRouterForm = () => ({\n page_id: '', header_id: '', navigation_id: '', menu_id: '', item_id: '', submenu_id: '', is_private: true, description: '',\n allowed_type_ids: [] as string[],\n});\n\n@Component({\n selector: 'spine-auto-service-routers',\n standalone: true,\n imports: [\n CommonModule, FormsModule, ReactiveFormsModule, AlertComponent, ButtonComponent, CheckboxComponent, ComboboxComponent, ComboboxMultiComponent, DividerComponent,\n InputComponent, ModalComponent, DataGridComponent, DataGridCellDirective, TagComponent, TextareaComponent, AutoServiceRoutersReorderComponent,\n CopyButtonComponent,\n ],\n templateUrl: './auto-service-routers.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['./auto-service-routers.component.scss'],\n})\nexport class AutoServiceRoutersComponent implements OnChanges {\n protected readonly text = inject(SPINE_MESSAGES).autoService;\n /** Id opcional só na criação (mesmo roteador com o mesmo id em homologação e produção). */\n readonly newId = new FormControl('', { nonNullable: true, validators: [optionalIdValidator] });\n protected readonly idMessages = computed(() => ({ optionalId: this.text.optionalIdInvalid }));\n /** Telas com estado em campo comum, preenchido depois de `await`: marca a view ao terminar (app sem zone.js). */\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly deletion = inject(AutoServiceDeleteFeedback);\n @Input() clientId = '';\n routes: any[] = [];\n routers: RouterRow[] = [];\n loading = false;\n showRouterModal = false;\n /** Modal \"Reordenar menu\" (ordem dos itens no menu do app, por nível). */\n showReorder = false;\n editingRouterId = '';\n routerForm = emptyRouterForm();\n /**\n * Tipos de grupo do realm (`GET /group-types`). Todos entram, inclusive o Administrador (`assignable: false` só\n * impede criar grupo com o tipo; aqui é quem pode ver a tela), como no modal de roteador do argos-admin.\n */\n groupTypes: AutoServiceGroupType[] = [];\n groupTypeOptions: ComboboxOption[] = [];\n savingRouter = false;\n /** Falha ao gravar o roteador, mostrada no modal. */\n routerError: string | null = null;\n constructor(private service: AutoServiceService) {}\n\n readonly rowId = (r: RouterRow) => r.id;\n readonly columns = computed<GridColumn<RouterRow>[]>(() => [\n { key: 'page', title: this.text.colPage, value: (r) => this.routeName(r.page_id), sortable: true },\n { key: 'built_path', title: this.text.colBuiltPath, value: (r) => r.built_path },\n { key: 'description', title: this.text.colDescription, value: (r) => r.description ?? '' },\n { key: 'is_private', title: this.text.colVisibility, value: (r) => (r.is_private ? this.text.private : this.text.public), sortable: true },\n { key: 'allowed_type_ids', title: this.text.colAllowedBadges, value: (r) => this.allowedTypeNames(r.allowed_type_ids).join(', ') || this.text.anyBadge },\n { key: 'id', title: this.text.colId, value: (r) => r.id },\n ]);\n\n /** Nome acessível do botão de copiar: diz de qual roteador é o id (o caminho montado identifica a tela). */\n copyIdLabel(r: RouterRow): string {\n return formatMessage(this.text.copyRouterId, { name: r.built_path || this.routeName(r.page_id) });\n }\n // Router de template não se edita nem se exclui aqui (403 no admin-server): a linha fica sem o kebab.\n readonly rowActions = computed<DataGridRowAction<RouterRow>[]>(() => [\n { id: 'edit', icon: 'pencil', label: this.text.edit, available: (r) => !r.templated },\n {\n id: 'delete', icon: 'trash', label: this.text.delete, danger: true, separatorAbove: true, available: (r) => !r.templated,\n confirm: (r) => ({ heading: this.text.confirmDeleteRouterHeading, message: formatMessage(this.text.confirmDeleteRouter, { path: r.built_path }) }),\n },\n ]);\n\n get routeOptions(): ComboboxOption[] {\n return this.routes.map((r) => ({ value: r.id, label: r.display_name || r.name }));\n }\n\n ngOnChanges(changes: SimpleChanges) { if (changes['clientId']) this.load(); }\n\n async load() {\n if (!this.clientId) { this.routes = []; this.routers = []; this.setGroupTypes([]); return; }\n this.loading = true;\n try {\n const [routesRes, routersRes, typesRes] = await Promise.all([\n this.service.getWebRoutes(this.clientId),\n this.service.getRouters(this.clientId),\n // Sem os tipos a tabela abre igual; os crachás aparecem pelo id e o campo fica sem opção.\n this.service.getGroupTypes(this.clientId).catch(() => ({ group_types: [] as AutoServiceGroupType[] })),\n ]);\n this.routes = routesRes.routes;\n this.setGroupTypes(typesRes.group_types ?? []);\n this.routers = routersRes.routers.map((r: any) => ({ ...r, built_path: this.builtPath(r) }));\n } finally { this.loading = false; this.cdr.markForCheck(); }\n }\n\n private setGroupTypes(types: AutoServiceGroupType[]) {\n this.groupTypes = types;\n this.groupTypeOptions = types.map((t) => ({ value: t.id, label: t.name }));\n }\n\n /** Nomes dos crachás permitidos (id sem tipo conhecido aparece como o próprio id). */\n allowedTypeNames(typeIds: readonly string[] | undefined): string[] {\n return (typeIds ?? []).map((id) => this.groupTypes.find((t) => t.id === id)?.name ?? id);\n }\n\n routeName(id: string | null): string { if (!id) return '—'; return this.routes.find(r => r.id === id)?.name ?? id; }\n\n private readonly pathLevels: Array<'header_id' | 'navigation_id' | 'menu_id' | 'item_id' | 'submenu_id' | 'page_id'> =\n ['header_id', 'navigation_id', 'menu_id', 'item_id', 'submenu_id', 'page_id'];\n\n builtPath(r: any): string {\n const segments = this.pathLevels\n .map(level => this.routes.find(x => x.id === r[level])?.path)\n .filter((p): p is string => !!p)\n .map(p => p.replace(/^\\/+|\\/+$/g, ''));\n return segments.length ? '/' + segments.join('/') : '—';\n }\n\n openCreateRouter() {\n this.editingRouterId = '';\n this.routerError = null;\n this.routerForm = emptyRouterForm();\n this.newId.reset('');\n this.showRouterModal = true;\n }\n\n openEditRouter(r: RouterRow) {\n this.editingRouterId = r.id;\n this.routerError = null;\n this.routerForm = {\n page_id: r.page_id, header_id: r.header_id ?? '', navigation_id: r.navigation_id ?? '',\n menu_id: r.menu_id ?? '', item_id: r.item_id ?? '', submenu_id: r.submenu_id ?? '', is_private: r.is_private ?? true,\n description: r.description ?? '', allowed_type_ids: [...(r.allowed_type_ids ?? [])],\n };\n this.showRouterModal = true;\n }\n\n /** Níveis da hierarquia, de cima para baixo (a página é a folha e fica fora: sempre obrigatória). */\n readonly hierarchyLevels: readonly HierarchyLevel[] = HIERARCHY_LEVELS;\n\n /**\n * Nível bloqueado: o de cima está vazio (navegação só com header, menu só com navegação, item só com menu, submenu só\n * com item). Um valor já gravado fora da regra (roteador antigo) continua editável, para dar para limpar.\n */\n levelLocked(level: HierarchyLevel): boolean {\n const index = HIERARCHY_LEVELS.indexOf(level);\n if (index <= 0 || this.routerForm[level]) return false;\n return !this.routerForm[HIERARCHY_LEVELS[index - 1]];\n }\n\n /** Grava o nível; limpar um nível limpa todos os de baixo. */\n setLevel(level: HierarchyLevel, value: string | null | undefined) {\n this.routerForm[level] = value ?? '';\n this.routerError = null;\n if (!value) {\n for (const below of HIERARCHY_LEVELS.slice(HIERARCHY_LEVELS.indexOf(level) + 1)) this.routerForm[below] = '';\n }\n }\n\n /** Algum nível preenchido com um vazio acima dele (o argos-admin recusa com 400 `router_hierarchy_gap`). */\n get hierarchyGap(): boolean { return hasHierarchyGap(this.routerForm); }\n\n levelLabel(level: HierarchyLevel): string {\n switch (level) {\n case 'header_id': return this.text.levelHeader;\n case 'navigation_id': return this.text.levelNavigation;\n case 'menu_id': return this.text.levelMenu;\n case 'item_id': return this.text.levelItem;\n default: return this.text.levelSubmenu;\n }\n }\n\n async saveRouter() {\n if (!this.routerForm.page_id || this.hierarchyGap || this.savingRouter || (!this.editingRouterId && this.newId.invalid)) return;\n const body = {\n page_id: this.routerForm.page_id,\n header_id: this.routerForm.header_id || null,\n navigation_id: this.routerForm.navigation_id || null,\n menu_id: this.routerForm.menu_id || null,\n item_id: this.routerForm.item_id || null,\n submenu_id: this.routerForm.submenu_id || null,\n is_private: this.routerForm.is_private,\n description: this.routerForm.description.trim() || null,\n allowed_type_ids: [...this.routerForm.allowed_type_ids],\n };\n this.savingRouter = true;\n this.routerError = null;\n this.cdr.markForCheck();\n try {\n if (this.editingRouterId) { await this.service.updateRouter(this.clientId, this.editingRouterId, body); }\n else { await this.service.createRouter(this.clientId, { ...optionalIdBody('router_id', this.newId.value), ...body }); }\n } catch (err) {\n // O modal fica aberto com o motivo no idioma ativo (ex.: router_hierarchy_gap).\n this.routerError = autoServiceErrorText(err, this.text, this.text.routerSaveError);\n return;\n } finally {\n this.savingRouter = false;\n this.cdr.markForCheck();\n }\n this.showRouterModal = false;\n await this.load();\n }\n\n /** Já confirmado pelo `confirm` da ação na grade. */\n async deleteRouter(routerId: string) {\n if (await this.deletion.run(() => this.service.deleteRouter(this.clientId, routerId))) await this.load();\n }\n\n onAction(e: DataGridActionTriggered<RouterRow>): void {\n if (e.row.templated) return;\n if (e.action === 'edit') this.openEditRouter(e.row);\n if (e.action === 'delete') void this.deleteRouter(e.row.id);\n }\n}\n","<hm-data-grid\n [columns]=\"columns()\"\n [rows]=\"routers\"\n [rowId]=\"rowId\"\n [caption]=\"text.routersCaption\"\n [loading]=\"loading\"\n [rowActions]=\"rowActions()\"\n (actionTriggered)=\"onAction($event)\"\n [emptyMessage]=\"text.noRouters\"\n>\n <hm-button dataGridActions emphasis=\"medium\" icon=\"sort-vertical\" [disabled]=\"!routers.length\" (clicked)=\"showReorder = true\">{{ text.reorder }}</hm-button>\n <hm-button dataGridActions icon=\"plus\" [disabled]=\"!routes.length\" (clicked)=\"openCreateRouter()\">{{ text.newRouter }}</hm-button>\n <ng-template hmCell=\"page\" let-r>\n <span class=\"name-cell\">\n {{ routeName(r.page_id) }}\n <hm-tag *ngIf=\"r.templated\" [name]=\"text.templateTag\" color=\"info\" [title]=\"text.templateLocked\" />\n </span>\n </ng-template>\n <ng-template hmCell=\"is_private\" let-r>\n <hm-tag [name]=\"r.is_private ? text.private : text.public\" [color]=\"r.is_private ? 'warning' : 'success'\" />\n </ng-template>\n <ng-template hmCell=\"allowed_type_ids\" let-r>\n <span *ngIf=\"!r.allowed_type_ids?.length; else badges\" class=\"muted\">{{ text.anyBadge }}</span>\n <ng-template #badges>\n <span class=\"name-cell\">\n <hm-tag *ngFor=\"let name of allowedTypeNames(r.allowed_type_ids)\" [name]=\"name\" color=\"info\" />\n </span>\n </ng-template>\n </ng-template>\n <ng-template hmCell=\"built_path\" let-r>\n <code>{{ r.built_path }}</code>\n </ng-template>\n <!-- UUID do roteador: só o botão de copiar (para criar o mesmo roteador com o mesmo id no outro ambiente). -->\n <ng-template hmCell=\"id\" let-r>\n <hm-copy-button [value]=\"r.id\" [label]=\"copyIdLabel(r)\" [copiedLabel]=\"text.idCopied\" />\n </ng-template>\n</hm-data-grid>\n\n<!-- Modal: ordem dos itens no menu do app (vale também para roteadores de template) -->\n<spine-auto-service-routers-reorder [clientId]=\"clientId\" [open]=\"showReorder\" (openChange)=\"showReorder = $event\" (saved)=\"load()\" />\n\n<!-- Modal: criar/editar roteador -->\n<hm-modal [open]=\"showRouterModal\" (openChange)=\"showRouterModal = $event\" [heading]=\"editingRouterId ? text.editRouter : text.newRouter\" size=\"large\" (closed)=\"showRouterModal = false\">\n <div class=\"form-stack\">\n <hm-alert *ngIf=\"routerError\" variant=\"error\">{{ routerError }}</hm-alert>\n @if (!editingRouterId) {\n <hm-input [formControl]=\"newId\" [label]=\"text.optionalId\" [placeholder]=\"text.optionalIdPlaceholder\" [hint]=\"text.optionalIdHint\" [messages]=\"idMessages()\" />\n }\n <hm-combobox [label]=\"text.page\" [options]=\"routeOptions\" [value]=\"routerForm.page_id\" (valueChange)=\"routerForm.page_id = $event\"></hm-combobox>\n <hm-textarea [label]=\"text.routerDescription\" [rows]=\"2\" [hint]=\"text.routerDescriptionHint\" [(ngModel)]=\"routerForm.description\" />\n\n <hm-divider [label]=\"text.hierarchy\" />\n <p class=\"hierarchy-hint muted\">{{ text.hierarchyHint }}</p>\n\n <!-- De cima para baixo: cada nível só abre com o de cima escolhido; limpar um nível limpa os de baixo. -->\n <hm-combobox *ngFor=\"let level of hierarchyLevels\" [label]=\"levelLabel(level)\" [options]=\"routeOptions\" [clearable]=\"true\"\n [disabled]=\"levelLocked(level)\" [value]=\"routerForm[level]\" (valueChange)=\"setLevel(level, $event)\"></hm-combobox>\n <hm-alert *ngIf=\"hierarchyGap\" variant=\"warning\">{{ text.routerErrors.hierarchyGap }}</hm-alert>\n\n <hm-divider />\n <hm-checkbox [(ngModel)]=\"routerForm.is_private\" [label]=\"text.privateHint\" />\n <!-- Vazio = qualquer crachá (mesma regra do modal de roteador do argos-admin). -->\n <hm-combobox-multi [label]=\"text.colAllowedBadges\" [options]=\"groupTypeOptions\" [placeholder]=\"text.anyBadge\"\n [hint]=\"text.allowedBadgesHint\" [visibleChipsLimit]=\"null\" [selected]=\"routerForm.allowed_type_ids\"\n (selectedChange)=\"routerForm.allowed_type_ids = [...$event]; routerError = null\" />\n </div>\n\n <ng-container footer>\n <hm-button emphasis=\"medium\" (clicked)=\"showRouterModal = false\">{{ text.cancel }}</hm-button>\n <hm-button [disabled]=\"!routerForm.page_id || hierarchyGap || (!editingRouterId && newId.invalid)\" [loading]=\"savingRouter\" (clicked)=\"saveRouter()\">\n {{ editingRouterId ? text.save : text.create }}\n </hm-button>\n </ng-container>\n</hm-modal>\n","import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges, ChangeDetectionStrategy, inject, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonComponent, ComboboxComponent, ComboboxOption, ModalComponent } from '@trismegisto/angular';\nimport { AutoServiceService } from '../../../../auto-service.service';\nimport { SPINE_MESSAGES } from '@trismegisto/spine';\n\n@Component({\n selector: 'spine-auto-service-access-create',\n standalone: true,\n imports: [CommonModule, ButtonComponent, ComboboxComponent, ModalComponent],\n templateUrl: './auto-service-access-create.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['./auto-service-access-create.component.scss'],\n})\nexport class AutoServiceAccessCreateComponent implements OnChanges {\n protected readonly text = inject(SPINE_MESSAGES).autoService;\n /** Telas com estado em campo comum, preenchido depois de `await`: marca a view ao terminar (app sem zone.js). */\n private readonly cdr = inject(ChangeDetectorRef);\n @Input() clientId = '';\n @Input() availableGroups: any[] = [];\n @Input() open = false;\n @Output() openChange = new EventEmitter<boolean>();\n @Output() created = new EventEmitter<void>();\n groupId = '';\n saving = false;\n constructor(private service: AutoServiceService) {}\n\n get groupOptions(): ComboboxOption[] {\n return this.availableGroups.map((g) => ({ value: g.id, label: g.type ? `${g.name} (${g.type.name})` : g.name }));\n }\n\n ngOnChanges(changes: SimpleChanges) { if (changes['open'] && this.open) { this.groupId = ''; } }\n onModalOpenChange(value: boolean) { this.open = value; this.openChange.emit(value); }\n close() { this.onModalOpenChange(false); }\n\n async save() {\n if (!this.groupId) return;\n this.saving = true;\n try { await this.service.createAccess(this.clientId, this.groupId); this.created.emit(); this.close(); }\n finally { this.saving = false; this.cdr.markForCheck(); }\n }\n}\n","<hm-modal [open]=\"open\" (openChange)=\"onModalOpenChange($event)\" [heading]=\"text.newAccessHeading\" (closed)=\"close()\">\n <hm-combobox [label]=\"text.group\" [options]=\"groupOptions\" [value]=\"groupId\" (valueChange)=\"groupId = $event\"></hm-combobox>\n\n <ng-container footer>\n <hm-button emphasis=\"medium\" (clicked)=\"close()\">{{ text.cancel }}</hm-button>\n <hm-button [disabled]=\"!groupId\" [loading]=\"saving\" (clicked)=\"save()\">{{ text.create }}</hm-button>\n </ng-container>\n</hm-modal>\n","import {\n Component, Input, Output, EventEmitter, OnChanges, SimpleChanges, ChangeDetectionStrategy, inject, ChangeDetectorRef, computed, signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonComponent, DataGridActionBarComponent, DrawerComponent, IconComponent, TreeComponent } from '@trismegisto/angular';\nimport { AutoServiceService } from '../../../../auto-service.service';\nimport { SPINE_MESSAGES } from '@trismegisto/spine';\nimport { TreeNode, TreeSelectionChange, formatMessage } from '@trismegisto/primitives';\n\n/** Nó da árvore de rotas: pastas são os níveis do menu (header…submenu) e a folha é a página (um roteador). */\nexport interface RouteTreeNode {\n key: string; name: string; isFolder: boolean; routerId?: string; guardId?: string; selected?: boolean; children: RouteTreeNode[];\n}\n\n/**\n * \"Gerenciar rotas\" de um acesso do client: as telas privadas que o grupo pode receber (roteadores sem restrição de\n * crachá ou que aceitam o crachá do grupo), em `hm-tree` pelos níveis do menu, como no painel do Argos. No topo, só o\n * filtro; a seleção guarda só folhas (páginas) e a diferença vira guard criado ou removido ao confirmar.\n */\n@Component({\n selector: 'spine-auto-service-access-guards',\n standalone: true,\n imports: [CommonModule, ButtonComponent, DataGridActionBarComponent, IconComponent, DrawerComponent, TreeComponent],\n templateUrl: './auto-service-access-guards.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['./auto-service-access-guards.component.scss'],\n})\nexport class AutoServiceAccessGuardsComponent implements OnChanges {\n protected readonly text = inject(SPINE_MESSAGES).autoService;\n /** Telas com estado em campo comum, preenchido depois de `await`: marca a view ao terminar (app sem zone.js). */\n private readonly cdr = inject(ChangeDetectorRef);\n protected readonly fmt = formatMessage;\n @Input() clientId = '';\n @Input() access: any = null;\n @Input() open = false;\n @Output() openChange = new EventEmitter<boolean>();\n\n availableRouters: any[] = [];\n availableRoutes: any[] = [];\n clientPrivateRouters: any[] = [];\n guards: any[] = [];\n loading = false;\n saving = false;\n\n readonly tree = signal<RouteTreeNode[]>([]);\n /** Termo do filtro no topo do drawer; a árvore mostrada é `visibleTree`. */\n readonly filter = signal('');\n readonly visibleTree = computed(() => filterRouteTree(this.tree(), this.filter()));\n readonly treeNodes = computed<readonly TreeNode[]>(() => this.visibleTree().map(n => toTreeNode(n)));\n /** Só folhas (páginas): o que tem guard agora na árvore. */\n readonly selectedIds = signal<ReadonlySet<string>>(new Set());\n readonly expandedIds = signal<ReadonlySet<string>>(new Set());\n private originalSelectedIds: ReadonlySet<string> = new Set();\n private readonly nodesByKey = computed(() => indexByKey(this.tree()));\n /** Nós visíveis por chave: marcar uma pasta com o filtro ativo só mexe nas páginas que aparecem. */\n private readonly visibleByKey = computed(() => indexByKey(this.visibleTree()));\n\n constructor(private service: AutoServiceService) {}\n\n ngOnChanges(changes: SimpleChanges) { if (changes['open'] && this.open) { this.reset(); } }\n close() { this.open = false; this.openChange.emit(false); }\n\n async reset() {\n this.loading = true;\n try {\n const [routersRes, routesRes] = await Promise.all([this.service.getRouters(this.clientId), this.service.getWebRoutes(this.clientId)]);\n this.availableRouters = routersRes.routers;\n this.availableRoutes = routesRes.routes;\n this.clientPrivateRouters = this.availableRouters.filter((r: any) =>\n r.is_private && (!r.allowed_type_ids?.length || r.allowed_type_ids.includes(this.access.group_type_id))\n );\n await this.loadGuards();\n this.buildTree();\n } finally { this.loading = false; this.cdr.markForCheck(); }\n }\n\n async loadGuards() { const res = await this.service.getGuards(this.clientId, this.access.access_id); this.guards = res.guards; }\n\n private routeName(id: string | null): string {\n if (!id) return '—';\n return this.availableRoutes.find((r: any) => r.id === id)?.name ?? id;\n }\n\n private readonly levels: Array<'header_id' | 'navigation_id' | 'menu_id' | 'item_id' | 'submenu_id'> =\n ['header_id', 'navigation_id', 'menu_id', 'item_id', 'submenu_id'];\n\n buildTree() {\n const root: RouteTreeNode[] = [];\n for (const router of this.clientPrivateRouters) {\n let currentLevel = root;\n for (const level of this.levels) {\n const id = router[level];\n if (!id) continue;\n const key = `${level}:${id}`;\n let node = currentLevel.find(n => n.key === key);\n if (!node) { node = { key, name: this.routeName(id), isFolder: true, children: [] }; currentLevel.push(node); }\n currentLevel = node.children;\n }\n const guard = this.guards.find((g: any) => g.router_id === router.id);\n currentLevel.push({\n key: `page:${router.id}`, name: router.page_name || this.routeName(router.page_id), isFolder: false,\n routerId: router.id, guardId: guard?.guard_id, selected: !!guard, children: [],\n });\n }\n this.tree.set(root);\n const original = new Set(root.flatMap(collectLeaves).filter(l => l.selected).map(l => l.key));\n this.originalSelectedIds = original;\n this.selectedIds.set(new Set(original));\n this.expandedIds.set(new Set());\n this.filter.set('');\n }\n\n /** Filtrar abre as pastas que sobraram, para as telas encontradas aparecerem sem clique. */\n onFilterChange(term: string) {\n this.filter.set(term);\n if (!term.trim()) return;\n this.expandedIds.update(current => new Set([...current, ...folderKeys(this.visibleTree())]));\n }\n\n /** Com caixas o hm-tree emite folhas (ou a pasta sem folhas): pasta vira as páginas dela que estão à vista. */\n onTreeChanged(changes: readonly TreeSelectionChange[]) {\n this.selectedIds.update(current => {\n const next = new Set(current);\n for (const change of changes) {\n const node = this.visibleByKey().get(change.id);\n if (!node) continue;\n for (const leaf of collectLeaves(node)) {\n if (change.selected) next.add(leaf.key); else next.delete(leaf.key);\n }\n }\n return next;\n });\n }\n\n get hasChanges(): boolean {\n const selected = this.selectedIds();\n if (selected.size !== this.originalSelectedIds.size) return true;\n for (const id of selected) if (!this.originalSelectedIds.has(id)) return true;\n return false;\n }\n\n /** Folha (página) pela chave; `undefined` para pasta ou chave desconhecida. */\n private leafByKey(key: string): RouteTreeNode | undefined {\n const node = this.nodesByKey().get(key);\n return node && !node.isFolder ? node : undefined;\n }\n\n async confirm() {\n const selected = this.selectedIds();\n const isLeaf = (l: RouteTreeNode | undefined): l is RouteTreeNode => !!l;\n const toAdd = [...selected].filter(id => !this.originalSelectedIds.has(id)).map(id => this.leafByKey(id)).filter(isLeaf);\n const toRemove = [...this.originalSelectedIds].filter(id => !selected.has(id)).map(id => this.leafByKey(id)).filter(isLeaf);\n if (toAdd.length === 0 && toRemove.length === 0) { this.close(); return; }\n this.saving = true;\n try {\n for (const l of toAdd) { await this.service.addGuard(this.clientId, this.access.access_id, l.routerId!); }\n for (const l of toRemove) { await this.service.removeGuard(this.clientId, this.access.access_id, l.guardId!); }\n this.close();\n } finally { this.saving = false; this.cdr.markForCheck(); }\n }\n}\n\nfunction toTreeNode(node: RouteTreeNode): TreeNode {\n return {\n id: node.key, label: node.name, leaf: !node.isFolder,\n children: node.isFolder ? node.children.map(toTreeNode) : undefined,\n };\n}\n\nfunction collectLeaves(node: RouteTreeNode): RouteTreeNode[] {\n return node.isFolder ? node.children.flatMap(collectLeaves) : [node];\n}\n\nfunction indexByKey(root: RouteTreeNode[]): Map<string, RouteTreeNode> {\n const map = new Map<string, RouteTreeNode>();\n const walk = (nodes: RouteTreeNode[]) => { for (const n of nodes) { map.set(n.key, n); walk(n.children); } };\n walk(root);\n return map;\n}\n\nfunction folderKeys(root: RouteTreeNode[]): string[] {\n return [...indexByKey(root).values()].filter(n => n.isFolder).map(n => n.key);\n}\n\n/** Minúsculo e sem acento: \"operacao\" casa com \"Operação\". */\nfunction normalize(value: string | undefined): string {\n return (value ?? '').normalize('NFD').replace(/[̀-ͯ]/g, '').toLowerCase();\n}\n\n/** A árvore só com as telas cujo nome casa com o termo; a pasta que casa pelo nome vem inteira. Termo vazio = tudo. */\nexport function filterRouteTree(nodes: RouteTreeNode[], term: string): RouteTreeNode[] {\n const needle = normalize(term.trim());\n if (!needle) return nodes;\n const walk = (list: RouteTreeNode[]): RouteTreeNode[] => list.flatMap((n) => {\n if (n.isFolder) {\n if (normalize(n.name).includes(needle)) return [n];\n const children = walk(n.children);\n return children.length ? [{ ...n, children }] : [];\n }\n return normalize(n.name).includes(needle) ? [n] : [];\n });\n return walk(nodes);\n}\n","<hm-drawer [open]=\"open\" (openChange)=\"open = $event\" [heading]=\"fmt(text.routesOf, { group: access?.group_name ?? '' })\" (closed)=\"close()\">\n <div *ngIf=\"loading\" class=\"loading-row\">\n <span>{{ text.loading }}</span>\n </div>\n\n <!-- Topo sem mensagens: só o filtro, com o mesmo visual da busca das grades. -->\n <hm-data-grid-action-bar *ngIf=\"!loading && tree().length\"\n [search]=\"filter()\" (searchChange)=\"onFilterChange($event)\"\n [placeholder]=\"text.filterRoutes\" [label]=\"text.filterRoutes\" />\n\n <hm-tree\n *ngIf=\"!loading && treeNodes().length\"\n [nodes]=\"treeNodes()\"\n [label]=\"text.routesTreeLabel\"\n [selected]=\"selectedIds()\"\n [(expanded)]=\"expandedIds\"\n (changed)=\"onTreeChanged($event)\"\n />\n\n <div class=\"empty-state\" *ngIf=\"!loading && tree().length > 0 && treeNodes().length === 0\">\n <hm-icon shape=\"search\" size=\"xl\"></hm-icon>\n <p>{{ fmt(text.noFilterMatch, { term: filter() }) }}</p>\n </div>\n\n <div class=\"empty-state\" *ngIf=\"!loading && tree().length === 0\">\n <hm-icon shape=\"filter-grid\" size=\"xl\"></hm-icon>\n <p>{{ text.noPrivateRoutes }}</p>\n </div>\n\n <ng-container footer>\n <hm-button emphasis=\"medium\" (clicked)=\"close()\">{{ text.cancel }}</hm-button>\n <hm-button [disabled]=\"!hasChanges\" [loading]=\"saving\" (clicked)=\"confirm()\">{{ text.confirmChanges }}</hm-button>\n </ng-container>\n</hm-drawer>\n","import { Component, Input, OnChanges, SimpleChanges, ChangeDetectionStrategy, inject, computed, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n AvatarGroupComponent, AvatarGroupPerson, ButtonComponent, DataGridActionTriggered, DataGridCellDirective, DataGridComponent, DataGridRowAction,\n GridColumn, IconComponent, TagComponent,\n} from '@trismegisto/angular';\nimport { formatMessage } from '@trismegisto/primitives';\nimport { AutoServiceDeleteFeedback } from '../../auto-service-delete';\nimport { AutoServiceService } from '../../auto-service.service';\nimport { AutoServiceAccessCreateComponent } from './modals/access-create/auto-service-access-create.component';\nimport { AutoServiceAccessGuardsComponent } from './modals/access-guards/auto-service-access-guards.component';\nimport { SPINE_MESSAGES } from '@trismegisto/spine';\n\ninterface AccessRow {\n access_id: string; group_id: string; group_name: string; group_type_name: string; group_type_id: string;\n /** Acesso do grupo de administração: não é do auto-serviço (servidor antigo ainda devolve; a tela descarta). */\n group_is_admin?: boolean;\n /** Resumo dos membros do grupo (servidor que já manda): total e os primeiros, com foto. */\n members_count?: number;\n members_preview?: { user_id: string; username: string; name: string | null; picture: string | null }[];\n}\n\n@Component({\n selector: 'spine-auto-service-access',\n standalone: true,\n imports: [\n CommonModule, AvatarGroupComponent, ButtonComponent, IconComponent, DataGridComponent, DataGridCellDirective, TagComponent,\n AutoServiceAccessCreateComponent, AutoServiceAccessGuardsComponent,\n ],\n templateUrl: './auto-service-access.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['./auto-service-access.component.scss'],\n})\nexport class AutoServiceAccessComponent implements OnChanges {\n protected readonly text = inject(SPINE_MESSAGES).autoService;\n /** Telas com estado em campo comum, preenchido depois de `await`: marca a view ao terminar (app sem zone.js). */\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly deletion = inject(AutoServiceDeleteFeedback);\n @Input() clientId = '';\n entries: AccessRow[] = [];\n availableGroups: any[] = [];\n loading = false;\n showCreate = false;\n showGuards = false;\n activeAccess: AccessRow | null = null;\n constructor(private service: AutoServiceService) {}\n\n readonly rowId = (a: AccessRow) => a.access_id;\n\n /** Rostos do resumo de membros (nome para as iniciais e o leitor de tela). */\n protected fmtMembers(a: AccessRow): string {\n return formatMessage(this.text.membersOf, { group: a.group_name });\n }\n\n protected peopleOf(a: AccessRow): AvatarGroupPerson[] {\n return (a.members_preview ?? []).map((m) => ({ name: m.name || m.username, imageUrl: m.picture }));\n }\n readonly columns = computed<GridColumn<AccessRow>[]>(() => [\n { key: 'group_name', title: this.text.colGroup, value: (a) => a.group_name, sortable: true },\n { key: 'group_type_name', title: this.text.colType, value: (a) => a.group_type_name, sortable: true },\n { key: 'members', title: this.text.colMembers, value: (a) => String(a.members_count ?? 0), raw: (a) => a.members_count ?? 0, sortable: true },\n // Como no painel do Argos: \"Gerenciar rotas\" é um botão na linha, não um item do menu.\n { key: 'guards', title: this.text.colGuards, value: () => '' },\n ]);\n readonly rowActions = computed<DataGridRowAction<AccessRow>[]>(() => [\n {\n id: 'delete', icon: 'trash', label: this.text.remove, danger: true,\n confirm: (a) => ({ heading: this.text.confirmRemoveAccessHeading, message: formatMessage(this.text.confirmRemoveAccess, { group: a.group_name }) }),\n },\n ]);\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['clientId']) { this.load(); this.loadGroups(); }\n }\n\n async load() {\n if (!this.clientId) { this.entries = []; return; }\n this.loading = true;\n try {\n const res = await this.service.getAccess(this.clientId);\n this.entries = (res.access ?? []).filter((a: AccessRow) => !a.group_is_admin);\n }\n finally { this.loading = false; this.cdr.markForCheck(); }\n }\n\n async loadGroups() {\n if (!this.clientId) { this.availableGroups = []; return; }\n const res = await this.service.getGroups(this.clientId);\n this.availableGroups = (res.groups ?? []).filter((g) => !g.is_admin);\n this.cdr.markForCheck();\n }\n\n /** Grupos oferecidos em \"Novo acesso\": os do projeto que ainda não têm acesso (os da tabela não aparecem de novo). */\n get offeredGroups(): any[] {\n const granted = new Set(this.entries.map((e) => e.group_id).filter(Boolean));\n return this.availableGroups.filter((g) => !granted.has(g.id));\n }\n\n openCreate() { this.showCreate = true; }\n async onCreated() { await this.load(); }\n /** Já confirmado pelo `confirm` da ação na grade. */\n async deleteAccess(accessId: string) {\n if (await this.deletion.run(() => this.service.deleteAccess(this.clientId, accessId))) await this.load();\n }\n openGuards(access: AccessRow) { this.activeAccess = access; this.showGuards = true; }\n\n onAction(e: DataGridActionTriggered<AccessRow>): void {\n if (e.action === 'delete') void this.deleteAccess(e.row.access_id);\n }\n}\n","<hm-data-grid\n [columns]=\"columns()\"\n [rows]=\"entries\"\n [rowId]=\"rowId\"\n [caption]=\"text.accessCaption\"\n [loading]=\"loading\"\n [rowActions]=\"rowActions()\"\n (actionTriggered)=\"onAction($event)\"\n [emptyMessage]=\"text.noAccess\"\n>\n <hm-button dataGridActions icon=\"plus\" (clicked)=\"openCreate()\">{{ text.newAccess }}</hm-button>\n <ng-template hmCell=\"group_type_name\" let-a>\n <hm-tag [name]=\"a.group_type_name\" color=\"neutral\" />\n </ng-template>\n <ng-template hmCell=\"members\" let-a>\n @if (a.members_count) {\n <hm-avatar-group size=\"small\" [max]=\"4\" [people]=\"peopleOf(a)\" [total]=\"a.members_count\" [label]=\"fmtMembers(a)\" />\n } @else {\n <span class=\"access-muted\">—</span>\n }\n </ng-template>\n <ng-template hmCell=\"guards\" let-a>\n <hm-button emphasis=\"minimal\" icon=\"shield\" (clicked)=\"openGuards(a)\">{{ text.manageRoutes }}</hm-button>\n </ng-template>\n</hm-data-grid>\n\n<spine-auto-service-access-create\n [clientId]=\"clientId\"\n [availableGroups]=\"offeredGroups\"\n [open]=\"showCreate\"\n (openChange)=\"showCreate = $event\"\n (created)=\"onCreated()\">\n</spine-auto-service-access-create>\n\n<spine-auto-service-access-guards\n *ngIf=\"activeAccess\"\n [clientId]=\"clientId\"\n [access]=\"activeAccess\"\n [open]=\"showGuards\"\n (openChange)=\"showGuards = $event\">\n</spine-auto-service-access-guards>\n","import { Component, ChangeDetectionStrategy, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TabComponent, TabContentDirective, TabsComponent } from '@trismegisto/angular';\nimport { AutoServiceClient, AutoServiceClientPickerComponent } from './client-picker/auto-service-client-picker.component';\nimport { AutoServiceRoutesComponent } from './tabs/auto-service-routes/auto-service-routes.component';\nimport { AutoServiceRoutersComponent } from './tabs/auto-service-routers/auto-service-routers.component';\nimport { AutoServiceAccessComponent } from './tabs/auto-service-access/auto-service-access.component';\nimport { SPINE_MESSAGES } from '@trismegisto/spine';\n\n// Novidades, Sugestões e Avaliações saíram daqui: são telas próprias na raiz do menu (`pages/`, migration 0036 do argos).\ntype Tab = 'routes' | 'routers' | 'access';\n\n@Component({\n selector: 'spine-auto-service-client',\n standalone: true,\n imports: [\n CommonModule, TabsComponent, TabComponent, TabContentDirective,\n AutoServiceClientPickerComponent, AutoServiceRoutesComponent, AutoServiceRoutersComponent, AutoServiceAccessComponent,\n ],\n templateUrl: './auto-service-client.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['./auto-service-client.component.scss'],\n})\nexport class AutoServiceClientComponent {\n protected readonly text = inject(SPINE_MESSAGES).autoService;\n client: AutoServiceClient | null = null;\n activeTab: Tab = 'routes';\n onClientChange(c: AutoServiceClient | null) { this.client = c; }\n setTab(tab: Tab) { this.activeTab = tab; }\n}\n","<!-- Título e descrição da tela vêm da barra da página (nome + description do router). -->\n<div class=\"as-stack\">\n <spine-auto-service-client-picker (clientChange)=\"onClientChange($event)\"></spine-auto-service-client-picker>\n\n <!-- Conteúdo de cada aba é preguiçoso (*hmTabContent): só busca na API quando a aba é aberta. -->\n <hm-tabs *ngIf=\"client as c\" [label]=\"text.clientSections\" [active]=\"activeTab\" (activeChange)=\"setTab($any($event))\">\n <hm-tab id=\"routes\" [label]=\"text.tabRoutes\">\n <spine-auto-service-routes *hmTabContent [clientId]=\"c.id\"></spine-auto-service-routes>\n </hm-tab>\n <hm-tab id=\"routers\" [label]=\"text.tabRouters\">\n <spine-auto-service-routers *hmTabContent [clientId]=\"c.id\"></spine-auto-service-routers>\n </hm-tab>\n <hm-tab id=\"access\" [label]=\"text.tabAccess\">\n <spine-auto-service-access *hmTabContent [clientId]=\"c.id\"></spine-auto-service-access>\n </hm-tab>\n </hm-tabs>\n</div>\n"],"names":["i1.AutoServiceService","i3","i1"],"mappings":"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"}
|