Merge branch 'fix/internal-scope-and-dark-cards' into 'main'

fix(ui): internal scope filter + dark-theme cards в Связи

See merge request 2-6/2-6-4/terravault/ordinis!119
This commit is contained in:
Александр Зимин
2026-05-12 00:31:51 +00:00
3 changed files with 17 additions and 5 deletions
+14 -2
View File
@@ -22,7 +22,14 @@ import {
export const dictionariesQuery = queryOptions({
queryKey: ['dictionaries'] as const,
queryFn: async (): Promise<DictionaryDefinition[]> => {
const { data } = await apiClient.get<DictionaryDefinition[]>('/dictionaries')
// Backend по default возвращает только PUBLIC scope (~user feedback:
// «куда опять internal словари делись»). Передаём весь triplet —
// server-side всё равно отфильтрует по реальным scope permissions
// юзера, и invisible scopes просто не вернутся. Это match'ит то что
// useRecords / catalog row делает per-record (см. строку ~65).
const { data } = await apiClient.get<DictionaryDefinition[]>('/dictionaries', {
params: { as_scope: 'PUBLIC,INTERNAL,RESTRICTED' },
})
return data
},
})
@@ -31,7 +38,12 @@ export const dictionaryDetailQuery = (name: string) =>
queryOptions({
queryKey: ['dictionary', name] as const,
queryFn: async (): Promise<DictionaryDetail> => {
const { data } = await apiClient.get<DictionaryDetail>(`/dictionaries/${name}`)
// Same as listing — pass all scopes; server-side filter применит
// user permissions. Без этого INTERNAL dict вернёт 404 даже для
// авторизованного юзера с INTERNAL access.
const { data } = await apiClient.get<DictionaryDetail>(`/dictionaries/${name}`, {
params: { as_scope: 'PUBLIC,INTERNAL,RESTRICTED' },
})
return data
},
})
@@ -48,7 +48,7 @@ export const DictionaryDependentsPanel = ({ dictionaryName }: Props) => {
{data.map((d) => (
<li
key={`${d.sourceDict}.${d.sourceField}`}
className="flex items-center gap-2 px-2.5 py-1.5 rounded-sm border border-line bg-white text-cell"
className="flex items-center gap-2 px-2.5 py-1.5 rounded-sm border border-line bg-surface text-cell"
>
<Link
to="/dictionaries/$name"
@@ -54,7 +54,7 @@ const NeighborCard = ({
to="/dictionaries/$name"
params={{ name: dict.name }}
search={{ tab: 'relations' }}
className={`group block bg-white border border-line rounded-lg p-3 transition hover:shadow-hover hover:border-accent/40 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/40 ${
className={`group block bg-surface border border-line rounded-lg p-3 transition hover:shadow-hover hover:border-accent/40 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/40 ${
side === 'left' ? 'text-right' : 'text-left'
}`}
>
@@ -156,7 +156,7 @@ export function DictionaryHubView({ detail }: { detail: DictionaryDetail }) {
{/* Center: focused dict (large card) */}
<div className="md:order-2 order-1 relative">
<div
className="relative bg-white rounded-xl p-5 border-2 border-accent"
className="relative bg-surface rounded-xl p-5 border-2 border-accent"
style={{ boxShadow: '0 18px 36px -22px rgba(20,30,140,.5)' }}
>
<div className="flex items-start gap-2 mb-2 flex-wrap">