/* * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ #import "RCTLayoutAnimationGroup.h" #import "RCTConvert.h" #import "RCTLayoutAnimation.h" @implementation RCTLayoutAnimationGroup - (instancetype)initWithCreatingLayoutAnimation:(RCTLayoutAnimation *)creatingLayoutAnimation updatingLayoutAnimation:(RCTLayoutAnimation *)updatingLayoutAnimation deletingLayoutAnimation:(RCTLayoutAnimation *)deletingLayoutAnimation callback:(RCTResponseSenderBlock)callback { if (self = [super init]) { _creatingLayoutAnimation = creatingLayoutAnimation; _updatingLayoutAnimation = updatingLayoutAnimation; _deletingLayoutAnimation = deletingLayoutAnimation; _callback = callback; } return self; } - (instancetype)initWithConfig:(NSDictionary *)config callback:(RCTResponseSenderBlock)callback { if (!config) { return nil; } if (self = [super init]) { NSTimeInterval duration = [RCTConvert NSTimeInterval:config[@"duration"]]; if (duration > 0.0 && duration < 0.01) { RCTLogError(@"RCTLayoutAnimationGroup expects timings to be in ms, not seconds."); duration = duration * 1000.0; } _creatingLayoutAnimation = [[RCTLayoutAnimation alloc] initWithDuration:duration config:config[@"create"]]; _updatingLayoutAnimation = [[RCTLayoutAnimation alloc] initWithDuration:duration config:config[@"update"]]; _deletingLayoutAnimation = [[RCTLayoutAnimation alloc] initWithDuration:duration config:config[@"delete"]]; _callback = callback; } return self; } - (BOOL)isEqual:(RCTLayoutAnimationGroup *)layoutAnimation { RCTLayoutAnimation *creatingLayoutAnimation = layoutAnimation.creatingLayoutAnimation; RCTLayoutAnimation *updatingLayoutAnimation = layoutAnimation.updatingLayoutAnimation; RCTLayoutAnimation *deletingLayoutAnimation = layoutAnimation.deletingLayoutAnimation; return (_creatingLayoutAnimation == creatingLayoutAnimation || [_creatingLayoutAnimation isEqual:creatingLayoutAnimation]) && (_updatingLayoutAnimation == updatingLayoutAnimation || [_updatingLayoutAnimation isEqual:updatingLayoutAnimation]) && (_deletingLayoutAnimation == deletingLayoutAnimation || [_deletingLayoutAnimation isEqual:deletingLayoutAnimation]); } - (NSString *)description { return [NSString stringWithFormat: @"<%@: %p; creatingLayoutAnimation: %@; updatingLayoutAnimation: %@; deletingLayoutAnimation: %@>", NSStringFromClass([self class]), self, [_creatingLayoutAnimation description], [_updatingLayoutAnimation description], [_deletingLayoutAnimation description]]; } @end