1//
2//  RNGestureHandlerRegistry.m
3//  RNGestureHandler
4//
5//  Created by Krzysztof Magiera on 12/10/2017.
6//  Copyright © 2017 Software Mansion. All rights reserved.
7//
8
9#import "RNGestureHandlerRegistry.h"
10
11#import <React/RCTAssert.h>
12
13@implementation RNGestureHandlerRegistry {
14  NSMutableDictionary<NSNumber *, RNGestureHandler *> *_handlers;
15}
16
17- (instancetype)init
18{
19  if ((self = [super init])) {
20    _handlers = [NSMutableDictionary new];
21  }
22  return self;
23}
24
25- (RNGestureHandler *)handlerWithTag:(NSNumber *)handlerTag
26{
27  return _handlers[handlerTag];
28}
29
30- (void)registerGestureHandler:(RNGestureHandler *)gestureHandler
31{
32  _handlers[gestureHandler.tag] = gestureHandler;
33}
34
35- (void)attachHandlerWithTag:(NSNumber *)handlerTag
36                      toView:(UIView *)view
37              withActionType:(RNGestureHandlerActionType)actionType
38{
39  RNGestureHandler *handler = _handlers[handlerTag];
40  RCTAssert(handler != nil, @"Handler for tag %@ does not exists", handlerTag);
41  [handler unbindFromView];
42  handler.actionType = actionType;
43  [handler bindToView:view];
44}
45
46- (void)dropHandlerWithTag:(NSNumber *)handlerTag
47{
48  RNGestureHandler *handler = _handlers[handlerTag];
49  [handler unbindFromView];
50  [_handlers removeObjectForKey:handlerTag];
51}
52
53- (void)dropAllHandlers
54{
55  for (NSNumber *tag in _handlers) {
56    RNGestureHandler *handler = _handlers[tag];
57    [handler unbindFromView];
58  }
59
60  [_handlers removeAllObjects];
61}
62
63@end
64