From feed6b67ccd6e452319071c70bbc2a2dac117fec Mon Sep 17 00:00:00 2001 From: simbiozizv Date: Wed, 30 Sep 2026 16:26:39 +0300 Subject: [PATCH] fix(QueriesNavigation): align navigation layout and schema with design Use Gravity UI spacing and button sizes, update the unknown item icon, and move row styles into their owning components. Show field descriptions and Datacatalog metadata by default. Keep Sort order and Required available through column settings, and support searching the new metadata. Validated with TypeScript, ESLint, 31 tests, and library and Storybook builds. --- src/components/ClusterRow/ClusterRow.scss | 11 +++ src/components/ClusterRow/ClusterRow.tsx | 1 + .../FieldsSearchToolbar.tsx | 2 + .../FieldsSelector/FieldsSelector.tsx | 12 ++- .../NavigationActionButtons.tsx | 6 +- .../NavigationItemRow/NavigationItemRow.scss | 16 ++++ .../NavigationItemRow/NavigationItemRow.tsx | 1 + .../SearchWithButtons/SearchWithButtons.tsx | 6 +- src/helpers/getDefaultNavigationIcon.ts | 4 +- src/modules/ClustersList/ClustersList.scss | 11 --- src/modules/ClustersList/ClustersList.tsx | 1 - .../NavigationDetail/NavigationDetail.scss | 31 +++++-- .../NavigationDetail/NavigationDetail.tsx | 2 + .../NavigationHeader/NavigationHeader.tsx | 2 +- .../NavigationItemsList.scss | 83 +++++++------------ .../internal/NavigationItemsListHeader.scss | 11 +-- .../NavigationSchema/NavigationSchema.scss | 39 +++++---- .../NavigationSchema/NavigationSchema.tsx | 6 +- .../helpers/buildSchemaColumns.tsx | 19 ++++- .../NavigationSchema/helpers/filterSchema.ts | 2 + src/modules/NavigationSchema/i18n/en.json | 15 ++-- src/modules/NavigationSchema/i18n/ru.json | 15 ++-- .../NavigationSchema/story/mockData.ts | 18 +++- .../QueriesNavigation/QueriesNavigation.scss | 20 +++-- .../QueriesNavigation/QueriesNavigation.tsx | 2 + src/types/navigation.ts | 2 + tests/components/NavigationSchema.test.tsx | 62 ++++++++++++++ 27 files changed, 268 insertions(+), 132 deletions(-) create mode 100644 src/components/ClusterRow/ClusterRow.scss create mode 100644 src/components/NavigationItemRow/NavigationItemRow.scss delete mode 100644 src/modules/ClustersList/ClustersList.scss create mode 100644 tests/components/NavigationSchema.test.tsx diff --git a/src/components/ClusterRow/ClusterRow.scss b/src/components/ClusterRow/ClusterRow.scss new file mode 100644 index 0000000..9270ed1 --- /dev/null +++ b/src/components/ClusterRow/ClusterRow.scss @@ -0,0 +1,11 @@ +.qp-cluster-row { + width: 100%; + padding: 0 var(--g-spacing-3) 0 var(--g-spacing-4); + box-sizing: border-box; + cursor: pointer; + + &__title { + flex-grow: 1; + min-width: 0; + } +} diff --git a/src/components/ClusterRow/ClusterRow.tsx b/src/components/ClusterRow/ClusterRow.tsx index 7d6df73..d19e843 100644 --- a/src/components/ClusterRow/ClusterRow.tsx +++ b/src/components/ClusterRow/ClusterRow.tsx @@ -1,6 +1,7 @@ import React, {FC} from 'react'; import {Avatar, Flex, Text} from '@gravity-ui/uikit'; import cn from 'bem-cn-lite'; +import './ClusterRow.scss'; import {NavigationCluster} from '../../types/navigation'; const block = cn('qp-cluster-row'); diff --git a/src/components/FieldsSearchToolbar/FieldsSearchToolbar.tsx b/src/components/FieldsSearchToolbar/FieldsSearchToolbar.tsx index e478908..3b0b09d 100644 --- a/src/components/FieldsSearchToolbar/FieldsSearchToolbar.tsx +++ b/src/components/FieldsSearchToolbar/FieldsSearchToolbar.tsx @@ -27,6 +27,7 @@ export function FieldsSearchToolbar({ return ( ({ ? [ key="fields-selector" + buttonView="flat" fields={fields} value={visibleFields} onChange={onVisibleFieldsChange} diff --git a/src/components/FieldsSelector/FieldsSelector.tsx b/src/components/FieldsSelector/FieldsSelector.tsx index e3a1d61..59c5731 100644 --- a/src/components/FieldsSelector/FieldsSelector.tsx +++ b/src/components/FieldsSelector/FieldsSelector.tsx @@ -1,5 +1,5 @@ import React, {ReactNode, useState} from 'react'; -import {Button, Flex, Icon, Popup, Text} from '@gravity-ui/uikit'; +import {Button, type ButtonProps, Flex, Icon, Popup, Text} from '@gravity-ui/uikit'; import GearIcon from '@gravity-ui/icons/svgs/gear.svg'; import CheckIcon from '@gravity-ui/icons/svgs/check.svg'; import {useToggle} from '../../helpers/useToggle'; @@ -17,6 +17,7 @@ export type FieldsSelectorProps = { value: K[]; onChange: (value: K[]) => void; buttonLabel?: string; + buttonView?: ButtonProps['view']; }; const block = cn('qp-fields-selector'); @@ -26,6 +27,7 @@ export const FieldsSelector = ({ value, onChange, buttonLabel = i18n('action_configure-visible-fields'), + buttonView = 'normal', }: FieldsSelectorProps) => { const [buttonElement, setButtonElement] = useState(null); const [open, toggleOpen] = useToggle(false); @@ -37,7 +39,13 @@ export const FieldsSelector = ({ return ( <> - = { @@ -7,6 +7,7 @@ export type NavigationActionButtonsProps = { arg: TArg; className?: string; buttonClassName?: string; + size?: ButtonProps['size']; }; export function NavigationActionButtons({ @@ -14,6 +15,7 @@ export function NavigationActionButtons({ arg, className, buttonClassName, + size = 's', }: NavigationActionButtonsProps) { const visibleActions = actions?.filter((action) => !action.hidden) ?? []; @@ -27,7 +29,7 @@ export function NavigationActionButtons({