fix(admin): P0 user-reported bugs - raw keys, table overflow, builder escape route
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> - Transactions: 'adminTransactions.flag'/'clearFlag' raw keys rendered on the fraud toggle button (missed by earlier audit because the key sits inside a ternary); added en/ru/hy strings with merchant wording ('Flag as suspicious') - Table overflow on Customers/Transactions root-caused: app-table host is a grid item with default min-width:auto, so wide tables stretched their parent card instead of scrolling inside the wrapper; shared TableComponent now declares display:block/min-width:0/max-width:100% on its element selector (encapsulation None - :host would not match), fixing every admin table at once; verified in browser: cards contained, wrapper scrolls internally - Builder trap root-caused: section editor pages (/:lang/edit/<section>) had zero routes to the backoffice - only a link back to the builder overview - so admins inside a section could not return to the dashboard; sidebar now has a persistent 'Back to dashboard' link (new builder.backToDashboard key, en/ru/hy); verified navigation lands on /ru/backoffice/dashboard
This commit is contained in:
@@ -8,6 +8,10 @@
|
||||
<span class="pi pi-arrow-left" aria-hidden="true"></span>
|
||||
{{ 'builder.appName' | translate }}
|
||||
</a>
|
||||
<a class="project-editor-layout__dashboard-link" [routerLink]="dashboardRoute()">
|
||||
<span class="pi pi-home" aria-hidden="true"></span>
|
||||
{{ 'builder.backToDashboard' | translate }}
|
||||
</a>
|
||||
<app-project-editor-nav (linkClicked)="closeMobileDrawer()" />
|
||||
</aside>
|
||||
|
||||
|
||||
@@ -51,6 +51,28 @@
|
||||
}
|
||||
}
|
||||
|
||||
.project-editor-layout__dashboard-link {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: var(--space-xs);
|
||||
padding: var(--space-sm);
|
||||
margin-bottom: var(--space-md);
|
||||
border-radius: var(--radius-sm);
|
||||
color: var(--text-secondary);
|
||||
font-size: 0.85rem;
|
||||
text-decoration: none;
|
||||
|
||||
&:hover {
|
||||
background: var(--bg-tertiary);
|
||||
color: var(--text-primary);
|
||||
}
|
||||
|
||||
&:focus-visible {
|
||||
outline: 2px solid var(--primary-color);
|
||||
outline-offset: 2px;
|
||||
}
|
||||
}
|
||||
|
||||
.project-editor-layout__content {
|
||||
min-width: 0;
|
||||
padding: var(--space-lg);
|
||||
|
||||
@@ -95,6 +95,9 @@ export class ProjectEditorPageComponent {
|
||||
|
||||
readonly overviewRoute = computed(() => ['/', this.languageService.currentLanguage(), 'edit']);
|
||||
|
||||
/** Persistent escape hatch back to the admin dashboard - section editors previously had no route to the backoffice at all. */
|
||||
readonly dashboardRoute = computed(() => ['/', this.languageService.currentLanguage(), 'backoffice', 'dashboard']);
|
||||
|
||||
constructor() {
|
||||
this.facade.loadBootstrap();
|
||||
effect(() => {
|
||||
|
||||
@@ -686,6 +686,7 @@ export const en: Translations = {
|
||||
linkUrlDesc: 'Path or URL this navigation link points to.',
|
||||
linkVisibleDesc: 'Whether this navigation link is shown to shoppers.',
|
||||
appName: 'Marketplace Builder',
|
||||
backToDashboard: 'Back to dashboard',
|
||||
breadcrumbRoot: 'Marketplace Builder',
|
||||
statusComplete: 'Complete',
|
||||
statusInProgress: 'In progress',
|
||||
@@ -1628,6 +1629,8 @@ export const en: Translations = {
|
||||
method: 'Payment method',
|
||||
fraud: 'Fraud check',
|
||||
flagged: 'Flagged',
|
||||
flag: 'Flag as suspicious',
|
||||
clearFlag: 'Clear flag',
|
||||
retry: 'Retry',
|
||||
audit: 'History',
|
||||
emptyTitle: 'No transactions found',
|
||||
|
||||
@@ -686,6 +686,7 @@ export const hy: Translations = {
|
||||
linkUrlDesc: 'Ուղին կամ URL-ը, որին ուղղորդում է այս նավիգացիոն հղումը։',
|
||||
linkVisibleDesc: 'Արդյո՞ք այս նավիգացիոն հղումը ցուցադրվում է գնորդներին։',
|
||||
appName: 'Մարկետփլեյսի կոնստրուկտոր',
|
||||
backToDashboard: 'Վերադառնալ կառավարման վահանակ',
|
||||
breadcrumbRoot: 'Մարկետփլեյսի կոնստրուկտոր',
|
||||
statusComplete: 'Ավարտված',
|
||||
statusInProgress: 'Ընթացքի մեջ',
|
||||
@@ -1623,6 +1624,8 @@ export const hy: Translations = {
|
||||
method: 'Վճարման եղանակ',
|
||||
fraud: 'Խարդախության ստուգում',
|
||||
flagged: 'Նշված',
|
||||
flag: 'Նշել որպես կասկածելի',
|
||||
clearFlag: 'Հանել նշումը',
|
||||
retry: 'Կրկնել',
|
||||
audit: 'Պատմություն',
|
||||
emptyTitle: 'Գործարքներ չեն գտնվել',
|
||||
|
||||
@@ -686,6 +686,7 @@ export const ru: Translations = {
|
||||
linkUrlDesc: 'Путь или URL, на который ведёт эта ссылка навигации.',
|
||||
linkVisibleDesc: 'Показывать ли эту ссылку навигации покупателям.',
|
||||
appName: 'Конструктор маркетплейса',
|
||||
backToDashboard: 'Назад в панель управления',
|
||||
breadcrumbRoot: 'Конструктор маркетплейса',
|
||||
statusComplete: 'Готово',
|
||||
statusInProgress: 'В процессе',
|
||||
@@ -1623,6 +1624,8 @@ export const ru: Translations = {
|
||||
method: 'Способ оплаты',
|
||||
fraud: 'Проверка на мошенничество',
|
||||
flagged: 'Помечено',
|
||||
flag: 'Пометить как подозрительную',
|
||||
clearFlag: 'Снять пометку',
|
||||
retry: 'Повторить',
|
||||
audit: 'История',
|
||||
emptyTitle: 'Транзакции не найдены',
|
||||
|
||||
@@ -684,6 +684,7 @@ export interface Translations {
|
||||
linkUrlDesc: string;
|
||||
linkVisibleDesc: string;
|
||||
appName: string;
|
||||
backToDashboard: string;
|
||||
breadcrumbRoot: string;
|
||||
statusComplete: string;
|
||||
statusInProgress: string;
|
||||
@@ -1635,6 +1636,8 @@ export interface Translations {
|
||||
method: string;
|
||||
fraud: string;
|
||||
flagged: string;
|
||||
flag: string;
|
||||
clearFlag: string;
|
||||
retry: string;
|
||||
audit: string;
|
||||
emptyTitle: string;
|
||||
|
||||
@@ -1,3 +1,15 @@
|
||||
/* Block-level host that is allowed to shrink inside grid/flex parents.
|
||||
Without min-width: 0 a wide table forces its parent card to grow past
|
||||
its container (grid items default to min-width: auto), which is exactly
|
||||
the "table overflows the card" bug on Customers/Transactions. */
|
||||
/* Encapsulation is None, so target the element selector directly
|
||||
(:host would not match). */
|
||||
app-table {
|
||||
display: block;
|
||||
min-width: 0;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.app-table-wrapper {
|
||||
width: 100%;
|
||||
overflow-x: auto;
|
||||
|
||||
Reference in New Issue
Block a user