@orchestrator-ui/orchestrator-ui-components 8.4.5 → 8.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/.turbo/turbo-build.log +10 -14
  2. package/.turbo/turbo-lint.log +2 -4
  3. package/.turbo/turbo-test.log +7 -9
  4. package/CHANGELOG.md +17 -0
  5. package/dist/index.d.ts +1968 -630
  6. package/dist/index.js +4389 -2362
  7. package/dist/index.js.map +1 -1
  8. package/package.json +2 -1
  9. package/src/components/WfoAutoExpandableTextArea/WfoAutoExpandableTextArea.tsx +54 -0
  10. package/src/components/WfoAutoExpandableTextArea/index.ts +1 -0
  11. package/src/components/WfoAutoExpandableTextArea/styles.ts +18 -0
  12. package/src/components/WfoPageTemplate/paths.ts +1 -0
  13. package/src/components/WfoPydanticForm/WfoPydanticForm.tsx +23 -1
  14. package/src/components/WfoSearchBar/WfoSearchField.tsx +0 -1
  15. package/src/components/WfoSearchPage/WfoFilterGroup/WfoFilterGroup.tsx +5 -5
  16. package/src/components/WfoSearchPage/WfoSearch/WfoSearch.tsx +12 -5
  17. package/src/components/WfoSearchPage/constants.ts +0 -4
  18. package/src/components/WfoSearchPage/utils.ts +75 -20
  19. package/src/components/WfoSubscription/WfoSubscriptionActions/WfoSubscriptionActionExpandableMenuItem.tsx +36 -18
  20. package/src/components/WfoSubscription/WfoSubscriptionActions/WfoSubscriptionActionsMenuItem.tsx +38 -2
  21. package/src/components/WfoSubscription/utils/index.ts +3 -0
  22. package/src/components/WfoSubscription/utils/utils.spec.ts +39 -4
  23. package/src/components/WfoSubscription/utils/utils.ts +10 -4
  24. package/src/components/WfoTable/WfoStructuredSearchTable/WfoAddGroupAction.tsx +19 -0
  25. package/src/components/WfoTable/WfoStructuredSearchTable/WfoAddRuleAction.tsx +23 -0
  26. package/src/components/WfoTable/WfoStructuredSearchTable/WfoCombinatorSelector.tsx +33 -0
  27. package/src/components/WfoTable/WfoStructuredSearchTable/WfoExpandingSearchRow.tsx +38 -0
  28. package/src/components/WfoTable/WfoStructuredSearchTable/WfoFieldSelector.tsx +138 -0
  29. package/src/components/WfoTable/WfoStructuredSearchTable/WfoFilterBuilder.tsx +198 -0
  30. package/src/components/WfoTable/WfoStructuredSearchTable/WfoInlineCombinator.tsx +17 -0
  31. package/src/components/WfoTable/WfoStructuredSearchTable/WfoOperatorSelector.tsx +33 -0
  32. package/src/components/WfoTable/WfoStructuredSearchTable/WfoRangeEditor.tsx +64 -0
  33. package/src/components/WfoTable/WfoStructuredSearchTable/WfoRemoveGroupAction.tsx +21 -0
  34. package/src/components/WfoTable/WfoStructuredSearchTable/WfoRemoveRuleAction.tsx +20 -0
  35. package/src/components/WfoTable/WfoStructuredSearchTable/WfoRule.tsx +16 -0
  36. package/src/components/WfoTable/WfoStructuredSearchTable/WfoRuleGroup.tsx +76 -0
  37. package/src/components/WfoTable/WfoStructuredSearchTable/WfoSearchFieldWithActions.tsx +56 -0
  38. package/src/components/WfoTable/WfoStructuredSearchTable/WfoStructuredSearchTable.tsx +326 -0
  39. package/src/components/WfoTable/WfoStructuredSearchTable/WfoValueEditor.tsx +159 -0
  40. package/src/components/WfoTable/WfoStructuredSearchTable/index.ts +2 -0
  41. package/src/components/WfoTable/WfoStructuredSearchTable/styles.ts +182 -0
  42. package/src/components/WfoTable/WfoStructuredSearchTable/utils.ts +45 -0
  43. package/src/components/WfoTable/WfoTable/WfoDragHandler.tsx +4 -2
  44. package/src/components/WfoTable/WfoTableSettingsModal/WfoTableSettingsModal.tsx +9 -0
  45. package/src/components/WfoTable/index.ts +2 -6
  46. package/src/components/WfoTitleWithWebsocketBadge/WfoTitleWithWebsocketBadge.tsx +14 -6
  47. package/src/components/WfoWorkflowSteps/WfoStep/WfoStep.tsx +1 -0
  48. package/src/components/WfoWorkflowSteps/WfoStepList/WfoStepList.tsx +3 -0
  49. package/src/components/WfoWorkflowSteps/WfoWorkflowStepList/WfoWorkflowStepList.tsx +32 -12
  50. package/src/components/WfoWorkflowUserGuide/WfoPageWithUserGuide.tsx +38 -0
  51. package/src/components/WfoWorkflowUserGuide/WfoWorkflowGuideExpandablePanel.tsx +151 -0
  52. package/src/components/WfoWorkflowUserGuide/index.ts +2 -0
  53. package/src/components/WfoWorkflowUserGuide/styles.ts +87 -0
  54. package/src/components/index.ts +2 -0
  55. package/src/configuration/version.ts +1 -1
  56. package/src/contexts/OrchestratorConfigContext.tsx +1 -0
  57. package/src/hooks/index.ts +1 -0
  58. package/src/hooks/usePathAutoComplete.ts +3 -4
  59. package/src/hooks/useSearch.ts +20 -15
  60. package/src/hooks/useSearchPagination.ts +11 -8
  61. package/src/hooks/useUrlParams.ts +3 -5
  62. package/src/icons/WfoTrashFilled.tsx +13 -0
  63. package/src/icons/WfoXMarkSmall.tsx +2 -2
  64. package/src/icons/index.ts +1 -0
  65. package/src/messages/en-GB.json +95 -8
  66. package/src/messages/nl-NL.json +24 -5
  67. package/src/pages/WfoSearchPocPage.tsx +528 -0
  68. package/src/pages/index.ts +1 -0
  69. package/src/pages/processes/WfoProcessDetail.tsx +10 -10
  70. package/src/pages/processes/WfoProcessDetailPage.tsx +1 -0
  71. package/src/pages/processes/WfoStartProcessPage.tsx +15 -19
  72. package/src/rtk/api.ts +1 -0
  73. package/src/rtk/endpoints/index.ts +1 -0
  74. package/src/rtk/endpoints/search.ts +45 -10
  75. package/src/rtk/endpoints/workflowGuides.ts +25 -0
  76. package/src/types/search.ts +24 -5
  77. package/src/types/types.ts +10 -1
