UNPKG

create-expo-cljs-app

Version:

Create a react native application with Expo and Shadow-CLJS!

76 lines (66 loc) 2.45 kB
/* global _stopObservingProgress, _startObservingProgress */ import { runOnUI } from '../core'; import { withStyleAnimation } from '../animation/styleAnimation'; import { ColorProperties } from '../UpdateProps'; import { processColor } from '../Colors'; runOnUI(() => { 'worklet'; const configs: Record<string, any> = {}; const enteringAnimationForTag: Record<string, any> = {}; global.LayoutAnimationRepository = { configs, registerConfig(tag, config) { configs[tag] = config; enteringAnimationForTag[tag] = null; }, removeConfig(tag) { delete configs[tag]; delete enteringAnimationForTag[tag]; }, startAnimationForTag(tag, type, yogaValues) { if (configs[tag] == null) { return; // :( } const style = configs[tag][type](yogaValues); let currentAnimation = style.animations; if (type === 'entering') { enteringAnimationForTag[tag] = style; } else if (type === 'layout' && enteringAnimationForTag[tag] !== null) { const entryAniamtion = enteringAnimationForTag[tag].animations; const layoutAnimation = style.animations; currentAnimation = {}; for (const key in entryAniamtion) { currentAnimation[key] = entryAniamtion[key]; } for (const key in layoutAnimation) { currentAnimation[key] = layoutAnimation[key]; } } const sv: { value: boolean; _value: boolean } = configs[tag].sv; _stopObservingProgress(tag, false); _startObservingProgress(tag, sv); const backupColor: Record<string, string> = {}; for (const key in style.initialValues) { if (ColorProperties.includes(key)) { const value = style.initialValues[key]; backupColor[key] = value; style.initialValues[key] = processColor(value); } } sv.value = Object.assign({}, sv._value, style.initialValues); _stopObservingProgress(tag, false); const animation = withStyleAnimation(currentAnimation); animation.callback = (finished?: boolean) => { if (finished) { _stopObservingProgress(tag, finished); } style.callback && style.callback(finished); }; if (backupColor) { configs[tag].sv._value = { ...configs[tag].sv.value, ...backupColor }; } configs[tag].sv.value = animation; _startObservingProgress(tag, sv); }, }; })();