@orchestrator-ui/orchestrator-ui-components 8.3.0 → 8.4.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 (45) hide show
  1. package/.turbo/turbo-build.log +8 -8
  2. package/.turbo/turbo-lint.log +1 -1
  3. package/.turbo/turbo-test.log +6 -6
  4. package/CHANGELOG.md +15 -0
  5. package/dist/index.d.ts +72 -1034
  6. package/dist/index.js +341 -1505
  7. package/dist/index.js.map +1 -1
  8. package/package.json +10 -14
  9. package/src/components/WfoAvailabilityCheck/WfoAvailabilityCheck.tsx +1 -1
  10. package/src/components/WfoBackendUnavailable/WfoBackendUnavailable.tsx +2 -31
  11. package/src/components/WfoMetadata/WfoMetadataStatusField.tsx +18 -1
  12. package/src/components/WfoProcessList/WfoProcessListDeltaPopover.tsx +1 -1
  13. package/src/components/WfoTable/WfoAdvancedTable/WfoAdvancedTable.tsx +8 -4
  14. package/src/components/WfoWorkflowSteps/WfoStep/WfoStep.tsx +35 -24
  15. package/src/components/index.ts +0 -1
  16. package/src/configuration/version.ts +1 -1
  17. package/src/hooks/useBackendAvailability.ts +1 -24
  18. package/src/messages/en-GB.json +2 -63
  19. package/src/messages/nl-NL.json +1 -0
  20. package/src/pages/metadata/WfoScheduleTaskFormPage.tsx +1 -424
  21. package/src/rtk/endpoints/availability.ts +1 -17
  22. package/src/rtk/endpoints/index.ts +0 -1
  23. package/src/utils/getDefaultTableConfig.ts +1 -1
  24. package/src/components/WfoAgent/ExportButton/ExportButton.tsx +0 -86
  25. package/src/components/WfoAgent/ExportButton/index.ts +0 -1
  26. package/src/components/WfoAgent/ExportButton/styles.ts +0 -69
  27. package/src/components/WfoAgent/WfoAgent/WfoAgent.tsx +0 -147
  28. package/src/components/WfoAgent/WfoAgent/index.ts +0 -1
  29. package/src/components/WfoAgent/WfoAgentChart/WfoAgentLineChart.tsx +0 -52
  30. package/src/components/WfoAgent/WfoAgentChart/WfoAgentPieChart.tsx +0 -55
  31. package/src/components/WfoAgent/WfoAgentChart/index.ts +0 -2
  32. package/src/components/WfoAgent/WfoAgentChart/styles.ts +0 -6
  33. package/src/components/WfoAgent/WfoAgentTable/WfoAgentTable.tsx +0 -66
  34. package/src/components/WfoAgent/WfoAgentTable/index.ts +0 -1
  35. package/src/components/WfoAgent/WfoAgentVisualization/WfoAgentVisualization.tsx +0 -54
  36. package/src/components/WfoAgent/WfoAgentVisualization/index.ts +0 -1
  37. package/src/components/WfoAgent/WfoPlanProgress/WfoPlanProgress.tsx +0 -107
  38. package/src/components/WfoAgent/WfoPlanProgress/index.ts +0 -1
  39. package/src/components/WfoAgent/WfoPlanProgress/styles.ts +0 -62
  40. package/src/components/WfoAgent/WfoQueryArtifact/WfoQueryArtifact.tsx +0 -40
  41. package/src/components/WfoAgent/WfoQueryArtifact/index.ts +0 -1
  42. package/src/components/WfoAgent/index.ts +0 -7
  43. package/src/hooks/useAgentPlanEvents.ts +0 -187
  44. package/src/rtk/endpoints/agentExport.ts +0 -23
  45. package/src/rtk/endpoints/agentQueryResults.ts +0 -19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orchestrator-ui/orchestrator-ui-components",
3
- "version": "8.3.0",
3
+ "version": "8.4.0",
4
4
  "license": "Apache-2.0",