@@ -0,0 +1,87 @@
1
+ import { css } from '@emotion/react';
2
+
3
+ import { WfoThemeHelpers } from '@/hooks';
4
+
5
+ export const getStyles = ({ theme }: WfoThemeHelpers) => {
6
+ const fullHeightStyle = css({
7
+ height: '100%',
8
+ });
9
+
10
+ const toggleStripContainerStyle = css({
11
+ width: theme.base * 4,
12
+ cursor: 'pointer',
13
+ });
14
+
15
+ const toggleStripContainerHorizontalStyle = css({
16
+ width: '100%',
17
+ height: theme.base * 4,
18
+ cursor: 'pointer',
19
+ });
20
+
21
+ const toggleStripPanelStyle = css({
22
+ height: '100%',
23
+ backgroundColor: theme.colors.backgroundBasePrimary,
24
+ border: `2px dashed ${theme.colors.backgroundLightPrimary}`,
25
+ transition: 'box-shadow 100ms ease-in-out, border-style 100ms ease-in-out',
26
+ '&:hover': {
27
+ borderStyle: 'solid',
28
+ boxShadow: `0 0 0 2px ${theme.colors.backgroundBasePrimary}`,
29
+ },
30
+ });
31
+
32
+ const guideExpandedItemStyle = css({
33
+ position: 'relative',
34
+ });
35
+
36
+ const guideExpandedFillStyle = css({
37
+ position: 'absolute',
38
+ inset: 0,
39
+ });
40
+
41
+ const guidePanelStyle = css({
42
+ height: '100%',
43
+ overflowY: 'auto',
44
+ border: `2px dashed ${theme.colors.backgroundLightPrimary}`,
45
+ borderRightWidth: 0,
46
+ });
47
+
48
+ const guideBodyStyle = css({
49
+ flex: 1,
50
+ minHeight: 0,
51
+ display: 'flex',
52
+ flexDirection: 'column',
53
+ });
54
+
55
+ const noLeftBorderStyle = css({
56
+ borderLeftWidth: 0,
57
+ });
58
+
59
+ const noBottomBorderStyle = css({
60
+ borderBottomWidth: 0,
61
+ });
62
+
63
+ const guideStackedBodyStyle = css({
64
+ maxHeight: '50vh',
65
+ overflowY: 'auto',
66
+ });
67
+
68
+ const guideStackedPanelStyle = css({
69
+ border: `2px dashed ${theme.colors.backgroundLightPrimary}`,
70
+ borderTopWidth: 0,
71
+ });
72
+
73
+ return {
74
+ fullHeightStyle,
75
+ toggleStripContainerStyle,
76
+ toggleStripContainerHorizontalStyle,
77
+ toggleStripPanelStyle,
78
+ noLeftBorderStyle,
79
+ noBottomBorderStyle,
80
+ guidePanelStyle,
81
+ guideBodyStyle,
82
+ guideStackedBodyStyle,
83
+ guideStackedPanelStyle,
84
+ guideExpandedItemStyle,
85
+ guideExpandedFillStyle,
86
+ };
87
+ };
@@ -1,3 +1,4 @@
1
+ export * from './WfoAutoExpandableTextArea';
1
2
  export * from './WfoBadges';
2
3
  export * from './WfoBackendUnavailable';
3
4
  export * from './WfoAvailabilityCheck';
@@ -38,6 +39,7 @@ export * from './WfoTableCodeBlock';
38
39
  export * from './WfoInlineEdit';
39
40
  export * from './WfoPydanticForm';
40
41
  export * from './WfoSearchPage';
42
+ export * from './WfoWorkflowUserGuide';
41
43
  export * from './WfoMonacoCodeBlock';
42
44
  export * from './WfoLogoSpinner';
43
45
  export * from './WfoPopover';
