diff --git a/webapp/packages/core-app/src/shared/useChildren.ts b/webapp/packages/core-app/src/shared/useChildren.ts index 9e426629cc..490bab7478 100644 --- a/webapp/packages/core-app/src/shared/useChildren.ts +++ b/webapp/packages/core-app/src/shared/useChildren.ts @@ -18,6 +18,7 @@ import { NavTreeResource } from './NodesManager/NavTreeResource'; interface Hook { children: string[] | undefined; exception: Error | null; + limited: boolean; isLoaded: () => boolean; isLoading: () => boolean; isOutdated: () => boolean; @@ -28,10 +29,13 @@ export function useChildren(navNodeId = ROOT_NODE_PATH): Hook { const navTreeService = useService(NavigationTreeService); const navTreeResource = useService(NavTreeResource); let children = navTreeService.getChildren(navNodeId); + let limited = false; const exception = navTreeResource.getException(navNodeId); if (children) { - children = navNodeViewService.limit(children).nodes; + const data = navNodeViewService.limit(children); + children = data.nodes; + limited = data.truncated > 0; } const deps = [navNodeId]; @@ -43,6 +47,7 @@ export function useChildren(navNodeId = ROOT_NODE_PATH): Hook { return { children, exception, + limited, isLoaded, isLoading, isOutdated, diff --git a/webapp/packages/plugin-object-viewer/src/ObjectPropertiesPage/FolderTabRenderer.tsx b/webapp/packages/plugin-object-viewer/src/ObjectPropertiesPage/FolderTabRenderer.tsx index b54995e2f8..655c0e8360 100644 --- a/webapp/packages/plugin-object-viewer/src/ObjectPropertiesPage/FolderTabRenderer.tsx +++ b/webapp/packages/plugin-object-viewer/src/ObjectPropertiesPage/FolderTabRenderer.tsx @@ -10,11 +10,11 @@ import { observer } from 'mobx-react-lite'; import styled from 'reshadow'; import { DBObjectResource, NavNodeViewService, useChildren, useNode } from '@cloudbeaver/core-app'; -import { Tab, TabIcon, TabTitle } from '@cloudbeaver/core-ui'; import { getComputed, Loader, useStateDelay } from '@cloudbeaver/core-blocks'; import { useService } from '@cloudbeaver/core-di'; import { resourceKeyList } from '@cloudbeaver/core-sdk'; import { ComponentStyle, useStyles } from '@cloudbeaver/core-theming'; +import { Tab, TabIcon, TabTitle } from '@cloudbeaver/core-ui'; interface IFolderTabRendererProps { nodeId: string; diff --git a/webapp/packages/plugin-object-viewer/src/ObjectPropertiesPage/NavNodeView/VirtualFolder/VirtualFolderPanel.tsx b/webapp/packages/plugin-object-viewer/src/ObjectPropertiesPage/NavNodeView/VirtualFolder/VirtualFolderPanel.tsx index 8cb74438e9..afacd30d06 100644 --- a/webapp/packages/plugin-object-viewer/src/ObjectPropertiesPage/NavNodeView/VirtualFolder/VirtualFolderPanel.tsx +++ b/webapp/packages/plugin-object-viewer/src/ObjectPropertiesPage/NavNodeView/VirtualFolder/VirtualFolderPanel.tsx @@ -39,7 +39,7 @@ export const VirtualFolderPanel: NavNodeTransformViewComponent = observer(functi onLoad: async resource => !(await resource.preloadNodeParents(parents, nodeId)), }); - const { nodes } = navNodeViewService.limit(tree.data || []); + const { nodes, truncated } = navNodeViewService.limit(tree.data || []); const key = resourceKeyList(nodes); const dbObject = useMapResource(VirtualFolderPanel, DBObjectResource, key, { async onLoad(resource: DBObjectResource) { @@ -65,7 +65,7 @@ export const VirtualFolderPanel: NavNodeTransformViewComponent = observer(functi {translate('plugin_object_viewer_table_no_items')} ) : ( - + 0} /> )} diff --git a/webapp/packages/plugin-object-viewer/src/ObjectPropertiesPage/ObjectPropertyTable/ObjectChildrenPropertyTable.tsx b/webapp/packages/plugin-object-viewer/src/ObjectPropertiesPage/ObjectPropertyTable/ObjectChildrenPropertyTable.tsx index dfe374a7cf..0311f5b473 100644 --- a/webapp/packages/plugin-object-viewer/src/ObjectPropertiesPage/ObjectPropertyTable/ObjectChildrenPropertyTable.tsx +++ b/webapp/packages/plugin-object-viewer/src/ObjectPropertiesPage/ObjectPropertyTable/ObjectChildrenPropertyTable.tsx @@ -10,10 +10,12 @@ import { observer } from 'mobx-react-lite'; import { useState } from 'react'; import styled, { css } from 'reshadow'; -import type { DBObject } from '@cloudbeaver/core-app'; -import { useTabLocalState } from '@cloudbeaver/core-ui'; -import { TableHeader, TableBody, Table, useTable, useControlledScroll, IScrollState } from '@cloudbeaver/core-blocks'; +import { DBObject, NavTreeResource } from '@cloudbeaver/core-app'; +import { TableHeader, TableBody, Table, useTable, useControlledScroll, IScrollState, TableItem, TableColumnValue } from '@cloudbeaver/core-blocks'; +import { useService } from '@cloudbeaver/core-di'; +import { Translate } from '@cloudbeaver/core-localization'; import { composes, useStyles } from '@cloudbeaver/core-theming'; +import { useTabLocalState } from '@cloudbeaver/core-ui'; import { Header } from './Header'; import { Item } from './Item'; @@ -27,6 +29,9 @@ const style = composes( ObjectPropertyTableFooter { composes: theme-background-secondary theme-text-on-secondary theme-border-color-background from global; } + TableColumnValue { + composes: theme-text-text-hint-on-light from global; + } `, css` wrapper { @@ -48,16 +53,22 @@ const style = composes( ObjectPropertyTableFooter { border-top: 1px solid; } + TableColumnValue { + composes: theme-typography--caption from global; + } `, ); interface Props { objects: DBObject[]; + truncated?: boolean; } export const ObjectChildrenPropertyTable = observer(function ObjectPropertyTable({ objects, + truncated, }) { + const navTreeResource = useService(NavTreeResource); const [scrollBox, setScrollBox] = useState(null); const styles = useStyles(style); const table = useTable(); @@ -90,6 +101,13 @@ export const ObjectChildrenPropertyTable = observer(function ObjectProper columns={properties.length} /> ))} + {truncated && ( + + + + + + )} diff --git a/webapp/packages/plugin-object-viewer/src/ObjectPropertiesPage/ObjectPropertyTable/ObjectPropertyTable.tsx b/webapp/packages/plugin-object-viewer/src/ObjectPropertiesPage/ObjectPropertyTable/ObjectPropertyTable.tsx index 60cd7841bd..e3de4f4d30 100644 --- a/webapp/packages/plugin-object-viewer/src/ObjectPropertiesPage/ObjectPropertyTable/ObjectPropertyTable.tsx +++ b/webapp/packages/plugin-object-viewer/src/ObjectPropertiesPage/ObjectPropertyTable/ObjectPropertyTable.tsx @@ -81,7 +81,7 @@ export const ObjectPropertyTable = observer(function O {translate('plugin_object_viewer_table_no_items')} ) : (
- + 0} />
)}