@vertesia/ui 0.79.0 → 0.79.1
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.
- package/lib/esm/core/components/Panel.js +8 -0
- package/lib/esm/core/components/Panel.js.map +1 -0
- package/lib/esm/core/components/SelectBox.js +1 -1
- package/lib/esm/core/components/SelectBox.js.map +1 -1
- package/lib/esm/core/components/SidePanel.js +2 -2
- package/lib/esm/core/components/SidePanel.js.map +1 -1
- package/lib/esm/core/components/index.js +1 -1
- package/lib/esm/core/components/index.js.map +1 -1
- package/lib/esm/core/components/shadcn/breadcrumb.js +29 -8
- package/lib/esm/core/components/shadcn/breadcrumb.js.map +1 -1
- package/lib/esm/core/components/shadcn/button.js +3 -2
- package/lib/esm/core/components/shadcn/button.js.map +1 -1
- package/lib/esm/core/components/shadcn/filters/filterBar.js +2 -2
- package/lib/esm/core/components/shadcn/filters/filterBar.js.map +1 -1
- package/lib/esm/core/components/shadcn/index.js +1 -0
- package/lib/esm/core/components/shadcn/index.js.map +1 -1
- package/lib/esm/core/components/shadcn/input.js +4 -1
- package/lib/esm/core/components/shadcn/input.js.map +1 -1
- package/lib/esm/core/components/shadcn/resizeable.js +2 -2
- package/lib/esm/core/components/shadcn/resizeable.js.map +1 -1
- package/lib/esm/core/components/shadcn/selectBox.js +15 -9
- package/lib/esm/core/components/shadcn/selectBox.js.map +1 -1
- package/lib/esm/core/components/shadcn/tabs.js +10 -3
- package/lib/esm/core/components/shadcn/tabs.js.map +1 -1
- package/lib/esm/core/components/shadcn/textarea.js +7 -0
- package/lib/esm/core/components/shadcn/textarea.js.map +1 -0
- package/lib/esm/core/hooks/CompositeState.js +139 -1
- package/lib/esm/core/hooks/CompositeState.js.map +1 -1
- package/lib/esm/core/hooks/index.js +1 -0
- package/lib/esm/core/hooks/index.js.map +1 -1
- package/lib/esm/core/hooks/useScrollableSearch.js +92 -0
- package/lib/esm/core/hooks/useScrollableSearch.js.map +1 -0
- package/lib/esm/env/index.js +1 -1
- package/lib/esm/env/index.js.map +1 -1
- package/lib/esm/features/agent/PayloadBuilder.js +80 -55
- package/lib/esm/features/agent/PayloadBuilder.js.map +1 -1
- package/lib/esm/features/agent/chat/ModernAgentConversation.js +22 -24
- package/lib/esm/features/agent/chat/ModernAgentConversation.js.map +1 -1
- package/lib/esm/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js +2 -3
- package/lib/esm/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js.map +1 -1
- package/lib/esm/features/agent/chat/ModernAgentOutput/Header.js +2 -2
- package/lib/esm/features/agent/chat/ModernAgentOutput/Header.js.map +1 -1
- package/lib/esm/features/agent/chat/ModernAgentOutput/InlineSlidingPlanPanel.js +15 -20
- package/lib/esm/features/agent/chat/ModernAgentOutput/InlineSlidingPlanPanel.js.map +1 -1
- package/lib/esm/features/agent/chat/ModernAgentOutput/PlanPanel.js +1 -0
- package/lib/esm/features/agent/chat/ModernAgentOutput/PlanPanel.js.map +1 -1
- package/lib/esm/features/agent/chat/ModernAgentOutput/SlidingPlanPanel.js +3 -3
- package/lib/esm/features/agent/chat/ModernAgentOutput/SlidingPlanPanel.js.map +1 -1
- package/lib/esm/features/agent/chat/ModernAgentOutput/WorkstreamTabs.js +6 -6
- package/lib/esm/features/agent/chat/ModernAgentOutput/WorkstreamTabs.js.map +1 -1
- package/lib/esm/features/facets/CollectionsFacetsNav.js +19 -0
- package/lib/esm/features/facets/CollectionsFacetsNav.js.map +1 -1
- package/lib/esm/features/facets/InteractionsFacetsNav.js +9 -3
- package/lib/esm/features/facets/InteractionsFacetsNav.js.map +1 -1
- package/lib/esm/features/facets/utils/VTypeFacet.js +4 -1
- package/lib/esm/features/facets/utils/VTypeFacet.js.map +1 -1
- package/lib/esm/features/layout/GenericPageNavHeader.js +58 -5
- package/lib/esm/features/layout/GenericPageNavHeader.js.map +1 -1
- package/lib/esm/features/store/collections/BrowseCollectionView.js +3 -0
- package/lib/esm/features/store/collections/BrowseCollectionView.js.map +1 -1
- package/lib/esm/features/store/collections/CreateCollection.js +2 -2
- package/lib/esm/features/store/collections/CreateCollection.js.map +1 -1
- package/lib/esm/features/store/collections/EditCollectionView.js +29 -30
- package/lib/esm/features/store/collections/EditCollectionView.js.map +1 -1
- package/lib/esm/features/store/collections/SelectCollection.js +46 -45
- package/lib/esm/features/store/collections/SelectCollection.js.map +1 -1
- package/lib/esm/features/store/objects/DocumentSearchResults.js +35 -9
- package/lib/esm/features/store/objects/DocumentSearchResults.js.map +1 -1
- package/lib/esm/features/store/objects/DocumentTable.js +6 -6
- package/lib/esm/features/store/objects/DocumentTable.js.map +1 -1
- package/lib/esm/features/store/objects/components/ContentOverview.js +158 -114
- package/lib/esm/features/store/objects/components/ContentOverview.js.map +1 -1
- package/lib/esm/features/store/objects/components/DocumentIcon.js +5 -3
- package/lib/esm/features/store/objects/components/DocumentIcon.js.map +1 -1
- package/lib/esm/features/store/objects/components/SaveVersionConfirmModal.js +11 -2
- package/lib/esm/features/store/objects/components/SaveVersionConfirmModal.js.map +1 -1
- package/lib/esm/features/store/objects/components/useDownloadObject.js +2 -2
- package/lib/esm/features/store/objects/components/useDownloadObject.js.map +1 -1
- package/lib/esm/features/store/objects/layout/DocumentTableColumn.js +13 -1
- package/lib/esm/features/store/objects/layout/DocumentTableColumn.js.map +1 -1
- package/lib/esm/features/store/objects/layout/documentLayout.js +5 -5
- package/lib/esm/features/store/objects/layout/documentLayout.js.map +1 -1
- package/lib/esm/features/store/objects/layout/renderers.js +28 -12
- package/lib/esm/features/store/objects/layout/renderers.js.map +1 -1
- package/lib/esm/features/store/objects/search/DocumentSearchContext.js +5 -1
- package/lib/esm/features/store/objects/search/DocumentSearchContext.js.map +1 -1
- package/lib/esm/features/store/objects/search/DocumentSearchProvider.js +1 -1
- package/lib/esm/features/store/objects/search/DocumentSearchProvider.js.map +1 -1
- package/lib/esm/features/store/objects/selection/ObjectsActionContext.js +3 -2
- package/lib/esm/features/store/objects/selection/ObjectsActionContext.js.map +1 -1
- package/lib/esm/features/store/objects/selection/SelectionActions.js +2 -0
- package/lib/esm/features/store/objects/selection/SelectionActions.js.map +1 -1
- package/lib/esm/features/store/objects/selection/actions/AddToCollectionAction.js +10 -2
- package/lib/esm/features/store/objects/selection/actions/AddToCollectionAction.js.map +1 -1
- package/lib/esm/features/store/objects/selection/actions/DeleteObjectsAction.js +20 -2
- package/lib/esm/features/store/objects/selection/actions/DeleteObjectsAction.js.map +1 -1
- package/lib/esm/features/store/objects/upload/DocumentUploadModal.js +15 -7
- package/lib/esm/features/store/objects/upload/DocumentUploadModal.js.map +1 -1
- package/lib/esm/features/store/types/CreateOrUpdateTypeModal.js +1 -1
- package/lib/esm/features/store/types/CreateOrUpdateTypeModal.js.map +1 -1
- package/lib/esm/features/user/UserInfo.js +2 -0
- package/lib/esm/features/user/UserInfo.js.map +1 -1
- package/lib/esm/router/HistoryNavigator.js +25 -2
- package/lib/esm/router/HistoryNavigator.js.map +1 -1
- package/lib/esm/router/Nav.js +3 -3
- package/lib/esm/router/Nav.js.map +1 -1
- package/lib/esm/session/UserSession.js +1 -0
- package/lib/esm/session/UserSession.js.map +1 -1
- package/lib/esm/session/UserSessionProvider.js +9 -2
- package/lib/esm/session/UserSessionProvider.js.map +1 -1
- package/lib/esm/session/auth/composable.js +66 -67
- package/lib/esm/session/auth/composable.js.map +1 -1
- package/lib/esm/widgets/form/Form.js +17 -30
- package/lib/esm/widgets/form/Form.js.map +1 -1
- package/lib/esm/widgets/form/FormContext.js +4 -2
- package/lib/esm/widgets/form/FormContext.js.map +1 -1
- package/lib/esm/widgets/form/ManagedObject.js +4 -0
- package/lib/esm/widgets/form/ManagedObject.js.map +1 -1
- package/lib/esm/widgets/form/fields.js +4 -3
- package/lib/esm/widgets/form/fields.js.map +1 -1
- package/lib/esm/widgets/form/inputs.js +2 -0
- package/lib/esm/widgets/form/inputs.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/types/core/components/Panel.d.ts +11 -0
- package/lib/types/core/components/Panel.d.ts.map +1 -0
- package/lib/types/core/components/SidePanel.d.ts.map +1 -1
- package/lib/types/core/components/index.d.ts +1 -1
- package/lib/types/core/components/index.d.ts.map +1 -1
- package/lib/types/core/components/shadcn/breadcrumb.d.ts +3 -2
- package/lib/types/core/components/shadcn/breadcrumb.d.ts.map +1 -1
- package/lib/types/core/components/shadcn/button.d.ts.map +1 -1
- package/lib/types/core/components/shadcn/filters/filterBar.d.ts.map +1 -1
- package/lib/types/core/components/shadcn/index.d.ts +1 -0
- package/lib/types/core/components/shadcn/index.d.ts.map +1 -1
- package/lib/types/core/components/shadcn/input.d.ts.map +1 -1
- package/lib/types/core/components/shadcn/selectBox.d.ts +3 -2
- package/lib/types/core/components/shadcn/selectBox.d.ts.map +1 -1
- package/lib/types/core/components/shadcn/tabs.d.ts.map +1 -1
- package/lib/types/core/components/shadcn/textarea.d.ts +4 -0
- package/lib/types/core/components/shadcn/textarea.d.ts.map +1 -0
- package/lib/types/core/hooks/CompositeState.d.ts +115 -6
- package/lib/types/core/hooks/CompositeState.d.ts.map +1 -1
- package/lib/types/core/hooks/index.d.ts +1 -0
- package/lib/types/core/hooks/index.d.ts.map +1 -1
- package/lib/types/core/hooks/useScrollableSearch.d.ts +82 -0
- package/lib/types/core/hooks/useScrollableSearch.d.ts.map +1 -0
- package/lib/types/env/index.d.ts +3 -1
- package/lib/types/env/index.d.ts.map +1 -1
- package/lib/types/features/agent/PayloadBuilder.d.ts +11 -19
- package/lib/types/features/agent/PayloadBuilder.d.ts.map +1 -1
- package/lib/types/features/agent/chat/ModernAgentConversation.d.ts.map +1 -1
- package/lib/types/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts +1 -1
- package/lib/types/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts.map +1 -1
- package/lib/types/features/agent/chat/ModernAgentOutput/Header.d.ts.map +1 -1
- package/lib/types/features/agent/chat/ModernAgentOutput/InlineSlidingPlanPanel.d.ts.map +1 -1
- package/lib/types/features/agent/chat/ModernAgentOutput/PlanPanel.d.ts.map +1 -1
- package/lib/types/features/facets/CollectionsFacetsNav.d.ts.map +1 -1
- package/lib/types/features/facets/InteractionsFacetsNav.d.ts +1 -0
- package/lib/types/features/facets/InteractionsFacetsNav.d.ts.map +1 -1
- package/lib/types/features/facets/utils/SearchInterface.d.ts +6 -1
- package/lib/types/features/facets/utils/SearchInterface.d.ts.map +1 -1
- package/lib/types/features/facets/utils/VTypeFacet.d.ts +2 -1
- package/lib/types/features/facets/utils/VTypeFacet.d.ts.map +1 -1
- package/lib/types/features/layout/GenericPageNavHeader.d.ts +2 -1
- package/lib/types/features/layout/GenericPageNavHeader.d.ts.map +1 -1
- package/lib/types/features/store/collections/BrowseCollectionView.d.ts.map +1 -1
- package/lib/types/features/store/collections/CreateCollection.d.ts.map +1 -1
- package/lib/types/features/store/collections/EditCollectionView.d.ts.map +1 -1
- package/lib/types/features/store/collections/SelectCollection.d.ts +6 -4
- package/lib/types/features/store/collections/SelectCollection.d.ts.map +1 -1
- package/lib/types/features/store/objects/DocumentSearchResults.d.ts.map +1 -1
- package/lib/types/features/store/objects/DocumentTable.d.ts +4 -0
- package/lib/types/features/store/objects/DocumentTable.d.ts.map +1 -1
- package/lib/types/features/store/objects/components/ContentOverview.d.ts.map +1 -1
- package/lib/types/features/store/objects/components/DocumentIcon.d.ts +3 -1
- package/lib/types/features/store/objects/components/DocumentIcon.d.ts.map +1 -1
- package/lib/types/features/store/objects/components/SaveVersionConfirmModal.d.ts.map +1 -1
- package/lib/types/features/store/objects/components/useDownloadObject.d.ts +1 -1
- package/lib/types/features/store/objects/components/useDownloadObject.d.ts.map +1 -1
- package/lib/types/features/store/objects/layout/DocumentTableColumn.d.ts +2 -1
- package/lib/types/features/store/objects/layout/DocumentTableColumn.d.ts.map +1 -1
- package/lib/types/features/store/objects/layout/documentLayout.d.ts +4 -2
- package/lib/types/features/store/objects/layout/documentLayout.d.ts.map +1 -1
- package/lib/types/features/store/objects/layout/renderers.d.ts +1 -1
- package/lib/types/features/store/objects/layout/renderers.d.ts.map +1 -1
- package/lib/types/features/store/objects/search/DocumentSearchContext.d.ts +1 -0
- package/lib/types/features/store/objects/search/DocumentSearchContext.d.ts.map +1 -1
- package/lib/types/features/store/objects/selection/ObjectsActionContext.d.ts.map +1 -1
- package/lib/types/features/store/objects/selection/SelectionActions.d.ts.map +1 -1
- package/lib/types/features/store/objects/selection/actions/DeleteObjectsAction.d.ts +1 -0
- package/lib/types/features/store/objects/selection/actions/DeleteObjectsAction.d.ts.map +1 -1
- package/lib/types/features/store/objects/upload/DocumentUploadModal.d.ts.map +1 -1
- package/lib/types/features/user/UserInfo.d.ts.map +1 -1
- package/lib/types/router/HistoryNavigator.d.ts.map +1 -1
- package/lib/types/router/Nav.d.ts +2 -1
- package/lib/types/router/Nav.d.ts.map +1 -1
- package/lib/types/session/UserSession.d.ts.map +1 -1
- package/lib/types/session/UserSessionProvider.d.ts.map +1 -1
- package/lib/types/session/auth/composable.d.ts.map +1 -1
- package/lib/types/widgets/form/Form.d.ts +2 -1
- package/lib/types/widgets/form/Form.d.ts.map +1 -1
- package/lib/types/widgets/form/FormContext.d.ts +5 -2
- package/lib/types/widgets/form/FormContext.d.ts.map +1 -1
- package/lib/types/widgets/form/ManagedObject.d.ts.map +1 -1
- package/lib/types/widgets/form/fields.d.ts +2 -2
- package/lib/types/widgets/form/fields.d.ts.map +1 -1
- package/lib/types/widgets/form/inputs.d.ts.map +1 -1
- package/lib/vertesia-ui-core.js +1 -1
- package/lib/vertesia-ui-core.js.map +1 -1
- package/lib/vertesia-ui-env.js +1 -1
- package/lib/vertesia-ui-env.js.map +1 -1
- package/lib/vertesia-ui-features.js +1 -1
- package/lib/vertesia-ui-features.js.map +1 -1
- package/lib/vertesia-ui-router.js +1 -1
- package/lib/vertesia-ui-router.js.map +1 -1
- package/lib/vertesia-ui-session.js +1 -1
- package/lib/vertesia-ui-session.js.map +1 -1
- package/lib/vertesia-ui-shell.js.map +1 -1
- package/lib/vertesia-ui-widgets.js +1 -1
- package/lib/vertesia-ui-widgets.js.map +1 -1
- package/package.json +166 -166
- package/src/core/components/Panel.tsx +34 -0
- package/src/core/components/SidePanel.tsx +5 -3
- package/src/core/components/index.ts +1 -1
- package/src/core/components/shadcn/breadcrumb.tsx +49 -30
- package/src/core/components/shadcn/button.tsx +3 -2
- package/src/core/components/shadcn/filters/filterBar.tsx +3 -3
- package/src/core/components/shadcn/index.ts +2 -1
- package/src/core/components/shadcn/input.tsx +10 -7
- package/src/core/components/shadcn/resizeable.tsx +4 -4
- package/src/core/components/shadcn/selectBox.tsx +87 -67
- package/src/core/components/shadcn/tabs.tsx +10 -3
- package/src/core/components/shadcn/textarea.tsx +21 -0
- package/src/core/hooks/index.ts +1 -0
- package/src/core/hooks/useScrollableSearch.tsx +193 -0
- package/src/features/agent/chat/ModernAgentConversation.tsx +109 -118
- package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.tsx +2 -22
- package/src/features/agent/chat/ModernAgentOutput/Header.tsx +1 -9
- package/src/features/agent/chat/ModernAgentOutput/InlineSlidingPlanPanel.tsx +39 -55
- package/src/features/agent/chat/ModernAgentOutput/PlanPanel.tsx +1 -0
- package/src/features/agent/chat/ModernAgentOutput/SlidingPlanPanel.tsx +8 -8
- package/src/features/agent/chat/ModernAgentOutput/WorkstreamTabs.tsx +8 -8
- package/src/features/facets/CollectionsFacetsNav.tsx +21 -0
- package/src/features/facets/InteractionsFacetsNav.tsx +13 -3
- package/src/features/facets/utils/SearchInterface.tsx +5 -1
- package/src/features/facets/utils/VTypeFacet.tsx +6 -2
- package/src/features/layout/GenericPageNavHeader.tsx +73 -10
- package/src/features/store/collections/BrowseCollectionView.tsx +4 -0
- package/src/features/store/collections/CreateCollection.tsx +3 -4
- package/src/features/store/collections/EditCollectionView.tsx +91 -85
- package/src/features/store/collections/SelectCollection.tsx +105 -49
- package/src/features/store/objects/DocumentSearchResults.tsx +117 -51
- package/src/features/store/objects/DocumentTable.tsx +14 -4
- package/src/features/store/objects/components/ContentOverview.tsx +208 -110
- package/src/features/store/objects/components/DocumentIcon.tsx +11 -12
- package/src/features/store/objects/components/SaveVersionConfirmModal.tsx +12 -2
- package/src/features/store/objects/layout/DocumentTableColumn.tsx +16 -1
- package/src/features/store/objects/layout/documentLayout.tsx +7 -5
- package/src/features/store/objects/layout/knowledge.md +10 -10
- package/src/features/store/objects/layout/renderers.tsx +39 -18
- package/src/features/store/objects/search/DocumentSearchContext.ts +6 -1
- package/src/features/store/objects/search/DocumentSearchProvider.tsx +1 -1
- package/src/features/store/objects/selection/ObjectsActionContext.tsx +3 -2
- package/src/features/store/objects/selection/SelectionActions.tsx +2 -0
- package/src/features/store/objects/selection/actions/AddToCollectionAction.tsx +8 -2
- package/src/features/store/objects/selection/actions/DeleteObjectsAction.tsx +22 -2
- package/src/features/store/objects/upload/DocumentUploadModal.tsx +18 -9
- package/src/features/store/objects/upload/useSmartFileUploadProcessing.ts +10 -7
- package/src/features/store/types/CreateOrUpdateTypeModal.tsx +1 -1
- package/src/router/HistoryNavigator.ts +33 -2
- package/src/router/Nav.tsx +4 -3
- package/src/widgets/form/Form.tsx +19 -43
- package/src/widgets/form/FormContext.ts +5 -2
- package/src/widgets/form/fields.tsx +8 -6
- package/src/widgets/form/inputs.tsx +1 -0
- package/lib/esm/core/components/Textarea.js +0 -15
- package/lib/esm/core/components/Textarea.js.map +0 -1
- package/lib/types/core/components/Textarea.d.ts +0 -8
- package/lib/types/core/components/Textarea.d.ts.map +0 -1
- package/src/core/components/Textarea.tsx +0 -25
|
@@ -16,19 +16,24 @@ import { useUserSession } from "@vertesia/ui/session";
|
|
|
16
16
|
* @returns A dropdown to select a collection.
|
|
17
17
|
**/
|
|
18
18
|
interface SelectCollectionProps {
|
|
19
|
-
value?: string
|
|
20
|
-
onChange: (collectionId: string | undefined, collection?: CollectionItem) => void;
|
|
19
|
+
value?: string | string[];
|
|
20
|
+
onChange: (collectionId: string | string[] | undefined, collection?: CollectionItem | CollectionItem[]) => void;
|
|
21
21
|
disabled?: boolean;
|
|
22
22
|
placeholder?: string;
|
|
23
23
|
searchPlaceholder?: string;
|
|
24
|
+
filterOut?: string[]; // collection IDs to filter out from the list
|
|
25
|
+
allowDynamic?: boolean;
|
|
26
|
+
multiple?: boolean;
|
|
24
27
|
}
|
|
25
|
-
|
|
28
|
+
|
|
29
|
+
export function SelectCollection({ onChange, value, disabled = false, placeholder = "Select a collection", searchPlaceholder = "Search collections", filterOut, allowDynamic = true, multiple = false }: SelectCollectionProps) {
|
|
26
30
|
const { client } = useUserSession();
|
|
27
31
|
|
|
28
32
|
const [searchQuery, setSearchQuery] = useState('');
|
|
29
33
|
const [isSearching, setIsSearching] = useState(false);
|
|
34
|
+
const [useServerSearch, setUseServerSearch] = useState(false);
|
|
30
35
|
|
|
31
|
-
// Debounce the search query to avoid excessive API calls
|
|
36
|
+
// Debounce the search query to avoid excessive API calls (only used for server-side search)
|
|
32
37
|
const debouncedSearchQuery = useDebounce(searchQuery, 300);
|
|
33
38
|
|
|
34
39
|
// Memoize the search function to prevent unnecessary re-renders
|
|
@@ -37,29 +42,63 @@ export function SelectCollection({ onChange, value, disabled = false, placeholde
|
|
|
37
42
|
const trimmedQuery = query.trim();
|
|
38
43
|
|
|
39
44
|
const collections = await client.store.collections.search({
|
|
40
|
-
dynamic: false,
|
|
41
|
-
name: trimmedQuery || undefined
|
|
45
|
+
dynamic: allowDynamic ? undefined : false,
|
|
46
|
+
name: useServerSearch ? (trimmedQuery || undefined) : undefined
|
|
42
47
|
});
|
|
43
48
|
|
|
44
49
|
setIsSearching(false);
|
|
50
|
+
|
|
51
|
+
// Check if we hit the maximum limit (1000 collections) - if so, enable server-side search
|
|
52
|
+
if (!useServerSearch && collections.length >= 1000) {
|
|
53
|
+
setUseServerSearch(true);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Filter out collections if filterOut is provided
|
|
57
|
+
if (filterOut && filterOut.length > 0) {
|
|
58
|
+
return collections.filter(col => !filterOut.includes(col.id));
|
|
59
|
+
}
|
|
45
60
|
return collections;
|
|
46
|
-
}, [client]);
|
|
61
|
+
}, [client, allowDynamic, filterOut, useServerSearch]);
|
|
47
62
|
|
|
48
|
-
// Fetch collections based on
|
|
63
|
+
// Fetch collections based on search mode
|
|
49
64
|
const { data: collections, error } = useFetch(
|
|
50
|
-
() => searchCollections(debouncedSearchQuery),
|
|
51
|
-
[debouncedSearchQuery, searchCollections]
|
|
65
|
+
() => searchCollections(useServerSearch ? debouncedSearchQuery : ''),
|
|
66
|
+
[useServerSearch ? debouncedSearchQuery : '', searchCollections]
|
|
52
67
|
);
|
|
53
68
|
|
|
54
|
-
// Memoize the selected collection
|
|
69
|
+
// Memoize the selected collection(s)
|
|
55
70
|
const selectedCollection = useMemo(() => {
|
|
56
|
-
|
|
57
|
-
|
|
71
|
+
if (!collections) return multiple ? [] : undefined;
|
|
72
|
+
|
|
73
|
+
if (multiple && Array.isArray(value)) {
|
|
74
|
+
return collections.filter((collection: CollectionItem) => value.includes(collection.id));
|
|
75
|
+
} else if (!multiple && typeof value === 'string') {
|
|
76
|
+
return collections.find((collection: CollectionItem) => collection.id === value);
|
|
77
|
+
}
|
|
78
|
+
return multiple ? [] : undefined;
|
|
79
|
+
}, [collections, value, multiple]);
|
|
58
80
|
|
|
59
81
|
// Handle collection selection
|
|
60
82
|
const handleSelect = useCallback((collection: CollectionItem) => {
|
|
61
|
-
|
|
62
|
-
|
|
83
|
+
if (multiple) {
|
|
84
|
+
const currentValues = Array.isArray(value) ? value : [];
|
|
85
|
+
const isSelected = currentValues.includes(collection.id);
|
|
86
|
+
|
|
87
|
+
if (isSelected) {
|
|
88
|
+
// Remove from selection
|
|
89
|
+
const newValues = currentValues.filter(id => id !== collection.id);
|
|
90
|
+
const newCollections = collections?.filter(c => newValues.includes(c.id)) || [];
|
|
91
|
+
onChange(newValues, newCollections);
|
|
92
|
+
} else {
|
|
93
|
+
// Add to selection
|
|
94
|
+
const newValues = [...currentValues, collection.id];
|
|
95
|
+
const newCollections = collections?.filter(c => newValues.includes(c.id)) || [];
|
|
96
|
+
onChange(newValues, newCollections);
|
|
97
|
+
}
|
|
98
|
+
} else {
|
|
99
|
+
onChange(collection.id, collection);
|
|
100
|
+
}
|
|
101
|
+
}, [onChange, value, collections, multiple]);
|
|
63
102
|
|
|
64
103
|
// Handle clear selection
|
|
65
104
|
const handleClear = useCallback(() => {
|
|
@@ -71,6 +110,24 @@ export function SelectCollection({ onChange, value, disabled = false, placeholde
|
|
|
71
110
|
setSearchQuery(query);
|
|
72
111
|
}, []);
|
|
73
112
|
|
|
113
|
+
const hasSearchQuery = searchQuery.trim().length > 0;
|
|
114
|
+
|
|
115
|
+
// Client-side filtering when not using server search
|
|
116
|
+
const filteredCollections = useMemo(() => {
|
|
117
|
+
if (!collections) return [];
|
|
118
|
+
|
|
119
|
+
// If using server search, collections are already filtered by the server
|
|
120
|
+
if (useServerSearch) return collections;
|
|
121
|
+
|
|
122
|
+
// Otherwise, do client-side filtering
|
|
123
|
+
if (!hasSearchQuery) return collections;
|
|
124
|
+
|
|
125
|
+
const queryLower = searchQuery.toLowerCase();
|
|
126
|
+
return collections.filter(col => col.name.toLowerCase().includes(queryLower));
|
|
127
|
+
}, [collections, useServerSearch, hasSearchQuery, searchQuery]);
|
|
128
|
+
|
|
129
|
+
const showClearOption = selectedCollection && hasSearchQuery;
|
|
130
|
+
|
|
74
131
|
// Show error state
|
|
75
132
|
if (error) {
|
|
76
133
|
return (
|
|
@@ -80,8 +137,18 @@ export function SelectCollection({ onChange, value, disabled = false, placeholde
|
|
|
80
137
|
);
|
|
81
138
|
}
|
|
82
139
|
|
|
83
|
-
|
|
84
|
-
const
|
|
140
|
+
// Get display text for the button
|
|
141
|
+
const getDisplayText = () => {
|
|
142
|
+
if (multiple && Array.isArray(selectedCollection) && selectedCollection.length > 0) {
|
|
143
|
+
if (selectedCollection.length === 1) {
|
|
144
|
+
return selectedCollection[0].name;
|
|
145
|
+
}
|
|
146
|
+
return `${selectedCollection.length} collections selected`;
|
|
147
|
+
} else if (!multiple && selectedCollection && !Array.isArray(selectedCollection)) {
|
|
148
|
+
return selectedCollection.name;
|
|
149
|
+
}
|
|
150
|
+
return placeholder;
|
|
151
|
+
};
|
|
85
152
|
|
|
86
153
|
return (
|
|
87
154
|
<Popover>
|
|
@@ -94,7 +161,7 @@ export function SelectCollection({ onChange, value, disabled = false, placeholde
|
|
|
94
161
|
disabled={disabled}
|
|
95
162
|
>
|
|
96
163
|
<span className="truncate flex-1 text-left min-w-0">
|
|
97
|
-
{
|
|
164
|
+
{getDisplayText()}
|
|
98
165
|
</span>
|
|
99
166
|
<ChevronsUpDown className="ml-2 h-4 w-4 shrink-0 opacity-50" />
|
|
100
167
|
</Button>
|
|
@@ -125,7 +192,7 @@ export function SelectCollection({ onChange, value, disabled = false, placeholde
|
|
|
125
192
|
</CommandEmpty>
|
|
126
193
|
<CommandGroup className="max-h-[300px] overflow-auto">
|
|
127
194
|
{
|
|
128
|
-
showClearOption && (
|
|
195
|
+
showClearOption && !multiple && (
|
|
129
196
|
<CommandItem
|
|
130
197
|
value="__clear__"
|
|
131
198
|
onSelect={handleClear}
|
|
@@ -136,40 +203,29 @@ export function SelectCollection({ onChange, value, disabled = false, placeholde
|
|
|
136
203
|
)
|
|
137
204
|
}
|
|
138
205
|
{
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
value
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
collection.description && (
|
|
155
|
-
<span className="text-sm text-muted-foreground truncate">
|
|
156
|
-
{collection.description}
|
|
157
|
-
</span>
|
|
158
|
-
)
|
|
159
|
-
}
|
|
160
|
-
</div>
|
|
161
|
-
<Check
|
|
162
|
-
className={cn(
|
|
163
|
-
"ml-2 h-4 w-4 shrink-0",
|
|
164
|
-
value === collection.id ? "opacity-100" : "opacity-0"
|
|
206
|
+
filteredCollections.map((collection: CollectionItem) => {
|
|
207
|
+
const isSelected = multiple && Array.isArray(value)
|
|
208
|
+
? value.includes(collection.id)
|
|
209
|
+
: value === collection.id;
|
|
210
|
+
|
|
211
|
+
return (
|
|
212
|
+
<CommandItem
|
|
213
|
+
key={collection.id}
|
|
214
|
+
value={collection.id}
|
|
215
|
+
onSelect={() => handleSelect(collection)}
|
|
216
|
+
className="flex items-center justify-between"
|
|
217
|
+
>
|
|
218
|
+
<span className="truncate">{collection.name}</span>
|
|
219
|
+
{isSelected && (
|
|
220
|
+
<Check className="ml-2 h-4 w-4 shrink-0" />
|
|
165
221
|
)}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
)
|
|
222
|
+
</CommandItem>
|
|
223
|
+
);
|
|
224
|
+
})
|
|
169
225
|
}
|
|
170
226
|
</CommandGroup>
|
|
171
227
|
</Command>
|
|
172
228
|
</PopoverContent>
|
|
173
229
|
</Popover>
|
|
174
230
|
);
|
|
175
|
-
}
|
|
231
|
+
}
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
} from '@vertesia/ui/core';
|
|
7
7
|
import { useNavigate } from "@vertesia/ui/router";
|
|
8
8
|
import { TypeRegistry, useUserSession } from '@vertesia/ui/session';
|
|
9
|
-
import { Download, RefreshCw,
|
|
9
|
+
import { Download, RefreshCw, ExternalLink } from 'lucide-react';
|
|
10
10
|
import { useDocumentFilterGroups, useDocumentFilterHandler } from "../../facets/DocumentsFacetsNav";
|
|
11
11
|
import { VectorSearchWidget } from './components/VectorSearchWidget';
|
|
12
12
|
import { ContentDispositionButton } from './components/ContentDispositionButton';
|
|
@@ -18,8 +18,8 @@ import { ContentOverview } from './components/ContentOverview';
|
|
|
18
18
|
import { useDownloadDocument } from './components/useDownloadObject';
|
|
19
19
|
|
|
20
20
|
const defaultLayout: ColumnLayout[] = [
|
|
21
|
-
{ name: "ID", field: "id", type: "
|
|
22
|
-
{ name: "Name", field: ".", type: "
|
|
21
|
+
{ name: "ID", field: "id", type: "objectId?slice=-7" },
|
|
22
|
+
{ name: "Name", field: ".", type: "objectName" },
|
|
23
23
|
{ name: "Type", field: "type.name", type: "string" },
|
|
24
24
|
{ name: "Status", field: "status", type: "string" },
|
|
25
25
|
{ name: "Updated At", field: "updated_at", type: "date" },
|
|
@@ -90,7 +90,7 @@ export function DocumentSearchResults({ layout, onUpload, allowFilter = true, al
|
|
|
90
90
|
const [isReady, setIsReady] = useState(false);
|
|
91
91
|
const [selectedObject, setSelectedObject] = useState<ContentObjectItem | null>(null);
|
|
92
92
|
const { typeRegistry } = useUserSession();
|
|
93
|
-
const { search, isLoading, error, objects } = useWatchDocumentSearchResult();
|
|
93
|
+
const { search, isLoading, error, objects, hasMore } = useWatchDocumentSearchResult();
|
|
94
94
|
const [actualLayout, setActualLayout] = useState<ColumnLayout[]>(
|
|
95
95
|
typeRegistry ? layout || getTableLayout(typeRegistry, search.query.type) : defaultLayout,
|
|
96
96
|
);
|
|
@@ -105,6 +105,7 @@ export function DocumentSearchResults({ layout, onUpload, allowFilter = true, al
|
|
|
105
105
|
// Trigger initial search when component mounts
|
|
106
106
|
useEffect(() => {
|
|
107
107
|
if (!isReady && objects.length === 0) {
|
|
108
|
+
setLoaded(0);
|
|
108
109
|
// Manually set loading state to show spinner during initial load
|
|
109
110
|
search._updateRunningState(true);
|
|
110
111
|
search.search().then(() => {
|
|
@@ -116,6 +117,12 @@ export function DocumentSearchResults({ layout, onUpload, allowFilter = true, al
|
|
|
116
117
|
}
|
|
117
118
|
}, []);
|
|
118
119
|
|
|
120
|
+
useEffect(() => {
|
|
121
|
+
if (objects.length < loaded) {
|
|
122
|
+
setLoaded(objects.length);
|
|
123
|
+
}
|
|
124
|
+
}, [objects.length, loaded]);
|
|
125
|
+
|
|
119
126
|
useIntersectionObserver(loadMoreRef, () => {
|
|
120
127
|
if (isReady && objects.length > 0 && objects.length != loaded) {
|
|
121
128
|
setIsReady(false);
|
|
@@ -197,75 +204,134 @@ export function DocumentSearchResults({ layout, onUpload, allowFilter = true, al
|
|
|
197
204
|
} else {
|
|
198
205
|
url.searchParams.delete('filters');
|
|
199
206
|
}
|
|
200
|
-
window.history.replaceState({}, '', url.toString());
|
|
207
|
+
window.history.replaceState(window.history.state || {}, '', url.toString());
|
|
201
208
|
}
|
|
202
209
|
} catch (error) {
|
|
203
210
|
console.error("Failed to clean start/end filters from URL:", error);
|
|
204
211
|
}
|
|
205
212
|
}
|
|
206
213
|
|
|
214
|
+
const navigate = useNavigate();
|
|
215
|
+
const onRowClick = (object: ContentObjectItem) => {
|
|
216
|
+
navigate(`/objects/${object.id}`);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
const previewObject = (objectId: string) => {
|
|
220
|
+
const obj = objects.find(o => o.id === objectId) || null;
|
|
221
|
+
setSelectedObject(obj);
|
|
222
|
+
}
|
|
223
|
+
|
|
207
224
|
return (
|
|
208
225
|
<div className="flex flex-col gap-y-2">
|
|
209
226
|
<OverviewDrawer object={selectedObject} onClose={() => setSelectedObject(null)} />
|
|
210
227
|
{
|
|
211
228
|
error && <ErrorBox title="Error">{error.message}</ErrorBox>
|
|
212
229
|
}
|
|
213
|
-
<
|
|
214
|
-
{
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
230
|
+
<Toolsbar
|
|
231
|
+
isLoading={isLoading}
|
|
232
|
+
refreshTrigger={refreshTrigger}
|
|
233
|
+
allowFilter={allowFilter}
|
|
234
|
+
allowSearch={allowSearch}
|
|
235
|
+
filterGroups={filterGroups}
|
|
236
|
+
filters={filters}
|
|
237
|
+
handleFilterChange={handleFilterChange}
|
|
238
|
+
handleVectorSearch={handleVectorSearch}
|
|
239
|
+
handleRefetch={handleRefetch}
|
|
240
|
+
setIsGridView={setIsGridView}
|
|
241
|
+
/>
|
|
242
|
+
<DocumentTable
|
|
243
|
+
objects={objects}
|
|
244
|
+
isLoading={!objects.length && isLoading}
|
|
245
|
+
layout={actualLayout}
|
|
246
|
+
onRowClick={onRowClick}
|
|
247
|
+
previewObject={previewObject}
|
|
248
|
+
selectedObject={selectedObject}
|
|
249
|
+
onUpload={onUpload}
|
|
250
|
+
isGridView={isGridView}
|
|
251
|
+
collectionId={searchContext.collectionId} // Pass the collection ID from context
|
|
252
|
+
/>
|
|
253
|
+
{hasMore ? (
|
|
254
|
+
<div ref={loadMoreRef} className="w-full flex justify-center" >
|
|
255
|
+
<Spinner size='xl' />
|
|
256
|
+
</div>
|
|
257
|
+
) : (
|
|
258
|
+
<div className="text-muted text-center text-sm py-1">
|
|
259
|
+
{`All ${objects.length} objects loaded.`}
|
|
260
|
+
</div>
|
|
261
|
+
)}
|
|
262
|
+
</div>
|
|
263
|
+
);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
interface ToolsbarProps {
|
|
267
|
+
isLoading: boolean;
|
|
268
|
+
refreshTrigger: number;
|
|
269
|
+
allowFilter: boolean;
|
|
270
|
+
allowSearch: boolean;
|
|
271
|
+
filterGroups: ReturnType<typeof useDocumentFilterGroups>;
|
|
272
|
+
filters: BaseFilter[];
|
|
273
|
+
handleFilterChange: React.Dispatch<React.SetStateAction<BaseFilter[]>>;
|
|
274
|
+
handleVectorSearch: (query?: ComplexSearchQuery) => void;
|
|
275
|
+
handleRefetch: () => void;
|
|
276
|
+
setIsGridView: React.Dispatch<React.SetStateAction<boolean>>;
|
|
277
|
+
}
|
|
278
|
+
function Toolsbar(props: ToolsbarProps) {
|
|
279
|
+
const {
|
|
280
|
+
isLoading,
|
|
281
|
+
refreshTrigger,
|
|
282
|
+
allowFilter,
|
|
283
|
+
allowSearch,
|
|
284
|
+
filterGroups,
|
|
285
|
+
filters,
|
|
286
|
+
handleFilterChange,
|
|
287
|
+
handleVectorSearch,
|
|
288
|
+
handleRefetch,
|
|
289
|
+
setIsGridView
|
|
290
|
+
} = props;
|
|
291
|
+
|
|
292
|
+
return (
|
|
293
|
+
<div className="sticky top-0 z-10 bg-background py-2">
|
|
294
|
+
{
|
|
295
|
+
allowFilter && (
|
|
296
|
+
<FilterProvider
|
|
297
|
+
filterGroups={filterGroups}
|
|
298
|
+
filters={filters}
|
|
299
|
+
setFilters={handleFilterChange}
|
|
300
|
+
>
|
|
242
301
|
<div className="flex flex-row gap-4 items-center justify-between w-full">
|
|
243
302
|
<div className="flex gap-2 items-center w-2/3">
|
|
244
303
|
{
|
|
245
|
-
allowSearch && <VectorSearchWidget onChange={handleVectorSearch} isLoading={isLoading} refresh={refreshTrigger} />
|
|
304
|
+
allowSearch && <VectorSearchWidget onChange={handleVectorSearch} isLoading={isLoading} refresh={refreshTrigger} className="w-full" />
|
|
246
305
|
}
|
|
306
|
+
<FilterBtn />
|
|
247
307
|
</div>
|
|
248
308
|
<div className="flex gap-1 items-center">
|
|
249
309
|
<Button variant="outline" onClick={handleRefetch} alt="Refresh"><RefreshCw size={16} /></Button>
|
|
250
310
|
<ContentDispositionButton onUpdate={setIsGridView} />
|
|
251
311
|
</div>
|
|
252
312
|
</div>
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
onRowClick={setSelectedObject}
|
|
261
|
-
onUpload={onUpload}
|
|
262
|
-
isGridView={isGridView}
|
|
263
|
-
collectionId={searchContext.collectionId} // Pass the collection ID from context
|
|
264
|
-
/>
|
|
313
|
+
<div className="flex gap-2 items-center pt-2">
|
|
314
|
+
<FilterBar />
|
|
315
|
+
<FilterClear />
|
|
316
|
+
</div>
|
|
317
|
+
</FilterProvider>
|
|
318
|
+
)
|
|
319
|
+
}
|
|
265
320
|
{
|
|
266
|
-
|
|
321
|
+
!allowFilter && (
|
|
322
|
+
<div className="flex flex-row gap-4 items-center justify-between w-full">
|
|
323
|
+
<div className="flex gap-2 items-center w-2/3">
|
|
324
|
+
{
|
|
325
|
+
allowSearch && <VectorSearchWidget onChange={handleVectorSearch} isLoading={isLoading} refresh={refreshTrigger} />
|
|
326
|
+
}
|
|
327
|
+
</div>
|
|
328
|
+
<div className="flex gap-1 items-center">
|
|
329
|
+
<Button variant="outline" onClick={handleRefetch} alt="Refresh"><RefreshCw size={16} /></Button>
|
|
330
|
+
<ContentDispositionButton onUpdate={setIsGridView} />
|
|
331
|
+
</div>
|
|
332
|
+
</div>
|
|
333
|
+
)
|
|
267
334
|
}
|
|
268
|
-
<div ref={loadMoreRef} />
|
|
269
335
|
</div>
|
|
270
336
|
);
|
|
271
337
|
}
|
|
@@ -284,7 +350,7 @@ function OverviewDrawer({ object, onClose }: OverviewDrawerProps) {
|
|
|
284
350
|
<SidePanel title={object.properties?.title || object.name} isOpen={true} onClose={onClose}>
|
|
285
351
|
<div className="flex items-center gap-x-2">
|
|
286
352
|
<Button variant="ghost" size="sm" title="Open Object" onClick={() => navigate(`/objects/${object.id}`)}>
|
|
287
|
-
<
|
|
353
|
+
<ExternalLink className="size-4" />
|
|
288
354
|
</Button>
|
|
289
355
|
{object.content?.source && (
|
|
290
356
|
<Button variant="ghost" size="sm" title="Download" onClick={onDownload}>
|
|
@@ -294,7 +360,7 @@ function OverviewDrawer({ object, onClose }: OverviewDrawerProps) {
|
|
|
294
360
|
</div>
|
|
295
361
|
<Divider className="my-2" />
|
|
296
362
|
<div className="pt-2">
|
|
297
|
-
<ContentOverview object={object as
|
|
363
|
+
<ContentOverview key={object.id} object={object as ContentObject} loadText />
|
|
298
364
|
</div>
|
|
299
365
|
</SidePanel>
|
|
300
366
|
) : null;
|
|
@@ -10,8 +10,8 @@ import { useDocumentSearch } from "./search/DocumentSearchContext";
|
|
|
10
10
|
import { FileWithMetadata, DocumentUploadModal, useSmartFileUploadProcessing } from "./upload";
|
|
11
11
|
|
|
12
12
|
const defaultLayout: ExtendedColumnLayout[] = [
|
|
13
|
-
{ name: "ID", field: "id", type: "
|
|
14
|
-
{ name: "Name", field: ".", type: "
|
|
13
|
+
{ name: "ID", field: "id", type: "objectId?slice=-7" },
|
|
14
|
+
{ name: "Name", field: ".", type: "objectName" },
|
|
15
15
|
{ name: "Type", field: "type.name", type: "string" },
|
|
16
16
|
{ name: "Status", field: "status", type: "string" },
|
|
17
17
|
{ name: "Updated At", field: "updated_at", type: "date" },
|
|
@@ -19,6 +19,8 @@ const defaultLayout: ExtendedColumnLayout[] = [
|
|
|
19
19
|
|
|
20
20
|
interface DocumentTableProps extends DocumentTableImplProps {
|
|
21
21
|
isGridView?: boolean;
|
|
22
|
+
previewObject?: (objectId: string) => void;
|
|
23
|
+
selectedObject?: ContentObjectItem | null;
|
|
22
24
|
onUpload?: (files: File[], type: string | null, collectionId?: string) => Promise<unknown>; // if defined, accept drag drop to upload
|
|
23
25
|
collectionId?: string; // Important: Add collection ID to ensure uploads go to the right collection
|
|
24
26
|
}
|
|
@@ -303,6 +305,8 @@ interface DocumentTableImplProps {
|
|
|
303
305
|
onSelectionChange?: (selection: DocumentSelection) => void;
|
|
304
306
|
highlightRow?: (item: ContentObjectItem) => boolean;
|
|
305
307
|
rowActions?: (item: ContentObjectItem) => React.ReactNode[];
|
|
308
|
+
previewObject?: (objectId: string) => void;
|
|
309
|
+
selectedObject?: ContentObjectItem | null;
|
|
306
310
|
isGridView?: boolean;
|
|
307
311
|
}
|
|
308
312
|
function DocumentTableImpl({
|
|
@@ -311,6 +315,8 @@ function DocumentTableImpl({
|
|
|
311
315
|
isLoading,
|
|
312
316
|
onRowClick,
|
|
313
317
|
onSelectionChange,
|
|
318
|
+
previewObject,
|
|
319
|
+
selectedObject,
|
|
314
320
|
isGridView,
|
|
315
321
|
}: DocumentTableImplProps) {
|
|
316
322
|
const selection = useOptionalDocumentSelection();
|
|
@@ -363,8 +369,8 @@ function DocumentTableImpl({
|
|
|
363
369
|
const columns = useMemo(() => {
|
|
364
370
|
// avoid rendering empty layouts
|
|
365
371
|
const actualLayout = layout.length > 0 ? layout : defaultLayout;
|
|
366
|
-
return actualLayout.map((col) => new DocumentTableColumn(col));
|
|
367
|
-
}, [layout]);
|
|
372
|
+
return actualLayout.map((col) => new DocumentTableColumn(col, previewObject));
|
|
373
|
+
}, [layout, previewObject]);
|
|
368
374
|
|
|
369
375
|
return isGridView ? (
|
|
370
376
|
<DocumentGridView
|
|
@@ -372,6 +378,8 @@ function DocumentTableImpl({
|
|
|
372
378
|
isLoading={isLoading}
|
|
373
379
|
columns={columns}
|
|
374
380
|
onRowClick={onRowClick}
|
|
381
|
+
previewObject={previewObject}
|
|
382
|
+
selectedObject={selectedObject}
|
|
375
383
|
selection={selection}
|
|
376
384
|
toggleAll={toggleAll}
|
|
377
385
|
onSelectionChange={_onSelectionChange}
|
|
@@ -382,6 +390,8 @@ function DocumentTableImpl({
|
|
|
382
390
|
isLoading={isLoading}
|
|
383
391
|
columns={columns}
|
|
384
392
|
onRowClick={onRowClick}
|
|
393
|
+
previewObject={previewObject}
|
|
394
|
+
selectedObject={selectedObject}
|
|
385
395
|
selection={selection}
|
|
386
396
|
toggleAll={toggleAll}
|
|
387
397
|
onSelectionChange={_onSelectionChange}
|