@orchestrator-ui/orchestrator-ui-components 2.15.0 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orchestrator-ui/orchestrator-ui-components",
3
- "version": "2.15.0",
3
+ "version": "3.0.1",
4
4
  "license": "Apache-2.0",
5
5
  "description": "Library of UI Components used to display the workflow orchestrator frontend",
6
6
  "author": {
@@ -1,16 +1,21 @@
1
1
  import React from 'react';
2
2
 
3
- import { useOrchestratorTheme } from '../../../hooks';
4
- import { BadgeType } from '../../../types';
3
+ import Link from 'next/link';
4
+
5
+ import { useOrchestratorTheme } from '@/hooks';
6
+ import { BadgeType } from '@/types';
7
+
5
8
  import { WfoBadge } from '../WfoBadge';
6
9
 
7
10
  export type WfoProductBlockBadgeProps = {
8
11
  children: string;
12
+ link?: string;
9
13
  badgeType: BadgeType;
10
14
  };
11
15
 
12
16
  export function WfoProductBlockBadge({
13
17
  children,
18
+ link,
14
19
  badgeType,
15
20
  }: WfoProductBlockBadgeProps) {
16
21
  const { theme, toSecondaryColor } = useOrchestratorTheme();
@@ -66,7 +71,13 @@ export function WfoProductBlockBadge({
66
71
 
67
72
  return (
68
73
  <WfoBadge textColor={textColor} color={badgeColor}>
69
- {children}
74
+ {link ? (
75
+ <Link css={{ color: textColor }} href={link}>
76
+ {children}
77
+ </Link>
78
+ ) : (
79
+ children
80
+ )}
70
81
  </WfoBadge>
71
82
  );
72
83
  }
@@ -18,6 +18,7 @@ import React, { useContext, useState } from 'react';
18
18
 
19
19
  import invariant from 'invariant';
20
20
  import { JSONSchema6 } from 'json-schema';
21
+ import { isObject } from 'lodash';
21
22
  import cloneDeep from 'lodash/cloneDeep';
22
23
  import get from 'lodash/get';
23
24
  import { useTranslations } from 'next-intl';
@@ -393,10 +394,16 @@ function fillPreselection(form: JSONSchema6, router: NextRouter) {
393
394
  // ipvany preselect
394
395
  if (queryParams.prefix && queryParams.prefixlen) {
395
396
  if (form && form.properties.ip_prefix) {
396
- const ipPrefixInput = form.properties
397
- .ip_prefix as UniformJSONSchemaProperty;
397
+ const ipPrefix = isObject(form.properties.ip_prefix)
398
+ ? form.properties.ip_prefix
399
+ : {};
400
+ const ipPrefixInput = {
401
+ ...ipPrefix,
402
+ uniforms: { prefixMin: 0 },
403
+ default: {},
404
+ } as UniformJSONSchemaProperty;
398
405
  if (!ipPrefixInput.uniforms) {
399
- ipPrefixInput.uniforms = {};
406
+ ipPrefixInput.uniforms = { prefixMin: 0 };
400
407
  }
401
408
  ipPrefixInput.default = `${queryParams.prefix}/${queryParams.prefixlen}`;
402
409
  ipPrefixInput.uniforms.prefixMin = parseInt(
@@ -404,6 +411,13 @@ function fillPreselection(form: JSONSchema6, router: NextRouter) {
404
411
  (queryParams.prefixlen as string),
405
412
  10,
406
413
  );
414
+ return {
415
+ ...form,
416
+ properties: {
417
+ ...form.properties,
418
+ ip_prefix: ipPrefixInput,
419
+ },
420
+ };
407
421
  }
408
422
  }
409
423
  }
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
 
3
- import { useOrchestratorTheme } from '../../hooks';
4
- import { WfoCheckmarkCircleFill, WfoMinusCircleOutline } from '../../icons';
3
+ import { useOrchestratorTheme } from '@/hooks';
4
+ import { WfoCheckmarkCircleFill, WfoMinusCircleFill } from '@/icons';
5
5
 
6
6
  interface WfoInsyncIconProps {
7
7
  inSync: boolean;
@@ -17,10 +17,10 @@ export const WfoInsyncIcon = ({ inSync }: WfoInsyncIconProps) => {
17
17
  color={theme.colors.primary}
18
18
  />
19
19
  ) : (
20
- <WfoMinusCircleOutline
20
+ <WfoMinusCircleFill
21
21
  height={20}
22
22
  width={20}
23
- color={theme.colors.mediumShade}
23
+ color={theme.colors.danger}
24
24
  />
25
25
  );
26
26
  };
@@ -104,7 +104,7 @@ export const WfoProcessesList = ({
104
104
  workflowName: {
105
105
  columnType: ColumnType.DATA,
106
106
  label: t('workflowName'),
107
- width: '20%',
107
+ width: '225px',
108
108
  renderData: (value, { processId }) => (
109
109
  <Link href={`${PATH_WORKFLOWS}/${processId}`}>{value}</Link>
110
110
  ),
@@ -113,46 +113,46 @@ export const WfoProcessesList = ({
113
113
  lastStep: {
114
114
  columnType: ColumnType.DATA,
115
115
  label: t('step'),
116
- width: '15%',
116
+ width: '375px',
117
117
  },
118
118
  lastStatus: {
119
119
  columnType: ColumnType.DATA,
120
120
  label: t('status'),
121
- width: '100',
122
121
  renderData: (cellValue) => (
123
122
  <WfoProcessStatusBadge processStatus={cellValue} />
124
123
  ),
124
+ width: '150px',
125
125
  },
126
126
  workflowTarget: {
127
127
  columnType: ColumnType.DATA,
128
128
  label: t('workflowTarget'),
129
- width: '100',
130
129
  renderData: (target) => <WfoWorkflowTargetBadge target={target} />,
130
+ width: '100px',
131
131
  },
132
132
  tag: {
133
133
  columnType: ColumnType.DATA,
134
134
  label: t('productTag'),
135
- width: '100',
135
+ width: '100px',
136
136
  },
137
137
  productName: {
138
138
  columnType: ColumnType.DATA,
139
139
  label: t('product'),
140
- width: '10%',
140
+ width: '275px',
141
141
  },
142
142
  customer: {
143
143
  columnType: ColumnType.DATA,
144
144
  label: t('customer'),
145
- width: '10%',
145
+ width: '250px',
146
146
  },
147
147
  customerAbbreviation: {
148
148
  columnType: ColumnType.DATA,
149
149
  label: t('customerAbbreviation'),
150
- width: '10%',
150
+ width: '125px',
151
151
  },
152
152
  subscriptions: {
153
153
  columnType: ColumnType.DATA,
154
154
  label: t('subscriptions'),
155
- width: '15%',
155
+ width: '425px',
156
156
  renderData: ({ page: subscriptions }) => (
157
157
  <WfoProcessListSubscriptionsCell
158
158
  subscriptions={subscriptions}
@@ -176,17 +176,17 @@ export const WfoProcessesList = ({
176
176
  createdBy: {
177
177
  columnType: ColumnType.DATA,
178
178
  label: t('createdBy'),
179
- width: '10%',
179
+ width: '100px',
180
180
  },
181
181
  assignee: {
182
182
  columnType: ColumnType.DATA,
183
183
  label: t('assignee'),
184
- width: '5%',
184
+ width: '100px',
185
185
  },
186
186
  processId: {
187
187
  columnType: ColumnType.DATA,
188
188
  label: t('processId'),
189
- width: '90',
189
+ width: '90px',
190
190
  renderData: (value) => <WfoFirstPartUUID UUID={value} />,
191
191
  renderDetails: (value) => value,
192
192
  renderTooltip: (value) => value,
@@ -194,7 +194,7 @@ export const WfoProcessesList = ({
194
194
  startedAt: {
195
195
  columnType: ColumnType.DATA,
196
196
  label: t('started'),
197
- width: '100',
197
+ width: '100px',
198
198
  renderData: (value) => <WfoDateTime dateOrIsoString={value} />,
199
199
  renderDetails: parseDateToLocaleDateTimeString,
200
200
  clipboardText: parseDateToLocaleDateTimeString,
@@ -203,7 +203,7 @@ export const WfoProcessesList = ({
203
203
  lastModifiedAt: {
204
204
  columnType: ColumnType.DATA,
205
205
  label: t('lastModified'),
206
- width: '100',
206
+ width: '125px',
207
207
  renderData: (value) => <WfoDateTime dateOrIsoString={value} />,
208
208
  renderDetails: parseDateToLocaleDateTimeString,
209
209
  clipboardText: parseDateToLocaleDateTimeString,
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import React, { FC, ReactElement } from 'react';
2
2
 
3
3
  import { useTranslations } from 'next-intl';
4
4
 
@@ -24,6 +24,7 @@ export type WfoGroupedTableProps<T extends object> = Pick<
24
24
  > & {
25
25
  data: GroupedData<T>;
26
26
  groupNameLabel: string;
27
+ overrideHeaderSection?: (ExpandButton: ReactElement) => React.ReactNode;
27
28
  };
28
29
 
29
30
  export const WfoGroupedTable = <T extends object>({
@@ -31,6 +32,7 @@ export const WfoGroupedTable = <T extends object>({
31
32
  columnConfig,
32
33
  groupNameLabel,
33
34
  isLoading,
35
+ overrideHeaderSection,
34
36
  className,
35
37
  }: WfoGroupedTableProps<T>) => {
36
38
  const { headerStyle, rowStyle, cellStyle } =
@@ -53,21 +55,27 @@ export const WfoGroupedTable = <T extends object>({
53
55
  columnConfig,
54
56
  });
55
57
 
58
+ const ExpandCollapseButton: FC = () => (
59
+ <EuiButtonEmpty
60
+ size="xs"
61
+ onClick={() =>
62
+ isAllGroupsAndSubgroupsExpanded
63
+ ? collapseAllRows()
64
+ : expandAllRows()
65
+ }
66
+ >
67
+ {isAllGroupsAndSubgroupsExpanded ? t('collapse') : t('expand')}
68
+ </EuiButtonEmpty>
69
+ );
70
+
56
71
  return (
57
72
  <>
58
73
  <EuiFlexGroup justifyContent="flexEnd">
59
- <EuiButtonEmpty
60
- size="xs"
61
- onClick={() =>
62
- isAllGroupsAndSubgroupsExpanded
63
- ? collapseAllRows()
64
- : expandAllRows()
65
- }
66
- >
67
- {isAllGroupsAndSubgroupsExpanded
68
- ? t('collapse')
69
- : t('expand')}
70
- </EuiButtonEmpty>
74
+ {overrideHeaderSection ? (
75
+ overrideHeaderSection(<ExpandCollapseButton />)
76
+ ) : (
77
+ <ExpandCollapseButton />
78
+ )}
71
79
  </EuiFlexGroup>
72
80
 
73
81
  <EuiSpacer size="xs" />
@@ -1 +1 @@
1
- export const ORCHESTRATOR_UI_LIBRARY_VERSION = '2.15.0';
1
+ export const ORCHESTRATOR_UI_LIBRARY_VERSION = '3.0.1';
@@ -8,6 +8,8 @@ import {
8
8
  DEFAULT_PAGE_SIZE,
9
9
  DEFAULT_PAGE_SIZES,
10
10
  METADATA_PRODUCT_BLOCKS_TABLE_LOCAL_STORAGE_KEY,
11
+ PATH_METADATA_PRODUCT_BLOCKS,
12
+ PATH_METADATA_RESOURCE_TYPES,
11
13
  StoredTableConfig,
12
14
  WfoDataSorting,
13
15
  WfoDateTime,
@@ -41,6 +43,7 @@ import {
41
43
  csvDownloadHandler,
42
44
  getConcatenatedResult,
43
45
  getCsvFileNameWithDate,
46
+ getQueryUrl,
44
47
  getQueryVariablesForExport,
45
48
  parseDateToLocaleDateTimeString,
46
49
  parseIsoString,
@@ -95,7 +98,7 @@ export const WfoProductBlocksPage = () => {
95
98
  productBlockId: {
96
99
  columnType: ColumnType.DATA,
97
100
  label: t('id'),
98
- width: '90',
101
+ width: '90px',
99
102
  renderData: (value) => <WfoFirstPartUUID UUID={value} />,
100
103
  renderDetails: (value) => value,
101
104
  renderTooltip: (value) => value,
@@ -103,6 +106,7 @@ export const WfoProductBlocksPage = () => {
103
106
  name: {
104
107
  columnType: ColumnType.DATA,
105
108
  label: t('name'),
109
+ width: '300px',
106
110
  renderData: (name) => (
107
111
  <WfoProductBlockBadge badgeType={BadgeType.PRODUCT_BLOCK}>
108
112
  {name}
@@ -112,6 +116,7 @@ export const WfoProductBlocksPage = () => {
112
116
  tag: {
113
117
  columnType: ColumnType.DATA,
114
118
  label: t('tag'),
119
+ width: '120px',
115
120
  },
116
121
  description: {
117
122
  columnType: ColumnType.DATA,
@@ -129,12 +134,16 @@ export const WfoProductBlocksPage = () => {
129
134
  label: t('dependingProductBlocks'),
130
135
  renderData: (dependsOn) => (
131
136
  <>
132
- {dependsOn.map((productBlock, index) => (
137
+ {dependsOn.map(({ name }, index) => (
133
138
  <WfoProductBlockBadge
134
139
  key={index}
140
+ link={getQueryUrl(
141
+ PATH_METADATA_PRODUCT_BLOCKS,
142
+ `name:"${name}"`,
143
+ )}
135
144
  badgeType={BadgeType.PRODUCT_BLOCK}
136
145
  >
137
- {productBlock.name}
146
+ {name}
138
147
  </WfoProductBlockBadge>
139
148
  ))}
140
149
  </>
@@ -148,26 +157,35 @@ export const WfoProductBlocksPage = () => {
148
157
  resourceTypes: {
149
158
  columnType: ColumnType.DATA,
150
159
  label: t('resourceTypes'),
160
+ width: '700px',
151
161
  renderData: (resourceTypes) => (
152
162
  <>
153
- {resourceTypes.map((resourceType, index) => (
163
+ {resourceTypes.map(({ resourceType }, index) => (
154
164
  <WfoProductBlockBadge
155
165
  key={index}
166
+ link={getQueryUrl(
167
+ PATH_METADATA_RESOURCE_TYPES,
168
+ `resourceType:"${resourceType}"`,
169
+ )}
156
170
  badgeType={BadgeType.RESOURCE_TYPE}
157
171
  >
158
- {resourceType.resourceType}
172
+ {resourceType}
159
173
  </WfoProductBlockBadge>
160
174
  ))}
161
175
  </>
162
176
  ),
163
177
  renderDetails: (resourceTypes) => (
164
178
  <EuiBadgeGroup gutterSize="s">
165
- {resourceTypes.map((resourceType, index) => (
179
+ {resourceTypes.map(({ resourceType }, index) => (
166
180
  <WfoProductBlockBadge
167
181
  key={index}
182
+ link={getQueryUrl(
183
+ PATH_METADATA_RESOURCE_TYPES,
184
+ `resourceType:"${resourceType}"`,
185
+ )}
168
186
  badgeType={BadgeType.RESOURCE_TYPE}
169
187
  >
170
- {resourceType.resourceType}
188
+ {resourceType}
171
189
  </WfoProductBlockBadge>
172
190
  ))}
173
191
  </EuiBadgeGroup>
@@ -183,6 +201,7 @@ export const WfoProductBlocksPage = () => {
183
201
  createdAt: {
184
202
  columnType: ColumnType.DATA,
185
203
  label: t('createdAt'),
204
+ width: '120px',
186
205
  renderData: (date) => <WfoDateTime dateOrIsoString={date} />,
187
206
  renderDetails: parseIsoString(parseDateToLocaleDateTimeString),
188
207
  clipboardText: parseIsoString(parseDateToLocaleDateTimeString),
@@ -191,6 +210,7 @@ export const WfoProductBlocksPage = () => {
191
210
  endDate: {
192
211
  columnType: ColumnType.DATA,
193
212
  label: t('endDate'),
213
+ width: '120px',
194
214
  renderData: (date) => <WfoDateTime dateOrIsoString={date} />,
195
215
  renderDetails: parseIsoString(parseDateToLocaleDateTimeString),
196
216
  clipboardText: parseIsoString(parseDateToLocaleDateTimeString),
@@ -3,6 +3,7 @@ import React, { useEffect, useState } from 'react';
3
3
  import { useTranslations } from 'next-intl';
4
4
 
5
5
  import {
6
+ PATH_METADATA_PRODUCT_BLOCKS,
6
7
  WfoDataSorting,
7
8
  getPageIndexChangeHandler,
8
9
  getPageSizeChangeHandler,
@@ -35,6 +36,7 @@ import type { GraphqlQueryVariables, ProductDefinition } from '@/types';
35
36
  import { BadgeType, SortOrder } from '@/types';
36
37
  import {
37
38
  getConcatenatedResult,
39
+ getQueryUrl,
38
40
  getQueryVariablesForExport,
39
41
  parseDateToLocaleDateTimeString,
40
42
  parseIsoString,
@@ -92,7 +94,7 @@ export const WfoProductsPage = () => {
92
94
  productId: {
93
95
  columnType: ColumnType.DATA,
94
96
  label: t('id'),
95
- width: '90',
97
+ width: '90px',
96
98
  renderData: (value) => <WfoFirstPartUUID UUID={value} />,
97
99
  renderDetails: (value) => value,
98
100
  renderTooltip: (value) => value,
@@ -100,7 +102,7 @@ export const WfoProductsPage = () => {
100
102
  name: {
101
103
  columnType: ColumnType.DATA,
102
104
  label: t('name'),
103
- width: '200',
105
+ width: '200px',
104
106
  renderData: (name) => (
105
107
  <WfoProductBlockBadge badgeType={BadgeType.PRODUCT}>
106
108
  {name}
@@ -110,7 +112,7 @@ export const WfoProductsPage = () => {
110
112
  tag: {
111
113
  columnType: ColumnType.DATA,
112
114
  label: t('tag'),
113
- width: '120',
115
+ width: '120px',
114
116
  renderData: (value) => (
115
117
  <WfoProductBlockBadge badgeType={BadgeType.PRODUCT_TAG}>
116
118
  {value}
@@ -120,22 +122,24 @@ export const WfoProductsPage = () => {
120
122
  description: {
121
123
  columnType: ColumnType.DATA,
122
124
  label: t('description'),
123
- width: '400',
125
+ width: '400px',
124
126
  renderTooltip: (value) => value,
125
127
  },
126
128
  productType: {
127
129
  columnType: ColumnType.DATA,
128
130
  label: t('productType'),
131
+ width: '250px',
129
132
  },
130
133
  status: {
131
134
  columnType: ColumnType.DATA,
132
135
  label: t('status'),
133
- width: '90',
136
+ width: '90px',
134
137
  renderData: (value) => <WfoProductStatusBadge status={value} />,
135
138
  },
136
139
  fixedInputs: {
137
140
  columnType: ColumnType.DATA,
138
141
  label: t('fixedInputs'),
142
+ width: '400px',
139
143
  renderData: (fixedInputs) => (
140
144
  <>
141
145
  {fixedInputs.map((fixedInput, index) => (
@@ -159,23 +163,27 @@ export const WfoProductsPage = () => {
159
163
  productBlocks: {
160
164
  columnType: ColumnType.DATA,
161
165
  label: t('productBlocks'),
166
+ width: '250px',
162
167
  renderData: (productBlocks) => (
163
168
  <>
164
- {productBlocks.map((block, index) => (
169
+ {productBlocks.map(({ name }, index) => (
165
170
  <WfoProductBlockBadge
166
171
  key={index}
172
+ link={getQueryUrl(
173
+ PATH_METADATA_PRODUCT_BLOCKS,
174
+ `name:"${name}"`,
175
+ )}
167
176
  badgeType={BadgeType.PRODUCT_BLOCK}
168
177
  >
169
- {block.name}
178
+ {name}
170
179
  </WfoProductBlockBadge>
171
180
  ))}
172
181
  </>
173
182
  ),
174
- renderTooltip: (productBlocks) => {
175
- return productBlocks.map((productBlock) => (
183
+ renderTooltip: (productBlocks) =>
184
+ productBlocks.map((productBlock) => (
176
185
  <p key={productBlock.name}>- {productBlock.name}</p>
177
- ));
178
- },
186
+ )),
179
187
  },
180
188
  createdAt: {
181
189
  columnType: ColumnType.DATA,
@@ -8,6 +8,7 @@ import {
8
8
  DEFAULT_PAGE_SIZE,
9
9
  DEFAULT_PAGE_SIZES,
10
10
  METADATA_RESOURCE_TYPES_TABLE_LOCAL_STORAGE_KEY,
11
+ PATH_METADATA_PRODUCT_BLOCKS,
11
12
  WfoProductBlockBadge,
12
13
  getDataSortHandler,
13
14
  getPageIndexChangeHandler,
@@ -37,7 +38,11 @@ import {
37
38
  ResourceTypeDefinition,
38
39
  SortOrder,
39
40
  } from '@/types';
40
- import { getConcatenatedResult, getQueryVariablesForExport } from '@/utils';
41
+ import {
42
+ getConcatenatedResult,
43
+ getQueryUrl,
44
+ getQueryVariablesForExport,
45
+ } from '@/utils';
41
46
  import {
42
47
  csvDownloadHandler,
43
48
  getCsvFileNameWithDate,
@@ -88,7 +93,7 @@ export const WfoResourceTypesPage = () => {
88
93
  resourceTypeId: {
89
94
  columnType: ColumnType.DATA,
90
95
  label: t('resourceId'),
91
- width: '90',
96
+ width: '90px',
92
97
  renderData: (value) => <WfoFirstPartUUID UUID={value} />,
93
98
  renderDetails: (value) => value,
94
99
  renderTooltip: (value) => value,
@@ -96,7 +101,7 @@ export const WfoResourceTypesPage = () => {
96
101
  resourceType: {
97
102
  columnType: ColumnType.DATA,
98
103
  label: t('type'),
99
- width: '200',
104
+ width: '225px',
100
105
  renderData: (value) => (
101
106
  <WfoProductBlockBadge badgeType={BadgeType.RESOURCE_TYPE}>
102
107
  {value}
@@ -106,30 +111,40 @@ export const WfoResourceTypesPage = () => {
106
111
  description: {
107
112
  columnType: ColumnType.DATA,
108
113
  label: t('description'),
114
+ width: '700px',
109
115
  },
110
116
  productBlocks: {
111
117
  columnType: ColumnType.DATA,
112
118
  label: t('usedInProductBlocks'),
119
+ width: '1000px',
113
120
  renderData: (productBlocks) => (
114
121
  <>
115
- {productBlocks.map((productBlock, index) => (
122
+ {productBlocks.map(({ name }, index) => (
116
123
  <WfoProductBlockBadge
117
124
  key={index}
125
+ link={getQueryUrl(
126
+ PATH_METADATA_PRODUCT_BLOCKS,
127
+ `name:"${name}"`,
128
+ )}
118
129
  badgeType={BadgeType.PRODUCT_BLOCK}
119
130
  >
120
- {productBlock.name}
131
+ {name}
121
132
  </WfoProductBlockBadge>
122
133
  ))}
123
134
  </>
124
135
  ),
125
136
  renderDetails: (productBlocks) => (
126
137
  <EuiBadgeGroup gutterSize="s">
127
- {productBlocks.map((productBlock, index) => (
138
+ {productBlocks.map(({ name }, index) => (
128
139
  <WfoProductBlockBadge
129
140
  key={index}
141
+ link={getQueryUrl(
142
+ PATH_METADATA_PRODUCT_BLOCKS,
143
+ `name:"${name}"`,
144
+ )}
130
145
  badgeType={BadgeType.PRODUCT_BLOCK}
131
146
  >
132
- {productBlock.name}
147
+ {name}
133
148
  </WfoProductBlockBadge>
134
149
  ))}
135
150
  </EuiBadgeGroup>
@@ -5,6 +5,7 @@ import { useTranslations } from 'next-intl';
5
5
  import { EuiBadgeGroup } from '@elastic/eui';
6
6
 
7
7
  import {
8
+ PATH_METADATA_PRODUCTS,
8
9
  WfoWorkflowTargetBadge,
9
10
  getPageIndexChangeHandler,
10
11
  getPageSizeChangeHandler,
@@ -36,6 +37,7 @@ import { mapRtkErrorToWfoError } from '@/rtk/utils';
36
37
  import type { GraphqlQueryVariables, TaskDefinition } from '@/types';
37
38
  import { BadgeType, SortOrder } from '@/types';
38
39
  import {
40
+ getQueryUrl,
39
41
  getQueryVariablesForExport,
40
42
  onlyUnique,
41
43
  parseDateToLocaleDateTimeString,
@@ -105,21 +107,23 @@ export const WfoTasksPage = () => {
105
107
  {name}
106
108
  </WfoProductBlockBadge>
107
109
  ),
110
+ width: '300px',
108
111
  },
109
112
  description: {
110
113
  columnType: ColumnType.DATA,
111
114
  label: t('description'),
112
- width: '40%',
115
+ width: '500px',
113
116
  },
114
117
  target: {
115
118
  columnType: ColumnType.DATA,
116
119
  label: t('target'),
117
120
  renderData: (target) => <WfoWorkflowTargetBadge target={target} />,
121
+ width: '100px',
118
122
  },
119
123
  productTags: {
120
124
  columnType: ColumnType.DATA,
121
125
  label: t('productTags'),
122
- width: '20%',
126
+ width: '250px',
123
127
  renderData: (productTags) => (
124
128
  <>
125
129
  {productTags
@@ -127,6 +131,10 @@ export const WfoTasksPage = () => {
127
131
  .map((productTag, index) => (
128
132
  <WfoProductBlockBadge
129
133
  key={index}
134
+ link={getQueryUrl(
135
+ PATH_METADATA_PRODUCTS,
136
+ `tag:"${productTag}"`,
137
+ )}
130
138
  badgeType={BadgeType.PRODUCT_TAG}
131
139
  >
132
140
  {productTag}
@@ -141,6 +149,10 @@ export const WfoTasksPage = () => {
141
149
  .map((productTag, index) => (
142
150
  <WfoProductBlockBadge
143
151
  key={index}
152
+ link={getQueryUrl(
153
+ PATH_METADATA_PRODUCTS,
154
+ `tag:"${productTag}"`,
155
+ )}
144
156
  badgeType={BadgeType.PRODUCT_TAG}
145
157
  >
146
158
  {productTag}
@@ -160,7 +172,7 @@ export const WfoTasksPage = () => {
160
172
  createdAt: {
161
173
  columnType: ColumnType.DATA,
162
174
  label: t('createdAt'),
163
- width: '15%',
175
+ width: '150px',
164
176
  renderData: (date) => <WfoDateTime dateOrIsoString={date} />,
165
177
  renderDetails: parseIsoString(parseDateToLocaleDateTimeString),
166
178
  clipboardText: parseIsoString(parseDateToLocaleDateTimeString),