diff --git a/packages/react-native-web/src/exports/StyleSheet/__tests__/i18nStyle-test.js b/packages/react-native-web/src/exports/StyleSheet/__tests__/i18nStyle-test.js index f2e604ca..693f0ea5 100644 --- a/packages/react-native-web/src/exports/StyleSheet/__tests__/i18nStyle-test.js +++ b/packages/react-native-web/src/exports/StyleSheet/__tests__/i18nStyle-test.js @@ -32,11 +32,13 @@ describe('StyleSheet/i18nStyle', () => { test('converts end/start values', () => { const initial = { float: 'start', - textAlign: 'end' + textAlign: 'end', + transitionProperty: 'marginStart' }; const expected = { float: 'left', - textAlign: 'right' + textAlign: 'right', + transitionProperty: 'marginLeft' }; expect(i18nStyle(initial)).toEqual(expected); }); @@ -56,7 +58,8 @@ describe('StyleSheet/i18nStyle', () => { clear: 'left', float: 'left', textAlign: 'right', - textShadowOffset: { width: '1rem', height: 10 } + textShadowOffset: { width: '1rem', height: 10 }, + transitionProperty: 'marginLeft' }; expect(i18nStyle(initial)).toEqual(initial); }); @@ -116,11 +119,13 @@ describe('StyleSheet/i18nStyle', () => { test('converts end/start values', () => { const initial = { float: 'start', - textAlign: 'end' + textAlign: 'end', + transitionProperty: 'marginStart' }; const expected = { float: 'right', - textAlign: 'left' + textAlign: 'left', + transitionProperty: 'marginRight' }; expect(i18nStyle(initial)).toEqual(expected); }); @@ -140,7 +145,8 @@ describe('StyleSheet/i18nStyle', () => { clear: 'left', float: 'left', textAlign: 'right', - textShadowOffset: { width: '1rem', height: 10 } + textShadowOffset: { width: '1rem', height: 10 }, + transitionProperty: 'marginLeft' }; expect(i18nStyle(initial)).toEqual(initial); }); @@ -183,11 +189,13 @@ describe('StyleSheet/i18nStyle', () => { test('converts end/start values', () => { const initial = { float: 'start', - textAlign: 'end' + textAlign: 'end', + transitionProperty: 'marginStart' }; const expected = { float: 'right', - textAlign: 'left' + textAlign: 'left', + transitionProperty: 'marginRight' }; expect(i18nStyle(initial)).toEqual(expected); }); @@ -212,12 +220,14 @@ describe('StyleSheet/i18nStyle', () => { const initial = { float: 'left', textAlign: 'right', - textShadowOffset: { width: '1rem', height: 10 } + textShadowOffset: { width: '1rem', height: 10 }, + transitionProperty: 'marginLeft' }; const expected = { float: 'right', textAlign: 'left', - textShadowOffset: { width: '-1rem', height: 10 } + textShadowOffset: { width: '-1rem', height: 10 }, + transitionProperty: 'marginRight' }; expect(i18nStyle(initial)).toEqual(expected); }); diff --git a/packages/react-native-web/src/exports/StyleSheet/i18nStyle.js b/packages/react-native-web/src/exports/StyleSheet/i18nStyle.js index b24ea38f..c18a2732 100644 --- a/packages/react-native-web/src/exports/StyleSheet/i18nStyle.js +++ b/packages/react-native-web/src/exports/StyleSheet/i18nStyle.js @@ -116,6 +116,19 @@ const i18nStyle = originalStyle => { } } + // BiDi flip transitionProperty value + if (prop === 'transitionProperty') { + // BiDi flip properties + if (PROPERTIES_I18N.hasOwnProperty(value)) { + // convert start/end + const convertedValue = PROPERTIES_I18N[originalValue]; + value = isRTL ? PROPERTIES_FLIP[convertedValue] : convertedValue; + } else if (isRTL && doLeftAndRightSwapInRTL && PROPERTIES_FLIP[originalValue]) { + value = PROPERTIES_FLIP[originalValue]; + } + } + + // Create finalized style if (isRTL && prop === 'textShadowOffset') { nextStyle[prop] = value; nextStyle[prop].width = additiveInverse(value.width);