@orchestrator-ui/orchestrator-ui-components 3.1.0 → 3.2.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 +7 -7
- package/.turbo/turbo-lint.log +1 -1
- package/.turbo/turbo-test.log +6 -6
- package/CHANGELOG.md +12 -0
- package/dist/index.d.ts +20 -5
- package/dist/index.js +3097 -3022
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/WfoPageTemplate/WfoPageTemplate/ContentContext.tsx +28 -0
- package/src/components/WfoPageTemplate/WfoPageTemplate/WfoPageTemplate.tsx +28 -26
- package/src/components/WfoPageTemplate/WfoPageTemplate/index.ts +1 -0
- package/src/components/WfoPageTemplate/WfoPageTemplate/styles.ts +30 -0
- package/src/components/WfoPageTemplate/WfoSidebar/WfoSidebar.tsx +18 -16
- package/src/components/WfoPageTemplate/WfoSidebar/styles.ts +1 -2
- package/src/components/WfoTimeline/WfoTimeline.tsx +2 -2
- package/src/components/WfoTimeline/WfoTimelineStep.tsx +2 -2
- package/src/components/WfoTimeline/styles.ts +15 -1
- package/src/components/WfoWorkflowSteps/WfoStep/WfoStep.tsx +2 -2
- package/src/components/WfoWorkflowSteps/WfoStepList/WfoStepList.tsx +30 -6
- package/src/components/WfoWorkflowSteps/WfoStepStatusIcon/WfoStepStatusIcon.tsx +2 -2
- package/src/components/WfoWorkflowSteps/WfoWorkflowStepList/WfoStepListHeader.tsx +2 -2
- package/src/components/WfoWorkflowSteps/styles.ts +8 -2
- package/src/configuration/version.ts +1 -1
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useContentRef.ts +7 -0
- package/src/pages/processes/WfoStartProcessPage.tsx +2 -2
package/package.json
CHANGED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import React, { FC, ReactNode, createContext } from 'react';
|
|
2
|
+
|
|
3
|
+
import { getPageTemplateStyles } from '@/components/WfoPageTemplate/WfoPageTemplate/styles';
|
|
4
|
+
import { useWithOrchestratorTheme } from '@/hooks';
|
|
5
|
+
|
|
6
|
+
export type ContentType = {
|
|
7
|
+
contentRef: React.RefObject<HTMLDivElement>;
|
|
8
|
+
};
|
|
9
|
+
export const ContentContext = createContext<ContentType | undefined>(undefined);
|
|
10
|
+
export type ContentContextProviderProps = ContentType & {
|
|
11
|
+
navigationHeight: number;
|
|
12
|
+
children: ReactNode;
|
|
13
|
+
};
|
|
14
|
+
export const ContentContextProvider: FC<ContentContextProviderProps> = ({
|
|
15
|
+
contentRef,
|
|
16
|
+
navigationHeight,
|
|
17
|
+
children,
|
|
18
|
+
}) => {
|
|
19
|
+
const { getContentStyle } = useWithOrchestratorTheme(getPageTemplateStyles);
|
|
20
|
+
|
|
21
|
+
return (
|
|
22
|
+
<div ref={contentRef} css={getContentStyle(navigationHeight)}>
|
|
23
|
+
<ContentContext.Provider value={{ contentRef }}>
|
|
24
|
+
{children}
|
|
25
|
+
</ContentContext.Provider>
|
|
26
|
+
</div>
|
|
27
|
+
);
|
|
28
|
+
};
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import React, { FC, ReactElement, ReactNode, useState } from 'react';
|
|
1
|
+
import React, { FC, ReactElement, ReactNode, useRef, useState } from 'react';
|
|
2
2
|
|
|
3
3
|
import type { EuiThemeColorMode } from '@elastic/eui';
|
|
4
|
-
import { EuiPageTemplate } from '@elastic/eui';
|
|
5
|
-
import { EuiSideNavItemType } from '@elastic/eui/src/components/side_nav/side_nav_types';
|
|
4
|
+
import { EuiPageTemplate, EuiSideNavItemType } from '@elastic/eui';
|
|
6
5
|
|
|
7
6
|
import { WfoBreadcrumbs, WfoPageHeader, WfoSidebar } from '@/components';
|
|
8
|
-
import {
|
|
7
|
+
import { useWithOrchestratorTheme } from '@/hooks';
|
|
8
|
+
|
|
9
|
+
import { ContentContextProvider } from './ContentContext';
|
|
10
|
+
import { getPageTemplateStyles } from './styles';
|
|
9
11
|
|
|
10
12
|
export interface WfoPageTemplateProps {
|
|
11
13
|
getAppLogo: (navigationHeight: number) => ReactElement;
|
|
@@ -22,15 +24,19 @@ export const WfoPageTemplate: FC<WfoPageTemplateProps> = ({
|
|
|
22
24
|
overrideMenuItems,
|
|
23
25
|
onThemeSwitch,
|
|
24
26
|
}) => {
|
|
25
|
-
const {
|
|
27
|
+
const { getSidebarStyle, NAVIGATION_HEIGHT } = useWithOrchestratorTheme(
|
|
28
|
+
getPageTemplateStyles,
|
|
29
|
+
);
|
|
30
|
+
|
|
26
31
|
const [isSideMenuVisible, setIsSideMenuVisible] = useState(true);
|
|
27
|
-
|
|
32
|
+
|
|
33
|
+
const headerRowRef = useRef<HTMLDivElement>(null);
|
|
28
34
|
|
|
29
35
|
return (
|
|
30
36
|
<>
|
|
31
37
|
<WfoPageHeader
|
|
32
38
|
getAppLogo={getAppLogo}
|
|
33
|
-
navigationHeight={
|
|
39
|
+
navigationHeight={NAVIGATION_HEIGHT}
|
|
34
40
|
onThemeSwitch={onThemeSwitch}
|
|
35
41
|
/>
|
|
36
42
|
{/* Sidebar and content area */}
|
|
@@ -38,34 +44,30 @@ export const WfoPageTemplate: FC<WfoPageTemplateProps> = ({
|
|
|
38
44
|
panelled={false}
|
|
39
45
|
grow={false}
|
|
40
46
|
contentBorder={false}
|
|
41
|
-
minHeight={`calc(100vh - ${
|
|
47
|
+
minHeight={`calc(100vh - ${NAVIGATION_HEIGHT}px)`}
|
|
42
48
|
restrictWidth={false}
|
|
43
49
|
>
|
|
44
50
|
{isSideMenuVisible && (
|
|
45
51
|
<EuiPageTemplate.Sidebar
|
|
46
|
-
css={
|
|
47
|
-
backgroundColor: theme.colors.body,
|
|
48
|
-
overflowY: 'auto',
|
|
49
|
-
maxHeight: `calc(100vh - ${navigationHeight}px)`,
|
|
50
|
-
}}
|
|
52
|
+
css={getSidebarStyle(NAVIGATION_HEIGHT)}
|
|
51
53
|
>
|
|
52
54
|
<WfoSidebar overrideMenuItems={overrideMenuItems} />
|
|
53
55
|
</EuiPageTemplate.Sidebar>
|
|
54
56
|
)}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
maxHeight: `calc(100vh - ${navigationHeight}px)`,
|
|
60
|
-
}}
|
|
57
|
+
|
|
58
|
+
<ContentContextProvider
|
|
59
|
+
contentRef={headerRowRef}
|
|
60
|
+
navigationHeight={NAVIGATION_HEIGHT}
|
|
61
61
|
>
|
|
62
|
-
<
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
62
|
+
<EuiPageTemplate.Section>
|
|
63
|
+
<WfoBreadcrumbs
|
|
64
|
+
handleSideMenuClick={() =>
|
|
65
|
+
setIsSideMenuVisible((prevState) => !prevState)
|
|
66
|
+
}
|
|
67
|
+
/>
|
|
68
|
+
{children}
|
|
69
|
+
</EuiPageTemplate.Section>
|
|
70
|
+
</ContentContextProvider>
|
|
69
71
|
</EuiPageTemplate>
|
|
70
72
|
</>
|
|
71
73
|
);
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { css } from '@emotion/react';
|
|
2
|
+
|
|
3
|
+
import { WfoTheme } from '@/hooks';
|
|
4
|
+
|
|
5
|
+
export const getPageTemplateStyles = ({
|
|
6
|
+
theme,
|
|
7
|
+
multiplyByBaseUnit,
|
|
8
|
+
}: WfoTheme) => {
|
|
9
|
+
const NAVIGATION_HEIGHT = multiplyByBaseUnit(3);
|
|
10
|
+
|
|
11
|
+
const getSidebarStyle = (navigationHeight: number) =>
|
|
12
|
+
css({
|
|
13
|
+
backgroundColor: theme.colors.body,
|
|
14
|
+
overflowY: 'auto',
|
|
15
|
+
maxHeight: `calc(100vh - ${navigationHeight}px)`,
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
const getContentStyle = (navigationHeight: number) =>
|
|
19
|
+
css({
|
|
20
|
+
backgroundColor: theme.colors.emptyShade,
|
|
21
|
+
overflowY: 'auto',
|
|
22
|
+
maxHeight: `calc(100vh - ${navigationHeight}px)`,
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
return {
|
|
26
|
+
NAVIGATION_HEIGHT,
|
|
27
|
+
getSidebarStyle,
|
|
28
|
+
getContentStyle,
|
|
29
|
+
};
|
|
30
|
+
};
|
|
@@ -3,7 +3,7 @@ import React, { FC, useState } from 'react';
|
|
|
3
3
|
import { useTranslations } from 'next-intl';
|
|
4
4
|
import { useRouter } from 'next/router';
|
|
5
5
|
|
|
6
|
-
import { EuiSideNav, EuiSpacer } from '@elastic/eui';
|
|
6
|
+
import { EuiHorizontalRule, EuiSideNav, EuiSpacer } from '@elastic/eui';
|
|
7
7
|
import { EuiSideNavItemType } from '@elastic/eui/src/components/side_nav/side_nav_types';
|
|
8
8
|
|
|
9
9
|
import { WfoIsAllowedToRender, menuItemIsAllowed } from '@/components';
|
|
@@ -36,6 +36,12 @@ export const urlPolicyMap = new Map<string, PolicyResource>([
|
|
|
36
36
|
[PATH_SETTINGS, PolicyResource.NAVIGATION_SETTINGS],
|
|
37
37
|
]);
|
|
38
38
|
|
|
39
|
+
export const sideNavMenuDivider: EuiSideNavItemType<object> = {
|
|
40
|
+
name: '',
|
|
41
|
+
id: 'menuDivider',
|
|
42
|
+
renderItem: () => <EuiHorizontalRule margin="xs" />,
|
|
43
|
+
};
|
|
44
|
+
|
|
39
45
|
export type WfoSidebarProps = {
|
|
40
46
|
overrideMenuItems?: (
|
|
41
47
|
defaultMenuItems: EuiSideNavItemType<object>[],
|
|
@@ -60,7 +66,7 @@ export const WfoSidebar: FC<WfoSidebarProps> = ({ overrideMenuItems }) => {
|
|
|
60
66
|
const defaultMenuItems: EuiSideNavItemType<object>[] = [
|
|
61
67
|
{
|
|
62
68
|
name: t('start'),
|
|
63
|
-
id: '
|
|
69
|
+
id: 'start',
|
|
64
70
|
isSelected: router.pathname === PATH_START,
|
|
65
71
|
href: PATH_START,
|
|
66
72
|
renderItem: () => (
|
|
@@ -73,7 +79,7 @@ export const WfoSidebar: FC<WfoSidebarProps> = ({ overrideMenuItems }) => {
|
|
|
73
79
|
},
|
|
74
80
|
{
|
|
75
81
|
name: t('subscriptions'),
|
|
76
|
-
id: '
|
|
82
|
+
id: 'subscriptions',
|
|
77
83
|
isSelected: router.pathname.startsWith(PATH_SUBSCRIPTIONS),
|
|
78
84
|
href: PATH_SUBSCRIPTIONS,
|
|
79
85
|
renderItem: () => (
|
|
@@ -86,7 +92,7 @@ export const WfoSidebar: FC<WfoSidebarProps> = ({ overrideMenuItems }) => {
|
|
|
86
92
|
},
|
|
87
93
|
{
|
|
88
94
|
name: t('workflows'),
|
|
89
|
-
id: '
|
|
95
|
+
id: 'workflows',
|
|
90
96
|
isSelected: router.pathname.startsWith(PATH_WORKFLOWS),
|
|
91
97
|
href: PATH_WORKFLOWS,
|
|
92
98
|
renderItem: () => (
|
|
@@ -100,7 +106,7 @@ export const WfoSidebar: FC<WfoSidebarProps> = ({ overrideMenuItems }) => {
|
|
|
100
106
|
{
|
|
101
107
|
name: t('tasks'),
|
|
102
108
|
isSelected: router.pathname.startsWith(PATH_TASKS),
|
|
103
|
-
id: '
|
|
109
|
+
id: 'tasks',
|
|
104
110
|
href: PATH_TASKS,
|
|
105
111
|
renderItem: () => (
|
|
106
112
|
<WfoMenuItemLink
|
|
@@ -112,7 +118,7 @@ export const WfoSidebar: FC<WfoSidebarProps> = ({ overrideMenuItems }) => {
|
|
|
112
118
|
},
|
|
113
119
|
{
|
|
114
120
|
name: t('metadata'),
|
|
115
|
-
id: '
|
|
121
|
+
id: 'metadata',
|
|
116
122
|
href: PATH_METADATA,
|
|
117
123
|
isSelected:
|
|
118
124
|
router.pathname.substring(0, PATH_METADATA.length) ===
|
|
@@ -121,17 +127,13 @@ export const WfoSidebar: FC<WfoSidebarProps> = ({ overrideMenuItems }) => {
|
|
|
121
127
|
<WfoMenuItemLink
|
|
122
128
|
path={PATH_METADATA_PRODUCTS}
|
|
123
129
|
translationString="metadata"
|
|
124
|
-
isSelected={
|
|
125
|
-
router.pathname.substring(0, PATH_METADATA.length) ===
|
|
126
|
-
PATH_METADATA
|
|
127
|
-
}
|
|
128
130
|
hasSubItems={true}
|
|
129
131
|
/>
|
|
130
132
|
),
|
|
131
133
|
items: [
|
|
132
134
|
{
|
|
133
135
|
name: t('metadataProducts'),
|
|
134
|
-
id: '
|
|
136
|
+
id: 'metadata-products',
|
|
135
137
|
href: PATH_METADATA_PRODUCTS,
|
|
136
138
|
renderItem: () => (
|
|
137
139
|
<WfoMenuItemLink
|
|
@@ -146,7 +148,7 @@ export const WfoSidebar: FC<WfoSidebarProps> = ({ overrideMenuItems }) => {
|
|
|
146
148
|
},
|
|
147
149
|
{
|
|
148
150
|
name: t('metadataProductblocks'),
|
|
149
|
-
id: '
|
|
151
|
+
id: 'metadata-productblocks',
|
|
150
152
|
isSelected:
|
|
151
153
|
router.pathname === PATH_METADATA_PRODUCT_BLOCKS,
|
|
152
154
|
href: PATH_METADATA_PRODUCT_BLOCKS,
|
|
@@ -163,7 +165,7 @@ export const WfoSidebar: FC<WfoSidebarProps> = ({ overrideMenuItems }) => {
|
|
|
163
165
|
},
|
|
164
166
|
{
|
|
165
167
|
name: t('metadataResourceTypes'),
|
|
166
|
-
id: '
|
|
168
|
+
id: 'metadata-resourceTypes',
|
|
167
169
|
href: PATH_METADATA_RESOURCE_TYPES,
|
|
168
170
|
isSelected:
|
|
169
171
|
router.pathname === PATH_METADATA_RESOURCE_TYPES,
|
|
@@ -180,7 +182,7 @@ export const WfoSidebar: FC<WfoSidebarProps> = ({ overrideMenuItems }) => {
|
|
|
180
182
|
},
|
|
181
183
|
{
|
|
182
184
|
name: t('metadataWorkflows'),
|
|
183
|
-
id: '
|
|
185
|
+
id: 'metadata-workflows',
|
|
184
186
|
isSelected: router.pathname === PATH_METADATA_WORKFLOWS,
|
|
185
187
|
href: PATH_METADATA_WORKFLOWS,
|
|
186
188
|
renderItem: () => (
|
|
@@ -196,7 +198,7 @@ export const WfoSidebar: FC<WfoSidebarProps> = ({ overrideMenuItems }) => {
|
|
|
196
198
|
},
|
|
197
199
|
{
|
|
198
200
|
name: t('metadataTasks'),
|
|
199
|
-
id: '
|
|
201
|
+
id: 'metadata-tasks',
|
|
200
202
|
isSelected: router.pathname === PATH_METADATA_TASKS,
|
|
201
203
|
href: PATH_METADATA_TASKS,
|
|
202
204
|
renderItem: () => (
|
|
@@ -212,8 +214,8 @@ export const WfoSidebar: FC<WfoSidebarProps> = ({ overrideMenuItems }) => {
|
|
|
212
214
|
},
|
|
213
215
|
{
|
|
214
216
|
name: t('settings'),
|
|
217
|
+
id: 'settings',
|
|
215
218
|
isSelected: router.pathname === PATH_SETTINGS,
|
|
216
|
-
id: '7',
|
|
217
219
|
href: PATH_SETTINGS,
|
|
218
220
|
renderItem: () => (
|
|
219
221
|
<WfoMenuItemLink
|
|
@@ -45,7 +45,7 @@ export const getMenuItemStyles = ({ theme, isDarkThemeActive }: WfoTheme) => {
|
|
|
45
45
|
':hover': {
|
|
46
46
|
textDecoration: 'underline',
|
|
47
47
|
},
|
|
48
|
-
color: theme.colors.
|
|
48
|
+
color: theme.colors.subduedText,
|
|
49
49
|
padding: `${theme.base * 0.5}px ${theme.base * 0.75}px`,
|
|
50
50
|
};
|
|
51
51
|
|
|
@@ -69,7 +69,6 @@ export const getMenuItemStyles = ({ theme, isDarkThemeActive }: WfoTheme) => {
|
|
|
69
69
|
|
|
70
70
|
const menuItemStyle = css({
|
|
71
71
|
...baseStyles,
|
|
72
|
-
color: theme.colors.subduedText,
|
|
73
72
|
});
|
|
74
73
|
|
|
75
74
|
const selectedMenuItemBaseStyle = {
|
|
@@ -7,7 +7,7 @@ import { useWithOrchestratorTheme } from '@/hooks';
|
|
|
7
7
|
import { StepStatus } from '@/types';
|
|
8
8
|
|
|
9
9
|
import { WfoTimelineStep } from './WfoTimelineStep';
|
|
10
|
-
import {
|
|
10
|
+
import { getTimelineStyles } from './styles';
|
|
11
11
|
import { getTimelinePosition } from './timelineUtils';
|
|
12
12
|
|
|
13
13
|
export enum TimelinePosition {
|
|
@@ -34,7 +34,7 @@ export const WfoTimeline: FC<WfoTimelineProps> = ({
|
|
|
34
34
|
indexOfCurrentStep = 0,
|
|
35
35
|
onStepClick,
|
|
36
36
|
}) => {
|
|
37
|
-
const { timelinePanelStyle } = useWithOrchestratorTheme(
|
|
37
|
+
const { timelinePanelStyle } = useWithOrchestratorTheme(getTimelineStyles);
|
|
38
38
|
|
|
39
39
|
const mapTimelineItemToStep = (
|
|
40
40
|
timelineItem: TimelineItem,
|
|
@@ -6,7 +6,7 @@ import { useWithOrchestratorTheme } from '@/hooks';
|
|
|
6
6
|
import { StepStatus } from '@/types';
|
|
7
7
|
|
|
8
8
|
import { TimelinePosition } from './WfoTimeline';
|
|
9
|
-
import {
|
|
9
|
+
import { getTimelineStyles } from './styles';
|
|
10
10
|
|
|
11
11
|
export type WfoTimelineStepProps = {
|
|
12
12
|
stepStatus: StepStatus;
|
|
@@ -34,7 +34,7 @@ export const WfoTimelineStep = ({
|
|
|
34
34
|
getStepLineStyle,
|
|
35
35
|
getStepOuterCircleStyle,
|
|
36
36
|
getStepInnerCircleStyle,
|
|
37
|
-
} = useWithOrchestratorTheme(
|
|
37
|
+
} = useWithOrchestratorTheme(getTimelineStyles);
|
|
38
38
|
|
|
39
39
|
return (
|
|
40
40
|
<button
|
|
@@ -5,7 +5,12 @@ import { StepStatus } from '@/types';
|
|
|
5
5
|
|
|
6
6
|
import { TimelinePosition } from './WfoTimeline';
|
|
7
7
|
|
|
8
|
-
export const
|
|
8
|
+
export const getTimelineStyles = ({ theme }: WfoTheme) => {
|
|
9
|
+
const TIMELINE_HEIGHT = theme.base * 2.5;
|
|
10
|
+
const TIMELINE_OUTLINE_WIDTH = theme.base * 0.75;
|
|
11
|
+
|
|
12
|
+
const timelineHeightPx = `${TIMELINE_HEIGHT}px`;
|
|
13
|
+
const timelineOutlineWidthPx = `${TIMELINE_OUTLINE_WIDTH}px`;
|
|
9
14
|
const emptyStepOuterDiameter = theme.base;
|
|
10
15
|
const emptyStepInnerDiameter = theme.base / 2;
|
|
11
16
|
const stepWithValueOuterDiameter = theme.base * 1.5;
|
|
@@ -41,12 +46,19 @@ export const getStyles = ({ theme }: WfoTheme) => {
|
|
|
41
46
|
const timelinePanelStyle = css({
|
|
42
47
|
backgroundColor: theme.colors.body,
|
|
43
48
|
borderRadius: theme.border.radius.medium,
|
|
49
|
+
outline: `${timelineOutlineWidthPx} solid ${theme.colors.emptyShade}`,
|
|
50
|
+
height: timelineHeightPx,
|
|
51
|
+
marginTop: timelineOutlineWidthPx,
|
|
52
|
+
marginBottom: timelineOutlineWidthPx,
|
|
44
53
|
overflow: 'auto',
|
|
45
54
|
scrollbarWidth: 'auto',
|
|
46
55
|
paddingTop: theme.font.baseline * 2,
|
|
47
56
|
paddingBottom: theme.font.baseline * 2,
|
|
48
57
|
paddingLeft: theme.font.baseline * 4,
|
|
49
58
|
paddingRight: theme.font.baseline * 4,
|
|
59
|
+
position: 'sticky',
|
|
60
|
+
top: timelineOutlineWidthPx,
|
|
61
|
+
zIndex: 2, // Some EUI components have a zIndex
|
|
50
62
|
display: 'flex',
|
|
51
63
|
|
|
52
64
|
'& > button': {
|
|
@@ -161,6 +173,8 @@ export const getStyles = ({ theme }: WfoTheme) => {
|
|
|
161
173
|
});
|
|
162
174
|
|
|
163
175
|
return {
|
|
176
|
+
TIMELINE_HEIGHT,
|
|
177
|
+
TIMELINE_OUTLINE_WIDTH,
|
|
164
178
|
timelinePanelStyle,
|
|
165
179
|
stepStyle,
|
|
166
180
|
clickableStyle,
|
|
@@ -20,7 +20,7 @@ import { calculateTimeDifference, formatDate } from '@/utils';
|
|
|
20
20
|
import { WfoStepStatusIcon } from '../WfoStepStatusIcon';
|
|
21
21
|
import type { StepListItem } from '../WfoWorkflowStepList';
|
|
22
22
|
import { getStepContent } from '../stepListUtils';
|
|
23
|
-
import {
|
|
23
|
+
import { getWorkflowStepsStyles } from '../styles';
|
|
24
24
|
import { WfoStepForm } from './WfoStepForm';
|
|
25
25
|
|
|
26
26
|
export interface WfoStepProps {
|
|
@@ -58,7 +58,7 @@ export const WfoStep = React.forwardRef(
|
|
|
58
58
|
stepDurationStyle,
|
|
59
59
|
stepRowStyle,
|
|
60
60
|
getStepToggleExpandStyle,
|
|
61
|
-
} = useWithOrchestratorTheme(
|
|
61
|
+
} = useWithOrchestratorTheme(getWorkflowStepsStyles);
|
|
62
62
|
const t = useTranslations('processes.steps');
|
|
63
63
|
const hasHtmlMail =
|
|
64
64
|
step.stateDelta?.hasOwnProperty('confirmation_mail');
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import React, { Ref, useImperativeHandle, useRef } from 'react';
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { getPageTemplateStyles } from '@/components/WfoPageTemplate/WfoPageTemplate/styles';
|
|
4
|
+
import { getTimelineStyles } from '@/components/WfoTimeline/styles';
|
|
5
|
+
import { useContentRef, useWithOrchestratorTheme } from '@/hooks';
|
|
4
6
|
|
|
5
7
|
import { WfoStep } from '../WfoStep';
|
|
6
|
-
import {
|
|
8
|
+
import { getWorkflowStepsStyles } from '../styles';
|
|
7
9
|
import { StepListItem } from './../WfoWorkflowStepList';
|
|
8
10
|
|
|
9
11
|
export type WfoStepListRef = {
|
|
@@ -33,10 +35,23 @@ export const WfoStepList = React.forwardRef(
|
|
|
33
35
|
}: WfoStepListProps,
|
|
34
36
|
reference: Ref<WfoStepListRef>,
|
|
35
37
|
) => {
|
|
36
|
-
const {
|
|
38
|
+
const { NAVIGATION_HEIGHT } = useWithOrchestratorTheme(
|
|
39
|
+
getPageTemplateStyles,
|
|
40
|
+
);
|
|
41
|
+
const { TIMELINE_HEIGHT, TIMELINE_OUTLINE_WIDTH } =
|
|
42
|
+
useWithOrchestratorTheme(getTimelineStyles);
|
|
43
|
+
const { SPACE_BETWEEN_STEPS, stepSpacerStyle } =
|
|
44
|
+
useWithOrchestratorTheme(getWorkflowStepsStyles);
|
|
45
|
+
const scrollOffset =
|
|
46
|
+
NAVIGATION_HEIGHT +
|
|
47
|
+
TIMELINE_HEIGHT +
|
|
48
|
+
TIMELINE_OUTLINE_WIDTH +
|
|
49
|
+
SPACE_BETWEEN_STEPS;
|
|
37
50
|
|
|
38
51
|
const stepReferences = useRef(new Map<string, HTMLDivElement>());
|
|
39
52
|
|
|
53
|
+
const { contentRef } = useContentRef();
|
|
54
|
+
|
|
40
55
|
let stepStartTime = startedAt;
|
|
41
56
|
|
|
42
57
|
useImperativeHandle(reference, () => ({
|
|
@@ -56,9 +71,18 @@ export const WfoStepList = React.forwardRef(
|
|
|
56
71
|
onTriggerExpandStepListItem(foundStepListItem),
|
|
57
72
|
);
|
|
58
73
|
});
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
74
|
+
|
|
75
|
+
const targetRect = stepReferences.current
|
|
76
|
+
.get(stepId)
|
|
77
|
+
?.getBoundingClientRect();
|
|
78
|
+
|
|
79
|
+
if (targetRect) {
|
|
80
|
+
const { top } = targetRect;
|
|
81
|
+
contentRef?.current?.scrollBy({
|
|
82
|
+
top: top - scrollOffset,
|
|
83
|
+
behavior: 'smooth',
|
|
84
|
+
});
|
|
85
|
+
}
|
|
62
86
|
} catch {
|
|
63
87
|
console.error(
|
|
64
88
|
'Error scrolling to step with stepId ',
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
} from '@/icons';
|
|
14
14
|
import { StepStatus } from '@/types';
|
|
15
15
|
|
|
16
|
-
import {
|
|
16
|
+
import { getWorkflowStepsStyles } from '../styles';
|
|
17
17
|
|
|
18
18
|
export interface WfoStepStatusIconProps {
|
|
19
19
|
stepStatus: StepStatus;
|
|
@@ -61,7 +61,7 @@ export const WfoStepStatusIcon = ({
|
|
|
61
61
|
stepStateSuspendIconStyle,
|
|
62
62
|
stepStatePendingIconStyle,
|
|
63
63
|
stepStateFailedIconStyle,
|
|
64
|
-
} = useWithOrchestratorTheme(
|
|
64
|
+
} = useWithOrchestratorTheme(getWorkflowStepsStyles);
|
|
65
65
|
|
|
66
66
|
const [
|
|
67
67
|
stepStateStyle,
|
|
@@ -16,7 +16,7 @@ import { WfoTextAnchor } from '@/components/WfoTextAnchor/WfoTextAnchor';
|
|
|
16
16
|
import { useOrchestratorTheme, useWithOrchestratorTheme } from '@/hooks';
|
|
17
17
|
import { WfoCode, WfoEyeFill } from '@/icons';
|
|
18
18
|
|
|
19
|
-
import {
|
|
19
|
+
import { getWorkflowStepsStyles } from '../styles';
|
|
20
20
|
|
|
21
21
|
export type WfoStepListHeaderProps = {
|
|
22
22
|
allDetailToggleText: string;
|
|
@@ -56,7 +56,7 @@ export const WfoStepListHeader: FC<WfoStepListHeaderProps> = ({
|
|
|
56
56
|
stepListContentStyle,
|
|
57
57
|
stepListContentBoldTextStyle,
|
|
58
58
|
stepListOptionsContainerStyle,
|
|
59
|
-
} = useWithOrchestratorTheme(
|
|
59
|
+
} = useWithOrchestratorTheme(getWorkflowStepsStyles);
|
|
60
60
|
|
|
61
61
|
const [isViewOptionOpen, setIsViewOptionOpen] = useState(false);
|
|
62
62
|
|
|
@@ -2,10 +2,15 @@ import { css } from '@emotion/react';
|
|
|
2
2
|
|
|
3
3
|
import { WfoTheme } from '@/hooks';
|
|
4
4
|
|
|
5
|
-
export const
|
|
5
|
+
export const getWorkflowStepsStyles = ({
|
|
6
|
+
theme,
|
|
7
|
+
toSecondaryColor,
|
|
8
|
+
}: WfoTheme) => {
|
|
9
|
+
const SPACE_BETWEEN_STEPS = theme.base * 1.5;
|
|
10
|
+
|
|
6
11
|
const stepSpacerStyle = css({
|
|
7
12
|
borderLeft: `1px solid ${theme.colors.darkShade}`,
|
|
8
|
-
height:
|
|
13
|
+
height: `${SPACE_BETWEEN_STEPS}px`,
|
|
9
14
|
marginLeft: '36px',
|
|
10
15
|
});
|
|
11
16
|
|
|
@@ -102,6 +107,7 @@ export const getStyles = ({ theme, toSecondaryColor }: WfoTheme) => {
|
|
|
102
107
|
});
|
|
103
108
|
|
|
104
109
|
return {
|
|
110
|
+
SPACE_BETWEEN_STEPS,
|
|
105
111
|
stepDurationStyle,
|
|
106
112
|
stepEmailContainerStyle,
|
|
107
113
|
stepHeaderRightStyle,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export const ORCHESTRATOR_UI_LIBRARY_VERSION = '3.
|
|
1
|
+
export const ORCHESTRATOR_UI_LIBRARY_VERSION = '3.2.0';
|
package/src/hooks/index.ts
CHANGED
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
import { PATH_TASKS, PATH_WORKFLOWS, WfoError, WfoLoading } from '@/components';
|
|
16
16
|
import { UserInputFormWizard } from '@/components/WfoForms/UserInputFormWizard';
|
|
17
17
|
import { WfoStepStatusIcon } from '@/components/WfoWorkflowSteps';
|
|
18
|
-
import {
|
|
18
|
+
import { getWorkflowStepsStyles } from '@/components/WfoWorkflowSteps/styles';
|
|
19
19
|
import { useOrchestratorTheme, useWithOrchestratorTheme } from '@/hooks';
|
|
20
20
|
import {
|
|
21
21
|
HttpStatus,
|
|
@@ -124,7 +124,7 @@ export const WfoStartProcessPage = ({
|
|
|
124
124
|
const { stepUserInput, hasNext } = form;
|
|
125
125
|
|
|
126
126
|
const { getStepHeaderStyle, stepListContentBoldTextStyle } =
|
|
127
|
-
useWithOrchestratorTheme(
|
|
127
|
+
useWithOrchestratorTheme(getWorkflowStepsStyles);
|
|
128
128
|
|
|
129
129
|
const {
|
|
130
130
|
data: timeLineItems = [],
|