fix(ui): QA report P3/P4 batch — 7 cosmetic/UX bugs
QA report cleanup (после P1/P2 ship'нутых в v2.31.4): - **BUG-009**: Excel/SQL export форматы получили явный «скоро» badge поверх opacity-only disabled state. Title attribute оставлен. - **BUG-010**: «Доступ актора» (audit scope column) переименован в «Scope» — компактнее, не переносится на 2 строки. - **BUG-011**: Все audit table headers получили title attribute → hover tooltip когда text truncate'ится («ИЗМЕНЕН…» → full «Изменения»). - **UX-001**: Scope chips в /dictionaries теперь показывают ✓ glyph когда selected → визуально clear что multi-select. Aria-label расширен: «Фильтр по области (можно выбрать несколько)». - **UX-002**: Breadcrumb segments получили title attribute → hover показывает full label когда truncate'ится в narrow viewport. - **UX-003**: При смене вкладки в редакторе справочника (records → relations и т.п.) URL params q/scopes сбрасываются — раньше search фильтр оставался применённым после возврата на records. - **UX-004**: TimeTravel slider boundary метки получили 2-digit year: «05.05.26» вместо «05.05» — disambiguates конец декабря / начало января. Title attribute exposes full локальную дату. - **UX-009**: «Удалить» button в RecordDrawer переименован в «Закрыть запись» — same action как row context menu «Закрыть» (bitemporal close, не truly delete). Consistent labeling across UI.
This commit is contained in:
@@ -441,14 +441,15 @@ function AuditTable({ rows }: { rows: AuditEntry[] }) {
|
||||
<Table>
|
||||
<TableHead>
|
||||
<TableRow>
|
||||
<TableHeaderCell>{t('audit.col.time')}</TableHeaderCell>
|
||||
<TableHeaderCell>{t('audit.col.action')}</TableHeaderCell>
|
||||
<TableHeaderCell>{t('audit.col.dictionary')}</TableHeaderCell>
|
||||
<TableHeaderCell>{t('audit.col.businessKey')}</TableHeaderCell>
|
||||
<TableHeaderCell>{t('audit.col.user')}</TableHeaderCell>
|
||||
<TableHeaderCell>{t('audit.col.scope')}</TableHeaderCell>
|
||||
<TableHeaderCell>{t('audit.col.trace')}</TableHeaderCell>
|
||||
<TableHeaderCell>{t('audit.col.diff')}</TableHeaderCell>
|
||||
{/* QA BUG-011 fix: title attribute → hover tooltip когда text truncate'ится. */}
|
||||
<TableHeaderCell title={t('audit.col.time')}>{t('audit.col.time')}</TableHeaderCell>
|
||||
<TableHeaderCell title={t('audit.col.action')}>{t('audit.col.action')}</TableHeaderCell>
|
||||
<TableHeaderCell title={t('audit.col.dictionary')}>{t('audit.col.dictionary')}</TableHeaderCell>
|
||||
<TableHeaderCell title={t('audit.col.businessKey')}>{t('audit.col.businessKey')}</TableHeaderCell>
|
||||
<TableHeaderCell title={t('audit.col.user')}>{t('audit.col.user')}</TableHeaderCell>
|
||||
<TableHeaderCell title={t('audit.col.scope')}>{t('audit.col.scope')}</TableHeaderCell>
|
||||
<TableHeaderCell title={t('audit.col.trace')}>{t('audit.col.trace')}</TableHeaderCell>
|
||||
<TableHeaderCell title={t('audit.col.diff')}>{t('audit.col.diff')}</TableHeaderCell>
|
||||
</TableRow>
|
||||
</TableHead>
|
||||
<TableBody>
|
||||
|
||||
@@ -839,6 +839,11 @@ function DictionaryDetail() {
|
||||
search: (prev) => ({
|
||||
...prev,
|
||||
tab: tab === 'records' ? undefined : tab,
|
||||
// QA UX-003: сбросить records-tab фильтры (search/q + column filters
|
||||
// + scopes) когда пользователь перешёл на другую вкладку. Иначе
|
||||
// search:'абв' оставался применённым после возврата на records.
|
||||
q: undefined,
|
||||
scopes: undefined,
|
||||
}),
|
||||
replace: true,
|
||||
})
|
||||
|
||||
@@ -281,12 +281,15 @@ function DictionariesPage() {
|
||||
// Scope chips всегда покрашены в свой scope-color (filled bg
|
||||
// + colored text) per user feedback ("плашки то покрась").
|
||||
// Selected state — ring-1 ring-{scope} + slightly opaque bg.
|
||||
className={`h-8 text-cap tracking-[0.14em] uppercase font-semibold px-2.5 rounded-md border inline-flex items-center transition-all focus:outline-none focus:ring-2 focus:ring-accent/40 ${SCOPE_BG_TINT[scope]} ${SCOPE_TEXT[scope]} ${
|
||||
// QA UX-001: ✓ glyph когда selected — clarifies что это
|
||||
// multi-select (checkbox-like), не radio.
|
||||
className={`h-8 text-cap tracking-[0.14em] uppercase font-semibold px-2.5 rounded-md border inline-flex items-center gap-1 transition-all focus:outline-none focus:ring-2 focus:ring-accent/40 ${SCOPE_BG_TINT[scope]} ${SCOPE_TEXT[scope]} ${
|
||||
selected
|
||||
? `border-current shadow-sm`
|
||||
: 'border-transparent opacity-70 hover:opacity-100'
|
||||
}`}
|
||||
>
|
||||
{selected && <span aria-hidden className="text-[10px]">✓</span>}
|
||||
{scope}
|
||||
</button>
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user