Skip to content

Commit a6ee2e1

Browse files
committed
[fix] Support array syntax on transformOrigin
1 parent a5ba27c commit a6ee2e1

File tree

3 files changed

+35
-1
lines changed

3 files changed

+35
-1
lines changed

packages/react-native-web/src/exports/StyleSheet/__tests__/preprocess-test.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,28 @@ describe('StyleSheet/preprocess', () => {
151151
});
152152
});
153153
});
154+
155+
describe('transformOrigin', () => {
156+
// passthrough if transformOrigin value is ever a string
157+
test('string', () => {
158+
const transformOrigin = '2px 30% 10px';
159+
const style = { transformOrigin };
160+
const resolved = preprocess(style);
161+
162+
expect(resolved).toEqual({ transformOrigin });
163+
});
164+
165+
test('array', () => {
166+
const style = {
167+
transformOrigin: [2, '30%', 10]
168+
};
169+
const resolved = preprocess(style);
170+
171+
expect(resolved).toEqual({
172+
transformOrigin: '2px 30% 10px'
173+
});
174+
});
175+
});
154176
});
155177

156178
describe('preprocesses multiple shadow styles into a single declaration', () => {

packages/react-native-web/src/exports/StyleSheet/preprocess.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,13 @@ export const createTransformValue = (value: Array<Object>): string => {
7373
return value.map(mapTransform).join(' ');
7474
};
7575

76+
// [2, '30%', 10] => '2px 30% 10px'
77+
export const createTransformOriginValue = (
78+
value: Array<number | string>
79+
): string => {
80+
return value.map((v) => normalizeValueWithProperty(v)).join(' ');
81+
};
82+
7683
const PROPERTIES_STANDARD: { [key: string]: string } = {
7784
borderBottomEndRadius: 'borderEndEndRadius',
7885
borderBottomStartRadius: 'borderEndStartRadius',
@@ -210,6 +217,11 @@ export const preprocess = <T: {| [key: string]: any |}>(
210217
value = createTransformValue(value);
211218
}
212219
nextStyle.transform = value;
220+
} else if (prop === 'transformOrigin') {
221+
if (Array.isArray(value)) {
222+
value = createTransformOriginValue(value);
223+
}
224+
nextStyle.transformOrigin = value;
213225
} else {
214226
nextStyle[prop] = value;
215227
}

packages/react-native-web/src/types/styles.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,6 @@ export type TransformStyles = {|
341341
| {| +translateZ: NumberOrString |}
342342
| {| +translate3d: string |}
343343
>,
344-
transformOrigin?: ?string,
344+
transformOrigin?: ?string | Array<NumberOrString>,
345345
transformStyle?: ?('flat' | 'preserve-3d')
346346
|};

0 commit comments

Comments
 (0)