@orchestrator-ui/orchestrator-ui-components 2.8.3 → 2.9.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/.turbo/turbo-build.log +9 -9
- package/.turbo/turbo-lint.log +1 -1
- package/.turbo/turbo-test.log +11 -11
- package/CHANGELOG.md +21 -0
- package/dist/index.d.ts +12047 -7966
- package/dist/index.js +1625 -1426
- package/dist/index.js.map +1 -1
- package/package.json +6 -5
- package/src/components/WfoDiff/WfoDiff.tsx +1 -1
- package/src/components/WfoForms/formFields/AcceptField.tsx +2 -2
- package/src/components/WfoForms/formFields/SubscriptionField.tsx +6 -2
- package/src/components/WfoForms/formFields/deprecated/ImsNodeIdField.tsx +2 -2
- package/src/components/WfoForms/formFields/deprecated/ImsPortIdField.tsx +2 -2
- package/src/components/WfoForms/formFields/deprecated/VlanField.tsx +10 -10
- package/src/components/WfoPageTemplate/WfoPageHeader/WfoPageHeader.tsx +1 -1
- package/src/components/WfoSubscription/WfoCustomerDescriptionsField.tsx +3 -4
- package/src/components/WfoSubscription/WfoInSyncField.tsx +3 -1
- package/src/components/WfoSubscription/WfoSubscriptionActions/WfoSubscriptionActionExpandableMenuItem.tsx +73 -0
- package/src/components/WfoSubscription/{WfoSubscriptionActions.tsx → WfoSubscriptionActions/WfoSubscriptionActions.tsx} +29 -13
- package/src/components/WfoSubscription/WfoSubscriptionActions/index.ts +1 -0
- package/src/components/WfoSubscription/WfoSubscriptionActions/styles.ts +75 -0
- package/src/components/WfoSubscription/WfoSubscriptionProductBlock/WfoSubscriptionProductBlock.tsx +1 -4
- package/src/components/WfoSubscription/WfoSubscriptionProductBlock/styles.ts +3 -0
- package/src/components/WfoTable/utils/tableUtils.spec.ts +6 -6
- package/src/components/confirmationDialog/WfoConfirmationDialog.tsx +3 -1
- package/src/configuration/version.ts +1 -1
- package/src/messages/en-GB.json +2 -1
- package/src/messages/nl-NL.json +4 -2
- package/src/pages/processes/WfoProcessDetail.tsx +6 -3
- package/src/pages/processes/WfoProcessDetailPage.tsx +18 -2
- package/src/pages/processes/WfoStartProcessPage.tsx +12 -1
- package/src/rtk/api.ts +3 -0
- package/src/rtk/endpoints/index.ts +1 -0
- package/src/rtk/endpoints/metadata/workflows.ts +62 -1
- package/src/utils/csvDownload.ts +2 -1
- package/src/utils/getEnvironmentVariables.ts +13 -14
- package/src/utils/resultFlattener.ts +3 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@orchestrator-ui/orchestrator-ui-components",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.9.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"description": "Library of UI Components used to display the workflow orchestrator frontend",
|
|
6
6
|
"author": {
|
|
@@ -36,6 +36,7 @@
|
|
|
36
36
|
"@emotion/css": "^11.11.2",
|
|
37
37
|
"@emotion/react": "^11.11.4",
|
|
38
38
|
"@rtk-query/graphql-request-base-query": "^2.3.1",
|
|
39
|
+
"eslint": "^8.57.0",
|
|
39
40
|
"graphql-request": "^6.1.0",
|
|
40
41
|
"invariant": "^2.2.4",
|
|
41
42
|
"lodash": "^4.17.21",
|
|
@@ -47,6 +48,7 @@
|
|
|
47
48
|
"object-hash": "^3.0.0",
|
|
48
49
|
"prism-themes": "^1.9.0",
|
|
49
50
|
"react-diff-view": "^3.2.0",
|
|
51
|
+
"react-redux": "^9.1.2",
|
|
50
52
|
"react-select": "^5.8.0",
|
|
51
53
|
"scroll-into-view": "^1.16.2",
|
|
52
54
|
"unidiff": "^1.0.4",
|
|
@@ -65,8 +67,8 @@
|
|
|
65
67
|
"@storybook/addon-onboarding": "^8.1.10",
|
|
66
68
|
"@storybook/blocks": "^8.1.10",
|
|
67
69
|
"@storybook/nextjs": "^8.1.10",
|
|
68
|
-
"@storybook/react": "^8.
|
|
69
|
-
"@testing-library/jest-dom": "^6.
|
|
70
|
+
"@storybook/react": "^8.3.6",
|
|
71
|
+
"@testing-library/jest-dom": "^6.6.2",
|
|
70
72
|
"@testing-library/react": "^16.0.1",
|
|
71
73
|
"@testing-library/user-event": "^14.5.2",
|
|
72
74
|
"@types/invariant": "^2.2.33",
|
|
@@ -85,8 +87,7 @@
|
|
|
85
87
|
"peerDependencies": {
|
|
86
88
|
"next": "^14.0.4",
|
|
87
89
|
"react": "^18.3.1",
|
|
88
|
-
"react-dom": "^18.3.1"
|
|
89
|
-
"react-redux": "^8.1.3"
|
|
90
|
+
"react-dom": "^18.3.1"
|
|
90
91
|
},
|
|
91
92
|
"type": "module",
|
|
92
93
|
"main": "./dist/index.js",
|
|
@@ -170,7 +170,9 @@ function SubscriptionFieldDefinition({
|
|
|
170
170
|
(item) => item.field === 'title',
|
|
171
171
|
);
|
|
172
172
|
if (subscriptionTitle) {
|
|
173
|
-
return `${subscriptionSubstring} - ${description.trim()} - ${
|
|
173
|
+
return `${subscriptionSubstring} - ${description.trim()} - ${
|
|
174
|
+
subscriptionTitle.value
|
|
175
|
+
}`;
|
|
174
176
|
}
|
|
175
177
|
return `${subscriptionSubstring} ${portMode?.toUpperCase()} ${description.trim()} ${
|
|
176
178
|
subscription.customer?.fullname
|
|
@@ -326,7 +328,9 @@ function SubscriptionFieldDefinition({
|
|
|
326
328
|
iconSize="l"
|
|
327
329
|
disabled={isDisabled}
|
|
328
330
|
onClick={() => {
|
|
329
|
-
|
|
331
|
+
if (isDisabled) {
|
|
332
|
+
refetch();
|
|
333
|
+
}
|
|
330
334
|
}}
|
|
331
335
|
/>
|
|
332
336
|
</EuiFlexGroup>
|
|
@@ -80,8 +80,8 @@ function ImsNodeId({
|
|
|
80
80
|
isLoading && locationCode
|
|
81
81
|
? t('widgets.node_select.nodes_loading')
|
|
82
82
|
: nodes.length
|
|
83
|
-
|
|
84
|
-
|
|
83
|
+
? t('widgets.node_select.select_node')
|
|
84
|
+
: t('forms.widgets.node_select.no_nodes_placeholder');
|
|
85
85
|
|
|
86
86
|
const imsNodeIdLabelLookup =
|
|
87
87
|
nodes?.reduce<{ [index: string]: string }>(function (mapping, node) {
|
|
@@ -140,8 +140,8 @@ function ImsPortId({
|
|
|
140
140
|
const portPlaceholder = loading
|
|
141
141
|
? t('widgets.nodePort.loadingPorts')
|
|
142
142
|
: nodeId
|
|
143
|
-
|
|
144
|
-
|
|
143
|
+
? t('widgets.nodePort.selectPort')
|
|
144
|
+
: t('widgets.nodePort.selectNodeFirst');
|
|
145
145
|
|
|
146
146
|
const nodeOptions: Option[] =
|
|
147
147
|
nodeSubscriptionOptions?.map(nodeToOptionCorelink) || [];
|
|
@@ -212,20 +212,20 @@ function Vlan({
|
|
|
212
212
|
const placeholder = isLoading
|
|
213
213
|
? t('widgets.vlan.loadingIms')
|
|
214
214
|
: subscriptionId
|
|
215
|
-
|
|
216
|
-
|
|
215
|
+
? t('widgets.vlan.placeholder')
|
|
216
|
+
: t('widgets.vlan.placeholderNoServicePort');
|
|
217
217
|
|
|
218
218
|
const errorMessageExtra = missingInIms
|
|
219
219
|
? t('widgets.vlan.missingInIms')
|
|
220
220
|
: !validFormat
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
221
|
+
? t('widgets.vlan.invalidVlan')
|
|
222
|
+
: vlansInUse.length
|
|
223
|
+
? vlansInUse.length >= 1 && vlansInUse[0] === 0
|
|
224
|
+
? t('widgets.vlan.untaggedPortInUse')
|
|
225
|
+
: t('widgets.vlan.vlansInUseError', {
|
|
226
|
+
vlans: vlanRangeFromNumbers(vlansInUse),
|
|
227
|
+
})
|
|
228
|
+
: undefined;
|
|
229
229
|
|
|
230
230
|
let message = '';
|
|
231
231
|
if (!isLoading && subscriptionId) {
|
|
@@ -53,7 +53,7 @@ export const WfoPageHeader: FC<WfoPageHeaderProps> = ({
|
|
|
53
53
|
<EuiHeader css={getHeaderStyle(navigationHeight)}>
|
|
54
54
|
<EuiHeaderSection>
|
|
55
55
|
<EuiToolTip
|
|
56
|
-
content={'UI version' + ORCHESTRATOR_UI_LIBRARY_VERSION}
|
|
56
|
+
content={'UI version ' + ORCHESTRATOR_UI_LIBRARY_VERSION}
|
|
57
57
|
>
|
|
58
58
|
<EuiHeaderSectionItem css={{ paddingTop: theme.size.xs }}>
|
|
59
59
|
<EuiHeaderLogo iconType={() => <WfoAppLogo />} />
|
|
@@ -43,10 +43,9 @@ export const WfoCustomerDescriptionsField: FC<
|
|
|
43
43
|
<div>
|
|
44
44
|
{customerDescriptionsWithName.map(
|
|
45
45
|
({ shortcode, fullname, description, customerId }) => (
|
|
46
|
-
<div
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
>{`${shortcode ?? customerId}: ${description}`}</div>
|
|
46
|
+
<div key={customerId} title={fullname ?? customerId}>{`${
|
|
47
|
+
shortcode ?? customerId
|
|
48
|
+
}: ${description}`}</div>
|
|
50
49
|
),
|
|
51
50
|
)}
|
|
52
51
|
</div>
|
|
@@ -62,7 +62,9 @@ export const WfoInSyncField = ({
|
|
|
62
62
|
};
|
|
63
63
|
|
|
64
64
|
const getProcessLink = () => {
|
|
65
|
-
const processUrl = `${
|
|
65
|
+
const processUrl = `${
|
|
66
|
+
lastUncompletedProcess?.isTask ? PATH_TASKS : PATH_WORKFLOWS
|
|
67
|
+
}/${lastUncompletedProcess?.processId}`;
|
|
66
68
|
|
|
67
69
|
const confirmSetInSync = () => {
|
|
68
70
|
showConfirmDialog({
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import React, { FC, useState } from 'react';
|
|
2
|
+
|
|
3
|
+
import { useTranslations } from 'next-intl';
|
|
4
|
+
import Link from 'next/link';
|
|
5
|
+
|
|
6
|
+
import { EuiButtonIcon, EuiText } from '@elastic/eui';
|
|
7
|
+
import { ReactJSXElement } from '@emotion/react/types/jsx-namespace';
|
|
8
|
+
|
|
9
|
+
import { PATH_SUBSCRIPTIONS } from '@/components';
|
|
10
|
+
import { useWithOrchestratorTheme } from '@/hooks';
|
|
11
|
+
import { SubscriptionAction } from '@/types';
|
|
12
|
+
|
|
13
|
+
import { getSubscriptionActionStyles } from './styles';
|
|
14
|
+
|
|
15
|
+
export type WfoSubscriptionActionExpandableMenuItemProps = {
|
|
16
|
+
subscriptionAction: SubscriptionAction;
|
|
17
|
+
onClickLockedRelation: (relation: string) => void;
|
|
18
|
+
children: ReactJSXElement;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export const WfoSubscriptionActionExpandableMenuItem: FC<
|
|
22
|
+
WfoSubscriptionActionExpandableMenuItemProps
|
|
23
|
+
> = ({ subscriptionAction, onClickLockedRelation, children }) => {
|
|
24
|
+
const t = useTranslations('subscriptions.detail.actions');
|
|
25
|
+
|
|
26
|
+
const {
|
|
27
|
+
clickableStyle,
|
|
28
|
+
expandableMenuItemStyle,
|
|
29
|
+
expandButtonStyle,
|
|
30
|
+
expandedContentStyle,
|
|
31
|
+
linkStyle,
|
|
32
|
+
} = useWithOrchestratorTheme(getSubscriptionActionStyles);
|
|
33
|
+
const [isExpanded, setIsExpanded] = useState(false);
|
|
34
|
+
|
|
35
|
+
const { locked_relations: lockedRelations } = subscriptionAction;
|
|
36
|
+
|
|
37
|
+
return (
|
|
38
|
+
<div>
|
|
39
|
+
<div
|
|
40
|
+
css={[
|
|
41
|
+
expandableMenuItemStyle,
|
|
42
|
+
lockedRelations && clickableStyle,
|
|
43
|
+
]}
|
|
44
|
+
onClick={() => setIsExpanded(!isExpanded)}
|
|
45
|
+
>
|
|
46
|
+
<div>{children}</div>
|
|
47
|
+
{lockedRelations && (
|
|
48
|
+
<EuiButtonIcon
|
|
49
|
+
css={expandButtonStyle}
|
|
50
|
+
iconType={isExpanded ? 'arrowDown' : 'arrowRight'}
|
|
51
|
+
onClick={() => setIsExpanded(!isExpanded)}
|
|
52
|
+
/>
|
|
53
|
+
)}
|
|
54
|
+
</div>
|
|
55
|
+
{lockedRelations && isExpanded && (
|
|
56
|
+
<div css={expandedContentStyle}>
|
|
57
|
+
<EuiText size="xs">{t('lockedBySubscriptions')}</EuiText>
|
|
58
|
+
{lockedRelations.map((relation) => (
|
|
59
|
+
<EuiText key={relation} size="xs">
|
|
60
|
+
<Link
|
|
61
|
+
css={linkStyle}
|
|
62
|
+
href={`${PATH_SUBSCRIPTIONS}/${relation}`}
|
|
63
|
+
onClick={() => onClickLockedRelation(relation)}
|
|
64
|
+
>
|
|
65
|
+
{relation}
|
|
66
|
+
</Link>
|
|
67
|
+
</EuiText>
|
|
68
|
+
))}
|
|
69
|
+
</div>
|
|
70
|
+
)}
|
|
71
|
+
</div>
|
|
72
|
+
);
|
|
73
|
+
};
|
|
@@ -17,13 +17,20 @@ import { ReactJSXElement } from '@emotion/react/types/jsx-namespace';
|
|
|
17
17
|
|
|
18
18
|
import { PATH_START_NEW_TASK, PATH_START_NEW_WORKFLOW } from '@/components';
|
|
19
19
|
import { PolicyResource } from '@/configuration/policy-resources';
|
|
20
|
-
import {
|
|
20
|
+
import {
|
|
21
|
+
useCheckEngineStatus,
|
|
22
|
+
useOrchestratorTheme,
|
|
23
|
+
usePolicy,
|
|
24
|
+
useWithOrchestratorTheme,
|
|
25
|
+
} from '@/hooks';
|
|
21
26
|
import { WfoXCircleFill } from '@/icons';
|
|
22
27
|
import { useGetSubscriptionActionsQuery } from '@/rtk/endpoints/subscriptionActions';
|
|
23
28
|
import { SubscriptionAction, WorkflowTarget } from '@/types';
|
|
24
29
|
|
|
25
|
-
import { WfoTargetTypeIcon } from '
|
|
26
|
-
import { flattenArrayProps } from '
|
|
30
|
+
import { WfoTargetTypeIcon } from '../WfoTargetTypeIcon';
|
|
31
|
+
import { flattenArrayProps } from '../utils';
|
|
32
|
+
import { WfoSubscriptionActionExpandableMenuItem } from './WfoSubscriptionActionExpandableMenuItem';
|
|
33
|
+
import { getSubscriptionActionStyles } from './styles';
|
|
27
34
|
|
|
28
35
|
type MenuItemProps = {
|
|
29
36
|
key: string;
|
|
@@ -52,6 +59,13 @@ export const WfoSubscriptionActions: FC<WfoSubscriptionActionsProps> = ({
|
|
|
52
59
|
isLoading,
|
|
53
60
|
}) => {
|
|
54
61
|
const { theme } = useOrchestratorTheme();
|
|
62
|
+
const {
|
|
63
|
+
linkMenuItemStyle,
|
|
64
|
+
tooltipMenuItemStyle,
|
|
65
|
+
disabledIconStyle,
|
|
66
|
+
iconStyle,
|
|
67
|
+
secondaryIconStyle,
|
|
68
|
+
} = useWithOrchestratorTheme(getSubscriptionActionStyles);
|
|
55
69
|
|
|
56
70
|
const router = useRouter();
|
|
57
71
|
const t = useTranslations('subscriptions.detail.actions');
|
|
@@ -89,6 +103,7 @@ export const WfoSubscriptionActions: FC<WfoSubscriptionActionsProps> = ({
|
|
|
89
103
|
|
|
90
104
|
const handleLinkClick = async (e: React.MouseEvent) => {
|
|
91
105
|
e.preventDefault();
|
|
106
|
+
setPopover(false);
|
|
92
107
|
if (await isEngineRunningNow()) {
|
|
93
108
|
router.push(url);
|
|
94
109
|
}
|
|
@@ -96,7 +111,7 @@ export const WfoSubscriptionActions: FC<WfoSubscriptionActionsProps> = ({
|
|
|
96
111
|
|
|
97
112
|
return (
|
|
98
113
|
<Link href={url} onClick={handleLinkClick}>
|
|
99
|
-
{actionItem}
|
|
114
|
+
<div css={linkMenuItemStyle}>{actionItem}</div>
|
|
100
115
|
</Link>
|
|
101
116
|
);
|
|
102
117
|
};
|
|
@@ -134,9 +149,14 @@ export const WfoSubscriptionActions: FC<WfoSubscriptionActionsProps> = ({
|
|
|
134
149
|
const tooltipContent = t(action.reason, flattenArrayProps(action));
|
|
135
150
|
|
|
136
151
|
return (
|
|
137
|
-
<div>
|
|
152
|
+
<div css={tooltipMenuItemStyle}>
|
|
138
153
|
<EuiToolTip position="top" content={tooltipContent}>
|
|
139
|
-
|
|
154
|
+
<WfoSubscriptionActionExpandableMenuItem
|
|
155
|
+
subscriptionAction={action}
|
|
156
|
+
onClickLockedRelation={() => setPopover(false)}
|
|
157
|
+
>
|
|
158
|
+
{actionItem}
|
|
159
|
+
</WfoSubscriptionActionExpandableMenuItem>
|
|
140
160
|
</EuiToolTip>
|
|
141
161
|
</div>
|
|
142
162
|
);
|
|
@@ -144,13 +164,9 @@ export const WfoSubscriptionActions: FC<WfoSubscriptionActionsProps> = ({
|
|
|
144
164
|
|
|
145
165
|
const getIcon = () => {
|
|
146
166
|
return action.reason ? (
|
|
147
|
-
<div css={
|
|
167
|
+
<div css={disabledIconStyle}>
|
|
148
168
|
<WfoTargetTypeIcon target={target} disabled={true} />
|
|
149
|
-
<div
|
|
150
|
-
css={{
|
|
151
|
-
transform: 'translate(-11px, -8px);',
|
|
152
|
-
}}
|
|
153
|
-
>
|
|
169
|
+
<div css={secondaryIconStyle}>
|
|
154
170
|
<WfoXCircleFill
|
|
155
171
|
width={20}
|
|
156
172
|
height={20}
|
|
@@ -159,7 +175,7 @@ export const WfoSubscriptionActions: FC<WfoSubscriptionActionsProps> = ({
|
|
|
159
175
|
</div>
|
|
160
176
|
</div>
|
|
161
177
|
) : (
|
|
162
|
-
<div css={
|
|
178
|
+
<div css={iconStyle}>
|
|
163
179
|
<WfoTargetTypeIcon target={target} />
|
|
164
180
|
</div>
|
|
165
181
|
);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './WfoSubscriptionActions';
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { css } from '@emotion/react';
|
|
2
|
+
|
|
3
|
+
import { WfoTheme } from '@/hooks';
|
|
4
|
+
|
|
5
|
+
const EXPANDED_CONTENT_LEFT_MARGIN = '52px';
|
|
6
|
+
|
|
7
|
+
export const getSubscriptionActionStyles = ({ theme }: WfoTheme) => {
|
|
8
|
+
const clickableStyle = css({
|
|
9
|
+
'&:hover, & :hover': {
|
|
10
|
+
cursor: 'pointer',
|
|
11
|
+
},
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
const expandableMenuItemStyle = css({
|
|
15
|
+
display: 'flex',
|
|
16
|
+
justifyContent: 'space-between',
|
|
17
|
+
alignItems: 'center',
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
const expandButtonStyle = css({
|
|
21
|
+
marginRight: theme.size.m,
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
const expandedContentStyle = css({
|
|
25
|
+
marginLeft: EXPANDED_CONTENT_LEFT_MARGIN,
|
|
26
|
+
paddingBottom: theme.size.m,
|
|
27
|
+
paddingRight: theme.size.m,
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
const linkStyle = css({
|
|
31
|
+
display: 'block',
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
const linkMenuItemStyle = css({
|
|
35
|
+
'&>:hover': {
|
|
36
|
+
backgroundColor: theme.colors.lightestShade,
|
|
37
|
+
borderRadius: theme.border.radius.medium,
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
const tooltipMenuItemStyle = css([
|
|
42
|
+
linkMenuItemStyle,
|
|
43
|
+
{
|
|
44
|
+
'& > *': {
|
|
45
|
+
display: 'block',
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
]);
|
|
49
|
+
|
|
50
|
+
const disabledIconStyle = css({
|
|
51
|
+
display: 'flex',
|
|
52
|
+
width: theme.base * 2,
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
const iconStyle = css({
|
|
56
|
+
width: theme.base * 2,
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
const secondaryIconStyle = css({
|
|
60
|
+
transform: 'translate(-11px, -8px);',
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
return {
|
|
64
|
+
clickableStyle,
|
|
65
|
+
expandableMenuItemStyle,
|
|
66
|
+
expandButtonStyle,
|
|
67
|
+
expandedContentStyle,
|
|
68
|
+
linkStyle,
|
|
69
|
+
linkMenuItemStyle,
|
|
70
|
+
tooltipMenuItemStyle,
|
|
71
|
+
disabledIconStyle,
|
|
72
|
+
iconStyle,
|
|
73
|
+
secondaryIconStyle,
|
|
74
|
+
};
|
|
75
|
+
};
|
package/src/components/WfoSubscription/WfoSubscriptionProductBlock/WfoSubscriptionProductBlock.tsx
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React, { useState } from 'react';
|
|
2
2
|
|
|
3
|
+
import { isEmpty } from 'lodash';
|
|
3
4
|
import { useTranslations } from 'next-intl';
|
|
4
5
|
|
|
5
6
|
import {
|
|
@@ -61,10 +62,6 @@ export const WfoSubscriptionProductBlock = ({
|
|
|
61
62
|
);
|
|
62
63
|
const showProductBlockValues = !isOutsideCurrentSubscription || showDetails;
|
|
63
64
|
|
|
64
|
-
const isEmpty = (value: unknown) => {
|
|
65
|
-
return value === null || value === undefined || value === '';
|
|
66
|
-
};
|
|
67
|
-
|
|
68
65
|
return (
|
|
69
66
|
<>
|
|
70
67
|
<EuiSpacer size={'m'}></EuiSpacer>
|
|
@@ -20,9 +20,9 @@ describe('tableUtils', () => {
|
|
|
20
20
|
});
|
|
21
21
|
|
|
22
22
|
describe('determineNewSortOrder', () => {
|
|
23
|
-
|
|
24
|
-
column1:
|
|
25
|
-
column2:
|
|
23
|
+
type TestData = {
|
|
24
|
+
column1: object;
|
|
25
|
+
column2: object;
|
|
26
26
|
};
|
|
27
27
|
|
|
28
28
|
it('returns SortDirection.Asc when sorting on a new column', () => {
|
|
@@ -30,7 +30,7 @@ describe('tableUtils', () => {
|
|
|
30
30
|
const currentSortDirection = SortOrder.ASC;
|
|
31
31
|
const newSortColumnId = 'column2';
|
|
32
32
|
|
|
33
|
-
const result = determineNewSortOrder<
|
|
33
|
+
const result = determineNewSortOrder<TestData>(
|
|
34
34
|
currentSortColumnId,
|
|
35
35
|
currentSortDirection,
|
|
36
36
|
newSortColumnId,
|
|
@@ -44,7 +44,7 @@ describe('tableUtils', () => {
|
|
|
44
44
|
const currentSortDirection = SortOrder.DESC;
|
|
45
45
|
const newSortColumnId = 'column1';
|
|
46
46
|
|
|
47
|
-
const result = determineNewSortOrder<
|
|
47
|
+
const result = determineNewSortOrder<TestData>(
|
|
48
48
|
currentSortColumnId,
|
|
49
49
|
currentSortDirection,
|
|
50
50
|
newSortColumnId,
|
|
@@ -58,7 +58,7 @@ describe('tableUtils', () => {
|
|
|
58
58
|
const currentSortDirection = SortOrder.DESC;
|
|
59
59
|
const newSortColumnId = 'column1';
|
|
60
60
|
|
|
61
|
-
const result = determineNewSortOrder<
|
|
61
|
+
const result = determineNewSortOrder<TestData>(
|
|
62
62
|
currentSortColumnId,
|
|
63
63
|
currentSortDirection,
|
|
64
64
|
newSortColumnId,
|
|
@@ -72,7 +72,9 @@ export default function WfoConfirmationDialog({
|
|
|
72
72
|
<EuiModalBody>
|
|
73
73
|
<div>
|
|
74
74
|
<section
|
|
75
|
-
className={`dialog-content ${
|
|
75
|
+
className={`dialog-content ${
|
|
76
|
+
isError ? ' error' : ''
|
|
77
|
+
}`}
|
|
76
78
|
>
|
|
77
79
|
<h2>{question}</h2>
|
|
78
80
|
{subQuestion && <p>{subQuestion}</p>}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export const ORCHESTRATOR_UI_LIBRARY_VERSION = '2.
|
|
1
|
+
export const ORCHESTRATOR_UI_LIBRARY_VERSION = '2.9.0';
|
package/src/messages/en-GB.json
CHANGED
|
@@ -116,7 +116,7 @@
|
|
|
116
116
|
"placeholderNoServicePort": "First select a Service Port...",
|
|
117
117
|
"invalidVlan": "Invalid VLAN - must be a range of valid [2-4094] VLAN integers, for example '2, 5-6, 1048-1052'",
|
|
118
118
|
"untaggedPortInUse": "This service port is already in use and cannot be chosen",
|
|
119
|
-
"taggedOnly": "VLAN is only relevant for
|
|
119
|
+
"taggedOnly": "VLAN is only relevant for service ports in tagged mode, not for link_member or untagged ports.",
|
|
120
120
|
"loadingIms": "Loading VLAN info from IMS"
|
|
121
121
|
},
|
|
122
122
|
"subscription": {
|
|
@@ -291,6 +291,7 @@
|
|
|
291
291
|
"tasks": "Tasks",
|
|
292
292
|
"terminate": "Terminate workflow",
|
|
293
293
|
"actions": "Actions",
|
|
294
|
+
"lockedBySubscriptions": "This action is locked by the following subscriptions:",
|
|
294
295
|
"subscription": {
|
|
295
296
|
"no_modify_deleted_related_objects": "This subscription can not be modified because it contains references to other systems that are deleted.",
|
|
296
297
|
"no_modify_in_use_by_subscription": "This subscription can not be {action} as it is used in other subscriptions: {unterminated_in_use_by_subscriptions}",
|
package/src/messages/nl-NL.json
CHANGED
|
@@ -38,6 +38,7 @@
|
|
|
38
38
|
"noItemsFound": "Geen items gevonden",
|
|
39
39
|
"search": "Zoeken",
|
|
40
40
|
"errorMessage": "Er is een fout opgetreden",
|
|
41
|
+
"unknownError": "Onbekende error",
|
|
41
42
|
"export": "Exporteren",
|
|
42
43
|
"unauthorizedPage": "Niet geautoriseerd om deze pagina te bekijken",
|
|
43
44
|
"insyncTrue": "in-sync",
|
|
@@ -115,7 +116,7 @@
|
|
|
115
116
|
"placeholderNoServicePort": "Selecteer eerst een Service Port...",
|
|
116
117
|
"invalidVlan": "Invalid VLAN - Voer een range of geldige [2-4094] VLAN integers in, bijvoorbeeld: '2, 5-6, 1048-1052'",
|
|
117
118
|
"untaggedPortInUse": "Deze service port is al in gebruik en kan niet worden gekozen",
|
|
118
|
-
"taggedOnly": "VLAN is alleen relevant
|
|
119
|
+
"taggedOnly": "VLAN is alleen relevant voor service poorten in tagged mode, niet voor link_member of untagged ports.",
|
|
119
120
|
"loadingIms": "VLAN informatie aan het laden uit IMS..."
|
|
120
121
|
},
|
|
121
122
|
"subscription": {
|
|
@@ -223,7 +224,7 @@
|
|
|
223
224
|
},
|
|
224
225
|
"steps": {
|
|
225
226
|
"taskSteps": "Taak stappen",
|
|
226
|
-
"
|
|
227
|
+
"workflowSteps": "Workflow stappen",
|
|
227
228
|
"showDelta": "Toon subscription delta",
|
|
228
229
|
"hideDelta": "Verberg subscription delta",
|
|
229
230
|
"showTraceback": "Toon traceback",
|
|
@@ -290,6 +291,7 @@
|
|
|
290
291
|
"tasks": "Taken",
|
|
291
292
|
"terminate": "Terminate workflow",
|
|
292
293
|
"actions": "Acties",
|
|
294
|
+
"lockedBySubscriptions": "Deze actie is geblokkeerd door de volgende subscriptions:",
|
|
293
295
|
"subscription": {
|
|
294
296
|
"no_modify_deleted_related_objects": "Deze subscription kan niet worden gewijzigd omdat het verwijzingen bevat naar andere systemen die zijn verwijderd.",
|
|
295
297
|
"no_modify_in_use_by_subscription": "Deze subscription kan niet worden {gewijzigd} omdat het wordt gebruikt in andere subscriptions: {unterminated_in_use_by_subscriptions}",
|
|
@@ -158,8 +158,9 @@ export const WfoProcessDetail = ({
|
|
|
158
158
|
},
|
|
159
159
|
),
|
|
160
160
|
onConfirm: () => {
|
|
161
|
-
processDetail?.processId
|
|
161
|
+
if (processDetail?.processId) {
|
|
162
162
|
retryProcess({ processId: processDetail.processId });
|
|
163
|
+
}
|
|
163
164
|
},
|
|
164
165
|
});
|
|
165
166
|
|
|
@@ -172,8 +173,9 @@ export const WfoProcessDetail = ({
|
|
|
172
173
|
},
|
|
173
174
|
),
|
|
174
175
|
onConfirm: () => {
|
|
175
|
-
processDetail?.processId
|
|
176
|
+
if (processDetail?.processId) {
|
|
176
177
|
abortProcess({ processId: processDetail.processId });
|
|
178
|
+
}
|
|
177
179
|
router.push(processIsTask ? PATH_TASKS : PATH_WORKFLOWS);
|
|
178
180
|
},
|
|
179
181
|
});
|
|
@@ -184,8 +186,9 @@ export const WfoProcessDetail = ({
|
|
|
184
186
|
workflowName: processDetail?.workflowName,
|
|
185
187
|
}),
|
|
186
188
|
onConfirm: () => {
|
|
187
|
-
processDetail?.processId
|
|
189
|
+
if (processDetail?.processId) {
|
|
188
190
|
deleteProcess({ processId: processDetail.processId });
|
|
191
|
+
}
|
|
189
192
|
router.push(PATH_TASKS);
|
|
190
193
|
},
|
|
191
194
|
});
|
|
@@ -7,7 +7,10 @@ import {
|
|
|
7
7
|
WfoStepListRef,
|
|
8
8
|
WfoWorkflowStepList,
|
|
9
9
|
} from '@/components';
|
|
10
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
useGetDescriptionForWorkflowNameQuery,
|
|
12
|
+
useGetProcessDetailQuery,
|
|
13
|
+
} from '@/rtk';
|
|
11
14
|
import { Step } from '@/types';
|
|
12
15
|
import { getProductNamesFromProcess } from '@/utils';
|
|
13
16
|
|
|
@@ -35,10 +38,23 @@ export const WfoProcessDetailPage = ({
|
|
|
35
38
|
});
|
|
36
39
|
const processDetail = data?.processes[0];
|
|
37
40
|
|
|
41
|
+
const { data: workflowMetadata, isError: isErrorWorkflowDescription } =
|
|
42
|
+
useGetDescriptionForWorkflowNameQuery(
|
|
43
|
+
{
|
|
44
|
+
workflowName: processDetail?.workflowName ?? '',
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
skip: processDetail === undefined,
|
|
48
|
+
},
|
|
49
|
+
);
|
|
50
|
+
|
|
38
51
|
const steps = processDetail?.steps ?? [];
|
|
39
52
|
|
|
40
53
|
const productNames = getProductNamesFromProcess(processDetail);
|
|
41
|
-
const pageTitle =
|
|
54
|
+
const pageTitle =
|
|
55
|
+
workflowMetadata?.description ||
|
|
56
|
+
(isErrorWorkflowDescription && processDetail?.workflowName) ||
|
|
57
|
+
'';
|
|
42
58
|
const isTask = processDetail?.isTask ?? false;
|
|
43
59
|
const groupedSteps: GroupedStep[] = convertStepsToGroupedSteps(steps);
|
|
44
60
|
const timelineItems: TimelineItem[] =
|