5
5
  "description": "Library of UI Components used to display the workflow orchestrator frontend",
6
6
  "author": {
@@ -34,16 +34,11 @@
34
34
  "dev": "tsup --watch"
35
35
  },
36
36
  "dependencies": {
37
- "@ag-ui/client": "^0.0.53",
38
- "@copilotkit/react-core": "^1.57.0",
39
- "@copilotkit/react-ui": "^1.57.0",
40
- "@copilotkit/runtime": "^1.57.0",
41
- "@elastic/charts": "^64.1.0",
42
37
  "@emotion/css": "^11.11.2",
43
38
  "@emotion/react": "^11.11.4",
44
39
  "@monaco-editor/react": "^4.7.0",
45
40
  "@rtk-query/graphql-request-base-query": "^2.3.1",
46
- "@tanstack/react-virtual": "^3.13.13",
41
+ "@tanstack/react-virtual": "^3.13.24",
47
42
  "graphql-request": "^6.1.0",
48
43
  "invariant": "^2.2.4",
49
44
  "lodash": "^4.17.21",
@@ -57,17 +52,17 @@
57
52
  "pydantic-forms": "^2.0.0",
58
53
  "react-diff-view": "^3.2.0",
59
54
  "react-draggable": "^4.4.6",
60
- "react-redux": "^9.1.2",
55
+ "react-redux": "^9.3.0",
61
56
  "react-select": "^5.8.0",
62
57
  "scroll-into-view": "^1.16.2",
63
58
  "unidiff": "^1.0.4",
64
59
  "use-query-params": "^2.2.2"
65
60
  },
66
61
  "devDependencies": {
67
- "@elastic/eui": "^113.3.0",
62
+ "@elastic/eui": "^114.3.0",
68
63
  "@orchestrator-ui/eslint-config-custom": "*",
69
64
  "@orchestrator-ui/jest-config": "*",
70
- "@reduxjs/toolkit": "^2.0.1",
65
+ "@reduxjs/toolkit": "^2.12.0",
71
66
  "@testing-library/jest-dom": "^6.9.0",
72
67
  "@testing-library/react": "^16.0.1",
73
68
  "@testing-library/user-event": "^14.5.2",
@@ -75,16 +70,17 @@
75
70
  "@types/jest": "^30.0.0",
76
71
  "@types/object-hash": "^3.0.6",
77
72
  "@types/scroll-into-view": "^1.16.3",
78
- "babel-jest": "^30.2.0",
79
- "jest": "^30.2.0",
80
- "jest-environment-jsdom": "^30.2.0",
73
+ "babel-jest": "^30.4.1",
74
+ "jest": "^30.4.2",
75
+ "jest-environment-jsdom": "^30.4.1",
81
76
  "jest-watch-typeahead": "^3.0.1",
82
77
  "tsup": "^8.5.0",
83
78
  "typescript": "^5.5.2"
84
79
  },
85
80
  "peerDependencies": {
86
81
  "@elastic/eui": "^113.1.0",
87
- "next": "^15.5.9",
82
+ "next": "^15.5.18",
83
+ "next-intl": "^4.9.1",
88
84
  "react": "^18.3.1",
89
85
  "react-dom": "^18.3.1"
90
86
  },
@@ -4,7 +4,7 @@ import { WfoBackendUnavailable } from '@/components/WfoBackendUnavailable';
4
4
  import { BackendFeatureStatus } from '@/hooks';
5
5
 
6
6
  interface WfoAvailabilityCheckProps {
7
- featureType: 'search' | 'agent';
7
+ featureType: 'search';
8
8
  availability: BackendFeatureStatus;
9
9
  children: ReactNode;
10
10
  }
@@ -5,27 +5,14 @@ import { useTranslations } from 'next-intl';
5
5
  import { EuiButton, EuiCallOut, EuiCode, EuiSpacer, EuiText } from '@elastic/eui';
6
6
 
7
7
  interface WfoBackendUnavailableProps {
8
- featureType: 'search' | 'agent';
8
+ featureType: 'search';
9
9
  onRetry?: () => void;
10
10
  }
