@vertesia/ui 0.66.0 → 0.68.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.
- package/lib/esm/core/components/Badge.js +1 -1
- package/lib/esm/core/components/Badge.js.map +1 -1
- package/lib/esm/core/components/FormItem.js +2 -2
- package/lib/esm/core/components/FormItem.js.map +1 -1
- package/lib/esm/core/components/InputList.js +2 -2
- package/lib/esm/core/components/InputList.js.map +1 -1
- package/lib/esm/core/components/shadcn/checkbox.js +1 -1
- package/lib/esm/core/components/shadcn/checkbox.js.map +1 -1
- package/lib/esm/core/components/shadcn/command.js +1 -1
- package/lib/esm/core/components/shadcn/command.js.map +1 -1
- package/lib/esm/core/components/shadcn/dialog.js +6 -6
- package/lib/esm/core/components/shadcn/dialog.js.map +1 -1
- package/lib/esm/core/components/shadcn/filters/DynamicLabel.js.map +1 -1
- package/lib/esm/core/components/shadcn/filters/comboBox/DateCombobox.js +129 -0
- package/lib/esm/core/components/shadcn/filters/comboBox/DateCombobox.js.map +1 -0
- package/lib/esm/core/components/shadcn/filters/comboBox/SelectCombobox.js +46 -0
- package/lib/esm/core/components/shadcn/filters/comboBox/SelectCombobox.js.map +1 -0
- package/lib/esm/core/components/shadcn/filters/comboBox/StringListCombobox.js +23 -0
- package/lib/esm/core/components/shadcn/filters/comboBox/StringListCombobox.js.map +1 -0
- package/lib/esm/core/components/shadcn/filters/comboBox/TextCombobox.js +28 -0
- package/lib/esm/core/components/shadcn/filters/comboBox/TextCombobox.js.map +1 -0
- package/lib/esm/core/components/shadcn/filters/comboBox/comboBox.js +5 -0
- package/lib/esm/core/components/shadcn/filters/comboBox/comboBox.js.map +1 -0
- package/lib/esm/core/components/shadcn/filters/filter/SelectFilter.js +101 -0
- package/lib/esm/core/components/shadcn/filters/filter/SelectFilter.js.map +1 -0
- package/lib/esm/core/components/shadcn/filters/{stringListFilter.js → filter/StringListFilter.js} +3 -3
- package/lib/esm/core/components/shadcn/filters/filter/StringListFilter.js.map +1 -0
- package/lib/esm/core/components/shadcn/filters/{textFilter.js → filter/TextFilter.js} +4 -4
- package/lib/esm/core/components/shadcn/filters/filter/TextFilter.js.map +1 -0
- package/lib/esm/core/components/shadcn/filters/filter/dateFilter.js +161 -0
- package/lib/esm/core/components/shadcn/filters/filter/dateFilter.js.map +1 -0
- package/lib/esm/core/components/shadcn/filters/filter-styles.js +88 -0
- package/lib/esm/core/components/shadcn/filters/filter-styles.js.map +1 -0
- package/lib/esm/core/components/shadcn/filters/filterBar.js +128 -87
- package/lib/esm/core/components/shadcn/filters/filterBar.js.map +1 -1
- package/lib/esm/core/components/shadcn/filters/filters.js +7 -6
- package/lib/esm/core/components/shadcn/filters/filters.js.map +1 -1
- package/lib/esm/core/components/shadcn/filters/index.js +1 -1
- package/lib/esm/core/components/shadcn/filters/index.js.map +1 -1
- package/lib/esm/core/components/shadcn/filters/types.js.map +1 -1
- package/lib/esm/core/components/toast/NotificationPanel.js +24 -18
- package/lib/esm/core/components/toast/NotificationPanel.js.map +1 -1
- package/lib/esm/features/agent/PayloadBuilder.js +47 -27
- package/lib/esm/features/agent/PayloadBuilder.js.map +1 -1
- package/lib/esm/features/agent/chat/ModernAgentConversation.js +10 -4
- package/lib/esm/features/agent/chat/ModernAgentConversation.js.map +1 -1
- package/lib/esm/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js +7 -6
- package/lib/esm/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js.map +1 -1
- package/lib/esm/features/agent/chat/ModernAgentOutput/MessageItem.js +13 -2
- package/lib/esm/features/agent/chat/ModernAgentOutput/MessageItem.js.map +1 -1
- package/lib/esm/features/agent/chat/ModernAgentOutput/SlidingMessages.js +2 -1
- package/lib/esm/features/agent/chat/ModernAgentOutput/SlidingMessages.js.map +1 -1
- package/lib/esm/features/agent/chat/ModernAgentOutput/utils.js +10 -4
- package/lib/esm/features/agent/chat/ModernAgentOutput/utils.js.map +1 -1
- package/lib/esm/features/facets/DocumentsFacetsNav.js +133 -0
- package/lib/esm/features/facets/DocumentsFacetsNav.js.map +1 -0
- package/lib/esm/features/facets/RunsFacetsNav.js +125 -0
- package/lib/esm/features/facets/RunsFacetsNav.js.map +1 -0
- package/lib/esm/features/facets/VFacetsNav.js +4 -113
- package/lib/esm/features/facets/VFacetsNav.js.map +1 -1
- package/lib/esm/features/facets/VStringFacet.js +6 -4
- package/lib/esm/features/facets/VStringFacet.js.map +1 -1
- package/lib/esm/features/facets/VTypeFacet.js +4 -5
- package/lib/esm/features/facets/VTypeFacet.js.map +1 -1
- package/lib/esm/features/facets/VUserFacet.js +1 -1
- package/lib/esm/features/facets/VUserFacet.js.map +1 -1
- package/lib/esm/features/facets/WorkflowExecutionsFacetsNav.js +98 -0
- package/lib/esm/features/facets/WorkflowExecutionsFacetsNav.js.map +1 -0
- package/lib/esm/features/facets/index.js +3 -2
- package/lib/esm/features/facets/index.js.map +1 -1
- package/lib/esm/features/store/collections/CollectionsTable.js +1 -1
- package/lib/esm/features/store/collections/CollectionsTable.js.map +1 -1
- package/lib/esm/features/store/collections/CreateCollection.js +10 -9
- package/lib/esm/features/store/collections/CreateCollection.js.map +1 -1
- package/lib/esm/features/store/collections/EditCollectionView.js +10 -9
- package/lib/esm/features/store/collections/EditCollectionView.js.map +1 -1
- package/lib/esm/features/store/collections/SelectCollection.js +1 -1
- package/lib/esm/features/store/collections/SelectCollection.js.map +1 -1
- package/lib/esm/features/store/objects/DocumentPreviewPanel.js +0 -1
- package/lib/esm/features/store/objects/DocumentPreviewPanel.js.map +1 -1
- package/lib/esm/features/store/objects/DocumentSearchResults.js +37 -2
- package/lib/esm/features/store/objects/DocumentSearchResults.js.map +1 -1
- package/lib/esm/features/store/objects/components/ContentOverview.js +5 -6
- package/lib/esm/features/store/objects/components/ContentOverview.js.map +1 -1
- package/lib/esm/features/store/objects/components/SelectDocument.js +2 -2
- package/lib/esm/features/store/objects/components/SelectDocument.js.map +1 -1
- package/lib/esm/features/store/objects/components/VectorSearchWidget.js +1 -1
- package/lib/esm/features/store/objects/components/VectorSearchWidget.js.map +1 -1
- package/lib/esm/features/store/objects/selection/actions/AddToCollectionAction.js +16 -4
- package/lib/esm/features/store/objects/selection/actions/AddToCollectionAction.js.map +1 -1
- package/lib/esm/features/store/objects/upload/DocumentUploadModal.js +72 -37
- package/lib/esm/features/store/objects/upload/DocumentUploadModal.js.map +1 -1
- package/lib/esm/features/store/types/ObjectSchemaEditor.js +15 -0
- package/lib/esm/features/store/types/ObjectSchemaEditor.js.map +1 -1
- package/lib/esm/features/user/UserInfo.js +8 -8
- package/lib/esm/features/user/UserInfo.js.map +1 -1
- package/lib/esm/layout/FullHeightLayout.js +2 -4
- package/lib/esm/layout/FullHeightLayout.js.map +1 -1
- package/lib/esm/router/HistoryNavigator.js +2 -2
- package/lib/esm/router/HistoryNavigator.js.map +1 -1
- package/lib/esm/shell/SplashScreen.js +19 -0
- package/lib/esm/shell/SplashScreen.js.map +1 -0
- package/lib/esm/shell/VertesiaShell.js +10 -0
- package/lib/esm/shell/VertesiaShell.js.map +1 -0
- package/lib/esm/shell/index.js +7 -0
- package/lib/esm/shell/index.js.map +1 -0
- package/lib/esm/shell/login/EnterpriseSigninButton.js +81 -0
- package/lib/esm/shell/login/EnterpriseSigninButton.js.map +1 -0
- package/lib/esm/shell/login/GitHubSignInButton.js +24 -0
- package/lib/esm/shell/login/GitHubSignInButton.js.map +1 -0
- package/lib/esm/shell/login/GoogleSignInButton.js +25 -0
- package/lib/esm/shell/login/GoogleSignInButton.js.map +1 -0
- package/lib/esm/shell/login/InviteAcceptModal.js +45 -0
- package/lib/esm/shell/login/InviteAcceptModal.js.map +1 -0
- package/lib/esm/shell/login/MicrosoftSigninButton.js +19 -0
- package/lib/esm/shell/login/MicrosoftSigninButton.js.map +1 -0
- package/lib/esm/shell/login/PreviewIcon.js +23 -0
- package/lib/esm/shell/login/PreviewIcon.js.map +1 -0
- package/lib/esm/shell/login/SignInModal.js +9 -0
- package/lib/esm/shell/login/SignInModal.js.map +1 -0
- package/lib/esm/shell/login/SigninScreen.js +64 -0
- package/lib/esm/shell/login/SigninScreen.js.map +1 -0
- package/lib/esm/shell/login/SignupForm.js +91 -0
- package/lib/esm/shell/login/SignupForm.js.map +1 -0
- package/lib/esm/shell/login/TerminalLogin.js +179 -0
- package/lib/esm/shell/login/TerminalLogin.js.map +1 -0
- package/lib/esm/shell/login/UserInfo.js +40 -0
- package/lib/esm/shell/login/UserInfo.js.map +1 -0
- package/lib/esm/shell/login/UserSessionMenu.js +31 -0
- package/lib/esm/shell/login/UserSessionMenu.js.map +1 -0
- package/lib/esm/shell/utils.js +6 -0
- package/lib/esm/shell/utils.js.map +1 -0
- package/lib/esm/widgets/SvgIcon.js +36 -0
- package/lib/esm/widgets/SvgIcon.js.map +1 -0
- package/lib/esm/widgets/index.js +7 -6
- package/lib/esm/widgets/index.js.map +1 -1
- package/lib/esm/widgets/upload/UploadSummary.js +1 -1
- package/lib/esm/widgets/upload/UploadSummary.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/types/core/components/FormItem.d.ts +2 -1
- package/lib/types/core/components/shadcn/dialog.d.ts +2 -1
- package/lib/types/core/components/shadcn/filters/DynamicLabel.d.ts +1 -1
- package/lib/types/core/components/shadcn/filters/comboBox/DateCombobox.d.ts +5 -0
- package/lib/types/core/components/shadcn/filters/comboBox/SelectCombobox.d.ts +8 -0
- package/lib/types/core/components/shadcn/filters/comboBox/StringListCombobox.d.ts +5 -0
- package/lib/types/core/components/shadcn/filters/comboBox/TextCombobox.d.ts +5 -0
- package/lib/types/core/components/shadcn/filters/comboBox/comboBox.d.ts +4 -0
- package/lib/types/core/components/shadcn/filters/{selectFilter.d.ts → filter/SelectFilter.d.ts} +2 -2
- package/lib/types/core/components/shadcn/filters/{stringListFilter.d.ts → filter/StringListFilter.d.ts} +1 -1
- package/lib/types/core/components/shadcn/filters/{textFilter.d.ts → filter/TextFilter.d.ts} +1 -1
- package/lib/types/core/components/shadcn/filters/{dateFilter.d.ts → filter/dateFilter.d.ts} +1 -1
- package/lib/types/core/components/shadcn/filters/filter-styles.d.ts +1 -0
- package/lib/types/core/components/shadcn/filters/filterBar.d.ts +14 -4
- package/lib/types/core/components/shadcn/filters/index.d.ts +1 -1
- package/lib/types/core/components/shadcn/filters/types.d.ts +2 -0
- package/lib/types/features/agent/PayloadBuilder.d.ts +17 -8
- package/lib/types/features/agent/chat/ModernAgentOutput/utils.d.ts +2 -1
- package/lib/types/features/facets/DocumentsFacetsNav.d.ts +16 -0
- package/lib/types/features/facets/RunsFacetsNav.d.ts +18 -0
- package/lib/types/features/facets/VFacetsNav.d.ts +1 -1
- package/lib/types/features/facets/VStringFacet.d.ts +6 -2
- package/lib/types/features/facets/VTypeFacet.d.ts +3 -1
- package/lib/types/features/facets/WorkflowExecutionsFacetsNav.d.ts +13 -0
- package/lib/types/features/facets/index.d.ts +3 -2
- package/lib/types/shell/SplashScreen.d.ts +4 -0
- package/lib/types/shell/VertesiaShell.d.ts +7 -0
- package/lib/types/shell/index.d.ts +6 -0
- package/lib/types/shell/login/EnterpriseSigninButton.d.ts +5 -0
- package/lib/types/shell/login/GitHubSignInButton.d.ts +5 -0
- package/lib/types/shell/login/GoogleSignInButton.d.ts +5 -0
- package/lib/types/shell/login/InviteAcceptModal.d.ts +1 -0
- package/lib/types/shell/login/MicrosoftSigninButton.d.ts +5 -0
- package/lib/types/shell/login/PreviewIcon.d.ts +5 -0
- package/lib/types/shell/login/SignInModal.d.ts +6 -0
- package/lib/types/shell/login/SigninScreen.d.ts +8 -0
- package/lib/types/shell/login/SignupForm.d.ts +7 -0
- package/lib/types/shell/login/TerminalLogin.d.ts +1 -0
- package/lib/types/shell/login/UserInfo.d.ts +5 -0
- package/lib/types/shell/login/UserSessionMenu.d.ts +8 -0
- package/lib/types/shell/utils.d.ts +1 -0
- package/lib/types/widgets/SvgIcon.d.ts +6 -0
- package/lib/types/widgets/index.d.ts +7 -6
- package/lib/vertesia-ui-core.js +1 -1
- package/lib/vertesia-ui-core.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-layout.js +1 -1
- package/lib/vertesia-ui-layout.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-shell.js +2 -0
- package/lib/vertesia-ui-shell.js.map +1 -0
- package/lib/vertesia-ui-widgets.js +1 -1
- package/lib/vertesia-ui-widgets.js.map +1 -1
- package/package.json +14 -6
- package/src/core/components/Badge.tsx +12 -8
- package/src/core/components/FormItem.tsx +4 -3
- package/src/core/components/InputList.tsx +21 -17
- package/src/core/components/shadcn/checkbox.tsx +2 -2
- package/src/core/components/shadcn/command.tsx +1 -1
- package/src/core/components/shadcn/dialog.tsx +18 -9
- package/src/core/components/shadcn/filters/DynamicLabel.tsx +1 -2
- package/src/core/components/shadcn/filters/comboBox/DateCombobox.tsx +211 -0
- package/src/core/components/shadcn/filters/{comboBox.tsx → comboBox/SelectCombobox.tsx} +8 -192
- package/src/core/components/shadcn/filters/comboBox/StringListCombobox.tsx +76 -0
- package/src/core/components/shadcn/filters/comboBox/TextCombobox.tsx +81 -0
- package/src/core/components/shadcn/filters/comboBox/comboBox.tsx +4 -0
- package/src/core/components/shadcn/filters/filter/SelectFilter.tsx +161 -0
- package/src/core/components/shadcn/filters/{stringListFilter.tsx → filter/StringListFilter.tsx} +7 -7
- package/src/core/components/shadcn/filters/{textFilter.tsx → filter/TextFilter.tsx} +17 -11
- package/src/core/components/shadcn/filters/filter/dateFilter.tsx +256 -0
- package/src/core/components/shadcn/filters/filter-styles.ts +87 -0
- package/src/core/components/shadcn/filters/filterBar.tsx +208 -152
- package/src/core/components/shadcn/filters/filters.tsx +7 -5
- package/src/core/components/shadcn/filters/index.ts +1 -1
- package/src/core/components/shadcn/filters/types.ts +2 -0
- package/src/core/components/toast/NotificationPanel.tsx +38 -22
- package/src/features/agent/PayloadBuilder.tsx +56 -31
- package/src/features/agent/chat/ModernAgentConversation.tsx +645 -639
- package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.tsx +7 -6
- package/src/features/agent/chat/ModernAgentOutput/MessageItem.tsx +13 -2
- package/src/features/agent/chat/ModernAgentOutput/SlidingMessages.tsx +2 -1
- package/src/features/agent/chat/ModernAgentOutput/utils.ts +12 -4
- package/src/features/facets/DocumentsFacetsNav.tsx +171 -0
- package/src/features/facets/RunsFacetsNav.tsx +166 -0
- package/src/features/facets/VFacetsNav.tsx +10 -126
- package/src/features/facets/VStringFacet.tsx +10 -4
- package/src/features/facets/VTypeFacet.tsx +6 -5
- package/src/features/facets/VUserFacet.tsx +5 -3
- package/src/features/facets/WorkflowExecutionsFacetsNav.tsx +132 -0
- package/src/features/facets/index.ts +5 -2
- package/src/features/store/collections/CollectionsTable.tsx +3 -2
- package/src/features/store/collections/CreateCollection.tsx +17 -15
- package/src/features/store/collections/EditCollectionView.tsx +19 -16
- package/src/features/store/collections/SelectCollection.tsx +1 -1
- package/src/features/store/objects/DocumentPreviewPanel.tsx +0 -1
- package/src/features/store/objects/DocumentSearchResults.tsx +80 -11
- package/src/features/store/objects/components/ContentOverview.tsx +7 -7
- package/src/features/store/objects/components/SelectDocument.tsx +2 -2
- package/src/features/store/objects/components/VectorSearchWidget.tsx +2 -2
- package/src/features/store/objects/selection/actions/AddToCollectionAction.tsx +40 -19
- package/src/features/store/objects/upload/DocumentUploadModal.tsx +160 -214
- package/src/features/store/types/ObjectSchemaEditor.tsx +15 -0
- package/src/features/user/UserInfo.tsx +17 -14
- package/src/layout/FullHeightLayout.tsx +2 -2
- package/src/router/HistoryNavigator.ts +2 -2
- package/src/shell/SplashScreen.tsx +41 -0
- package/src/shell/VertesiaShell.tsx +27 -0
- package/src/shell/index.tsx +6 -0
- package/src/shell/login/EnterpriseSigninButton.tsx +106 -0
- package/src/shell/login/GitHubSignInButton.tsx +40 -0
- package/src/shell/login/GoogleSignInButton.tsx +36 -0
- package/src/shell/login/InviteAcceptModal.tsx +78 -0
- package/src/shell/login/MicrosoftSigninButton.tsx +30 -0
- package/src/shell/login/PreviewIcon.tsx +29 -0
- package/src/shell/login/SignInModal.tsx +28 -0
- package/src/shell/login/SigninScreen.tsx +162 -0
- package/src/shell/login/SignupForm.tsx +178 -0
- package/src/shell/login/TerminalLogin.tsx +299 -0
- package/src/shell/login/UserInfo.tsx +76 -0
- package/src/shell/login/UserSessionMenu.tsx +81 -0
- package/src/shell/utils.tsx +7 -0
- package/src/widgets/SvgIcon.tsx +44 -0
- package/src/widgets/index.ts +7 -6
- package/src/widgets/upload/UploadSummary.tsx +3 -4
- package/lib/esm/core/components/shadcn/filters/comboBox.js +0 -101
- package/lib/esm/core/components/shadcn/filters/comboBox.js.map +0 -1
- package/lib/esm/core/components/shadcn/filters/dateFilter.js +0 -36
- package/lib/esm/core/components/shadcn/filters/dateFilter.js.map +0 -1
- package/lib/esm/core/components/shadcn/filters/selectFilter.js +0 -67
- package/lib/esm/core/components/shadcn/filters/selectFilter.js.map +0 -1
- package/lib/esm/core/components/shadcn/filters/stringListFilter.js.map +0 -1
- package/lib/esm/core/components/shadcn/filters/textFilter.js.map +0 -1
- package/lib/esm/features/facets/InteractionFacet.js +0 -39
- package/lib/esm/features/facets/InteractionFacet.js.map +0 -1
- package/lib/esm/features/facets/TypeOptions.js +0 -19
- package/lib/esm/features/facets/TypeOptions.js.map +0 -1
- package/lib/esm/features/facets/UserFacet.js +0 -33
- package/lib/esm/features/facets/UserFacet.js.map +0 -1
- package/lib/types/core/components/shadcn/filters/comboBox.d.ts +0 -22
- package/lib/types/features/facets/InteractionFacet.d.ts +0 -9
- package/lib/types/features/facets/TypeOptions.d.ts +0 -3
- package/lib/types/features/facets/UserFacet.d.ts +0 -11
- package/src/core/components/shadcn/filters/dateFilter.tsx +0 -82
- package/src/core/components/shadcn/filters/selectFilter.tsx +0 -110
- package/src/features/facets/InteractionFacet.tsx +0 -53
- package/src/features/facets/TypeOptions.tsx +0 -22
- package/src/features/facets/UserFacet.tsx +0 -61
|
@@ -6,9 +6,11 @@ interface StringFacetProps {
|
|
|
6
6
|
buckets: FacetBucket[];
|
|
7
7
|
name: string;
|
|
8
8
|
placeholder?: string;
|
|
9
|
+
type?: 'select';
|
|
10
|
+
multiple?: boolean;
|
|
9
11
|
}
|
|
10
12
|
|
|
11
|
-
export function createStringFilterGroup({ buckets, name, placeholder }: StringFacetProps): FilterGroup {
|
|
13
|
+
export function createStringFilterGroup({ buckets, name, placeholder, type = 'select', multiple = false }: StringFacetProps): FilterGroup {
|
|
12
14
|
const options = buckets.map((bucket) => ({
|
|
13
15
|
label: facetOptionLabel(bucket),
|
|
14
16
|
value: bucket._id
|
|
@@ -17,19 +19,23 @@ export function createStringFilterGroup({ buckets, name, placeholder }: StringFa
|
|
|
17
19
|
const filterGroup: FilterGroup = {
|
|
18
20
|
name: name,
|
|
19
21
|
options: options,
|
|
20
|
-
type:
|
|
22
|
+
type: type,
|
|
23
|
+
multiple: multiple,
|
|
21
24
|
placeholder: `${placeholder ?? `${name.charAt(0).toUpperCase() + name.slice(1)}`}`,
|
|
25
|
+
...({ allowCreate: false })
|
|
22
26
|
};
|
|
23
27
|
|
|
24
28
|
return filterGroup;
|
|
25
29
|
}
|
|
26
30
|
|
|
27
|
-
export function VStringFacet({ buckets, name, placeholder}: {
|
|
31
|
+
export function VStringFacet({ buckets, name, placeholder, type, multiple }: {
|
|
28
32
|
search: any;
|
|
29
33
|
buckets: FacetBucket[];
|
|
30
34
|
name: string;
|
|
31
35
|
placeholder?: string;
|
|
32
36
|
className?: string;
|
|
37
|
+
type?: 'select';
|
|
38
|
+
multiple?: boolean;
|
|
33
39
|
}) {
|
|
34
|
-
return createStringFilterGroup({ buckets, name, placeholder });
|
|
40
|
+
return createStringFilterGroup({ buckets, name, placeholder, type, multiple });
|
|
35
41
|
}
|
|
@@ -4,9 +4,11 @@ import { FilterGroup } from "@vertesia/ui/core";
|
|
|
4
4
|
interface VTypeFacetProps {
|
|
5
5
|
buckets: FacetBucket[];
|
|
6
6
|
typeRegistry: any;
|
|
7
|
+
type?: 'select';
|
|
8
|
+
multiple?: boolean;
|
|
7
9
|
}
|
|
8
10
|
|
|
9
|
-
export function VTypeFacet({ buckets, typeRegistry }: VTypeFacetProps) {
|
|
11
|
+
export function VTypeFacet({ buckets, typeRegistry, type = 'select', multiple = false }: VTypeFacetProps) {
|
|
10
12
|
// Create a map for quick lookups of type names and counts
|
|
11
13
|
const typeDataMap = new Map();
|
|
12
14
|
buckets.forEach((bucket) => {
|
|
@@ -30,19 +32,18 @@ export function VTypeFacet({ buckets, typeRegistry }: VTypeFacetProps) {
|
|
|
30
32
|
});
|
|
31
33
|
});
|
|
32
34
|
|
|
33
|
-
// Create options with just raw values
|
|
34
35
|
const options = buckets.map((bucket) => {
|
|
35
36
|
const typeId = bucket._id || "Document";
|
|
36
37
|
return {
|
|
37
38
|
value: typeId,
|
|
38
|
-
// Store count as simple fallback label
|
|
39
39
|
label: `(${bucket.count})`
|
|
40
40
|
};
|
|
41
41
|
});
|
|
42
42
|
|
|
43
43
|
const customFilterGroups: FilterGroup = {
|
|
44
|
-
name: '
|
|
45
|
-
type:
|
|
44
|
+
name: 'Types',
|
|
45
|
+
type: type,
|
|
46
|
+
multiple: multiple,
|
|
46
47
|
options: options,
|
|
47
48
|
labelRenderer: (typeId: string) => {
|
|
48
49
|
const typeData = typeDataMap.get(typeId);
|
|
@@ -32,9 +32,11 @@ export function createUserFilterGroup({ buckets, name, placeholder }: UserFacetP
|
|
|
32
32
|
// For known users, render UserInfo with count
|
|
33
33
|
const bucket = buckets.find(b => b._id === userRef);
|
|
34
34
|
return (
|
|
35
|
-
<div className="flex items-center
|
|
36
|
-
<
|
|
37
|
-
|
|
35
|
+
<div className="flex items-center w-full gap-2">
|
|
36
|
+
<div className="flex-1 min-w-0 flex items-center truncate">
|
|
37
|
+
<UserInfo userRef={userRef} showTitle={true} size="sm" />
|
|
38
|
+
</div>
|
|
39
|
+
<span className="text-muted-foreground flex-shrink-0">({bucket?.count || 0})</span>
|
|
38
40
|
</div>
|
|
39
41
|
);
|
|
40
42
|
},
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { Filter as BaseFilter, FilterProvider, FilterBtn, FilterBar, FilterClear, FilterGroup } from '@vertesia/ui/core';
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { VStringFacet } from './VStringFacet';
|
|
4
|
+
import { VUserFacet } from './VUserFacet';
|
|
5
|
+
import { SearchInterface } from './VFacetsNav';
|
|
6
|
+
|
|
7
|
+
interface WorkflowExecutionsFacetsNavProps {
|
|
8
|
+
facets: {
|
|
9
|
+
status?: any[];
|
|
10
|
+
initiated_by?: any[];
|
|
11
|
+
};
|
|
12
|
+
search: SearchInterface;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// Hook to create filter groups for workflow executions
|
|
16
|
+
export function useWorkflowExecutionsFilterGroups(facets: WorkflowExecutionsFacetsNavProps['facets']): FilterGroup[] {
|
|
17
|
+
const customFilterGroups: FilterGroup[] = [];
|
|
18
|
+
|
|
19
|
+
customFilterGroups.push({
|
|
20
|
+
placeholder: 'Search by Workflow or Run ID',
|
|
21
|
+
name: 'name',
|
|
22
|
+
type: 'text',
|
|
23
|
+
options: [],
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
if (facets.status) {
|
|
27
|
+
const statusFilterGroup = VStringFacet({
|
|
28
|
+
search: null as any, // This will be provided by the search context
|
|
29
|
+
buckets: facets.status || [],
|
|
30
|
+
name: 'Status'
|
|
31
|
+
});
|
|
32
|
+
customFilterGroups.push(statusFilterGroup);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
if (facets.initiated_by) {
|
|
36
|
+
const initiatedByFilterGroup = VUserFacet({
|
|
37
|
+
buckets: facets.initiated_by || [],
|
|
38
|
+
name: 'User'
|
|
39
|
+
});
|
|
40
|
+
customFilterGroups.push(initiatedByFilterGroup);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const dateAfterFilterGroup = {
|
|
44
|
+
name: 'start',
|
|
45
|
+
placeholder: 'Date After',
|
|
46
|
+
type: 'date' as const,
|
|
47
|
+
multiple: false
|
|
48
|
+
};
|
|
49
|
+
customFilterGroups.push(dateAfterFilterGroup);
|
|
50
|
+
|
|
51
|
+
const dateBeforeFilterGroup = {
|
|
52
|
+
name: 'end',
|
|
53
|
+
placeholder: 'Date Before',
|
|
54
|
+
type: 'date' as const,
|
|
55
|
+
multiple: false
|
|
56
|
+
};
|
|
57
|
+
customFilterGroups.push(dateBeforeFilterGroup);
|
|
58
|
+
|
|
59
|
+
return customFilterGroups;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Hook to create filter change handler for workflow executions
|
|
63
|
+
export function useWorkflowExecutionsFilterHandler(search: SearchInterface) {
|
|
64
|
+
return (newFilters: BaseFilter[]) => {
|
|
65
|
+
if (newFilters.length === 0) {
|
|
66
|
+
search.clearFilters();
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
search.clearFilters(false);
|
|
71
|
+
|
|
72
|
+
newFilters.forEach(filter => {
|
|
73
|
+
if (filter.value && filter.value.length > 0) {
|
|
74
|
+
const filterName = filter.name;
|
|
75
|
+
let filterValue;
|
|
76
|
+
if (filter.type === 'stringList') {
|
|
77
|
+
filterValue = filter.value.map(v => typeof v === 'string' ? v : v.value);
|
|
78
|
+
} else if (filter.multiple) {
|
|
79
|
+
filterValue = Array.isArray(filter.value)
|
|
80
|
+
? filter.value.map((v: any) => typeof v === 'object' && v.value ? v.value : v)
|
|
81
|
+
: [typeof filter.value === 'object' && (filter.value as any).value ? (filter.value as any).value : filter.value];
|
|
82
|
+
} else {
|
|
83
|
+
// Single value - don't wrap in array
|
|
84
|
+
filterValue = Array.isArray(filter.value) && filter.value[0] && typeof filter.value[0] === 'object'
|
|
85
|
+
? (filter.value[0] as any).value
|
|
86
|
+
: Array.isArray(filter.value) && filter.value[0]
|
|
87
|
+
? filter.value[0]
|
|
88
|
+
: filter.value;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (filterName === 'name') {
|
|
92
|
+
search.query.search_term = filterValue;
|
|
93
|
+
search.query.name = filterValue;
|
|
94
|
+
} else {
|
|
95
|
+
search.query[filterName] = filterValue;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
search.search();
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Legacy component for backward compatibility
|
|
105
|
+
export function WorkflowExecutionsFacetsNav({
|
|
106
|
+
facets,
|
|
107
|
+
search,
|
|
108
|
+
}: WorkflowExecutionsFacetsNavProps) {
|
|
109
|
+
const [filters, setFilters] = useState<BaseFilter[]>([]);
|
|
110
|
+
const filterGroups = useWorkflowExecutionsFilterGroups(facets);
|
|
111
|
+
const handleFilterLogic = useWorkflowExecutionsFilterHandler(search);
|
|
112
|
+
|
|
113
|
+
const handleFilterChange: React.Dispatch<React.SetStateAction<BaseFilter[]>> = (value) => {
|
|
114
|
+
const newFilters = typeof value === 'function' ? value(filters) : value;
|
|
115
|
+
setFilters(newFilters);
|
|
116
|
+
handleFilterLogic(newFilters);
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
return (
|
|
120
|
+
<FilterProvider
|
|
121
|
+
filterGroups={filterGroups}
|
|
122
|
+
filters={filters}
|
|
123
|
+
setFilters={handleFilterChange}
|
|
124
|
+
>
|
|
125
|
+
<div className="flex gap-2 items-center">
|
|
126
|
+
<FilterBtn />
|
|
127
|
+
<FilterBar />
|
|
128
|
+
<FilterClear />
|
|
129
|
+
</div>
|
|
130
|
+
</FilterProvider>
|
|
131
|
+
);
|
|
132
|
+
}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
export { EnvironmentFacet } from "./EnvironmentFacet";
|
|
2
2
|
export * from "./FacetsNav";
|
|
3
|
-
export { InteractionFacet } from "./InteractionFacet";
|
|
4
3
|
export { StringFacet } from "./StringFacet";
|
|
5
4
|
export { StringListFacet } from "./StringListFacet";
|
|
6
5
|
export { TypeFacet } from "./TypeFacet";
|
|
7
|
-
|
|
6
|
+
|
|
8
7
|
export * from "./VFacetsNav";
|
|
9
8
|
export { VStringFacet } from "./VStringFacet";
|
|
10
9
|
export { VTypeFacet } from "./VTypeFacet";
|
|
11
10
|
export { VUserFacet } from "./VUserFacet";
|
|
11
|
+
|
|
12
|
+
export { RunsFacetsNav, useRunsFilterGroups, useRunsFilterHandler } from "./RunsFacetsNav";
|
|
13
|
+
export { WorkflowExecutionsFacetsNav, useWorkflowExecutionsFilterGroups, useWorkflowExecutionsFilterHandler } from "./WorkflowExecutionsFacetsNav";
|
|
14
|
+
export { DocumentsFacetsNav, useDocumentFilterGroups, useDocumentFilterHandler } from "./DocumentsFacetsNav";
|
|
@@ -18,7 +18,7 @@ export function CollectionsTable({ }: CollectionsTableProps) {
|
|
|
18
18
|
const [isLoading, setIsLoading] = useState(true);
|
|
19
19
|
const [isOpen, setOpen] = useState(false);
|
|
20
20
|
|
|
21
|
-
const { data: collections, error, refetch } = useFetch(() => client.store.collections.
|
|
21
|
+
const { data: collections, error, refetch } = useFetch(() => client.store.collections.search({}), []);
|
|
22
22
|
|
|
23
23
|
// Update loading state when data is fetched
|
|
24
24
|
useEffect(() => {
|
|
@@ -57,7 +57,8 @@ export function CollectionsTable({ }: CollectionsTableProps) {
|
|
|
57
57
|
|
|
58
58
|
return (
|
|
59
59
|
<>
|
|
60
|
-
{
|
|
60
|
+
{
|
|
61
|
+
collections &&
|
|
61
62
|
(collections.length > 0 ?
|
|
62
63
|
(<Table className="w-full">
|
|
63
64
|
<thead>
|
|
@@ -86,10 +86,25 @@ export function CreateCollectionForm({ onClose, redirect = true, onAddToCollecti
|
|
|
86
86
|
onChange={(ev) => setPayloadProp("description", ev.target.value)}
|
|
87
87
|
/>
|
|
88
88
|
</FormItem>
|
|
89
|
-
<FormItem label="Dynamic Collection" className="mt-2" direction="row" description="
|
|
89
|
+
<FormItem label="Dynamic Collection" className="mt-2" direction="row" description="Dynamically fetch content for the collection based on a query. If not enabled, then content must be added by users or agents.">
|
|
90
90
|
<Switch value={payload.dynamic || false} onChange={(value) => setPayloadProp("dynamic", value)} />
|
|
91
91
|
</FormItem>
|
|
92
|
-
|
|
92
|
+
{ !payload.dynamic &&
|
|
93
|
+
<FormItem label="Allowed Content Types" className="mt-4" description="Optionally select which content types can be added to the collection. If not set, then all content types are allowed.">
|
|
94
|
+
<SelectContentType
|
|
95
|
+
defaultValue={payload.allowed_types || null}
|
|
96
|
+
onChange={(v) => {
|
|
97
|
+
if (Array.isArray(v)) {
|
|
98
|
+
setPayloadProp("allowed_types", v.map(type => type.id));
|
|
99
|
+
} else {
|
|
100
|
+
setPayloadProp("allowed_types", v ? [v.id] : []);
|
|
101
|
+
}
|
|
102
|
+
}}
|
|
103
|
+
isClearable multiple
|
|
104
|
+
/>
|
|
105
|
+
</FormItem>
|
|
106
|
+
}
|
|
107
|
+
<FormItem label="Type" className="mt-2" description="Optionally select a content type to assign custom properties and data to the collection.">
|
|
93
108
|
<SelectContentType
|
|
94
109
|
defaultValue={payload.type || null}
|
|
95
110
|
onChange={(v) => {
|
|
@@ -102,19 +117,6 @@ export function CreateCollectionForm({ onClose, redirect = true, onAddToCollecti
|
|
|
102
117
|
isClearable
|
|
103
118
|
/>
|
|
104
119
|
</FormItem>
|
|
105
|
-
<FormItem label="Allowed Content Types" className="mt-4">
|
|
106
|
-
<SelectContentType
|
|
107
|
-
defaultValue={payload.allowed_types || null}
|
|
108
|
-
onChange={(v) => {
|
|
109
|
-
if (Array.isArray(v)) {
|
|
110
|
-
setPayloadProp("allowed_types", v.map(type => type.id));
|
|
111
|
-
} else {
|
|
112
|
-
setPayloadProp("allowed_types", v ? [v.id] : []);
|
|
113
|
-
}
|
|
114
|
-
}}
|
|
115
|
-
isClearable multiple
|
|
116
|
-
/>
|
|
117
|
-
</FormItem>
|
|
118
120
|
</VModalBody>
|
|
119
121
|
<VModalFooter>
|
|
120
122
|
<Button isDisabled={isProcessing} onClick={onCreate}>
|
|
@@ -128,8 +128,24 @@ export function EditCollectionView({ refetch, collection }: EditCollectionViewPr
|
|
|
128
128
|
onChange={(e) => setField("description", e.target.value)}
|
|
129
129
|
/>
|
|
130
130
|
</FormItem>
|
|
131
|
+
{
|
|
132
|
+
!collection.dynamic &&
|
|
133
|
+
<FormItem label="Allowed Content Types" description="Select which content types can be added to the collection. If not set, then all content types are allowed.">
|
|
134
|
+
<SelectContentType
|
|
135
|
+
defaultValue={metadata.allowed_types || null}
|
|
136
|
+
onChange={(v) => {
|
|
137
|
+
if (Array.isArray(v)) {
|
|
138
|
+
setField("allowed_types", v.map(type => type.id));
|
|
139
|
+
} else {
|
|
140
|
+
setField("allowed_types", v ? [v.id] : []);
|
|
141
|
+
}
|
|
142
|
+
}}
|
|
143
|
+
isClearable multiple
|
|
144
|
+
/>
|
|
145
|
+
</FormItem>
|
|
146
|
+
}
|
|
131
147
|
{collection.dynamic && (
|
|
132
|
-
<FormItem label="Query" description="Define the query to fetch
|
|
148
|
+
<FormItem label="Query" description="Define the query to dynamically fetch content for the collection.">
|
|
133
149
|
<textarea
|
|
134
150
|
className={Styles.INPUT}
|
|
135
151
|
value={metadata.query}
|
|
@@ -137,11 +153,11 @@ export function EditCollectionView({ refetch, collection }: EditCollectionViewPr
|
|
|
137
153
|
/>
|
|
138
154
|
</FormItem>
|
|
139
155
|
)}
|
|
140
|
-
<FormItem label="Table Layout" description="Define
|
|
156
|
+
<FormItem label="Table Layout" description="Define a custom layout for displaying the collection in tables.">
|
|
141
157
|
<CodeMirrorEditor className="border-1 rounded-md border-border"
|
|
142
158
|
value={tableLayoutValue} extensions={extensions} editorRef={tableLayoutRef} />
|
|
143
159
|
</FormItem>
|
|
144
|
-
<FormItem label="Type">
|
|
160
|
+
<FormItem label="Type" description="Select a content type to assign custom properties and data to the collection.">
|
|
145
161
|
<SelectContentType
|
|
146
162
|
defaultValue={metadata.type || null}
|
|
147
163
|
onChange={(v) => {
|
|
@@ -154,19 +170,6 @@ export function EditCollectionView({ refetch, collection }: EditCollectionViewPr
|
|
|
154
170
|
isClearable
|
|
155
171
|
/>
|
|
156
172
|
</FormItem>
|
|
157
|
-
<FormItem label="Allowed Content Types">
|
|
158
|
-
<SelectContentType
|
|
159
|
-
defaultValue={metadata.allowed_types || null}
|
|
160
|
-
onChange={(v) => {
|
|
161
|
-
if (Array.isArray(v)) {
|
|
162
|
-
setField("allowed_types", v.map(type => type.id));
|
|
163
|
-
} else {
|
|
164
|
-
setField("allowed_types", v ? [v.id] : []);
|
|
165
|
-
}
|
|
166
|
-
}}
|
|
167
|
-
isClearable multiple
|
|
168
|
-
/>
|
|
169
|
-
</FormItem>
|
|
170
173
|
<Button size="lg" className="w-min my-4" isDisabled={isUpdating} onClick={onSubmit}>
|
|
171
174
|
Save Metadata
|
|
172
175
|
</Button>
|
|
@@ -16,7 +16,7 @@ interface SelectCollectionProps {
|
|
|
16
16
|
*/
|
|
17
17
|
export function SelectCollection({ onChange, value, disabled = false, className }: SelectCollectionProps) {
|
|
18
18
|
const { client } = useUserSession();
|
|
19
|
-
const { data: collections, error } = useFetch(() => client.store.collections.
|
|
19
|
+
const { data: collections, error } = useFetch(() => client.store.collections.search({ dynamic: false }), []);
|
|
20
20
|
|
|
21
21
|
if (error) {
|
|
22
22
|
return <ErrorBox title='Collection fetch failed'>{error.message}</ErrorBox>
|
|
@@ -5,7 +5,8 @@ import { Button, Divider, ErrorBox, SidePanel, Spinner, useDebounce, useIntersec
|
|
|
5
5
|
import { useNavigate } from "@vertesia/ui/router";
|
|
6
6
|
import { TypeRegistry, useUserSession } from '@vertesia/ui/session';
|
|
7
7
|
import { Download, RefreshCw, Eye } from 'lucide-react';
|
|
8
|
-
import {
|
|
8
|
+
import { FilterProvider, FilterBtn, FilterBar, FilterClear, Filter as BaseFilter } from '@vertesia/ui/core';
|
|
9
|
+
import { useDocumentFilterGroups, useDocumentFilterHandler } from "../../facets/DocumentsFacetsNav";
|
|
9
10
|
import { VectorSearchWidget } from './components/VectorSearchWidget';
|
|
10
11
|
|
|
11
12
|
import { ContentDispositionButton } from './components/ContentDispositionButton';
|
|
@@ -97,6 +98,7 @@ export function DocumentSearchResults({ layout, onUpload, allowFilter = true, al
|
|
|
97
98
|
const [refreshTrigger, _setRefreshTrigger] = useState(0);
|
|
98
99
|
const [loaded, setLoaded] = useState(0);
|
|
99
100
|
const [isGridView, setIsGridView] = useState(localStorage.getItem(ContentDispositionButton.LAST_DISPLAYED_VIEW) === "grid");
|
|
101
|
+
const [filters, setFilters] = useState<BaseFilter[]>([]);
|
|
100
102
|
|
|
101
103
|
const loadMoreRef = useRef<HTMLDivElement>(null);
|
|
102
104
|
useIntersectionObserver(loadMoreRef, () => {
|
|
@@ -148,22 +150,89 @@ export function DocumentSearchResults({ layout, onUpload, allowFilter = true, al
|
|
|
148
150
|
search.search().then(() => setIsReady(true));
|
|
149
151
|
};
|
|
150
152
|
|
|
153
|
+
// Use DocumentsFacetsNav hooks for cleaner organization
|
|
154
|
+
const filterGroups = useDocumentFilterGroups(facets);
|
|
155
|
+
const handleFilterLogic = useDocumentFilterHandler(facetSearch);
|
|
156
|
+
|
|
157
|
+
const handleFilterChange: React.Dispatch<React.SetStateAction<BaseFilter[]>> = (value) => {
|
|
158
|
+
const newFilters = typeof value === 'function' ? value(filters) : value;
|
|
159
|
+
setFilters(newFilters);
|
|
160
|
+
handleFilterLogic(newFilters);
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
const url = new URL(window.location.href);
|
|
164
|
+
const filtersParam = url.searchParams.get('filters');
|
|
165
|
+
|
|
166
|
+
if (filtersParam) {
|
|
167
|
+
try {
|
|
168
|
+
const filterPairs = filtersParam.split(';');
|
|
169
|
+
const validFilterPairs = filterPairs.filter(pair => {
|
|
170
|
+
const [encodedName] = pair.split(':');
|
|
171
|
+
const name = decodeURIComponent(encodedName);
|
|
172
|
+
return name !== 'start' && name !== 'end';
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
if (validFilterPairs.length !== filterPairs.length) {
|
|
176
|
+
const newFiltersParam = validFilterPairs.length > 0 ? validFilterPairs.join(';') : '';
|
|
177
|
+
if (newFiltersParam) {
|
|
178
|
+
url.searchParams.set('filters', newFiltersParam);
|
|
179
|
+
} else {
|
|
180
|
+
url.searchParams.delete('filters');
|
|
181
|
+
}
|
|
182
|
+
window.history.replaceState({}, '', url.toString());
|
|
183
|
+
}
|
|
184
|
+
} catch (error) {
|
|
185
|
+
console.error("Failed to clean start/end filters from URL:", error);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
151
189
|
return (
|
|
152
190
|
<div className="flex flex-col gap-y-2">
|
|
153
191
|
<OverviewDrawer object={selectedObject} onClose={() => setSelectedObject(null)} />
|
|
154
192
|
{
|
|
155
193
|
error && <ErrorBox title="Error">{error.message}</ErrorBox>
|
|
156
194
|
}
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
195
|
+
{
|
|
196
|
+
allowFilter && (
|
|
197
|
+
<FilterProvider
|
|
198
|
+
filterGroups={filterGroups}
|
|
199
|
+
filters={filters}
|
|
200
|
+
setFilters={handleFilterChange}
|
|
201
|
+
>
|
|
202
|
+
<div className="flex flex-row gap-4 items-center justify-between w-full">
|
|
203
|
+
<div className="flex gap-2 items-center w-2/3">
|
|
204
|
+
{
|
|
205
|
+
allowSearch && <VectorSearchWidget onChange={setVQuery} isLoading={isLoading} refresh={refreshTrigger} className="w-wull" />
|
|
206
|
+
}
|
|
207
|
+
<FilterBtn />
|
|
208
|
+
</div>
|
|
209
|
+
<div className="flex gap-1 items-center">
|
|
210
|
+
<Button variant="outline" onClick={handleRefetch} alt="Refresh"><RefreshCw size={16} /></Button>
|
|
211
|
+
<ContentDispositionButton onUpdate={setIsGridView} />
|
|
212
|
+
</div>
|
|
213
|
+
</div>
|
|
214
|
+
<div className="flex gap-2 items-center">
|
|
215
|
+
<FilterBar />
|
|
216
|
+
<FilterClear />
|
|
217
|
+
</div>
|
|
218
|
+
</FilterProvider>
|
|
219
|
+
)
|
|
220
|
+
}
|
|
221
|
+
{
|
|
222
|
+
!allowFilter && (
|
|
223
|
+
<div className="flex flex-row gap-4 items-center justify-between w-full">
|
|
224
|
+
<div className="flex gap-2 items-center w-2/3">
|
|
225
|
+
{
|
|
226
|
+
allowSearch && <VectorSearchWidget onChange={setVQuery} isLoading={isLoading} refresh={refreshTrigger} />
|
|
227
|
+
}
|
|
228
|
+
</div>
|
|
229
|
+
<div className="flex gap-1 items-center">
|
|
230
|
+
<Button variant="outline" onClick={handleRefetch} alt="Refresh"><RefreshCw size={16} /></Button>
|
|
231
|
+
<ContentDispositionButton onUpdate={setIsGridView} />
|
|
232
|
+
</div>
|
|
233
|
+
</div>
|
|
234
|
+
)
|
|
235
|
+
}
|
|
167
236
|
<DocumentTable
|
|
168
237
|
objects={objects}
|
|
169
238
|
isLoading={!objects.length && isLoading}
|
|
@@ -3,11 +3,12 @@ import Markdown from "react-markdown";
|
|
|
3
3
|
import remarkGfm from "remark-gfm";
|
|
4
4
|
|
|
5
5
|
import { useUserSession } from "@vertesia/ui/session";
|
|
6
|
-
import { Button,
|
|
6
|
+
import { Button, Spinner, useToast } from "@vertesia/ui/core";
|
|
7
7
|
import { JSONDisplay } from "@vertesia/ui/widgets";
|
|
8
8
|
import { ContentObject, ImageRenditionFormat } from "@vertesia/common";
|
|
9
9
|
import { Copy, Download, SquarePen } from "lucide-react";
|
|
10
10
|
import { PropertiesEditorModal } from "./PropertiesEditorModal";
|
|
11
|
+
import { NavLink } from "@vertesia/ui/router";
|
|
11
12
|
|
|
12
13
|
interface ContentOverviewProps {
|
|
13
14
|
object: ContentObject;
|
|
@@ -82,7 +83,6 @@ export function ContentOverview({
|
|
|
82
83
|
// Request document rendition from the server
|
|
83
84
|
const response = await client.objects.getRendition(object.id, {
|
|
84
85
|
format: format as any, // We're extending the format type
|
|
85
|
-
max_hw: 1024, // Not used for document exports but required by API
|
|
86
86
|
generate_if_missing: true,
|
|
87
87
|
sign_url: true,
|
|
88
88
|
});
|
|
@@ -171,7 +171,6 @@ export function ContentOverview({
|
|
|
171
171
|
if (isImage) {
|
|
172
172
|
client.objects
|
|
173
173
|
.getRendition(object.id, {
|
|
174
|
-
max_hw: 1024,
|
|
175
174
|
format: ImageRenditionFormat.jpeg,
|
|
176
175
|
generate_if_missing: false,
|
|
177
176
|
sign_url: true,
|
|
@@ -320,17 +319,18 @@ export function ContentOverview({
|
|
|
320
319
|
components={{
|
|
321
320
|
a: ({ node, ...props }: { node?: any; href?: string; children?: React.ReactNode }) => {
|
|
322
321
|
const href = props.href || "";
|
|
323
|
-
if (href.
|
|
322
|
+
if (href.includes("/store/objects/")) {
|
|
324
323
|
return (
|
|
325
|
-
<
|
|
324
|
+
<NavLink
|
|
325
|
+
topLevelNav
|
|
326
326
|
href={href}
|
|
327
327
|
className="text-info"
|
|
328
328
|
>
|
|
329
329
|
{props.children}
|
|
330
|
-
</
|
|
330
|
+
</NavLink>
|
|
331
331
|
);
|
|
332
332
|
}
|
|
333
|
-
return <a {...props} target="_blank" rel="noopener noreferrer" />;
|
|
333
|
+
return <a {...props} data-debug="test" target="_blank" rel="noopener noreferrer" />;
|
|
334
334
|
},
|
|
335
335
|
p: ({ node, ...props }: { node?: any; children?: React.ReactNode }) => (
|
|
336
336
|
<p {...props} className={`my-0`} />
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ColumnLayout, ContentObjectItem } from "@vertesia/common";
|
|
2
2
|
import { Button, ErrorBox, Spinner, useIntersectionObserver } from "@vertesia/ui/core";
|
|
3
3
|
import { useEffect, useRef, useState } from "react";
|
|
4
|
-
import {
|
|
4
|
+
import { DocumentsFacetsNav } from "../../../facets";
|
|
5
5
|
import { DocumentTable } from "../DocumentTable";
|
|
6
6
|
import { useDocumentSearch, useWatchDocumentSearchFacets, useWatchDocumentSearchResult } from "../search/DocumentSearchContext";
|
|
7
7
|
import { DocumentSearchProvider } from "../search/DocumentSearchProvider";
|
|
@@ -66,7 +66,7 @@ function SelectDocumentImpl({ onRowClick }: SelectDocumentImplProps) {
|
|
|
66
66
|
return (
|
|
67
67
|
<div>
|
|
68
68
|
<div className="flex justify-between items-center mb-4">
|
|
69
|
-
<
|
|
69
|
+
<DocumentsFacetsNav facets={facets} search={facetSearch} />
|
|
70
70
|
<div className="flex items-center gap-2">
|
|
71
71
|
<Button variant="outline" onClick={handleRefetch} alt="Refresh">
|
|
72
72
|
<RefreshCw size={16} />
|
|
@@ -107,8 +107,8 @@ export function VectorSearchWidget({ onChange, isLoading, refresh }: VectorSearc
|
|
|
107
107
|
};
|
|
108
108
|
|
|
109
109
|
return (
|
|
110
|
-
<div className="flex gap-1 items-center w-
|
|
111
|
-
<Input placeholder="Type what you are looking for" value={searchText} onChange={setSearchText} onKeyDown={handleKeyPress} />
|
|
110
|
+
<div className="flex gap-1 items-center w-1/2">
|
|
111
|
+
<Input placeholder="Type what you are looking for, or select a filter" value={searchText} onChange={setSearchText} onKeyDown={handleKeyPress} />
|
|
112
112
|
<Button variant="secondary" isLoading={isLoading} onClick={() => fireSearch("text")} isDisabled={!isReady} alt="semantic search">Search</Button>
|
|
113
113
|
</div>
|
|
114
114
|
);
|