UNPKG

react-native-theme-switch-animation

Version:
88 lines (87 loc) • 3.83 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _reactNative = require("react-native"); var _ThemeSwitchAnimationListener = _interopRequireDefault(require("./ThemeSwitchAnimationListener")); var _helpers = require("./helpers"); var _module2 = _interopRequireDefault(require("./module")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const IS_SUPPORTED_PLATFORM = _reactNative.Platform.OS === 'android' || _reactNative.Platform.OS === 'ios'; let ThemeSwitchAnimation = null; let switchFunction = () => {}; let localAnimationConfig = { type: 'fade', duration: 500 }; if (IS_SUPPORTED_PLATFORM) { ThemeSwitchAnimation = _module2.default; const themeSwitchAnimationListener = new _ThemeSwitchAnimationListener.default(); themeSwitchAnimationListener.addEventListener(() => { setTimeout(() => { if (switchFunction) { switchFunction(); if (localAnimationConfig) { unfreezeWrapper(); } } }); }); } const switchTheme = ({ switchThemeFunction: incomingSwitchThemeFunction, animationConfig }) => { if (IS_SUPPORTED_PLATFORM) { localAnimationConfig = animationConfig || localAnimationConfig; ThemeSwitchAnimation.freezeScreen((animationConfig === null || animationConfig === void 0 ? void 0 : animationConfig.captureType) || 'layer'); switchFunction = incomingSwitchThemeFunction; } else { incomingSwitchThemeFunction(); } }; const unfreezeWrapper = () => { const defaultRatio = 0.5; setImmediate(() => { if (localAnimationConfig.type === 'circular' || localAnimationConfig.type === 'inverted-circular') { if ('cx' in localAnimationConfig.startingPoint && 'cy' in localAnimationConfig.startingPoint) { var _localAnimationConfig; const { cx, cy } = (_localAnimationConfig = localAnimationConfig) === null || _localAnimationConfig === void 0 ? void 0 : _localAnimationConfig.startingPoint; const { width: SCREEN_WIDTH, height: SCREEN_HEIGHT } = _reactNative.Dimensions.get('screen'); if ((0, _helpers.validateCoordinates)(cx, SCREEN_WIDTH, 'cx') && (0, _helpers.validateCoordinates)(cy, SCREEN_HEIGHT, 'cy')) { const cxRatio = (0, _helpers.calculateRatio)(cx, SCREEN_WIDTH); const cyRatio = (0, _helpers.calculateRatio)(cy, SCREEN_HEIGHT); ThemeSwitchAnimation.unfreezeScreen(localAnimationConfig.type, localAnimationConfig.duration, cxRatio, cyRatio); } else { // cleanup ThemeSwitchAnimation.unfreezeScreen('fade', 200, 0.5, 0.5); } } else if ('cxRatio' in localAnimationConfig.startingPoint && 'cyRatio' in localAnimationConfig.startingPoint) { var _localAnimationConfig2; const { cxRatio, cyRatio } = (_localAnimationConfig2 = localAnimationConfig) === null || _localAnimationConfig2 === void 0 ? void 0 : _localAnimationConfig2.startingPoint; if ((0, _helpers.validateCoordinates)(cxRatio, 1, 'cxRatio') && (0, _helpers.validateCoordinates)(cyRatio, 1, 'cyRatio')) { const cxRatioActual = (0, _helpers.calculateActualRation)(cxRatio); const cyRatioActual = (0, _helpers.calculateActualRation)(cyRatio); ThemeSwitchAnimation.unfreezeScreen(localAnimationConfig.type, localAnimationConfig.duration, cxRatioActual, cyRatioActual); } else { // cleanup ThemeSwitchAnimation.unfreezeScreen('fade', 500, 0.5, 0.5); } } } else { ThemeSwitchAnimation.unfreezeScreen(localAnimationConfig.type, localAnimationConfig.duration, defaultRatio, defaultRatio); } }); }; var _default = exports.default = switchTheme; //# sourceMappingURL=index.js.map