11
11
 
12
12
  export const WfoBackendUnavailable: FC<WfoBackendUnavailableProps> = ({ featureType, onRetry }) => {
13
13
  const t = useTranslations(`${featureType}.availability.unavailable`);
14
14
 
15
- const getInstructionSteps = () => {
16
- if (featureType === 'search') {
17
- return ['setEnvironmentVariable', 'checkVersion', 'restartService', 'checkDockerConfig'];
18
- } else {
19
- return [
20
- 'setAgentEnvironment',
21
- 'setSearchEnvironment',
22
- 'checkVersion',
23
- 'configureOpenAI',
24
- 'restartService',
25
- 'checkDockerConfig',
26
- ];
27
- }
28
- };
15
+ const getInstructionSteps = () => ['setEnvironmentVariable', 'checkVersion', 'restartService', 'checkDockerConfig'];
29
16
 
30
17
  const renderInstruction = (step: string) => {
31
18
  if (step === 'setEnvironmentVariable') {
@@ -36,22 +23,6 @@ export const WfoBackendUnavailable: FC<WfoBackendUnavailableProps> = ({ featureT
36
23
  {t('instructions.setEnvironmentVariable.after')}
37
24
  </>
38
25
  );
39
- } else if (step === 'setAgentEnvironment') {
40
- return (
41
- <>
42
- {t('instructions.setAgentEnvironment.before')}
43
- <EuiCode>AGENT_ENABLED=True</EuiCode>
44
- {t('instructions.setAgentEnvironment.after')}
45
- </>
46
- );
47
- } else if (step === 'setSearchEnvironment') {
48
- return (
49
- <>
50
- {t('instructions.setSearchEnvironment.before')}
51
- <EuiCode>SEARCH_ENABLED=True</EuiCode>
52
- {t('instructions.setSearchEnvironment.after')}
53
- </>
54
- );
55
26
  } else {
56
27
  return t(`instructions.${step}`);
57
28
  }
@@ -21,6 +21,23 @@ export const WfoMetadataStatusField: FC<WfoMetadataStatusFieldProps> = ({ onSave
21
21
  </EuiButtonEmpty>
22
22
  );
23
23
 
24
+ const wrappedButton = (
25
+ <div
26
+ css={{
27
+ ':hover': {
28
+ '.euiIcon': {
29
+ visibility: 'visible',
30
+ },
31
+ },
32
+ '.euiIcon': {
33
+ visibility: isPopoverOpen ? 'visible' : 'hidden',
34
+ },
35
+ }}
36
+ >
37
+ {button}
38
+ </div>
39
+ );
40
+
24
41
  const handleOnSelectOption = (updatedStatus: ProductLifecycleStatus) => {
25
42
  setPopover(false);
26
43
  onSave(updatedStatus);
@@ -37,7 +54,7 @@ export const WfoMetadataStatusField: FC<WfoMetadataStatusFieldProps> = ({ onSave
37
54
  <WfoPopover
38
55
  id={'productStatusPopover'}
39
56
  isLoading={false}
40
- button={button}
57
+ button={wrappedButton}
41
58
  isPopoverOpen={isPopoverOpen}
42
59
  closePopover={() => setPopover(false)}
43
60
  PopoverContent={setNewStatusBadges}
@@ -36,7 +36,7 @@ export const WfoProcessListDeltaPopover: FC<WfoProcessListDeltaPopoverProps> = (
36
36
 
37
37
  const iconButton = (
38
38
  <EuiButtonIcon
39
- iconType={() => <WfoCode color={theme.colors.primary} />}
39
+ iconType={() => <WfoCode color={theme.colors.textDisabled} />}
40
40
  onClick={() => setPopoverOpen(!isPopoverOpen)}
41
41
  aria-label={t('showDelta')}
42
42
  isLoading={isFetching}
@@ -16,6 +16,7 @@ import {
16
16
  WfoKeyValueTable,
17
17
  WfoKeyValueTableDataType,
18
18
  WfoSearchField,
19
+ WfoToolTip,
19
20
  clearTableConfigFromLocalStorage,
20
21
  setTableConfigToLocalStorage,
21
22
  } from '@/components';
@@ -60,7 +61,6 @@ export const WfoAdvancedTable = <T extends object>({
60
61
  ...tableProps
61
62
  }: WfoAdvancedTableProps<T>) => {
62
63
  const { theme } = useOrchestratorTheme();
63
-
64
64
  const [hiddenColumns, setHiddenColumns] = useState<TableColumnKeys<T>>(defaultHiddenColumns);
65
65
  const [showSettingsModal, setShowSettingsModal] = useState(false);
66
66
  const [selectedDataForDetailModal, setSelectedDataForDetailModal] = useState<T | undefined>(undefined);
@@ -80,9 +80,13 @@ export const WfoAdvancedTable = <T extends object>({
80
80
  columnType: ColumnType.CONTROL,
81
81
  width: '36px',
82
82
  renderControl: (row) => (
83
- <EuiFlexItem css={{ cursor: 'pointer' }} onClick={() => setSelectedDataForDetailModal(row)}>
84
- <WfoArrowsExpand color={theme.colors.textDisabled} />
85
- </EuiFlexItem>
83
+ <WfoToolTip tooltipContent={t('showAllColumnsInDetailView')}>
84
+ <EuiButtonIcon
85
+ iconType={() => <WfoArrowsExpand color={theme.colors.textDisabled} />}
86
+ onClick={() => setSelectedDataForDetailModal(row)}
87
+ aria-label={t('showAllColumnsInDetailView')}
88
+ />
89
+ </WfoToolTip>
86
90
  ),
87
91
  },
88
92
  };
@@ -100,13 +100,15 @@ export const WfoStep = React.forwardRef(
100
100
  );
101
101
  };
102
102
 
103
- const handle = useCallback(
104
- (newCodeView: string) => {
105
- setCodeView(newCodeView as CodeView);
103
+ const handleCodeViewChange = useCallback(
104
+ (newCodeView: CodeView) => {
105
+ setCodeView(newCodeView);
106
106
  },
107
107
  [setCodeView],
108
108
  );
109
+
109
110
  const shouldExpand: boolean = isExpanded && hasStepContent;
111
+
110
112
  return (
111
113
  <div ref={ref}>
112
114
  <EuiPanel>
@@ -125,7 +127,9 @@ export const WfoStep = React.forwardRef(
125
127
  <EuiFlexGroup css={stepRowStyle}>
126
128
  {step.completed && (
127
129
  <>
128
- {isExpanded && <WfoCodeViewSelector codeView={codeView} handleCodeViewChange={handle} />}
130
+ {isExpanded && (
131
+ <WfoCodeViewSelector codeView={codeView} handleCodeViewChange={handleCodeViewChange} />
132
+ )}
129
133
  <EuiFlexItem grow={0} css={stepHeaderRightStyle}>
130
134
  <EuiText css={stepDurationStyle}>{t('duration')}</EuiText>
131
135
  <EuiText size="m">{calculateTimeDifference(startedAt, completedAt)}</EuiText>
@@ -144,33 +148,40 @@ export const WfoStep = React.forwardRef(
144
148
  </EuiFlexItem>
145
149
  </EuiFlexGroup>
146
150
  </EuiFlexGroup>
147
- {shouldExpand && (
151
+ {shouldExpand && !hasHtmlMail && (
148
152
  <EuiFlexGroup direction="column" gutterSize="none">
153
+ <EuiFlexItem>
154
+ {codeView === CodeView.TABLE ?
155
+ <WfoTableCodeBlock stepState={stepContent} />
156
+ : codeView === CodeView.RAW ?
157
+ <WfoJsonCodeBlock data={stepContent} />
158
+ : <WfoMonacoCodeBlock data={stepContent} />}
159
+ </EuiFlexItem>
149
160
  <EuiFlexItem grow={1}>
150
161
  {overrideStepDetail?.stepBody && <overrideStepDetail.stepBody step={step} />}
151
162
  </EuiFlexItem>
152
- <EuiFlexItem>
153
- {shouldExpand
154
- && !hasHtmlMail
155
- && (codeView === CodeView.TABLE ? <WfoTableCodeBlock stepState={stepContent} />
156
- : codeView === CodeView.RAW ? <WfoJsonCodeBlock data={stepContent} />
157
- : <WfoMonacoCodeBlock data={stepContent} />)}
158
- {isExpanded && hasHtmlMail && (
159
- <div css={stepEmailContainerStyle}>
160
- {displayMailConfirmation(step.stateDelta.confirmation_mail as EmailState)}
161
- </div>
162
- )}
163
- {step.status === StepStatus.SUSPEND && userInputForm && (
164
- <WfoStepForm
165
- userInputForm={userInputForm}
166
- isTask={isTask}
167
- processId={processId ?? ''}
168
- userPermissions={userPermissions}
169
- />
170
- )}
163
+ </EuiFlexGroup>
164
+ )}
165
+ {step.status === StepStatus.SUSPEND && userInputForm && (
166
+ <EuiFlexGroup direction="column" gutterSize="none">
167
+ <EuiFlexItem grow={1}>
168
+ <WfoStepForm
169
+ userInputForm={userInputForm}
170
+ isTask={isTask}
171
+ processId={processId ?? ''}
172
+ userPermissions={userPermissions}
173
+ />
174
+ </EuiFlexItem>
175
+ <EuiFlexItem grow={1}>
176
+ {overrideStepDetail?.stepBody && <overrideStepDetail.stepBody step={step} />}
171
177
  </EuiFlexItem>
172
178
  </EuiFlexGroup>
173
179
  )}
180
+ {isExpanded && hasHtmlMail && (
181
+ <div css={stepEmailContainerStyle}>
182
+ {displayMailConfirmation(step.stateDelta.confirmation_mail as EmailState)}
183
+ </div>
184
+ )}
174
185
  </EuiPanel>
175
186
  </div>
176
187
  );
@@ -38,7 +38,6 @@ export * from './WfoTableCodeBlock';
38
38
  export * from './WfoInlineEdit';
39
39
  export * from './WfoPydanticForm';
40
40
  export * from './WfoSearchPage';
41
- export * from './WfoAgent';
42
41
  export * from './WfoMonacoCodeBlock';
43
42
  export * from './WfoLogoSpinner';
44
43
  export * from './WfoPopover';
@@ -1 +1 @@
1
- export const ORCHESTRATOR_UI_LIBRARY_VERSION = '8.3.0';
1
+ export const ORCHESTRATOR_UI_LIBRARY_VERSION = '8.4.0';
@@ -3,7 +3,7 @@ import { GraphQLError } from 'graphql';
3
3
  import { SerializedError } from '@reduxjs/toolkit';
4
4
  import { FetchBaseQueryError } from '@reduxjs/toolkit/query';
5
5
 
6
- import { useCheckAgentAvailabilityQuery, useCheckSearchAvailabilityQuery } from '@/rtk/endpoints/availability';
6
+ import { useCheckSearchAvailabilityQuery } from '@/rtk/endpoints/availability';
7
7
 
8
8
  export interface BackendFeatureStatus {
9
9
  isAvailable: boolean;
@@ -42,26 +42,3 @@ export const useSearchAvailability = (): BackendFeatureStatus => {
42
42
  isLoading: false,
43
43
  };
44
44
  };
45
-
46
- export const useAgentAvailability = (): BackendFeatureStatus => {
47
- const { isLoading: agentLoading, error: agentError } = useCheckAgentAvailabilityQuery();
48
-
49
- const { isLoading: searchLoading, error: searchError } = useCheckSearchAvailabilityQuery();
50
-
51
- if (agentLoading || searchLoading) {
52
- return {
53
- isAvailable: false,
54
- isLoading: true,
55
- };
56
- }
57
-
58
- const agentNotFound = agentError ? isNotFoundError(agentError) : false;
59
- const searchNotFound = searchError ? isNotFoundError(searchError) : false;
60
-
61
- const isAvailable = !agentNotFound && !searchNotFound;
62
-
63
- return {
64
- isAvailable,
65
- isLoading: false,
66
- };
67
- };
@@ -49,7 +49,8 @@
49
49
  "insyncTrue": "in-sync",
50
50
  "insyncFalse": "out-of-sync",
51
51
  "searchModalTitle": "Search string options",
52
- "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>"
52
+ "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"
53
54
  },
54
55
  "confirmationDialog": {
55
56
  "title": "Please confirm",
@@ -512,68 +513,6 @@
512
513
  "logout": "Logout",
513
514
  "aoStatusPage": "A&O application status page"
514
515
  },
515
- "agent": {
516
- "title": "Wfo Agent",
517
- "availability": {
518
- "unavailable": {
519
- "title": "Agent Service Not Available",
520
- "instructions": {
521
- "setAgentEnvironment": {
522
- "before": "Set ",
523
- "after": " in your service environment variables"
524
- },
525
- "setSearchEnvironment": {
526
- "before": "Set ",
527
- "after": " (agent functionality requires search)"
528
- },
529
- "checkVersion": "Ensure your orchestrator-core version supports agent functionality",
530
- "configureOpenAI": "Configure your OpenAI API key if using OpenAI models",
531
- "restartService": "Restart your service",
532
- "checkDockerConfig": "If using Docker, make sure the environment variables are set in docker-compose.yml"
533
- },
534
- "documentation": "Please refer to the orchestrator documentation for detailed setup instructions.",
535
- "retryButton": "Retry Connection"
536
- }
537
- },
538
- "page": {
539
- "filledParameters": "Filled parameters",
540
- "emptyGroup": "Empty group",
541
- "searchQuery": "Search query",
542
- "activeFilters": "Active filters",
543
- "noFiltersApplied": "No filters applied",
544
- "entityType": "Entity type",
545
- "action": "Action",
546
- "copilot": {
547
- "title": "Database assistant",
548
- "initial": "What can I help you with?"
549
- },
550
- "suggestions": {
551
- "findActiveSubscriptions": "Find active subscriptions",
552
- "showTerminatedWorkflows": "Show terminated workflows",
553
- "listAllSubscriptionsAndExport": "List all subscriptions and export them",
554
- "showActiveSubscriptionsPerMonth": "Show the number of active subscriptions per month"
555
- },
556
- "tools": {
557
- "set_filter_tree": "I'm setting up filters",
558
- "start_new_search": "I'm starting a new search",
559
- "run_search": "I'm executing a search",
560
- "discover_filter_paths": "I'm discovering available filters",
561
- "run_aggregation": "I'm running aggregations",
562
- "prepare_export": "I'm preparing the export",
563
- "get_valid_operators": "I'm getting valid operators",
564
- "set_temporal_grouping": "I'm setting temporal grouping"
565
- },
566
- "planProgress": {
567
- "planning": "Planning...",
568
- "completed": "Plan completed",
569
- "executing": "Executing plan ({completed}/{total})"
570
- },
571
- "visualization": {
572
- "noDataAvailable": "No data available for visualization.",
573
- "invalidDataStructure": "Invalid data structure."
574
- }
575
- }
576
- },
577
516
  "search": {
578
517
  "availability": {
579
518
  "unavailable": {
@@ -48,6 +48,7 @@
48
48
  "unauthorizedPage": "Niet geautoriseerd om deze pagina te bekijken",
49
49
  "insyncTrue": "in-sync",
50
50
  "insyncFalse": "out-of-sync",
51
+ "showAllColumnsInDetailView": "Toon alle kolommen in detailweergave",
51
52
  "searchModalTitle": "Zoekwoorden opties",
52
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>"
53
54
  },