1*5f154df9Saleqsio #pragma once
2*5f154df9Saleqsio 
3*5f154df9Saleqsio #include "ErrorHandler.h"
4*5f154df9Saleqsio #include "LayoutAnimationType.h"
5*5f154df9Saleqsio #include "Shareables.h"
6*5f154df9Saleqsio 
7*5f154df9Saleqsio #include <jsi/jsi.h>
8*5f154df9Saleqsio #include <stdio.h>
9*5f154df9Saleqsio #include <functional>
10*5f154df9Saleqsio #include <memory>
11*5f154df9Saleqsio #include <mutex>
12*5f154df9Saleqsio #include <string>
13*5f154df9Saleqsio #include <unordered_map>
14*5f154df9Saleqsio #include <vector>
15*5f154df9Saleqsio 
16*5f154df9Saleqsio namespace reanimated {
17*5f154df9Saleqsio 
18*5f154df9Saleqsio using namespace facebook;
19*5f154df9Saleqsio 
20*5f154df9Saleqsio class LayoutAnimationsManager {
21*5f154df9Saleqsio  public:
22*5f154df9Saleqsio   void configureAnimation(
23*5f154df9Saleqsio       int tag,
24*5f154df9Saleqsio       LayoutAnimationType type,
25*5f154df9Saleqsio       const std::string &sharedTransitionTag,
26*5f154df9Saleqsio       std::shared_ptr<Shareable> config);
27*5f154df9Saleqsio   bool hasLayoutAnimation(int tag, LayoutAnimationType type);
28*5f154df9Saleqsio   void startLayoutAnimation(
29*5f154df9Saleqsio       jsi::Runtime &rt,
30*5f154df9Saleqsio       int tag,
31*5f154df9Saleqsio       LayoutAnimationType type,
32*5f154df9Saleqsio       const jsi::Object &values);
33*5f154df9Saleqsio   void clearLayoutAnimationConfig(int tag);
34*5f154df9Saleqsio   void cancelLayoutAnimation(
35*5f154df9Saleqsio       jsi::Runtime &rt,
36*5f154df9Saleqsio       int tag,
37*5f154df9Saleqsio       LayoutAnimationType type,
38*5f154df9Saleqsio       bool cancelled /* = true */,
39*5f154df9Saleqsio       bool removeView /* = true */);
40*5f154df9Saleqsio   int findPrecedingViewTagForTransition(int tag);
41*5f154df9Saleqsio 
42*5f154df9Saleqsio  private:
43*5f154df9Saleqsio   std::unordered_map<int, std::shared_ptr<Shareable>> &getConfigsForType(
44*5f154df9Saleqsio       LayoutAnimationType type);
45*5f154df9Saleqsio 
46*5f154df9Saleqsio   std::unordered_map<int, std::shared_ptr<Shareable>> enteringAnimations_;
47*5f154df9Saleqsio   std::unordered_map<int, std::shared_ptr<Shareable>> exitingAnimations_;
48*5f154df9Saleqsio   std::unordered_map<int, std::shared_ptr<Shareable>> layoutAnimations_;
49*5f154df9Saleqsio   std::unordered_map<int, std::shared_ptr<Shareable>>
50*5f154df9Saleqsio       sharedTransitionAnimations_;
51*5f154df9Saleqsio   std::unordered_map<std::string, std::vector<int>> sharedTransitionGroups_;
52*5f154df9Saleqsio   std::unordered_map<int, std::string> viewTagToSharedTag_;
53*5f154df9Saleqsio   mutable std::mutex
54*5f154df9Saleqsio       animationsMutex_; // Protects `enteringAnimations_`, `exitingAnimations_`,
55*5f154df9Saleqsio                         // `layoutAnimations_` and `viewSharedValues_`.
56*5f154df9Saleqsio };
57*5f154df9Saleqsio 
58*5f154df9Saleqsio } // namespace reanimated
59