@@ -1 +1 @@
1
- export const ORCHESTRATOR_UI_LIBRARY_VERSION = '8.4.5';
1
+ export const ORCHESTRATOR_UI_LIBRARY_VERSION = '8.6.0';
@@ -13,6 +13,7 @@ export const emptyOrchestratorConfig: OrchestratorConfig = {
13
13
  useWebSockets: false,
14
14
  useThemeToggle: false,
15
15
  showWorkflowInformationLink: false,
16
+ showWorkflowUserGuide: false,
16
17
  workflowInformationLinkUrl: '',
17
18
  enableSupportMenuItem: false,
18
19
  supportMenuItemUrl: '',
@@ -13,4 +13,5 @@ export * from './useGetOrchestratorConfig';
13
13
  export * from './useBackendAvailability';
14
14
  export * from './useGetSchedulesForWorkflow';
15
15
  export * from './useGetWorkflowNameById';
16
+ export * from './usePathAutoComplete';
16
17
  export * from './useGetPydanticFormsConfig';
@@ -53,7 +53,6 @@ const FALLBACK_DEFINITIONS: Record<
53
53
  export const usePathAutocomplete = (prefix: string, entityType: EntityKind) => {
54
54
  const [paths, setPaths] = useState<PathInfo[]>([]);
55
55
  const debouncedPrefix = useDebounce(prefix, 300);
56
-
57
56
  const { data: definitions = FALLBACK_DEFINITIONS, isError: defError } = useSearchDefinitionsQuery();
58
57
 
59
58
  const {
@@ -88,7 +87,7 @@ export const usePathAutocomplete = (prefix: string, entityType: EntityKind) => {
88
87
  displayLabel: leaf.name,
89
88
  ui_types: leaf.ui_types,
90
89
  availablePaths: leaf.paths || [],
91
- pathCount: leaf.paths ? leaf.paths.length : 0,
90
+ pathCount: leaf.paths ? leaf.paths?.length : 0,
92
91
  });
93
92
  });
94
93
 
@@ -105,12 +104,12 @@ export const usePathAutocomplete = (prefix: string, entityType: EntityKind) => {
105
104
  displayLabel: component.name,
106
105
  ui_types: component.ui_types,
107
106
  availablePaths: component.paths || [],
108
- pathCount: component.paths ? component.paths.length : 0,
107
+ pathCount: component.paths ? component.paths?.length : 0,
109
108
  });
110
109
  });
111
110
 
112
111
  setPaths(enrichedPaths);
113
- }, [pathData, definitions, debouncedPrefix.length]);
112
+ }, [pathData, definitions, debouncedPrefix?.length]);
114
113
 
115
114
  const errorMessage =
116
115
  isError ? 'Failed to load paths'
@@ -2,23 +2,30 @@ import { useEffect, useState } from 'react';
2
2
 
3
3
  import { Query } from '@elastic/eui';
4
4
 
5
- import { useSearchMutation } from '@/rtk/endpoints';
6
- import { EntityKind, Group, PaginatedSearchResults, RetrieverType } from '@/types';
5
+ import { useLazySearchQuery } from '@/rtk/endpoints';
6
+ import { EntityKind, Filter, PaginatedSearchResults, RetrieverType } from '@/types';
7
+
8
+ const emptyResult: PaginatedSearchResults = {
9
+ data: [],
10
+ page_info: { has_next_page: false, next_page_cursor: null },
11
+ search_metadata: { search_type: null, description: null },
12
+ cursor: {
13
+ total_items: 0,
14
+ start_cursor: 0,
15
+ end_cursor: 0,
16
+ },
17
+ };
7
18
 
