fix(ui): block route render with centered GlobeLoader until queries resolve

Per user feedback ('вот такого не должно быть, лучше лоадер'):
- /dictionaries — full-page LoadingBlock (size lg, centered min-h 60vh)
  пока useDictionaries query loading. Раньше size=md без centering
  показывался в углу — а на пустой странице это смотрелось куце.
- /dictionaries/$name — same gate на detailQuery.isLoading. Без этого
  юзер видел partial render: пустую sidebar info panel, узкую records
  колонку (extra columns ещё не computed из schema), битую табличную
  toolbar. Теперь — централизованный GlobeLoader пока схема не дойдёт.
This commit is contained in:
Zimin A.N.
2026-05-11 22:37:22 +03:00
parent ca53322b14
commit e165a552aa
2 changed files with 26 additions and 1 deletions
@@ -598,6 +598,25 @@ function DictionaryDetail() {
return false
}, [detailQuery.data?.schemaJson])
// Full-page loader пока ОБА query (detail + records) не готовы. Иначе
// юзер видит partial render — узкая колонка без extra columns, info panel
// ещё не появилась, бар нагружается частями. Per user: "вот такого не
// должно быть, лучше лоадер".
if (detailQuery.isLoading || (!detailQuery.data && !detailQuery.error)) {
return (
<div className="min-h-[60vh] flex items-center justify-center">
<LoadingBlock size="lg" label={t('loading')} />
</div>
)
}
if (detailQuery.error) {
return (
<Alert variant="error" title={t('error.failed')}>
{String(detailQuery.error)}
</Alert>
)
}
return (
<div className="space-y-6">
{scope && (
@@ -185,7 +185,13 @@ function DictionariesPage() {
</button>
) : null
if (isLoading) return <LoadingBlock size="md" label={t('loading')} />
if (isLoading) {
return (
<div className="min-h-[60vh] flex items-center justify-center">
<LoadingBlock size="lg" label={t('loading')} />
</div>
)
}
if (error) {
return (
<Alert variant="error" title={t('error.failed')}>