123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- /**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *
- * @format
- * @flow
- */
- 'use strict';
- const I18nManager = require('../ReactNative/I18nManager');
- /**
- * Resolve a style property into its component parts.
- *
- * For example:
- *
- * > resolveProperties('margin', {margin: 5, marginBottom: 10})
- * {top: 5, left: 5, right: 5, bottom: 10}
- *
- * If no parts exist, this returns null.
- */
- function resolveBoxStyle(
- prefix: string,
- style: Object,
- ): ?$ReadOnly<{|
- bottom: number,
- left: number,
- right: number,
- top: number,
- |}> {
- let hasParts = false;
- const result = {
- bottom: 0,
- left: 0,
- right: 0,
- top: 0,
- };
- // TODO: Fix issues with multiple properties affecting the same side.
- const styleForAll = style[prefix];
- if (styleForAll != null) {
- for (const key of Object.keys(result)) {
- result[key] = styleForAll;
- }
- hasParts = true;
- }
- const styleForHorizontal = style[prefix + 'Horizontal'];
- if (styleForHorizontal != null) {
- result.left = styleForHorizontal;
- result.right = styleForHorizontal;
- hasParts = true;
- } else {
- const styleForLeft = style[prefix + 'Left'];
- if (styleForLeft != null) {
- result.left = styleForLeft;
- hasParts = true;
- }
- const styleForRight = style[prefix + 'Right'];
- if (styleForRight != null) {
- result.right = styleForRight;
- hasParts = true;
- }
- const styleForEnd = style[prefix + 'End'];
- if (styleForEnd != null) {
- const constants = I18nManager.getConstants();
- if (constants.isRTL && constants.doLeftAndRightSwapInRTL) {
- result.left = styleForEnd;
- } else {
- result.right = styleForEnd;
- }
- hasParts = true;
- }
- const styleForStart = style[prefix + 'Start'];
- if (styleForStart != null) {
- const constants = I18nManager.getConstants();
- if (constants.isRTL && constants.doLeftAndRightSwapInRTL) {
- result.right = styleForStart;
- } else {
- result.left = styleForStart;
- }
- hasParts = true;
- }
- }
- const styleForVertical = style[prefix + 'Vertical'];
- if (styleForVertical != null) {
- result.bottom = styleForVertical;
- result.top = styleForVertical;
- hasParts = true;
- } else {
- const styleForBottom = style[prefix + 'Bottom'];
- if (styleForBottom != null) {
- result.bottom = styleForBottom;
- hasParts = true;
- }
- const styleForTop = style[prefix + 'Top'];
- if (styleForTop != null) {
- result.top = styleForTop;
- hasParts = true;
- }
- }
- return hasParts ? result : null;
- }
- module.exports = resolveBoxStyle;
|