@gravity-ui/querieskit 1.7.0 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/README.md +54 -0
  2. package/build/cjs/components/Breadcrumbs/Breadcrumbs.d.ts +2 -1
  3. package/build/cjs/components/Breadcrumbs/Breadcrumbs.js +19 -6
  4. package/build/cjs/components/Breadcrumbs/Breadcrumbs.js.map +1 -1
  5. package/build/cjs/modules/NavigationDetail/NavigationDetail.d.ts +3 -1
  6. package/build/cjs/modules/NavigationDetail/NavigationDetail.js +4 -0
  7. package/build/cjs/modules/NavigationDetail/NavigationDetail.js.map +1 -1
  8. package/build/cjs/modules/NavigationHeader/NavigationHeader.d.ts +3 -1
  9. package/build/cjs/modules/NavigationHeader/NavigationHeader.js +7 -1
  10. package/build/cjs/modules/NavigationHeader/NavigationHeader.js.map +1 -1
  11. package/build/cjs/modules/NavigationItemsList/NavigationItemsList.d.ts +3 -2
  12. package/build/cjs/modules/NavigationItemsList/NavigationItemsList.js +2 -1
  13. package/build/cjs/modules/NavigationItemsList/NavigationItemsList.js.map +1 -1
  14. package/build/cjs/modules/NavigationItemsList/internal/useParentRow.d.ts +1 -1
  15. package/build/cjs/modules/NavigationItemsList/internal/useParentRow.js +2 -1
  16. package/build/cjs/modules/NavigationItemsList/internal/useParentRow.js.map +1 -1
  17. package/build/cjs/types/navigation.d.ts +11 -0
  18. package/build/cjs/types/navigation.js.map +1 -1
  19. package/build/cjs/widgets/QueriesNavigation/QueriesNavigation.d.ts +3 -2
  20. package/build/cjs/widgets/QueriesNavigation/QueriesNavigation.js +8 -0
  21. package/build/cjs/widgets/QueriesNavigation/QueriesNavigation.js.map +1 -1
  22. package/build/cjs/widgets/QueriesNavigation/QueriesNavigation.stories.d.ts +3 -0
  23. package/build/cjs/widgets/QueriesNavigation/QueriesNavigation.stories.js +166 -1
  24. package/build/cjs/widgets/QueriesNavigation/QueriesNavigation.stories.js.map +1 -1
  25. package/build/esm/components/Breadcrumbs/Breadcrumbs.d.ts +2 -1
  26. package/build/esm/components/Breadcrumbs/Breadcrumbs.js +19 -6
  27. package/build/esm/components/Breadcrumbs/Breadcrumbs.js.map +1 -1
  28. package/build/esm/modules/NavigationDetail/NavigationDetail.d.ts +3 -1
  29. package/build/esm/modules/NavigationDetail/NavigationDetail.js +4 -0
  30. package/build/esm/modules/NavigationDetail/NavigationDetail.js.map +1 -1
  31. package/build/esm/modules/NavigationHeader/NavigationHeader.d.ts +3 -1
  32. package/build/esm/modules/NavigationHeader/NavigationHeader.js +7 -1
  33. package/build/esm/modules/NavigationHeader/NavigationHeader.js.map +1 -1
  34. package/build/esm/modules/NavigationItemsList/NavigationItemsList.d.ts +3 -2
  35. package/build/esm/modules/NavigationItemsList/NavigationItemsList.js +2 -1
  36. package/build/esm/modules/NavigationItemsList/NavigationItemsList.js.map +1 -1
  37. package/build/esm/modules/NavigationItemsList/internal/useParentRow.d.ts +1 -1
  38. package/build/esm/modules/NavigationItemsList/internal/useParentRow.js +2 -1
  39. package/build/esm/modules/NavigationItemsList/internal/useParentRow.js.map +1 -1
  40. package/build/esm/types/navigation.d.ts +11 -0
  41. package/build/esm/types/navigation.js.map +1 -1
  42. package/build/esm/widgets/QueriesNavigation/QueriesNavigation.d.ts +3 -2
  43. package/build/esm/widgets/QueriesNavigation/QueriesNavigation.js +8 -0
  44. package/build/esm/widgets/QueriesNavigation/QueriesNavigation.js.map +1 -1
  45. package/build/esm/widgets/QueriesNavigation/QueriesNavigation.stories.d.ts +3 -0
  46. package/build/esm/widgets/QueriesNavigation/QueriesNavigation.stories.js +166 -1
  47. package/build/esm/widgets/QueriesNavigation/QueriesNavigation.stories.js.map +1 -1
  48. package/package.json +1 -1
package/README.md CHANGED
@@ -172,6 +172,60 @@ and routing.
172
172
 
