Skip to content

Commit 891f235

Browse files
committed
fix(ObjectPage): RTL support for Header
Closes #366
1 parent e4789e0 commit 891f235

File tree

3 files changed

+35
-13
lines changed

3 files changed

+35
-13
lines changed

.storybook/preview.js

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
import { select, withKnobs } from '@storybook/addon-knobs';
22
import { makeDecorator } from '@storybook/addons';
33
import { addDecorator, addParameters } from '@storybook/react';
4+
import { setTheme } from '@ui5/webcomponents-base/dist/config/Theme';
45
import '@ui5/webcomponents-base/dist/features/browsersupport/IE11';
6+
import '@ui5/webcomponents-fiori/dist/json-imports/Themes';
57
import '@ui5/webcomponents-react-base/polyfill/IE11';
68
import { ContentDensity } from '@ui5/webcomponents-react/lib/ContentDensity';
79
import { ThemeProvider } from '@ui5/webcomponents-react/lib/ThemeProvider';
810
import { Themes } from '@ui5/webcomponents-react/lib/Themes';
911
import '@ui5/webcomponents/dist/json-imports/i18n';
12+
import '@ui5/webcomponents/dist/json-imports/Themes';
1013
import '@webcomponents/webcomponentsjs/webcomponents-bundle';
1114
import { window } from 'global';
1215
import 'highlight.js/styles/solarized-dark.css';
1316
import qs from 'qs';
1417
import React, { useEffect } from 'react';
1518
import 'react-app-polyfill/ie11';
16-
import '@ui5/webcomponents/dist/json-imports/Themes';
17-
import '@ui5/webcomponents-fiori/dist/json-imports/Themes';
18-
import { setTheme } from '@ui5/webcomponents-base/dist/config/Theme';
1919

2020
addParameters({
2121
options: {
@@ -30,7 +30,7 @@ addParameters({
3030

3131
addDecorator(withKnobs);
3232

33-
const ThemeContainer = ({ theme, contentDensity, children, setQueryParam }) => {
33+
const ThemeContainer = ({ theme, contentDensity, children, setQueryParam, direction }) => {
3434
useEffect(() => {
3535
if (contentDensity === ContentDensity.Compact) {
3636
document.body.classList.add('ui5-content-density-compact');
@@ -39,6 +39,10 @@ const ThemeContainer = ({ theme, contentDensity, children, setQueryParam }) => {
3939
}
4040
}, [contentDensity, setQueryParam]);
4141

42+
useEffect(() => {
43+
document.querySelector('html').setAttribute('dir', direction.toLowerCase());
44+
}, [direction]);
45+
4246
useEffect(() => {
4347
setTheme(theme);
4448
}, [theme]);
@@ -73,6 +77,7 @@ const withQuery = makeDecorator({
7377
<ThemeContainer
7478
theme={select('Theme', [Themes.sap_fiori_3, Themes.sap_fiori_3_dark], Themes.sap_fiori_3)}
7579
contentDensity={select('ContentDensity', ContentDensity, contentDensity)}
80+
direction={select('Text Direction', ['LTR', 'RTL'], 'LTR')}
7681
setQueryParam={setQueryParam}
7782
>
7883
{getStory(context)}

packages/main/src/components/ObjectPage/CollapsedAvatar.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1+
import { createComponentStyles } from '@ui5/webcomponents-react-base/lib/createComponentStyles';
12
import { StyleClassHelper } from '@ui5/webcomponents-react-base/lib/StyleClassHelper';
23
import { AvatarSize } from '@ui5/webcomponents-react/lib/AvatarSize';
3-
import React, { useEffect, useMemo, useRef, useState, ReactElement } from 'react';
4-
import { createComponentStyles } from '@ui5/webcomponents-react-base/lib/createComponentStyles';
4+
import React, { ReactElement, useEffect, useMemo, useRef, useState } from 'react';
55

66
const styles = {
77
base: {
8-
marginRight: '1rem',
8+
margin: 'var(--_ui5wcr_ObjectPage_avatar_margin)', // defined in ObjectPage JSS
99
opacity: 0
1010
},
1111
hidden: {

packages/main/src/components/ObjectPage/ObjectPage.jss.ts

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
import { ThemingParameters } from '@ui5/webcomponents-react-base/lib/ThemingParameters';
22

3+
const ObjectPageCssVariables = {
4+
anchorFloat: '--_ui5wcr_ObjectPage_actions_float',
5+
anchorLeft: '--_ui5wcr_ObjectPage_actions_left',
6+
anchorRight: '--_ui5wcr_ObjectPage_actions_right',
7+
avatarMargin: '--_ui5wcr_ObjectPage_avatar_margin'
8+
};
9+
310
const styles = {
411
objectPage: {
512
width: '100%',
@@ -27,6 +34,18 @@ const styles = {
2734
display: 'none'
2835
}
2936
},
37+
'@global html': {
38+
[ObjectPageCssVariables.anchorFloat]: 'right',
39+
[ObjectPageCssVariables.anchorRight]: '1.25rem',
40+
[ObjectPageCssVariables.anchorLeft]: 'unset',
41+
[ObjectPageCssVariables.avatarMargin]: '0 1rem 0 0'
42+
},
43+
'@global [dir="rtl"]': {
44+
[ObjectPageCssVariables.anchorFloat]: 'left',
45+
[ObjectPageCssVariables.anchorRight]: 'unset',
46+
[ObjectPageCssVariables.anchorLeft]: '1.25rem',
47+
[ObjectPageCssVariables.avatarMargin]: '0 0 0 1rem'
48+
},
3049
iconTabBarMode: {
3150
'& section[data-component-name="ObjectPageSection"] > div[role="heading"]': {
3251
display: 'none'
@@ -103,9 +122,10 @@ const styles = {
103122
top: '0',
104123
paddingTop: '0.75rem',
105124
zIndex: 1,
106-
right: '1.25rem',
125+
right: `var(${ObjectPageCssVariables.anchorRight})`,
126+
left: `var(${ObjectPageCssVariables.anchorLeft})`,
107127
display: 'inline-block',
108-
float: 'right',
128+
float: `var(${ObjectPageCssVariables.anchorFloat})`,
109129
verticalAlign: 'top',
110130
'& > *': {
111131
marginLeft: '0.5rem',
@@ -123,9 +143,6 @@ const styles = {
123143
marginBottom: '1rem'
124144
}
125145
}
126-
},
127-
'& $actions': {
128-
// paddingTop: 0
129146
}
130147
},
131148
headerCustomContent: {
@@ -164,7 +181,7 @@ const styles = {
164181
flexDirection: 'row'
165182
},
166183
avatar: {
167-
marginRight: '1rem'
184+
margin: `var(${ObjectPageCssVariables.avatarMargin})`
168185
}
169186
};
170187

0 commit comments

Comments
 (0)