8
19
  export const useSearch = (
9
20
  query: Query | string,
10
21
  entityType: EntityKind,
11
- filterGroup?: Group,
22
+ filterGroup?: Filter,
12
23
  limit?: number,
13
24
  retriever: RetrieverType = RetrieverType.Auto,
14
25
  ) => {
15
- const [results, setResults] = useState<PaginatedSearchResults>({
16
- data: [],
17
- page_info: { has_next_page: false, next_page_cursor: null },
18
- search_metadata: { search_type: null, description: null },
19
- });
26
+ const [results, setResults] = useState<PaginatedSearchResults>({ ...emptyResult });
20
27
 
21
- const [triggerSearch, { isLoading, isError }] = useSearchMutation();
28
+ const [triggerSearch, { isLoading, isError }] = useLazySearchQuery();
22
29
 
23
30
  useEffect(() => {
24
31
  const queryText = typeof query === 'string' ? query : query.text?.trim() || '';
@@ -27,9 +34,7 @@ export const useSearch = (
27
34
 
28
35
  if (queryText.length < 2 && !hasFilters) {
29
36
  setResults({
30
- data: [],
31
- page_info: { has_next_page: false, next_page_cursor: null },
32
- search_metadata: { search_type: null, description: null },
37
+ ...emptyResult,
33
38
  });
34
39
  return;
35
40
  }
@@ -42,6 +47,7 @@ export const useSearch = (
42
47
  filters: filterGroup && filterGroup.children.length > 0 ? filterGroup : undefined,
43
48
  limit: limit,
44
49
  retriever: retriever === RetrieverType.Auto ? undefined : retriever,
50
+ response_columns: [],
45
51
  }).unwrap();
46
52
 
47
53
  setResults({
@@ -54,13 +60,12 @@ export const useSearch = (
54
60
  search_type: result.search_metadata?.search_type || null,
55
61
  description: result.search_metadata?.description || null,
56
62
  },
63
+ cursor: result.cursor,
57
64
  });
58
65
  } catch (error) {
59
66
  console.error('Search error:', error);
60
67
  setResults({
61
- data: [],
62
- page_info: { has_next_page: false, next_page_cursor: null },
63
- search_metadata: { search_type: null, description: null },
68
+ ...emptyResult,
64
69
  });
65
70
  }
66
71
  };
@@ -1,10 +1,11 @@
1
1
  import { useCallback, useState } from 'react';
2
+ import type { Dispatch, SetStateAction } from 'react';
2
3
 
3
4
  import { Query } from '@elastic/eui';
4
5
 
5
6
  import { buildSearchParams } from '@/components/WfoSearchPage/utils';
6
7
  import { useSearchWithPaginationMutation } from '@/rtk/endpoints';
7
- import { EntityKind, Group, PaginatedSearchResults, RetrieverType, SearchResult } from '@/types';
8
+ import { EntityKind, Filter, PaginatedSearchResults, RetrieverType, SearchResult } from '@/types';
8
9
 
9
10
  interface PageHistoryItem {
10
11
  page: number;
@@ -26,10 +27,10 @@ interface UseSearchPaginationReturn {
26
27
  export const useSearchPagination = (
27
28
  debouncedQuery: Query | string,
28
29
  selectedEntityTab: EntityKind,
29
- filterGroup: Group,
30
+ filterGroup: Filter,
30
31
  pageSize: number,
31
32
  results: PaginatedSearchResults,
32
- setResults: (results: PaginatedSearchResults) => void,
33
+ setResults: Dispatch<SetStateAction<PaginatedSearchResults>>,
33
34
  retriever?: RetrieverType,
34
35
  ): UseSearchPaginationReturn => {
35
36
  const [currentPage, setCurrentPage] = useState<number>(1);
@@ -50,7 +51,7 @@ export const useSearchPagination = (
50
51
  {
51
52
  page: currentPage,
52
53
  results: results.data,
53
- cursor: results.page_info.next_page_cursor,
54
+ cursor: results.cursor.start_cursor,
54
55
  },
55
56
  ]);
56
57
 
@@ -61,12 +62,12 @@ export const useSearchPagination = (
61
62
  selectedEntityTab,
62
63
  filterGroup,
63
64
  pageSize,
65
+ nextPageCursor,
64
66
  retriever === RetrieverType.Auto ? undefined : retriever,
65
67
  );
66
68
 
67
69
  const res = await triggerSearchPagination({
68
70
  ...searchParams,
69
- cursor: nextPageCursor,
70
71
  }).unwrap();
71
72
 
72
73
  setResults({
@@ -79,6 +80,7 @@ export const useSearchPagination = (
79
80
  search_type: res.search_metadata.search_type,
80
81
  description: res.search_metadata.description,
81
82
  },
83
+ cursor: res.cursor,
82
84
  });
83
85
 
84
86
  setCurrentPage((prev) => prev + 1);
@@ -94,7 +96,6 @@ export const useSearchPagination = (
94
96
  [
95
97
  currentPage,
96
98
  results.data,
97
- results.page_info.next_page_cursor,
98
99
  isLoadingMore,
99
100
  debouncedQuery,
100
101
  selectedEntityTab,
@@ -103,6 +104,7 @@ export const useSearchPagination = (
103
104
  retriever,
104
105
  setResults,
105
106
  triggerSearchPagination,
107
+ results.cursor,
106
108
  ],
107
109
  );
108
110
 
@@ -113,16 +115,17 @@ export const useSearchPagination = (
113
115
  data: previousPage.results,
114
116
  page_info: {
115
117
  has_next_page: true,
116
- next_page_cursor: previousPage.cursor,
118
+ next_page_cursor: `'${previousPage.cursor}'`,
117
119
  },
118
120
  search_metadata: results.search_metadata,
121
+ cursor: results.cursor,
119
122
  });
120
123
 
121
124
  setCurrentPage((prev) => prev - 1);
122
125
 
123
126
  setPageHistory((prev) => prev.filter((p) => p.page < currentPage));
124
127
  }
125
- }, [currentPage, pageHistory, results.search_metadata, setResults]);
128
+ }, [currentPage, pageHistory, results.search_metadata, setResults, results.cursor]);
126
129
 