173
173
  Browse interactive examples in [Storybook](https://preview.gravity-ui.com/querieskit/).
174
174
 
175
+ ### QueriesNavigation
176
+
177
+ `QueriesNavigation` renders cluster and path navigation, an optional detail panel, and
178
+ application-provided header actions. Applications remain responsible for loading data, routing,
179
+ favorites, and item-specific operations.
180
+
181
+ ```tsx
182
+ import {Button, DropdownMenu, Flex} from '@gravity-ui/uikit';
183
+ import {QueriesNavigation} from '@gravity-ui/querieskit';
184
+
185
+ <QueriesNavigation
186
+ location={location}
187
+ onUpdate={setLocation}
188
+ items={items}
189
+ search={{value: search, onUpdate: setSearch}}
190
+ parentRow={{showDuringSearch: true}}
191
+ header={{
192
+ actions,
193
+ getBreadcrumbHref: ({cluster, path}) =>
194
+ cluster ? `/navigation/${cluster}${path ?? ''}` : '/navigation',
195
+ renderActions: ({location, actions: headerActions}) => (
196
+ <Flex gap={1}>
197
+ <DropdownMenu
198
+ items={headerActions.map((action) => ({
199
+ text: action.title,
200
+ disabled: action.disabled,
201
+ hidden: action.hidden,
202
+ action: () => action.onClick(location),
203
+ }))}
204
+ />
205
+ <Button href={`/navigation/${location.cluster}${location.path ?? ''}`} target="_blank">
206
+ Open
207
+ </Button>
208
+ </Flex>
209
+ ),
210
+ }}
211
+ />;
212
+ ```
213
+
214
+ Without `renderActions`, actions keep the standard button rendering. A custom renderer receives
215
+ the unfiltered action array and owns handling of `hidden`, `disabled`, and clicks; returning
216
+ `null` intentionally leaves the action area empty. In a detail panel the array contains the
217
+ panel actions (or header actions when panel actions are absent), followed by actions supplied by
218
+ the resolved detail config.
219
+
220
+ `getBreadcrumbHref` turns every breadcrumb, including the cluster root and current item, into a
221
+ real link. Plain clicks continue through `onUpdate`, while modified and middle clicks keep native
222
+ browser behavior. URL construction and router integration belong to the application. Breadcrumb
223
+ segments are derived from normalized single-slash paths; the parser does not preserve a Cypress
224
+ `//` prefix.
225
+
226
+ `parentRow.showDuringSearch` defaults to `false`. Set it to `true` to keep the parent navigation
227
+ row available while search results are filtered, including when the result list is empty.
228
+
175
229
  ## Widgets
176
230
 
177
231
  | Widget | Description |
@@ -1,5 +1,5 @@
1
1
  import { FC } from 'react';
2
- import { NavigationLocation } from '../../types/navigation';
2
+ import type { GetNavigationBreadcrumbHref, NavigationLocation } from '../../types/navigation';
3
3
  import type { LoadPathSuggestions } from '../../types/pathEditor';
4
4
  import './Breadcrumbs.scss';
5
5
  export type BreadcrumbsProps = {
@@ -7,6 +7,7 @@ export type BreadcrumbsProps = {
7
7
  hideResetButton?: boolean;
8
8
  className?: string;
9
9
  onUpdate: (location: NavigationLocation) => void;
10
+ getBreadcrumbHref?: GetNavigationBreadcrumbHref;
10
11
  onLoadSuggestions?: LoadPathSuggestions;
11
12
  };
12
13
  export declare const Breadcrumbs: FC<BreadcrumbsProps>;
@@ -63,6 +63,7 @@ var Breadcrumbs = exports.Breadcrumbs = function Breadcrumbs(_ref) {
63
63
  var location = _ref.location,
64
64
  hideResetButton = _ref.hideResetButton,
65
65
  onUpdate = _ref.onUpdate,
66
+ getBreadcrumbHref = _ref.getBreadcrumbHref,
66
67
  onLoadSuggestions = _ref.onLoadSuggestions,
67
68
  className = _ref.className;
68
69
  var _useState = (0, _react.useState)(false),
@@ -142,13 +143,25 @@ var Breadcrumbs = exports.Breadcrumbs = function Breadcrumbs(_ref) {
142
143
  children: items.map(function (item, index) {
143
144
  var _item$path;
144
145
  var isLast = index === items.length - 1;
146
+ var itemLocation = {
147
+ cluster: cluster,
148
+ path: item.path
149
+ };
150
+ var href = getBreadcrumbHref === null || getBreadcrumbHref === void 0 ? void 0 : getBreadcrumbHref(itemLocation);
145
151
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_uikit.Breadcrumbs.Item, {
146
- disabled: isLast,
147
- onClick: isLast ? undefined : function () {
148
- return onUpdate({
149
- cluster: cluster,
150
- path: item.path
151
- });
152
+ href: href,
153
+ disabled: isLast && !href,
154
+ onClick: function onClick(event) {
155
+ var isPlainLeftClick = event.button === 0 && !event.altKey && !event.ctrlKey && !event.metaKey && !event.shiftKey;
156
+ if (href && !isPlainLeftClick) {
157
+ return;
158
+ }
159
+ if (href) {
160
+ event.preventDefault();
161
+ }
162
+ if (!isLast) {
163
+ onUpdate(itemLocation);
164
+ }
152
165
  },
153
166
  children: item.title
154
167
  }, (_item$path = item.path) !== null && _item$path !== void 0 ? _item$path : 'root');
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_uikit","_bemCnLite","_interopRequireDefault","_parsePathSegments","_PathEditor","_i18n","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","FolderTreeIcon","props","_jsx","_objectSpread","children","fill","fillRule","d","clipRule","defaultProps","xmlns","width","height","viewBox","PencilIcon","block","cn","Breadcrumbs","exports","_ref","location","hideResetButton","onUpdate","onLoadSuggestions","className","_useState","useState","_useState2","_slicedToArray","edit","setEdit","cluster","path","ROOT_PATH","undefined","items","title","concat","_toConsumableArray","parsePathSegments","handleReset","handleCancelEdit","handleOnSubmit","nextPath","normalizedPath","endsWith","slice","Flex","grow","minWidth","PathEditor","defaultPath","autoFocus","onApply","onCancel","onBlur","onFocus","event","currentTarget","select","_jsxs","gap","alignItems","Button","view","onClick","i18n","Icon","data","size","length","overflow","Text","color","GravityBreadcrumbs","showRoot","maxItems","map","item","index","_item$path","isLast","Item","disabled"],"sources":["Breadcrumbs.tsx"],"sourcesContent":["import React, {FC, useState} from 'react';\nimport {Button, Flex, Breadcrumbs as GravityBreadcrumbs, Icon, Text} from '@gravity-ui/uikit';\nimport FolderTreeIcon from '@gravity-ui/icons/svgs/folder-tree.svg';\nimport PencilIcon from '@gravity-ui/icons/svgs/pencil.svg';\nimport cn from 'bem-cn-lite';\nimport {parsePathSegments} from './helpers/parsePathSegments';\nimport {NavigationLocation} from '../../types/navigation';\nimport type {LoadPathSuggestions} from '../../types/pathEditor';\nimport {PathEditor} from '../PathEditor';\nimport i18n from './i18n';\nimport './Breadcrumbs.scss';\n\nexport type BreadcrumbsProps = {\n location: NavigationLocation;\n hideResetButton?: boolean;\n className?: string;\n onUpdate: (location: NavigationLocation) => void;\n onLoadSuggestions?: LoadPathSuggestions;\n};\n\nconst block = cn('qp-breadcrumbs');\n\nexport const Breadcrumbs: FC<BreadcrumbsProps> = ({\n location,\n hideResetButton,\n onUpdate,\n onLoadSuggestions,\n className,\n}) => {\n const [edit, setEdit] = useState(false);\n\n const {cluster, path} = location;\n const ROOT_PATH = undefined;\n const items = cluster ? [{path: ROOT_PATH, title: cluster}, ...parsePathSegments(path)] : [];\n\n const handleReset = () => {\n onUpdate({cluster: undefined, path: undefined});\n };\n\n const handleCancelEdit = () => {\n setEdit(false);\n };\n\n const handleOnSubmit = (nextPath: string) => {\n const normalizedPath = nextPath.endsWith('/') ? nextPath.slice(0, -1) : nextPath;\n onUpdate({cluster, path: normalizedPath || undefined});\n setEdit(false);\n };\n\n if (edit) {\n return (\n <Flex grow minWidth={0} className={block(null, className)}>\n <PathEditor\n className={block('path-editor')}\n defaultPath={path ?? ''}\n autoFocus\n cluster={cluster}\n onLoadSuggestions={onLoadSuggestions}\n onApply={handleOnSubmit}\n onCancel={handleCancelEdit}\n onBlur={handleCancelEdit}\n onFocus={(event) => event.currentTarget.select()}\n />\n </Flex>\n );\n }\n\n return (\n <Flex gap={1} alignItems=\"center\" grow minWidth={0} className={block(null, className)}>\n {!hideResetButton && (\n <Button view=\"flat\" onClick={handleReset} aria-label={i18n('action_reset')}>\n <Icon data={FolderTreeIcon} size={16} />\n </Button>\n )}\n {items.length > 0 ? (\n <Flex\n alignItems=\"center\"\n minWidth={0}\n overflow=\"hidden\"\n gap={items.length > 1 ? undefined : 1}\n >\n <Text color=\"secondary\">/</Text>\n <GravityBreadcrumbs showRoot className={block('list')} maxItems={3}>\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n\n return (\n <GravityBreadcrumbs.Item\n key={item.path ?? 'root'}\n disabled={isLast}\n onClick={\n isLast\n ? undefined\n : () => onUpdate({cluster, path: item.path})\n }\n >\n {item.title}\n </GravityBreadcrumbs.Item>\n );\n })}\n </GravityBreadcrumbs>\n <Button\n view=\"flat\"\n className={block('edit-button')}\n onClick={() => setEdit(true)}\n aria-label={i18n('action_edit-path')}\n >\n <Icon data={PencilIcon} size={16} />\n </Button>\n </Flex>\n ) : null}\n </Flex>\n );\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_uikit","_bemCnLite","_interopRequireDefault","_parsePathSegments","_PathEditor","_i18n","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","FolderTreeIcon","props","_jsx","_objectSpread","children","fill","fillRule","d","clipRule","defaultProps","xmlns","width","height","viewBox","PencilIcon","block","cn","Breadcrumbs","exports","_ref","location","hideResetButton","onUpdate","getBreadcrumbHref","onLoadSuggestions","className","_useState","useState","_useState2","_slicedToArray","edit","setEdit","cluster","path","ROOT_PATH","undefined","items","title","concat","_toConsumableArray","parsePathSegments","handleReset","handleCancelEdit","handleOnSubmit","nextPath","normalizedPath","endsWith","slice","Flex","grow","minWidth","PathEditor","defaultPath","autoFocus","onApply","onCancel","onBlur","onFocus","event","currentTarget","select","_jsxs","gap","alignItems","Button","view","onClick","i18n","Icon","data","size","length","overflow","Text","color","GravityBreadcrumbs","showRoot","maxItems","map","item","index","_item$path","isLast","itemLocation","href","Item","disabled","isPlainLeftClick","button","altKey","ctrlKey","metaKey","shiftKey","preventDefault"],"sources":["Breadcrumbs.tsx"],"sourcesContent":["import React, {FC, useState} from 'react';\nimport {Button, Flex, Breadcrumbs as GravityBreadcrumbs, Icon, Text} from '@gravity-ui/uikit';\nimport FolderTreeIcon from '@gravity-ui/icons/svgs/folder-tree.svg';\nimport PencilIcon from '@gravity-ui/icons/svgs/pencil.svg';\nimport cn from 'bem-cn-lite';\nimport {parsePathSegments} from './helpers/parsePathSegments';\nimport type {GetNavigationBreadcrumbHref, NavigationLocation} from '../../types/navigation';\nimport type {LoadPathSuggestions} from '../../types/pathEditor';\nimport {PathEditor} from '../PathEditor';\nimport i18n from './i18n';\nimport './Breadcrumbs.scss';\n\nexport type BreadcrumbsProps = {\n location: NavigationLocation;\n hideResetButton?: boolean;\n className?: string;\n onUpdate: (location: NavigationLocation) => void;\n getBreadcrumbHref?: GetNavigationBreadcrumbHref;\n onLoadSuggestions?: LoadPathSuggestions;\n};\n\nconst block = cn('qp-breadcrumbs');\n\nexport const Breadcrumbs: FC<BreadcrumbsProps> = ({\n location,\n hideResetButton,\n onUpdate,\n getBreadcrumbHref,\n onLoadSuggestions,\n className,\n}) => {\n const [edit, setEdit] = useState(false);\n\n const {cluster, path} = location;\n const ROOT_PATH = undefined;\n const items = cluster ? [{path: ROOT_PATH, title: cluster}, ...parsePathSegments(path)] : [];\n\n const handleReset = () => {\n onUpdate({cluster: undefined, path: undefined});\n };\n\n const handleCancelEdit = () => {\n setEdit(false);\n };\n\n const handleOnSubmit = (nextPath: string) => {\n const normalizedPath = nextPath.endsWith('/') ? nextPath.slice(0, -1) : nextPath;\n onUpdate({cluster, path: normalizedPath || undefined});\n setEdit(false);\n };\n\n if (edit) {\n return (\n <Flex grow minWidth={0} className={block(null, className)}>\n <PathEditor\n className={block('path-editor')}\n defaultPath={path ?? ''}\n autoFocus\n cluster={cluster}\n onLoadSuggestions={onLoadSuggestions}\n onApply={handleOnSubmit}\n onCancel={handleCancelEdit}\n onBlur={handleCancelEdit}\n onFocus={(event) => event.currentTarget.select()}\n />\n </Flex>\n );\n }\n\n return (\n <Flex gap={1} alignItems=\"center\" grow minWidth={0} className={block(null, className)}>\n {!hideResetButton && (\n <Button view=\"flat\" onClick={handleReset} aria-label={i18n('action_reset')}>\n <Icon data={FolderTreeIcon} size={16} />\n </Button>\n )}\n {items.length > 0 ? (\n <Flex\n alignItems=\"center\"\n minWidth={0}\n overflow=\"hidden\"\n gap={items.length > 1 ? undefined : 1}\n >\n <Text color=\"secondary\">/</Text>\n <GravityBreadcrumbs showRoot className={block('list')} maxItems={3}>\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n const itemLocation = {cluster, path: item.path};\n const href = getBreadcrumbHref?.(itemLocation);\n\n return (\n <GravityBreadcrumbs.Item\n key={item.path ?? 'root'}\n href={href}\n disabled={isLast && !href}\n onClick={(event) => {\n const isPlainLeftClick =\n event.button === 0 &&\n !event.altKey &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.shiftKey;\n\n if (href && !isPlainLeftClick) {\n return;\n }\n\n if (href) {\n event.preventDefault();\n }\n\n if (!isLast) {\n onUpdate(itemLocation);\n }\n }}\n >\n {item.title}\n </GravityBreadcrumbs.Item>\n );\n })}\n </GravityBreadcrumbs>\n <Button\n view=\"flat\"\n className={block('edit-button')}\n onClick={() => setEdit(true)}\n aria-label={i18n('action_edit-path')}\n >\n <Icon data={PencilIcon} size={16} />\n </Button>\n </Flex>\n ) : null}\n </Flex>\n );\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import type { NavigationDetailConfig, NavigationHeaderAction, NavigationLocation } from '../../types/navigation';
2
+ import type { GetNavigationBreadcrumbHref, NavigationDetailConfig, NavigationHeaderAction, NavigationLocation, RenderNavigationHeaderActions } from '../../types/navigation';
3
3
  import type { LoadPathSuggestions } from '../../types/pathEditor';
4
4
  import './NavigationDetail.scss';
5
5
  export type NavigationDetailProps = {
@@ -8,6 +8,8 @@ export type NavigationDetailProps = {
8
8
  onUpdate: (location: NavigationLocation) => void;
9
9
  onLoadSuggestions?: LoadPathSuggestions;
10
10
  actions?: NavigationHeaderAction[];
11
+ renderActions?: RenderNavigationHeaderActions;
12
+ getBreadcrumbHref?: GetNavigationBreadcrumbHref;
11
13
  activeTab?: string;
12
14
  onTabUpdate?: (tab: string) => void;
13
15
  search?: string;
@@ -33,6 +33,8 @@ var NavigationDetail = exports.NavigationDetail = function NavigationDetail(_ref
33
33
  onUpdate = _ref.onUpdate,
34
34
  onLoadSuggestions = _ref.onLoadSuggestions,
35
35
  actions = _ref.actions,
36
+ renderActions = _ref.renderActions,
37
+ getBreadcrumbHref = _ref.getBreadcrumbHref,
36
38
  activeTabProp = _ref.activeTab,
37
39
  onTabUpdate = _ref.onTabUpdate,
38
40
  searchProp = _ref.search,
@@ -90,6 +92,8 @@ var NavigationDetail = exports.NavigationDetail = function NavigationDetail(_ref
90
92
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_NavigationHeader.NavigationHeader, {
91
93
  location: location,
92
94
  actions: mergedActions,
95
+ renderActions: renderActions,
96
+ getBreadcrumbHref: getBreadcrumbHref,
93
97
  onUpdate: onUpdate,
94
98
  onLoadSuggestions: onLoadSuggestions
95
99
  }), hasTabs ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_bemCnLite","_interopRequireDefault","_uikit","_NavigationHeader","_SearchWithButtons","_NavigationDetailTabs","_getInitialTab","_getVisibleTabs","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","block","cn","NavigationDetail","exports","_ref","_ref2","_activeTabConfig$rend","_activeTabConfig$rend2","config","location","onUpdate","onLoadSuggestions","actions","activeTabProp","activeTab","onTabUpdate","searchProp","search","onSearchUpdate","className","isTabControlled","undefined","isSearchControlled","visibleTabs","useMemo","getVisibleTabs","tabs","_useState","useState","getInitialTab","defaultTab","_useState2","_slicedToArray","activeTabState","setActiveTabState","_useState3","_useState4","searchState","setSearchState","handleTabUpdate","tab","handleSearchUpdate","value","mergedActions","_config$actions","concat","_toConsumableArray","activeTabConfig","find","id","activeContent","renderContent","searchPlaceholder","content","hasTabs","length","_jsxs","Flex","direction","gap","children","_jsx","NavigationHeader","_Fragment","NavigationDetailTabs","hasSearch","SearchWithButtons","placeholder","emptyContent"],"sources":["NavigationDetail.tsx"],"sourcesContent":["import React, {useMemo, useState} from 'react';\nimport cn from 'bem-cn-lite';\nimport {Flex} from '@gravity-ui/uikit';\nimport {NavigationHeader} from '../NavigationHeader';\nimport {SearchWithButtons} from '../../components/SearchWithButtons';\nimport type {\n NavigationDetailConfig,\n NavigationHeaderAction,\n NavigationLocation,\n} from '../../types/navigation';\nimport type {LoadPathSuggestions} from '../../types/pathEditor';\nimport {NavigationDetailTabs} from './internal/NavigationDetailTabs';\nimport {getInitialTab} from './helpers/getInitialTab';\nimport {getVisibleTabs} from './helpers/getVisibleTabs';\nimport './NavigationDetail.scss';\n\nconst block = cn('qp-navigation-detail');\n\nexport type NavigationDetailProps = {\n config: NavigationDetailConfig;\n location: NavigationLocation;\n onUpdate: (location: NavigationLocation) => void;\n onLoadSuggestions?: LoadPathSuggestions;\n actions?: NavigationHeaderAction[];\n activeTab?: string;\n onTabUpdate?: (tab: string) => void;\n search?: string;\n onSearchUpdate?: (value: string) => void;\n className?: string;\n};\n\nexport const NavigationDetail: React.FC<NavigationDetailProps> = ({\n config,\n location,\n onUpdate,\n onLoadSuggestions,\n actions,\n activeTab: activeTabProp,\n onTabUpdate,\n search: searchProp,\n onSearchUpdate,\n className,\n}) => {\n const isTabControlled = activeTabProp !== undefined;\n const isSearchControlled = searchProp !== undefined;\n\n const visibleTabs = useMemo(() => getVisibleTabs(config.tabs), [config.tabs]);\n\n const [activeTabState, setActiveTabState] = useState(() =>\n getInitialTab(visibleTabs, config.defaultTab),\n );\n const [searchState, setSearchState] = useState('');\n\n const activeTab = isTabControlled ? activeTabProp : activeTabState;\n const search = isSearchControlled ? searchProp : searchState;\n\n const handleTabUpdate = (tab: string) => {\n if (!isTabControlled) {\n setActiveTabState(tab);\n }\n onTabUpdate?.(tab);\n };\n\n const handleSearchUpdate = (value: string) => {\n if (!isSearchControlled) {\n setSearchState(value);\n }\n onSearchUpdate?.(value);\n };\n\n const mergedActions = useMemo(() => {\n if (!actions && !config.actions) {\n return undefined;\n }\n return [...(actions ?? []), ...(config.actions ?? [])];\n }, [actions, config.actions]);\n\n const activeTabConfig = visibleTabs.find((tab) => tab.id === activeTab);\n const activeContent = activeTabConfig\n ? (activeTabConfig.renderContent?.({\n search,\n onSearchUpdate: handleSearchUpdate,\n searchPlaceholder: config.searchPlaceholder,\n }) ??\n activeTabConfig.content ??\n null)\n : null;\n\n const hasTabs = visibleTabs.length > 0;\n\n return (\n <Flex direction=\"column\" gap={2} className={block(null, className)}>\n <NavigationHeader\n location={location}\n actions={mergedActions}\n onUpdate={onUpdate}\n onLoadSuggestions={onLoadSuggestions}\n />\n {hasTabs ? (\n <>\n <NavigationDetailTabs\n tabs={visibleTabs}\n activeTab={activeTab}\n onUpdate={handleTabUpdate}\n className={block('tabs')}\n />\n {config.hasSearch && (\n <SearchWithButtons\n placeholder={config.searchPlaceholder}\n value={search}\n onUpdate={handleSearchUpdate}\n />\n )}\n <div className={block('content')}>{activeContent}</div>\n </>\n ) : (\n config.emptyContent\n )}\n </Flex>\n );\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_bemCnLite","_interopRequireDefault","_uikit","_NavigationHeader","_SearchWithButtons","_NavigationDetailTabs","_getInitialTab","_getVisibleTabs","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","block","cn","NavigationDetail","exports","_ref","_ref2","_activeTabConfig$rend","_activeTabConfig$rend2","config","location","onUpdate","onLoadSuggestions","actions","renderActions","getBreadcrumbHref","activeTabProp","activeTab","onTabUpdate","searchProp","search","onSearchUpdate","className","isTabControlled","undefined","isSearchControlled","visibleTabs","useMemo","getVisibleTabs","tabs","_useState","useState","getInitialTab","defaultTab","_useState2","_slicedToArray","activeTabState","setActiveTabState","_useState3","_useState4","searchState","setSearchState","handleTabUpdate","tab","handleSearchUpdate","value","mergedActions","_config$actions","concat","_toConsumableArray","activeTabConfig","find","id","activeContent","renderContent","searchPlaceholder","content","hasTabs","length","_jsxs","Flex","direction","gap","children","_jsx","NavigationHeader","_Fragment","NavigationDetailTabs","hasSearch","SearchWithButtons","placeholder","emptyContent"],"sources":["NavigationDetail.tsx"],"sourcesContent":["import React, {useMemo, useState} from 'react';\nimport cn from 'bem-cn-lite';\nimport {Flex} from '@gravity-ui/uikit';\nimport {NavigationHeader} from '../NavigationHeader';\nimport {SearchWithButtons} from '../../components/SearchWithButtons';\nimport type {\n GetNavigationBreadcrumbHref,\n NavigationDetailConfig,\n NavigationHeaderAction,\n NavigationLocation,\n RenderNavigationHeaderActions,\n} from '../../types/navigation';\nimport type {LoadPathSuggestions} from '../../types/pathEditor';\nimport {NavigationDetailTabs} from './internal/NavigationDetailTabs';\nimport {getInitialTab} from './helpers/getInitialTab';\nimport {getVisibleTabs} from './helpers/getVisibleTabs';\nimport './NavigationDetail.scss';\n\nconst block = cn('qp-navigation-detail');\n\nexport type NavigationDetailProps = {\n config: NavigationDetailConfig;\n location: NavigationLocation;\n onUpdate: (location: NavigationLocation) => void;\n onLoadSuggestions?: LoadPathSuggestions;\n actions?: NavigationHeaderAction[];\n renderActions?: RenderNavigationHeaderActions;\n getBreadcrumbHref?: GetNavigationBreadcrumbHref;\n activeTab?: string;\n onTabUpdate?: (tab: string) => void;\n search?: string;\n onSearchUpdate?: (value: string) => void;\n className?: string;\n};\n\nexport const NavigationDetail: React.FC<NavigationDetailProps> = ({\n config,\n location,\n onUpdate,\n onLoadSuggestions,\n actions,\n renderActions,\n getBreadcrumbHref,\n activeTab: activeTabProp,\n onTabUpdate,\n search: searchProp,\n onSearchUpdate,\n className,\n}) => {\n const isTabControlled = activeTabProp !== undefined;\n const isSearchControlled = searchProp !== undefined;\n\n const visibleTabs = useMemo(() => getVisibleTabs(config.tabs), [config.tabs]);\n\n const [activeTabState, setActiveTabState] = useState(() =>\n getInitialTab(visibleTabs, config.defaultTab),\n );\n const [searchState, setSearchState] = useState('');\n\n const activeTab = isTabControlled ? activeTabProp : activeTabState;\n const search = isSearchControlled ? searchProp : searchState;\n\n const handleTabUpdate = (tab: string) => {\n if (!isTabControlled) {\n setActiveTabState(tab);\n }\n onTabUpdate?.(tab);\n };\n\n const handleSearchUpdate = (value: string) => {\n if (!isSearchControlled) {\n setSearchState(value);\n }\n onSearchUpdate?.(value);\n };\n\n const mergedActions = useMemo(() => {\n if (!actions && !config.actions) {\n return undefined;\n }\n return [...(actions ?? []), ...(config.actions ?? [])];\n }, [actions, config.actions]);\n\n const activeTabConfig = visibleTabs.find((tab) => tab.id === activeTab);\n const activeContent = activeTabConfig\n ? (activeTabConfig.renderContent?.({\n search,\n onSearchUpdate: handleSearchUpdate,\n searchPlaceholder: config.searchPlaceholder,\n }) ??\n activeTabConfig.content ??\n null)\n : null;\n\n const hasTabs = visibleTabs.length > 0;\n\n return (\n <Flex direction=\"column\" gap={2} className={block(null, className)}>\n <NavigationHeader\n location={location}\n actions={mergedActions}\n renderActions={renderActions}\n getBreadcrumbHref={getBreadcrumbHref}\n onUpdate={onUpdate}\n onLoadSuggestions={onLoadSuggestions}\n />\n {hasTabs ? (\n <>\n <NavigationDetailTabs\n tabs={visibleTabs}\n activeTab={activeTab}\n onUpdate={handleTabUpdate}\n className={block('tabs')}\n />\n {config.hasSearch && (\n <SearchWithButtons\n placeholder={config.searchPlaceholder}\n value={search}\n onUpdate={handleSearchUpdate}\n />\n )}\n <div className={block('content')}>{activeContent}</div>\n </>\n ) : (\n config.emptyContent\n )}\n </Flex>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AACA,IAAAI,iBAAA,GAAAJ,OAAA;AACA,IAAAK,kBAAA,GAAAL,OAAA;AASA,IAAAM,qBAAA,GAAAN,OAAA;AACA,IAAAO,cAAA,GAAAP,OAAA;AACA,IAAAQ,eAAA,GAAAR,OAAA;AACAA,OAAA;AAAiC,IAAAS,WAAA,GAAAT,OAAA;AAAA,SAAAD,wBAAAW,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAb,uBAAA,YAAAA,CAAAW,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAAA,SAAAT,uBAAAQ,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAK,UAAA,GAAAL,CAAA,KAAAU,OAAA,EAAAV,CAAA;AAEjC,IAAMmB,KAAK,GAAG,IAAAC,kBAAE,EAAC,sBAAsB,CAAC;AAiBjC,IAAMC,gBAAiD,GAAAC,OAAA,CAAAD,gBAAA,GAAG,SAApDA,gBAAiDA,CAAAE,IAAA,EAaxD;EAAA,IAAAC,KAAA,EAAAC,qBAAA,EAAAC,sBAAA;EAAA,IAZFC,MAAM,GAAAJ,IAAA,CAANI,MAAM;IACNC,QAAQ,GAAAL,IAAA,CAARK,QAAQ;IACRC,QAAQ,GAAAN,IAAA,CAARM,QAAQ;IACRC,iBAAiB,GAAAP,IAAA,CAAjBO,iBAAiB;IACjBC,OAAO,GAAAR,IAAA,CAAPQ,OAAO;IACPC,aAAa,GAAAT,IAAA,CAAbS,aAAa;IACbC,iBAAiB,GAAAV,IAAA,CAAjBU,iBAAiB;IACNC,aAAa,GAAAX,IAAA,CAAxBY,SAAS;IACTC,WAAW,GAAAb,IAAA,CAAXa,WAAW;IACHC,UAAU,GAAAd,IAAA,CAAlBe,MAAM;IACNC,cAAc,GAAAhB,IAAA,CAAdgB,cAAc;IACdC,SAAS,GAAAjB,IAAA,CAATiB,SAAS;EAET,IAAMC,eAAe,GAAGP,aAAa,KAAKQ,SAAS;EACnD,IAAMC,kBAAkB,GAAGN,UAAU,KAAKK,SAAS;EAEnD,IAAME,WAAW,GAAG,IAAAC,cAAO,EAAC;IAAA,OAAM,IAAAC,8BAAc,EAACnB,MAAM,CAACoB,IAAI,CAAC;EAAA,GAAE,CAACpB,MAAM,CAACoB,IAAI,CAAC,CAAC;EAE7E,IAAAC,SAAA,GAA4C,IAAAC,eAAQ,EAAC;MAAA,OACjD,IAAAC,4BAAa,EAACN,WAAW,EAAEjB,MAAM,CAACwB,UAAU,CAAC;IAAA,CACjD,CAAC;IAAAC,UAAA,OAAAC,uBAAA,EAAAL,SAAA;IAFMM,cAAc,GAAAF,UAAA;IAAEG,iBAAiB,GAAAH,UAAA;EAGxC,IAAAI,UAAA,GAAsC,IAAAP,eAAQ,EAAC,EAAE,CAAC;IAAAQ,UAAA,OAAAJ,uBAAA,EAAAG,UAAA;IAA3CE,WAAW,GAAAD,UAAA;IAAEE,cAAc,GAAAF,UAAA;EAElC,IAAMtB,SAAS,GAAGM,eAAe,GAAGP,aAAa,GAAGoB,cAAc;EAClE,IAAMhB,MAAM,GAAGK,kBAAkB,GAAGN,UAAU,GAAGqB,WAAW;EAE5D,IAAME,eAAe,GAAG,SAAlBA,eAAeA,CAAIC,GAAW,EAAK;IACrC,IAAI,CAACpB,eAAe,EAAE;MAClBc,iBAAiB,CAACM,GAAG,CAAC;IAC1B;IACAzB,WAAW,aAAXA,WAAW,eAAXA,WAAW,CAAGyB,GAAG,CAAC;EACtB,CAAC;EAED,IAAMC,kBAAkB,GAAG,SAArBA,kBAAkBA,CAAIC,KAAa,EAAK;IAC1C,IAAI,CAACpB,kBAAkB,EAAE;MACrBgB,cAAc,CAACI,KAAK,CAAC;IACzB;IACAxB,cAAc,aAAdA,cAAc,eAAdA,cAAc,CAAGwB,KAAK,CAAC;EAC3B,CAAC;EAED,IAAMC,aAAa,GAAG,IAAAnB,cAAO,EAAC,YAAM;IAAA,IAAAoB,eAAA;IAChC,IAAI,CAAClC,OAAO,IAAI,CAACJ,MAAM,CAACI,OAAO,EAAE;MAC7B,OAAOW,SAAS;IACpB;IACA,UAAAwB,MAAA,KAAAC,2BAAA,EAAYpC,OAAO,aAAPA,OAAO,cAAPA,OAAO,GAAI,EAAE,OAAAoC,2BAAA,GAAAF,eAAA,GAAOtC,MAAM,CAACI,OAAO,cAAAkC,eAAA,cAAAA,eAAA,GAAI,EAAE;EACxD,CAAC,EAAE,CAAClC,OAAO,EAAEJ,MAAM,CAACI,OAAO,CAAC,CAAC;EAE7B,IAAMqC,eAAe,GAAGxB,WAAW,CAACyB,IAAI,CAAC,UAACR,GAAG;IAAA,OAAKA,GAAG,CAACS,EAAE,KAAKnC,SAAS;EAAA,EAAC;EACvE,IAAMoC,aAAa,GAAGH,eAAe,IAAA5C,KAAA,IAAAC,qBAAA,IAAAC,sBAAA,GAC9B0C,eAAe,CAACI,aAAa,cAAA9C,sBAAA,uBAA7BA,sBAAA,CAAAX,IAAA,CAAAqD,eAAe,EAAiB;IAC7B9B,MAAM,EAANA,MAAM;IACNC,cAAc,EAAEuB,kBAAkB;IAClCW,iBAAiB,EAAE9C,MAAM,CAAC8C;EAC9B,CAAC,CAAC,cAAAhD,qBAAA,cAAAA,qBAAA,GACF2C,eAAe,CAACM,OAAO,cAAAlD,KAAA,cAAAA,KAAA,GACvB,IAAI,GACJ,IAAI;EAEV,IAAMmD,OAAO,GAAG/B,WAAW,CAACgC,MAAM,GAAG,CAAC;EAEtC,oBACI,IAAAC,gBAAA,EAACC,WAAI;IAACC,SAAS,EAAC,QAAQ;IAACC,GAAG,EAAE,CAAE;IAACxC,SAAS,EAAErB,KAAK,CAAC,IAAI,EAAEqB,SAAS,CAAE;IAAAyC,QAAA,gBAC/D,IAAAC,eAAA,EAACC,kCAAgB;MACbvD,QAAQ,EAAEA,QAAS;MACnBG,OAAO,EAAEiC,aAAc;MACvBhC,aAAa,EAAEA,aAAc;MAC7BC,iBAAiB,EAAEA,iBAAkB;MACrCJ,QAAQ,EAAEA,QAAS;MACnBC,iBAAiB,EAAEA;IAAkB,CACxC,CAAC,EACD6C,OAAO,gBACJ,IAAAE,gBAAA,EAAAO,oBAAA;MAAAH,QAAA,gBACI,IAAAC,eAAA,EAACG,0CAAoB;QACjBtC,IAAI,EAAEH,WAAY;QAClBT,SAAS,EAAEA,SAAU;QACrBN,QAAQ,EAAE+B,eAAgB;QAC1BpB,SAAS,EAAErB,KAAK,CAAC,MAAM;MAAE,CAC5B,CAAC,EACDQ,MAAM,CAAC2D,SAAS,iBACb,IAAAJ,eAAA,EAACK,oCAAiB;QACdC,WAAW,EAAE7D,MAAM,CAAC8C,iBAAkB;QACtCV,KAAK,EAAEzB,MAAO;QACdT,QAAQ,EAAEiC;MAAmB,CAChC,CACJ,eACD,IAAAoB,eAAA;QAAK1C,SAAS,EAAErB,KAAK,CAAC,SAAS,CAAE;QAAA8D,QAAA,EAAEV;MAAa,CAAM,CAAC;IAAA,CACzD,CAAC,GAEH5C,MAAM,CAAC8D,YACV;EAAA,CACC,CAAC;AAEf,CAAC","ignoreList":[]}
@@ -1,9 +1,11 @@
1
1
  import { FC } from 'react';
2
- import type { NavigationHeaderAction, NavigationLocation } from '../../types/navigation';
2
+ import type { GetNavigationBreadcrumbHref, NavigationHeaderAction, NavigationLocation, RenderNavigationHeaderActions } from '../../types/navigation';
3
3
  import type { LoadPathSuggestions } from '../../types/pathEditor';
4
4
  export type NavigationHeaderProps = {
5
5
  location: NavigationLocation;
6
6
  actions?: NavigationHeaderAction[];
7
+ renderActions?: RenderNavigationHeaderActions;
8
+ getBreadcrumbHref?: GetNavigationBreadcrumbHref;
7
9
  onUpdate: (location: NavigationLocation) => void;
8
10
  onLoadSuggestions?: LoadPathSuggestions;
9
11
  className?: string;
@@ -13,6 +13,8 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
13
13
  var NavigationHeader = exports.NavigationHeader = function NavigationHeader(_ref) {
14
14
  var location = _ref.location,
15
15
  actions = _ref.actions,
16
+ renderActions = _ref.renderActions,
17
+ getBreadcrumbHref = _ref.getBreadcrumbHref,
16
18
  onUpdate = _ref.onUpdate,
17
19
  onLoadSuggestions = _ref.onLoadSuggestions,
18
20
  className = _ref.className;
@@ -24,8 +26,12 @@ var NavigationHeader = exports.NavigationHeader = function NavigationHeader(_ref
24
26
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Breadcrumbs.Breadcrumbs, {
25
27
  location: location,
26
28
  onUpdate: onUpdate,
29
+ getBreadcrumbHref: getBreadcrumbHref,
27
30
  onLoadSuggestions: onLoadSuggestions
28
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_NavigationActionButtons.NavigationActionButtons, {
31
+ }), renderActions ? renderActions({
32
+ location: location,
33
+ actions: actions !== null && actions !== void 0 ? actions : []
34
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_NavigationActionButtons.NavigationActionButtons, {
29
35
  actions: actions,
30
36
  arg: location
31
37
  })]
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireDefault","require","_uikit","_Breadcrumbs","_NavigationActionButtons","_jsxRuntime","e","__esModule","default","NavigationHeader","exports","_ref","location","actions","onUpdate","onLoadSuggestions","className","_jsxs","Flex","gap","justifyContent","alignItems","children","_jsx","Breadcrumbs","NavigationActionButtons","arg"],"sources":["NavigationHeader.tsx"],"sourcesContent":["import React, {FC} from 'react';\nimport {Flex} from '@gravity-ui/uikit';\nimport {Breadcrumbs} from '../../components/Breadcrumbs';\nimport {NavigationActionButtons} from '../../components/NavigationActionButtons';\nimport type {NavigationHeaderAction, NavigationLocation} from '../../types/navigation';\nimport type {LoadPathSuggestions} from '../../types/pathEditor';\n\nexport type NavigationHeaderProps = {\n location: NavigationLocation;\n actions?: NavigationHeaderAction[];\n onUpdate: (location: NavigationLocation) => void;\n onLoadSuggestions?: LoadPathSuggestions;\n className?: string;\n};\n\nexport const NavigationHeader: FC<NavigationHeaderProps> = ({\n location,\n actions,\n onUpdate,\n onLoadSuggestions,\n className,\n}) => {\n return (\n <Flex gap={2} justifyContent=\"space-between\" alignItems=\"center\" className={className}>\n <Breadcrumbs\n location={location}\n onUpdate={onUpdate}\n onLoadSuggestions={onLoadSuggestions}\n />\n <NavigationActionButtons actions={actions} arg={location} />\n </Flex>\n );\n};\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAF,OAAA;AACA,IAAAG,wBAAA,GAAAH,OAAA;AAAiF,IAAAI,WAAA,GAAAJ,OAAA;AAAA,SAAAD,uBAAAM,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAY1E,IAAMG,gBAA2C,GAAAC,OAAA,CAAAD,gBAAA,GAAG,SAA9CA,gBAA2CA,CAAAE,IAAA,EAMlD;EAAA,IALFC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;IACRC,OAAO,GAAAF,IAAA,CAAPE,OAAO;IACPC,QAAQ,GAAAH,IAAA,CAARG,QAAQ;IACRC,iBAAiB,GAAAJ,IAAA,CAAjBI,iBAAiB;IACjBC,SAAS,GAAAL,IAAA,CAATK,SAAS;EAET,oBACI,IAAAC,gBAAA,EAACC,WAAI;IAACC,GAAG,EAAE,CAAE;IAACC,cAAc,EAAC,eAAe;IAACC,UAAU,EAAC,QAAQ;IAACL,SAAS,EAAEA,SAAU;IAAAM,QAAA,gBAClF,IAAAC,eAAA,EAACC,wBAAW;MACRZ,QAAQ,EAAEA,QAAS;MACnBE,QAAQ,EAAEA,QAAS;MACnBC,iBAAiB,EAAEA;IAAkB,CACxC,CAAC,eACF,IAAAQ,eAAA,EAACE,gDAAuB;MAACZ,OAAO,EAAEA,OAAQ;MAACa,GAAG,EAAEd;IAAS,CAAE,CAAC;EAAA,CAC1D,CAAC;AAEf,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_uikit","_Breadcrumbs","_NavigationActionButtons","_jsxRuntime","e","__esModule","default","NavigationHeader","exports","_ref","location","actions","renderActions","getBreadcrumbHref","onUpdate","onLoadSuggestions","className","_jsxs","Flex","gap","justifyContent","alignItems","children","_jsx","Breadcrumbs","NavigationActionButtons","arg"],"sources":["NavigationHeader.tsx"],"sourcesContent":["import React, {FC} from 'react';\nimport {Flex} from '@gravity-ui/uikit';\nimport {Breadcrumbs} from '../../components/Breadcrumbs';\nimport {NavigationActionButtons} from '../../components/NavigationActionButtons';\nimport type {\n GetNavigationBreadcrumbHref,\n NavigationHeaderAction,\n NavigationLocation,\n RenderNavigationHeaderActions,\n} from '../../types/navigation';\nimport type {LoadPathSuggestions} from '../../types/pathEditor';\n\nexport type NavigationHeaderProps = {\n location: NavigationLocation;\n actions?: NavigationHeaderAction[];\n renderActions?: RenderNavigationHeaderActions;\n getBreadcrumbHref?: GetNavigationBreadcrumbHref;\n onUpdate: (location: NavigationLocation) => void;\n onLoadSuggestions?: LoadPathSuggestions;\n className?: string;\n};\n\nexport const NavigationHeader: FC<NavigationHeaderProps> = ({\n location,\n actions,\n renderActions,\n getBreadcrumbHref,\n onUpdate,\n onLoadSuggestions,\n className,\n}) => {\n return (\n <Flex gap={2} justifyContent=\"space-between\" alignItems=\"center\" className={className}>\n <Breadcrumbs\n location={location}\n onUpdate={onUpdate}\n getBreadcrumbHref={getBreadcrumbHref}\n onLoadSuggestions={onLoadSuggestions}\n />\n {renderActions ? (\n renderActions({location, actions: actions ?? []})\n ) : (\n <NavigationActionButtons actions={actions} arg={location} />\n )}\n </Flex>\n );\n};\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAF,OAAA;AACA,IAAAG,wBAAA,GAAAH,OAAA;AAAiF,IAAAI,WAAA,GAAAJ,OAAA;AAAA,SAAAD,uBAAAM,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAmB1E,IAAMG,gBAA2C,GAAAC,OAAA,CAAAD,gBAAA,GAAG,SAA9CA,gBAA2CA,CAAAE,IAAA,EAQlD;EAAA,IAPFC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;IACRC,OAAO,GAAAF,IAAA,CAAPE,OAAO;IACPC,aAAa,GAAAH,IAAA,CAAbG,aAAa;IACbC,iBAAiB,GAAAJ,IAAA,CAAjBI,iBAAiB;IACjBC,QAAQ,GAAAL,IAAA,CAARK,QAAQ;IACRC,iBAAiB,GAAAN,IAAA,CAAjBM,iBAAiB;IACjBC,SAAS,GAAAP,IAAA,CAATO,SAAS;EAET,oBACI,IAAAC,gBAAA,EAACC,WAAI;IAACC,GAAG,EAAE,CAAE;IAACC,cAAc,EAAC,eAAe;IAACC,UAAU,EAAC,QAAQ;IAACL,SAAS,EAAEA,SAAU;IAAAM,QAAA,gBAClF,IAAAC,eAAA,EAACC,wBAAW;MACRd,QAAQ,EAAEA,QAAS;MACnBI,QAAQ,EAAEA,QAAS;MACnBD,iBAAiB,EAAEA,iBAAkB;MACrCE,iBAAiB,EAAEA;IAAkB,CACxC,CAAC,EACDH,aAAa,GACVA,aAAa,CAAC;MAACF,QAAQ,EAARA,QAAQ;MAAEC,OAAO,EAAEA,OAAO,aAAPA,OAAO,cAAPA,OAAO,GAAI;IAAE,CAAC,CAAC,gBAEjD,IAAAY,eAAA,EAACE,gDAAuB;MAACd,OAAO,EAAEA,OAAQ;MAACe,GAAG,EAAEhB;IAAS,CAAE,CAC9D;EAAA,CACC,CAAC;AAEf,CAAC","ignoreList":[]}
@@ -1,10 +1,11 @@
1
1
  import React from 'react';
2
- import type { NavigationItem, NavigationSortOrder, RenderNavigationItem } from '../../types/navigation';
2
+ import type { NavigationItem, NavigationParentRowConfig, NavigationSortOrder, RenderNavigationItem } from '../../types/navigation';
3
3
  import './NavigationItemsList.scss';
4
4
  export type NavigationItemsListProps<T extends NavigationItem = NavigationItem> = {
5
5
  items: T[];
6
6
  path?: string;
7
7
  search?: string;
8
+ parentRow?: NavigationParentRowConfig;
8
9
  sort?: NavigationSortOrder;
9
10
  onSortUpdate?: (sort: NavigationSortOrder) => void;
10
11
  titleLabel: string;
@@ -17,4 +18,4 @@ export type NavigationItemsListProps<T extends NavigationItem = NavigationItem>
17
18
  onItemClick?: (item: T) => void;
18
19
  className?: string;
19
20
  };
20
- export declare const NavigationItemsList: <T extends NavigationItem = NavigationItem>({ items, path, search, sort, onSortUpdate, titleLabel, loading, error, hasMore, onLoadMore, emptyContent, renderRowItem, onItemClick, className, }: NavigationItemsListProps<T>) => React.JSX.Element;
21
+ export declare const NavigationItemsList: <T extends NavigationItem = NavigationItem>({ items, path, search, parentRow: parentRowConfig, sort, onSortUpdate, titleLabel, loading, error, hasMore, onLoadMore, emptyContent, renderRowItem, onItemClick, className, }: NavigationItemsListProps<T>) => React.JSX.Element;
@@ -25,6 +25,7 @@ var NavigationItemsList = exports.NavigationItemsList = function NavigationItems
25
25
  var items = _ref.items,
26
26
  path = _ref.path,
27
27
  search = _ref.search,
28
+ parentRowConfig = _ref.parentRow,
28
29
  sort = _ref.sort,
29
30
  onSortUpdate = _ref.onSortUpdate,
30
31
  titleLabel = _ref.titleLabel,
@@ -36,7 +37,7 @@ var NavigationItemsList = exports.NavigationItemsList = function NavigationItems
36
37
  renderRowItem = _ref.renderRowItem,
37
38
  _onItemClick = _ref.onItemClick,
38
39
  className = _ref.className;
39
- var parentRow = (0, _useParentRow.useParentRow)(path, search);
40
+ var parentRow = (0, _useParentRow.useParentRow)(path, search, parentRowConfig === null || parentRowConfig === void 0 ? void 0 : parentRowConfig.showDuringSearch);
40
41
  var rows = parentRow ? [parentRow].concat((0, _toConsumableArray2.default)(items)) : items;
41
42
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
42
43
  className: block(null, className),
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireDefault","require","_bemCnLite","_LazyList","_NavigationItemRow","_NavigationItemsListHeader","_NavigationItemsListEmptyState","_useParentRow","_row","_jsxRuntime","e","__esModule","default","block","cn","NavigationItemsList","exports","_ref","items","path","search","sort","onSortUpdate","titleLabel","loading","error","hasMore","onLoadMore","emptyContent","renderRowItem","onItemClick","className","parentRow","useParentRow","rows","concat","_toConsumableArray","_jsxs","children","_jsx","NavigationItemsListHeader","LazyList","isEmpty","length","itemHeight","NAVIGATION_ROW_HEIGHT","renderItem","item","isActive","index","_renderRowItem","isParentRow","Boolean","NavigationItemRow","NavigationItemsListEmptyState","_onItemClick","disabled"],"sources":["NavigationItemsList.tsx"],"sourcesContent":["import React from 'react';\nimport cn from 'bem-cn-lite';\nimport type {\n NavigationItem,\n NavigationSortOrder,\n RenderNavigationItem,\n} from '../../types/navigation';\nimport {LazyList} from '../../components/LazyList';\nimport {NavigationItemRow} from '../../components/NavigationItemRow';\nimport {NavigationItemsListHeader} from './internal/NavigationItemsListHeader';\nimport {NavigationItemsListEmptyState} from './internal/NavigationItemsListEmptyState';\nimport {useParentRow} from './internal/useParentRow';\nimport {NAVIGATION_ROW_HEIGHT} from '../../constants/row';\nimport './NavigationItemsList.scss';\n\nconst block = cn('qp-navigation-items-list');\n\nexport type NavigationItemsListProps<T extends NavigationItem = NavigationItem> = {\n items: T[];\n path?: string;\n search?: string;\n sort?: NavigationSortOrder;\n onSortUpdate?: (sort: NavigationSortOrder) => void;\n titleLabel: string;\n loading?: boolean;\n error?: React.ReactNode;\n hasMore?: boolean;\n onLoadMore?: () => void;\n emptyContent?: React.ReactNode;\n renderRowItem?: RenderNavigationItem<T>;\n onItemClick?: (item: T) => void;\n className?: string;\n};\n\nexport const NavigationItemsList = <T extends NavigationItem = NavigationItem>({\n items,\n path,\n search,\n sort,\n onSortUpdate,\n titleLabel,\n loading,\n error,\n hasMore,\n onLoadMore,\n emptyContent,\n renderRowItem,\n onItemClick,\n className,\n}: NavigationItemsListProps<T>) => {\n const parentRow = useParentRow(path, search);\n\n const rows = (parentRow ? [parentRow as T, ...items] : items) as T[];\n\n return (\n <div className={block(null, className)}>\n <NavigationItemsListHeader\n titleLabel={titleLabel}\n sort={sort}\n onSortUpdate={onSortUpdate}\n className={block('header')}\n />\n <LazyList<T>\n className={block('list')}\n items={rows}\n isEmpty={!items.length}\n itemHeight={() => NAVIGATION_ROW_HEIGHT}\n renderItem={(item, isActive, index) => {\n const isParentRow = Boolean(parentRow) && item === (parentRow as T);\n\n return (\n renderRowItem?.({item, index, isActive, isParentRow}) ?? (\n <NavigationItemRow item={item} />\n )\n );\n }}\n hasMore={hasMore}\n onLoadMore={onLoadMore}\n loading={loading}\n error={error}\n emptyContent={\n <NavigationItemsListEmptyState\n parentRow={parentRow as T | undefined}\n emptyContent={emptyContent}\n renderRowItem={renderRowItem}\n onItemClick={onItemClick}\n />\n }\n onItemClick={(item) => {\n if (!item.disabled) {\n onItemClick?.(item);\n }\n }}\n />\n </div>\n );\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_bemCnLite","_LazyList","_NavigationItemRow","_NavigationItemsListHeader","_NavigationItemsListEmptyState","_useParentRow","_row","_jsxRuntime","e","__esModule","default","block","cn","NavigationItemsList","exports","_ref","items","path","search","parentRowConfig","parentRow","sort","onSortUpdate","titleLabel","loading","error","hasMore","onLoadMore","emptyContent","renderRowItem","onItemClick","className","useParentRow","showDuringSearch","rows","concat","_toConsumableArray","_jsxs","children","_jsx","NavigationItemsListHeader","LazyList","isEmpty","length","itemHeight","NAVIGATION_ROW_HEIGHT","renderItem","item","isActive","index","_renderRowItem","isParentRow","Boolean","NavigationItemRow","NavigationItemsListEmptyState","_onItemClick","disabled"],"sources":["NavigationItemsList.tsx"],"sourcesContent":["import React from 'react';\nimport cn from 'bem-cn-lite';\nimport type {\n NavigationItem,\n NavigationParentRowConfig,\n NavigationSortOrder,\n RenderNavigationItem,\n} from '../../types/navigation';\nimport {LazyList} from '../../components/LazyList';\nimport {NavigationItemRow} from '../../components/NavigationItemRow';\nimport {NavigationItemsListHeader} from './internal/NavigationItemsListHeader';\nimport {NavigationItemsListEmptyState} from './internal/NavigationItemsListEmptyState';\nimport {useParentRow} from './internal/useParentRow';\nimport {NAVIGATION_ROW_HEIGHT} from '../../constants/row';\nimport './NavigationItemsList.scss';\n\nconst block = cn('qp-navigation-items-list');\n\nexport type NavigationItemsListProps<T extends NavigationItem = NavigationItem> = {\n items: T[];\n path?: string;\n search?: string;\n parentRow?: NavigationParentRowConfig;\n sort?: NavigationSortOrder;\n onSortUpdate?: (sort: NavigationSortOrder) => void;\n titleLabel: string;\n loading?: boolean;\n error?: React.ReactNode;\n hasMore?: boolean;\n onLoadMore?: () => void;\n emptyContent?: React.ReactNode;\n renderRowItem?: RenderNavigationItem<T>;\n onItemClick?: (item: T) => void;\n className?: string;\n};\n\nexport const NavigationItemsList = <T extends NavigationItem = NavigationItem>({\n items,\n path,\n search,\n parentRow: parentRowConfig,\n sort,\n onSortUpdate,\n titleLabel,\n loading,\n error,\n hasMore,\n onLoadMore,\n emptyContent,\n renderRowItem,\n onItemClick,\n className,\n}: NavigationItemsListProps<T>) => {\n const parentRow = useParentRow(path, search, parentRowConfig?.showDuringSearch);\n\n const rows = (parentRow ? [parentRow as T, ...items] : items) as T[];\n\n return (\n <div className={block(null, className)}>\n <NavigationItemsListHeader\n titleLabel={titleLabel}\n sort={sort}\n onSortUpdate={onSortUpdate}\n className={block('header')}\n />\n <LazyList<T>\n className={block('list')}\n items={rows}\n isEmpty={!items.length}\n itemHeight={() => NAVIGATION_ROW_HEIGHT}\n renderItem={(item, isActive, index) => {\n const isParentRow = Boolean(parentRow) && item === (parentRow as T);\n\n return (\n renderRowItem?.({item, index, isActive, isParentRow}) ?? (\n <NavigationItemRow item={item} />\n )\n );\n }}\n hasMore={hasMore}\n onLoadMore={onLoadMore}\n loading={loading}\n error={error}\n emptyContent={\n <NavigationItemsListEmptyState\n parentRow={parentRow as T | undefined}\n emptyContent={emptyContent}\n renderRowItem={renderRowItem}\n onItemClick={onItemClick}\n />\n }\n onItemClick={(item) => {\n if (!item.disabled) {\n onItemClick?.(item);\n }\n }}\n />\n </div>\n );\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1,2 +1,2 @@
1
1
  import { NavigationItem } from '../../../types/navigation';
2
- export declare function useParentRow(path: string | undefined, search: string | undefined): NavigationItem | undefined;
2
+ export declare function useParentRow(path: string | undefined, search: string | undefined, showDuringSearch?: boolean): NavigationItem | undefined;
@@ -7,7 +7,8 @@ exports.useParentRow = useParentRow;
7
7
  var _react = require("react");
8
8
  var _getParentPath = require("../../../helpers/getParentPath");
9
9
  function useParentRow(path, search) {
10
- var parentPath = path && !search ? (0, _getParentPath.getParentPath)(path) : undefined;
10
+ var showDuringSearch = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
11
+ var parentPath = path && path !== '/' && (!search || showDuringSearch) ? (0, _getParentPath.getParentPath)(path) : undefined;
11
12
  return (0, _react.useMemo)(function () {
12
13
  if (!parentPath) {
13
14
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_getParentPath","useParentRow","path","search","parentPath","getParentPath","undefined","useMemo","title","kind","hasChildren"],"sources":["useParentRow.ts"],"sourcesContent":["import {useMemo} from 'react';\nimport {NavigationItem} from '../../../types/navigation';\nimport {getParentPath} from '../../../helpers/getParentPath';\n\nexport function useParentRow(\n path: string | undefined,\n search: string | undefined,\n): NavigationItem | undefined {\n const parentPath = path && !search ? getParentPath(path) : undefined;\n\n return useMemo<NavigationItem | undefined>(() => {\n if (!parentPath) {\n return undefined;\n }\n\n return {\n path: parentPath,\n title: '\\u2026',\n kind: 'folder',\n hasChildren: true,\n };\n }, [parentPath]);\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA,IAAAC,cAAA,GAAAD,OAAA;AAEO,SAASE,YAAYA,CACxBC,IAAwB,EACxBC,MAA0B,EACA;EAC1B,IAAMC,UAAU,GAAGF,IAAI,IAAI,CAACC,MAAM,GAAG,IAAAE,4BAAa,EAACH,IAAI,CAAC,GAAGI,SAAS;EAEpE,OAAO,IAAAC,cAAO,EAA6B,YAAM;IAC7C,IAAI,CAACH,UAAU,EAAE;MACb,OAAOE,SAAS;IACpB;IAEA,OAAO;MACHJ,IAAI,EAAEE,UAAU;MAChBI,KAAK,EAAE,QAAQ;MACfC,IAAI,EAAE,QAAQ;MACdC,WAAW,EAAE;IACjB,CAAC;EACL,CAAC,EAAE,CAACN,UAAU,CAAC,CAAC;AACpB","ignoreList":[]}
1
+ {"version":3,"names":["_react","require","_getParentPath","useParentRow","path","search","showDuringSearch","arguments","length","undefined","parentPath","getParentPath","useMemo","title","kind","hasChildren"],"sources":["useParentRow.ts"],"sourcesContent":["import {useMemo} from 'react';\nimport {NavigationItem} from '../../../types/navigation';\nimport {getParentPath} from '../../../helpers/getParentPath';\n\nexport function useParentRow(\n path: string | undefined,\n search: string | undefined,\n showDuringSearch = false,\n): NavigationItem | undefined {\n const parentPath =\n path && path !== '/' && (!search || showDuringSearch) ? getParentPath(path) : undefined;\n\n return useMemo<NavigationItem | undefined>(() => {\n if (!parentPath) {\n return undefined;\n }\n\n return {\n path: parentPath,\n title: '\\u2026',\n kind: 'folder',\n hasChildren: true,\n };\n }, [parentPath]);\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA,IAAAC,cAAA,GAAAD,OAAA;AAEO,SAASE,YAAYA,CACxBC,IAAwB,EACxBC,MAA0B,EAEA;EAAA,IAD1BC,gBAAgB,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,KAAK;EAExB,IAAMG,UAAU,GACZN,IAAI,IAAIA,IAAI,KAAK,GAAG,KAAK,CAACC,MAAM,IAAIC,gBAAgB,CAAC,GAAG,IAAAK,4BAAa,EAACP,IAAI,CAAC,GAAGK,SAAS;EAE3F,OAAO,IAAAG,cAAO,EAA6B,YAAM;IAC7C,IAAI,CAACF,UAAU,EAAE;MACb,OAAOD,SAAS;IACpB;IAEA,OAAO;MACHL,IAAI,EAAEM,UAAU;MAChBG,KAAK,EAAE,QAAQ;MACfC,IAAI,EAAE,QAAQ;MACdC,WAAW,EAAE;IACjB,CAAC;EACL,CAAC,EAAE,CAACL,UAAU,CAAC,CAAC;AACpB","ignoreList":[]}
@@ -15,6 +15,12 @@ export type NavigationAction<TArg> = {
15
15
  onClick: (arg: TArg) => void;
16
16
  };
17
17
  export type NavigationHeaderAction = NavigationAction<NavigationLocation>;
18
+ export type NavigationHeaderActionsRenderContext = {
19
+ location: NavigationLocation;
20
+ actions: NavigationHeaderAction[];
21
+ };
22
+ export type RenderNavigationHeaderActions = (context: NavigationHeaderActionsRenderContext) => ReactNode;
23
+ export type GetNavigationBreadcrumbHref = (location: NavigationLocation) => string | undefined;
18
24
  export type NavigationCluster = {
19
25
  id: string;
20
26
  title: string;
@@ -141,8 +147,13 @@ export type NavigationListStateConfig = {
141
147
  };
142
148
  export type NavigationHeaderConfig = {
143
149
  actions?: NavigationHeaderAction[];
150
+ renderActions?: RenderNavigationHeaderActions;
151
+ getBreadcrumbHref?: GetNavigationBreadcrumbHref;
144
152
  onLoadSuggestions?: LoadPathSuggestions;
145
153
  };
154
+ export type NavigationParentRowConfig = {
155
+ showDuringSearch?: boolean;
156
+ };
146
157
  export type NavigationDetailPanelConfig<TItem extends NavigationItem = NavigationItem> = {
147
158
  openedItem?: TItem;
148
159
  onItemOpen?: (item: TItem) => void;
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["navigation.ts"],"sourcesContent":["import {ReactNode} from 'react';\nimport type {QueryResultColumn, QueryResultFormatterSettings} from './queryResults';\nimport type {LoadPathSuggestions} from './pathEditor';\n\nexport type NavigationLocation = {\n cluster: string | undefined;\n path: string | undefined;\n};\n\nexport type NavigationAction<TArg> = {\n id: string;\n title: string;\n content: ReactNode;\n hidden?: boolean;\n disabled?: boolean;\n qa?: string;\n onClick: (arg: TArg) => void;\n};\n\nexport type NavigationHeaderAction = NavigationAction<NavigationLocation>;\n\nexport type NavigationCluster = {\n id: string;\n title: string;\n icon?: ReactNode;\n color?: string;\n backgroundColor?: string;\n description?: string;\n};\n\nexport type NavigationItemKind = 'folder' | 'file' | 'table' | 'link' | 'unknown';\n\nexport type NavigationItem = {\n path: string;\n title: string;\n icon?: ReactNode;\n kind?: NavigationItemKind;\n targetPathBroken?: boolean;\n hasChildren?: boolean;\n disabled?: boolean;\n};\n\nexport type NavigationSortOrder = 'asc' | 'desc';\n\nexport type NavigationItemRowRenderData<T extends NavigationItem = NavigationItem> = {\n item: T;\n index: number;\n isActive: boolean;\n isParentRow: boolean;\n};\n\nexport type NavigationClusterRowRenderData<T extends NavigationCluster = NavigationCluster> = {\n cluster: T;\n index: number;\n isActive: boolean;\n};\n\nexport type RenderNavigationItem<T extends NavigationItem = NavigationItem> = (\n data: NavigationItemRowRenderData<T>,\n) => ReactNode;\n\nexport type RenderNavigationCluster<T extends NavigationCluster = NavigationCluster> = (\n data: NavigationClusterRowRenderData<T>,\n) => ReactNode;\n\nexport type NavigationDetailTabRenderContext = {\n search: string;\n onSearchUpdate?: (value: string) => void;\n searchPlaceholder?: string;\n};\n\nexport type NavigationDetailTab = {\n id: string;\n title: string;\n content?: ReactNode;\n renderContent?: (ctx: NavigationDetailTabRenderContext) => ReactNode;\n hidden?: boolean;\n disabled?: boolean;\n};\n\nexport type NavigationAsyncConfig = {\n loading?: boolean;\n loaded?: boolean;\n errorContent?: ReactNode;\n};\n\nexport type NavigationSchemaSortOrder = 'ascending' | 'descending';\n\nexport type NavigationSchemaColumn = {\n name: string;\n type?: string;\n sortOrder?: NavigationSchemaSortOrder;\n required?: boolean;\n [key: string]: unknown;\n};\n\nexport type NavigationSchemaConfig<\n TColumn extends NavigationSchemaColumn = NavigationSchemaColumn,\n> = NavigationAsyncConfig & {\n columns: TColumn[];\n};\n\nexport type NavigationCellValue = ReactNode;\n\nexport type NavigationPreviewRow = Record<string, NavigationCellValue>;\n\nexport type NavigationPreviewColumn<TRow extends NavigationPreviewRow = NavigationPreviewRow> =\n string | QueryResultColumn<TRow>;\n\nexport type NavigationPreviewConfig<TRow extends NavigationPreviewRow = NavigationPreviewRow> =\n NavigationAsyncConfig & {\n columns: Array<NavigationPreviewColumn<TRow>>;\n rows: TRow[];\n };\n\nexport type NavigationPreviewFormatterConfig = {\n /** Applied when every displayed preview column declares a YQL type. */\n formatterSettings?: QueryResultFormatterSettings;\n maxVisibleLines?: number;\n};\n\nexport type NavigationViewRow = NavigationPreviewRow;\n\nexport type NavigationViewSectionAction<TRow extends NavigationViewRow = NavigationViewRow> =\n NavigationAction<NavigationViewSection<TRow>>;\n\nexport type NavigationViewSection<TRow extends NavigationViewRow = NavigationViewRow> =\n NavigationAsyncConfig & {\n id: string;\n title: ReactNode;\n columns: string[];\n rows: TRow[];\n expanded?: boolean;\n defaultExpanded?: boolean;\n onExpandedChange?: (expanded: boolean) => void;\n actions?: Array<NavigationViewSectionAction<TRow>>;\n };\n\nexport type NavigationViewConfig<TRow extends NavigationViewRow = NavigationViewRow> =\n NavigationAsyncConfig & {\n sections: Array<NavigationViewSection<TRow>>;\n };\n\nexport type NavigationMetaItem = {\n name: string;\n value: NavigationCellValue;\n [key: string]: unknown;\n};\n\nexport type NavigationMetaGroup<TItem extends NavigationMetaItem = NavigationMetaItem> = {\n title?: string;\n items: TItem[];\n};\n\nexport type NavigationMetaConfig<TItem extends NavigationMetaItem = NavigationMetaItem> =\n NavigationAsyncConfig & {\n groups: Array<NavigationMetaGroup<TItem>>;\n };\n\nexport type NavigationDetailConfig = {\n tabs: NavigationDetailTab[];\n defaultTab?: string;\n hasSearch?: boolean;\n searchPlaceholder?: string;\n actions?: NavigationHeaderAction[];\n emptyContent?: ReactNode;\n};\n\nexport type ResolveNavigationDetail<T extends NavigationItem = NavigationItem> = (\n item: T,\n) => NavigationDetailConfig | undefined;\n\nexport type NavigationDetailConfigFactory<T extends NavigationItem = NavigationItem> = (\n item: T,\n) => NavigationDetailConfig;\n\nexport type NavigationSearchConfig = {\n value?: string;\n onUpdate?: (value: string) => void;\n};\n\nexport type NavigationSortConfig = {\n value?: NavigationSortOrder;\n onUpdate?: (sort: NavigationSortOrder) => void;\n};\n\nexport type NavigationListStateConfig = {\n loading?: boolean;\n error?: boolean | ReactNode;\n hasMore?: boolean;\n onLoadMore?: () => void;\n};\n\nexport type NavigationHeaderConfig = {\n actions?: NavigationHeaderAction[];\n onLoadSuggestions?: LoadPathSuggestions;\n};\n\nexport type NavigationDetailPanelConfig<TItem extends NavigationItem = NavigationItem> = {\n openedItem?: TItem;\n onItemOpen?: (item: TItem) => void;\n onClose?: () => void;\n resolve?: ResolveNavigationDetail<TItem>;\n search?: string;\n onSearchUpdate?: (value: string) => void;\n activeTab?: string;\n onTabUpdate?: (tab: string) => void;\n actions?: NavigationHeaderAction[];\n};\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["navigation.ts"],"sourcesContent":["import {ReactNode} from 'react';\nimport type {QueryResultColumn, QueryResultFormatterSettings} from './queryResults';\nimport type {LoadPathSuggestions} from './pathEditor';\n\nexport type NavigationLocation = {\n cluster: string | undefined;\n path: string | undefined;\n};\n\nexport type NavigationAction<TArg> = {\n id: string;\n title: string;\n content: ReactNode;\n hidden?: boolean;\n disabled?: boolean;\n qa?: string;\n onClick: (arg: TArg) => void;\n};\n\nexport type NavigationHeaderAction = NavigationAction<NavigationLocation>;\n\nexport type NavigationHeaderActionsRenderContext = {\n location: NavigationLocation;\n actions: NavigationHeaderAction[];\n};\n\nexport type RenderNavigationHeaderActions = (\n context: NavigationHeaderActionsRenderContext,\n) => ReactNode;\n\nexport type GetNavigationBreadcrumbHref = (location: NavigationLocation) => string | undefined;\n\nexport type NavigationCluster = {\n id: string;\n title: string;\n icon?: ReactNode;\n color?: string;\n backgroundColor?: string;\n description?: string;\n};\n\nexport type NavigationItemKind = 'folder' | 'file' | 'table' | 'link' | 'unknown';\n\nexport type NavigationItem = {\n path: string;\n title: string;\n icon?: ReactNode;\n kind?: NavigationItemKind;\n targetPathBroken?: boolean;\n hasChildren?: boolean;\n disabled?: boolean;\n};\n\nexport type NavigationSortOrder = 'asc' | 'desc';\n\nexport type NavigationItemRowRenderData<T extends NavigationItem = NavigationItem> = {\n item: T;\n index: number;\n isActive: boolean;\n isParentRow: boolean;\n};\n\nexport type NavigationClusterRowRenderData<T extends NavigationCluster = NavigationCluster> = {\n cluster: T;\n index: number;\n isActive: boolean;\n};\n\nexport type RenderNavigationItem<T extends NavigationItem = NavigationItem> = (\n data: NavigationItemRowRenderData<T>,\n) => ReactNode;\n\nexport type RenderNavigationCluster<T extends NavigationCluster = NavigationCluster> = (\n data: NavigationClusterRowRenderData<T>,\n) => ReactNode;\n\nexport type NavigationDetailTabRenderContext = {\n search: string;\n onSearchUpdate?: (value: string) => void;\n searchPlaceholder?: string;\n};\n\nexport type NavigationDetailTab = {\n id: string;\n title: string;\n content?: ReactNode;\n renderContent?: (ctx: NavigationDetailTabRenderContext) => ReactNode;\n hidden?: boolean;\n disabled?: boolean;\n};\n\nexport type NavigationAsyncConfig = {\n loading?: boolean;\n loaded?: boolean;\n errorContent?: ReactNode;\n};\n\nexport type NavigationSchemaSortOrder = 'ascending' | 'descending';\n\nexport type NavigationSchemaColumn = {\n name: string;\n type?: string;\n sortOrder?: NavigationSchemaSortOrder;\n required?: boolean;\n [key: string]: unknown;\n};\n\nexport type NavigationSchemaConfig<\n TColumn extends NavigationSchemaColumn = NavigationSchemaColumn,\n> = NavigationAsyncConfig & {\n columns: TColumn[];\n};\n\nexport type NavigationCellValue = ReactNode;\n\nexport type NavigationPreviewRow = Record<string, NavigationCellValue>;\n\nexport type NavigationPreviewColumn<TRow extends NavigationPreviewRow = NavigationPreviewRow> =\n string | QueryResultColumn<TRow>;\n\nexport type NavigationPreviewConfig<TRow extends NavigationPreviewRow = NavigationPreviewRow> =\n NavigationAsyncConfig & {\n columns: Array<NavigationPreviewColumn<TRow>>;\n rows: TRow[];\n };\n\nexport type NavigationPreviewFormatterConfig = {\n /** Applied when every displayed preview column declares a YQL type. */\n formatterSettings?: QueryResultFormatterSettings;\n maxVisibleLines?: number;\n};\n\nexport type NavigationViewRow = NavigationPreviewRow;\n\nexport type NavigationViewSectionAction<TRow extends NavigationViewRow = NavigationViewRow> =\n NavigationAction<NavigationViewSection<TRow>>;\n\nexport type NavigationViewSection<TRow extends NavigationViewRow = NavigationViewRow> =\n NavigationAsyncConfig & {\n id: string;\n title: ReactNode;\n columns: string[];\n rows: TRow[];\n expanded?: boolean;\n defaultExpanded?: boolean;\n onExpandedChange?: (expanded: boolean) => void;\n actions?: Array<NavigationViewSectionAction<TRow>>;\n };\n\nexport type NavigationViewConfig<TRow extends NavigationViewRow = NavigationViewRow> =\n NavigationAsyncConfig & {\n sections: Array<NavigationViewSection<TRow>>;\n };\n\nexport type NavigationMetaItem = {\n name: string;\n value: NavigationCellValue;\n [key: string]: unknown;\n};\n\nexport type NavigationMetaGroup<TItem extends NavigationMetaItem = NavigationMetaItem> = {\n title?: string;\n items: TItem[];\n};\n\nexport type NavigationMetaConfig<TItem extends NavigationMetaItem = NavigationMetaItem> =\n NavigationAsyncConfig & {\n groups: Array<NavigationMetaGroup<TItem>>;\n };\n\nexport type NavigationDetailConfig = {\n tabs: NavigationDetailTab[];\n defaultTab?: string;\n hasSearch?: boolean;\n searchPlaceholder?: string;\n actions?: NavigationHeaderAction[];\n emptyContent?: ReactNode;\n};\n\nexport type ResolveNavigationDetail<T extends NavigationItem = NavigationItem> = (\n item: T,\n) => NavigationDetailConfig | undefined;\n\nexport type NavigationDetailConfigFactory<T extends NavigationItem = NavigationItem> = (\n item: T,\n) => NavigationDetailConfig;\n\nexport type NavigationSearchConfig = {\n value?: string;\n onUpdate?: (value: string) => void;\n};\n\nexport type NavigationSortConfig = {\n value?: NavigationSortOrder;\n onUpdate?: (sort: NavigationSortOrder) => void;\n};\n\nexport type NavigationListStateConfig = {\n loading?: boolean;\n error?: boolean | ReactNode;\n hasMore?: boolean;\n onLoadMore?: () => void;\n};\n\nexport type NavigationHeaderConfig = {\n actions?: NavigationHeaderAction[];\n renderActions?: RenderNavigationHeaderActions;\n getBreadcrumbHref?: GetNavigationBreadcrumbHref;\n onLoadSuggestions?: LoadPathSuggestions;\n};\n\nexport type NavigationParentRowConfig = {\n showDuringSearch?: boolean;\n};\n\nexport type NavigationDetailPanelConfig<TItem extends NavigationItem = NavigationItem> = {\n openedItem?: TItem;\n onItemOpen?: (item: TItem) => void;\n onClose?: () => void;\n resolve?: ResolveNavigationDetail<TItem>;\n search?: string;\n onSearchUpdate?: (value: string) => void;\n activeTab?: string;\n onTabUpdate?: (tab: string) => void;\n actions?: NavigationHeaderAction[];\n};\n"],"mappings":"","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import type { NavigationCluster, NavigationDetailPanelConfig, NavigationHeaderConfig, NavigationItem, NavigationListStateConfig, NavigationLocation, NavigationSearchConfig, NavigationSortConfig, RenderNavigationCluster, RenderNavigationItem } from '../../types/navigation';
2
+ import type { NavigationCluster, NavigationDetailPanelConfig, NavigationHeaderConfig, NavigationItem, NavigationListStateConfig, NavigationLocation, NavigationParentRowConfig, NavigationSearchConfig, NavigationSortConfig, RenderNavigationCluster, RenderNavigationItem } from '../../types/navigation';
3
3
  import './QueriesNavigation.scss';
4
4
  export type QueriesNavigationProps<TItem extends NavigationItem = NavigationItem, TCluster extends NavigationCluster = NavigationCluster> = {
5
5
  location: NavigationLocation;
@@ -11,10 +11,11 @@ export type QueriesNavigationProps<TItem extends NavigationItem = NavigationItem
11
11
  sort?: NavigationSortConfig;
12
12
  listState?: NavigationListStateConfig;
13
13
  detail?: NavigationDetailPanelConfig<TItem>;
14
+ parentRow?: NavigationParentRowConfig;
14
15
  renderClusterItem?: RenderNavigationCluster<TCluster>;
15
16
  renderNavigationItem?: RenderNavigationItem<TItem>;
16
17
  onClusterClick?: (cluster: TCluster) => void;
17
18
  onItemClick?: (item: TItem) => void;
18
19
  className?: string;
19
20
  };
20
- export declare const QueriesNavigation: <TItem extends NavigationItem = NavigationItem, TCluster extends NavigationCluster = NavigationCluster>({ location, onUpdate, clusters, items, header, search, sort, listState, detail, renderClusterItem, renderNavigationItem, onClusterClick, onItemClick, className, }: QueriesNavigationProps<TItem, TCluster>) => React.JSX.Element;
21
+ export declare const QueriesNavigation: <TItem extends NavigationItem = NavigationItem, TCluster extends NavigationCluster = NavigationCluster>({ location, onUpdate, clusters, items, header, search, sort, listState, detail, parentRow, renderClusterItem, renderNavigationItem, onClusterClick, onItemClick, className, }: QueriesNavigationProps<TItem, TCluster>) => React.JSX.Element;
@@ -35,6 +35,7 @@ var QueriesNavigation = exports.QueriesNavigation = function QueriesNavigation(_
35
35
  sort = _ref.sort,
36
36
  listState = _ref.listState,
37
37
  detail = _ref.detail,
38
+ parentRow = _ref.parentRow,
38
39
  renderClusterItem = _ref.renderClusterItem,
39
40
  renderNavigationItem = _ref.renderNavigationItem,
40
41
  onClusterClick = _ref.onClusterClick,
@@ -47,6 +48,8 @@ var QueriesNavigation = exports.QueriesNavigation = function QueriesNavigation(_
47
48
  onLoadMore = _ref2.onLoadMore;
48
49
  var _ref3 = header !== null && header !== void 0 ? header : {},
49
50
  actions = _ref3.actions,
51
+ renderActions = _ref3.renderActions,
52
+ getBreadcrumbHref = _ref3.getBreadcrumbHref,
50
53
  onLoadSuggestions = _ref3.onLoadSuggestions;
51
54
  var _ref4 = search !== null && search !== void 0 ? search : {},
52
55
  searchValue = _ref4.value,
@@ -123,6 +126,8 @@ var QueriesNavigation = exports.QueriesNavigation = function QueriesNavigation(_
123
126
  path: body.item.path
124
127
  },
125
128
  actions: resolvedDetailActions,
129
+ renderActions: renderActions,
130
+ getBreadcrumbHref: getBreadcrumbHref,
126
131
  onUpdate: handleNavigate,
127
132
  onLoadSuggestions: onLoadSuggestions,
128
133
  search: detailSearch,
@@ -139,6 +144,8 @@ var QueriesNavigation = exports.QueriesNavigation = function QueriesNavigation(_
139
144
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_NavigationHeader.NavigationHeader, {
140
145
  location: location,
141
146
  actions: actions,
147
+ renderActions: renderActions,
148
+ getBreadcrumbHref: getBreadcrumbHref,
142
149
  onUpdate: handleNavigate,
143
150
  onLoadSuggestions: onLoadSuggestions
144
151
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_SearchWithButtons.SearchWithButtons, {
@@ -160,6 +167,7 @@ var QueriesNavigation = exports.QueriesNavigation = function QueriesNavigation(_
160
167
  items: items,
161
168
  path: location.path,
162
169
  search: searchValue,
170
+ parentRow: parentRow,
163
171
  sort: sortValue,
164
172
  onSortUpdate: onSortUpdate,
165
173
  titleLabel: (0, _i18n.default)('title_name'),