127
130
  const resetPagination = useCallback(() => {
128
131
  setCurrentPage(1);
@@ -4,8 +4,6 @@ import { Query } from '@elastic/eui';
4
4
 
5
5
  import { EntityKind } from '@/types';
6
6
 
7
- import { DEFAULT_ENTITY_TAB, VALID_ENTITY_TYPES } from '../components/WfoSearchPage/constants';
8
-
9
7
  interface UseUrlParamsReturn {
10
8
  urlParams: URLSearchParams;
11
9
  query: Query | string;
@@ -34,8 +32,8 @@ export const useUrlParams = (): UseUrlParamsReturn => {
34
32
  });
35
33
 
36
34
  const [selectedEntityTab, setSelectedEntityTab] = useState<EntityKind>(() => {
37
- const tabParam = urlParams.get('tab') as EntityKind;
38
- return tabParam && VALID_ENTITY_TYPES.includes(tabParam) ? tabParam : DEFAULT_ENTITY_TAB;
35
+ const entityKind = urlParams.get('tab') as EntityKind;
36
+ return entityKind && Object.values(EntityKind).includes(entityKind) ? entityKind : EntityKind.SUBSCRIPTION;
39
37
  });
40
38
 
41
39
  const [showFilters, setShowFilters] = useState<boolean>(() => {
@@ -59,7 +57,7 @@ export const useUrlParams = (): UseUrlParamsReturn => {
59
57
  newParams.set('q', queryText);
60
58
  }
61
59
 
62
- if (selectedEntityTab !== DEFAULT_ENTITY_TAB) {
60
+ if (selectedEntityTab !== EntityKind.SUBSCRIPTION) {
63
61
  newParams.set('tab', selectedEntityTab);
64
62
  }
65
63
 
@@ -0,0 +1,13 @@
1
+ import React, { FC } from 'react';
2
+
3
+ import { WfoIconProps } from './WfoIconProps';
4
+
5
+ export const WfoTrashFilled: FC<WfoIconProps> = ({ color = '#000000' }) => (
6
+ <svg xmlns="http://www.w3.org/2000/svg" width={24} height={24} viewBox="0 0 24 24" fill={color}>
7
+ <path
8
+ fillRule="evenodd"
9
+ d="M16.5 4.478v.227a48.816 48.816 0 0 1 3.878.512.75.75 0 1 1-.256 1.478l-.209-.035-1.005 13.07a3 3 0 0 1-2.991 2.77H8.084a3 3 0 0 1-2.991-2.77L4.087 6.66l-.209.035a.75.75 0 0 1-.256-1.478A48.567 48.567 0 0 1 7.5 4.705v-.227c0-1.564 1.213-2.9 2.816-2.951a52.662 52.662 0 0 1 3.369 0c1.603.051 2.815 1.387 2.815 2.951Zm-6.136-1.452a51.196 51.196 0 0 1 3.273 0C14.39 3.05 15 3.684 15 4.478v.113a49.488 49.488 0 0 0-6 0v-.113c0-.794.609-1.428 1.364-1.452Zm-.355 5.945a.75.75 0 1 0-1.5.058l.347 9a.75.75 0 1 0 1.499-.058l-.346-9Zm5.48.058a.75.75 0 1 0-1.498-.058l-.347 9a.75.75 0 0 0 1.5.058l.345-9Z"
10
+ clipRule="evenodd"
11
+ />
12
+ </svg>
13
+ );
@@ -2,11 +2,11 @@ import React, { FC } from 'react';
2
2
 
3
3
  import { WfoIconProps } from './WfoIconProps';
4
4
 
5
- export const WfoXMarkSmall: FC<WfoIconProps> = ({ width = 20, height = 20 }) => (
5
+ export const WfoXMarkSmall: FC<WfoIconProps> = ({ width = 20, height = 20, color = '#000' }) => (
6
6
  <svg width={width} height={height} viewBox="0 -2 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg">
7
7
  <title>icon/x-mark</title>
8
8
  <g id="Symbols" stroke="none" strokeWidth="1" fill="none" fillRule="evenodd">
9
- <g xmlns="http://www.w3.org/2000/svg" fill="currentColor">
9
+ <g xmlns="http://www.w3.org/2000/svg" fill={color}>
10
10
  <path d="M5.28 4.22a.75.75 0 0 0-1.06 1.06L6.94 8l-2.72 2.72a.75.75 0 1 0 1.06 1.06L8 9.06l2.72 2.72a.75.75 0 1 0 1.06-1.06L9.06 8l2.72-2.72a.75.75 0 0 0-1.06-1.06L8 6.94 5.28 4.22Z" />
11
11
  </g>
12
12
  </g>
@@ -41,3 +41,4 @@ export * from './WfoPlannedWork';
41
41
  export * from './WfoCubeFill';
42
42
  export * from './WfoExclamationTriangle';
43
43
  export * from './WfoChartBar';
44
+ export * from './WfoTrashFilled';
@@ -19,7 +19,7 @@
19
19
  "workflows": "Workflows",
20
20
  "darkMode": "Dark mode",
21
21
  "lightMode": "Light mode",
22
- "websocketConnected": "This page receives live updates from the server",
22
+ "websocketConnected": "This page recexives live updates from the server",
23
23
  "websocketDisconnected": "The connection to the server is lost, click the icon or refresh the page",
24
24
  "websocketDisconnectedShort": "WebSocket disconnected, click the icon to reconnect",
25
25
  "resetToDefault": "Reset to default",
@@ -36,6 +36,7 @@
36
36
  "deselect": "Deselect",
37
37
  "close": "Close",
38
38
  "editColumns": "Edit columns",
39
+ "tableSettings": "Table settings",
39
40
  "loading": "Loading",
40
41
  "newSubscription": "New subscription",
41
42
  "newTask": "New task",
@@ -50,7 +51,16 @@
50
51
  "insyncFalse": "out-of-sync",
51
52
  "searchModalTitle": "Search string options",
52
53
  "searchModalText": "<p>Different options are available from free text search covering all data columns, or column specific filtering. Note that: <p></p><ul><li>Hidden columns are included</li> <li>Searching is case-insensitive</li> <li>Ordering of words does not matter (unless it is a Phrase)</li> <li>TSV (text search vector) search only available for subscriptions table</li></ul></p> <p>For example:</p> <li><b>\"l2vpn\"</b> – free text search</li> <li><b>tag:l2vpn</b> – search in a specific column</li><li><b>tag:lp description:test</b> – search in multiple columns</li><li><b>tag:(lp|lr)</b> – multiselect within 1 column</li><li><b>-tag:lp</b> – negated filter</li><li><b>test*</b> – prefix filter</li> <p></p><p><b>Note:</b> Search words containing characters `|-*():\"` may not be valid, as they are part of the search query grammar</p><p>Invalid search strings are for example:</p><ul><li>2a10:e300:fff0::/48</li> <li>\"node123(planned)\"</li> <li>\"node123|planned\"</li></ul>",
53
- "showAllColumnsInDetailView": "Show all columns in detail view"
54
+ "retrieval": "Retrieval",
55
+ "retrieverAuto": "Auto",
56
+ "retrieverFuzzy": "Fuzzy",
57
+ "retrieverSemantic": "Semantic",
58
+ "retrieverHybrid": "Hybrid",
59
+ "createFilter": "Create a filter",
60
+ "applyFilter": "Apply filter",
61
+ "removeFilter": "Remove filter",
62
+ "cancel": "Cancel",
63
+ "loadMore": "Load more"
54
64
  },
55
65
  "confirmationDialog": {
56
66
  "title": "Please confirm",
@@ -85,7 +95,9 @@
85
95
  "startWorkflow": "Start workflow",
86
96
  "resumeTask": "Resume task",
87
97
  "resumeWorkflow": "Resume workflow",
88
- "inputFieldsHaveValidationErrors": "{nrOfValidationErrors} input field(s) have validation errors"
98
+ "inputFieldsHaveValidationErrors": "{nrOfValidationErrors} input field(s) have validation errors",
99
+ "preconditionFailedTitle": "This task cannot be started right now",
100
+ "preconditionFailedFallback": "A precondition for starting this task was not met."
89
101
  },
90
102
  "widgets": {
91
103
  "customer": {
@@ -234,6 +246,12 @@
234
246
  "createScheduleButton": "Create schedule"
235
247
  }
236
248
  },
249
+ "workflowGuide": {
250
+ "title": "User guide of {workflowName}",
251
+ "noGuideAvailable": "No user guide is available for this workflow/task",
252
+ "show": "Show user guide",
253
+ "hide": "Hide user guide"
254
+ },
237
255
  "processes": {
238
256
  "index": {
239
257
  "workflowName": "Workflow",
@@ -358,14 +376,14 @@
358
376
  "validateSubscription": "Validate subscription",
359
377
  "subscription": {
360
378
  "no_modify_deleted_related_objects": "This subscription can not be modified because it contains references to other systems that are deleted.",
361
- "no_modify_in_use_by_subscription": "This subscription can not be {action} as it is used in other subscriptions: {unterminated_in_use_by_subscriptions}",
379
+ "no_modify_in_use_by_subscription": "This subscription can not be {action} as it is used in other subscriptions:",
362
380
  "no_modify_invalid_status": "This subscription can not be modified because of the status: {status}. Only subscriptions with status {usable_when} can be {action}.",
363
381
  "no_modify_workflow": "This subscription can not be modified as the product has no modify workflows.",
364
382
  "no_termination_workflow": "This subscription can not be terminated as the product has no termination workflows.",
365
383
  "no_validate_workflow": "This subscription can not be validated as the product has no validate workflows.",
366
384
  "not_in_sync": "This subscription can not be modified because it is not in-sync. This means there is some error in the registration of the subscription or that it is being modified by another workflow.",
367
- "relations_not_in_sync": "This subscription can not be modified because some related subscriptions are not in-sync. Locked subscriptions: {locked_relations}",
368
- "no_modify_subscription_in_use_by_others": "This subscription can not be modified because it is in use by one or more other subscriptions: {unterminated_parents}",
385
+ "relations_not_in_sync": "This subscription can not be modified because some related subscriptions are not in-sync.\n\nLocked subscriptions:",
386
+ "no_modify_subscription_in_use_by_others": "This subscription can not be modified because it is in use by one or more other subscriptions.\n\nSubscriptions:",
369
387
  "insufficient_workflow_permissions": "Insufficient user permissions to run this workflow",
370
388
  "running_process": "This action cannot be started because this subscription already has a running process or task."
371
389
  }
@@ -513,6 +531,68 @@
513
531
  "logout": "Logout",
514
532
  "aoStatusPage": "A&O application status page"
515
533
  },
534
+ "agent": {
535
+ "title": "Wfo Agent",
536
+ "availability": {
537
+ "unavailable": {
538
+ "title": "Agent Service Not Available",
539
+ "instructions": {
540
+ "setAgentEnvironment": {
541
+ "before": "Set ",
542
+ "after": " in your service environment variables"
543
+ },
544
+ "setSearchEnvironment": {
545
+ "before": "Set ",
546
+ "after": " (agent functionality requires search)"
547
+ },
548
+ "checkVersion": "Ensure your orchestrator-core version supports agent functionality",
549
+ "configureOpenAI": "Configure your OpenAI API key if using OpenAI models",
550
+ "restartService": "Restart your service",
551
+ "checkDockerConfig": "If using Docker, make sure the environment variables are set in docker-compose.yml"
552
+ },
553
+ "documentation": "Please refer to the orchestrator documentation for detailed setup instructions.",
554
+ "retryButton": "Retry Connection"
555
+ }
556
+ },
557
+ "page": {
558
+ "filledParameters": "Filled parameters",
559
+ "emptyGroup": "Empty group",
560
+ "searchQuery": "Search query",
561
+ "activeFilters": "Active filters",
562
+ "noFiltersApplied": "No filters applied",
563
+ "entityType": "Entity type",
564
+ "action": "Action",
565
+ "copilot": {
566
+ "title": "Database assistant",
567
+ "initial": "What can I help you with?"
568
+ },
569
+ "suggestions": {
570
+ "findActiveSubscriptions": "Find active subscriptions",
571
+ "showTerminatedWorkflows": "Show terminated workflows",
572
+ "listAllSubscriptionsAndExport": "List all subscriptions and export them",
573
+ "showActiveSubscriptionsPerMonth": "Show the number of active subscriptions per month"
574
+ },
575
+ "tools": {
576
+ "set_filter_tree": "I'm setting up filters",
577
+ "start_new_search": "I'm starting a new search",
578
+ "run_search": "I'm executing a search",
579
+ "discover_filter_paths": "I'm discovering available filters",
580
+ "run_aggregation": "I'm running aggregations",
581
+ "prepare_export": "I'm preparing the export",
582
+ "get_valid_operators": "I'm getting valid operators",
583
+ "set_temporal_grouping": "I'm setting temporal grouping"
584
+ },
585
+ "planProgress": {
586
+ "planning": "Planning...",
587
+ "completed": "Plan completed",
588
+ "executing": "Executing plan ({completed}/{total})"
589
+ },
590
+ "visualization": {
591
+ "noDataAvailable": "No data available for visualization.",
592
+ "invalidDataStructure": "Invalid data structure."
593
+ }
594
+ }
595
+ },
516
596
  "search": {
517
597
  "availability": {
518
598
  "unavailable": {
@@ -534,7 +614,7 @@
534
614
  "selectFieldFirst": "Select a field first",
535
615
  "maxNestingDepth": "Maximum nesting depth reached",
536
616
  "addNestedGroup": "Add nested group",
537
- "addCondition": "Add condition",
617
+ "addRule": "Add rule",
538
618
  "addGroup": "Add group",
539
619
  "removeGroup": "Remove group",
540
620
  "emptyGroupDescription": "Add conditions or nested groups to build your filter.",
@@ -581,7 +661,14 @@
581
661
  "valueLabel": "Value",
582
662
  "fieldsGroupLabel": "Fields",
583
663
  "componentsGroupLabel": "Components",
584
- "pathsCount": "{count} paths"
664
+ "pathsCount": "{count} paths",
665
+ "id": "Id",
666
+ "type": "Entity type",
667
+ "title": "Title",
668
+ "score": "Score",
669
+ "matchingField": "Matching field",
670
+ "perfectMatch": "Perfect match",
671
+ "removeRule": "Remove rule"
585
672
  },
586
673
  "tabs": {
587
674
  "subscriptions": "Subscriptions",
@@ -36,6 +36,7 @@
36
36
  "deselect": "Deselecteer",
37
37
  "close": "Sluiten",
38
38
  "editColumns": "Wijzig kolommen",
39
+ "tableSettings": "Tabel instellingen",
39
40
  "loading": "Laden",
40
41
  "newSubscription": "Nieuwe subscription",
41
42
  "newTask": "Nieuwe task",
@@ -50,7 +51,17 @@
50
51
  "insyncFalse": "out-of-sync",
51
52
  "showAllColumnsInDetailView": "Toon alle kolommen in detailweergave",
52
53
  "searchModalTitle": "Zoekwoorden opties",
53
- "searchModalText": "<p>Er zijn verschillende opties beschikbaar: zoeken in vrije tekst voor alle datakolommen en specifiek per kolom te filteren. Houd er rekening mee dat: </p><p></p><ul><li>Verborgen kolommen zijn inbegrepen</li> <li>Zoeken is niet hoofdlettergevoelig</li> <li>De volgorde van woorden doet er niet toe (tenzij het een quote)</li> <li>TSV (text search vector) zoekactie alleen beschikbaar voor subscription tabel</li></ul><p>Bijvoorbeeld:</p> <li><b>\"l2vpn\"</b> – vrije tekst search</li> <li><b>tag:l2vpn</b> – zoeken in een specifieke kolom</li> <li><b>tag:lp beschrijving: test</b> – zoeken in meerdere kolommen</li><li><b>tag:(lp|lr)</b> – multi select binnen 1 kolom</li> <li><b>-tag:lp</b> – omgekeerd filteren</li> <li><b>test*</b> – prefix filter</li> <p></p><p><b>Opmerking:</b> Zoeken op woorden die tekens `|-*():\"` bevatten, zijn mogelijk niet geldig, omdat ze deel uitmaken van de grammatica van de zoekfunctie</p><p>Ongeldige zoekwoorden zijn bijvoorbeeld:</p><ul><li>2a10:e300:fff0::/48</li> <li>\"node123(gepland)\"</li> <li>\"node123|gepland\"</li></ul>"
54
+ "searchModalText": "<p>Er zijn verschillende opties beschikbaar: zoeken in vrije tekst voor alle datakolommen en specifiek per kolom te filteren. Houd er rekening mee dat: </p><p></p><ul><li>Verborgen kolommen zijn inbegrepen</li> <li>Zoeken is niet hoofdlettergevoelig</li> <li>De volgorde van woorden doet er niet toe (tenzij het een quote)</li> <li>TSV (text search vector) zoekactie alleen beschikbaar voor subscription tabel</li></ul><p>Bijvoorbeeld:</p> <li><b>\"l2vpn\"</b> – vrije tekst search</li> <li><b>tag:l2vpn</b> – zoeken in een specifieke kolom</li> <li><b>tag:lp beschrijving: test</b> – zoeken in meerdere kolommen</li><li><b>tag:(lp|lr)</b> – multi select binnen 1 kolom</li> <li><b>-tag:lp</b> – omgekeerd filteren</li> <li><b>test*</b> – prefix filter</li> <p></p><p><b>Opmerking:</b> Zoeken op woorden die tekens `|-*():\"` bevatten, zijn mogelijk niet geldig, omdat ze deel uitmaken van de grammatica van de zoekfunctie</p><p>Ongeldige zoekwoorden zijn bijvoorbeeld:</p><ul><li>2a10:e300:fff0::/48</li> <li>\"node123(gepland)\"</li> <li>\"node123|gepland\"</li></ul>",
55
+ "retrieval": "Retrieval",
56
+ "retrieverAuto": "Auto",
57
+ "retrieverFuzzy": "Fuzzy",
58
+ "retrieverSemantic": "Semantic",
59
+ "retrieverHybrid": "Hybride",
60
+ "createFilter": "Filter",
61
+ "applyFilter": "Pas filter tpe",
62
+ "removeFilter": "Verwijder filter",
63
+ "cancel": "Cancel",
64
+ "loadMore": "Meer laden"
54
65
  },
55
66
  "confirmationDialog": {
56
67
  "title": "Graag bevestigen",
@@ -85,7 +96,9 @@
85
96
  "startWorkflow": "Start workflow",
86
97
  "resumeTask": "Hervat task",
87
98
  "resumeWorkflow": "Hervat workflow",
88
- "inputFieldsHaveValidationErrors": "{nrOfValidationErrors} input veld(en) hebben validatiefouten"
99
+ "inputFieldsHaveValidationErrors": "{nrOfValidationErrors} input veld(en) hebben validatiefouten",
100
+ "preconditionFailedTitle": "Deze workflow kan op dit moment niet worden gestart",
101
+ "preconditionFailedFallback": "Aan een voorwaarde voor het starten van deze workflow is niet voldaan."
89
102
  },
90
103
  "widgets": {
91
104
  "customer": {
@@ -233,6 +246,12 @@
233
246
  "createScheduleButton": "Maak schema"
234
247
  }
235
248
  },
249
+ "workflowGuide": {
250
+ "title": "Gebruikershandleiding van {workflowName}",
251
+ "noGuideAvailable": "Er is geen gebruikershandleiding beschikbaar voor deze workflow/taak",
252
+ "show": "Toon gebruikershandleiding",
253
+ "hide": "Verberg gebruikershandleiding"
254
+ },
236
255
  "processes": {
237
256
  "index": {
238
257
  "workflowName": "Workflow naam",
@@ -357,14 +376,14 @@
357
376
  "lockedBySubscriptions": "Deze actie is geblokkeerd door de volgende subscriptions:",
358
377
  "subscription": {
359
378
  "no_modify_deleted_related_objects": "Deze subscription kan niet worden gewijzigd omdat het verwijzingen bevat naar andere systemen die zijn verwijderd.",
360
- "no_modify_in_use_by_subscription": "Deze subscription kan niet worden {gewijzigd} omdat het wordt gebruikt in andere subscriptions: {unterminated_in_use_by_subscriptions}",
379
+ "no_modify_in_use_by_subscription": "Deze subscription kan niet worden {gewijzigd} omdat het wordt gebruikt in andere subscriptions:",
361
380
  "no_modify_invalid_status": "Deze subscription kan niet worden gewijzigd vanwege de status: {status}. Alleen abonnementen met de status {usable_when} kunnen worden {action}.",
362
381
  "no_modify_workflow": "Deze subscription kan niet worden gewijzigd omdat het product geen modify workflows heeft.",
363
382
  "no_termination_workflow": "Deze subscription kan niet worden beëindigd omdat het product geen termination workflows heeft.",
364
383
  "no_validate_workflow": "Deze subscription kan niet worden gevalideerd omdat het product geen validate workflows heeft.",
365
384
  "not_in_sync": "Deze subscription kan niet worden gewijzigd omdat het niet in-sync is. Dit betekent dat er een fout zit in de registratie van de subscription of dat het wordt gewijzigd door een andere workflow.",
366
- "relations_not_in_sync": "Deze subscription kan niet worden gewijzigd omdat sommige gerelateerde subscriptions niet in-sync zijn. Geblokkeerde subscriptions: {locked_relations}",
367
- "no_modify_subscription_in_use_by_others": "Deze subscription kan niet worden gewijzigd omdat het in gebruik is door een of meer andere subscriptions: {unterminated_parents}",
385
+ "relations_not_in_sync": "Deze subscription kan niet worden gewijzigd omdat sommige gerelateerde subscriptions niet in-sync zijn.\n\nGeblokkeerde subscriptions:",
386
+ "no_modify_subscription_in_use_by_others": "Deze subscription kan niet worden gewijzigd omdat het in gebruik is door een of meer andere subscriptions.\n\nSubscriptions:",
368
387
  "insufficient_workflow_permissions": "Onvoldoende rechten om deze actie uit te kunnen voeren",
369
388
  "running_process": "Deze actie kan niet worden gestart omdat deze subscription al een lopend proces of taak heeft."
370
389
  }