/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ #import #import #import #import #import #import #import NS_ASSUME_NONNULL_BEGIN /* * Bitmask for all types of possible updates performing during mounting. */ typedef NS_OPTIONS(NSInteger, RNComponentViewUpdateMask) { RNComponentViewUpdateMaskNone = 0, RNComponentViewUpdateMaskProps = 1 << 0, RNComponentViewUpdateMaskEventEmitter = 1 << 1, RNComponentViewUpdateMaskState = 1 << 3, RNComponentViewUpdateMaskLayoutMetrics = 1 << 4, RNComponentViewUpdateMaskAll = RNComponentViewUpdateMaskProps | RNComponentViewUpdateMaskEventEmitter | RNComponentViewUpdateMaskState | RNComponentViewUpdateMaskLayoutMetrics }; /* * Represents a `UIView` instance managed by React. * All methods are non-@optional. * `UIView+ComponentViewProtocol` category provides default implementation * for all of them. */ @protocol RCTComponentViewProtocol /* * Returns a `ComponentDescriptorProvider` of a particular `ComponentDescriptor` which this component view * represents. */ + (facebook::react::ComponentDescriptorProvider)componentDescriptorProvider; /* * Returns a list of supplemental `ComponentDescriptorProvider`s (with do not have `ComponentView` counterparts) that * require for this component view. */ + (std::vector)supplementalComponentDescriptorProviders; /* * Called for mounting (attaching) a child component view inside `self` * component view. * Receiver must add `childComponentView` as a subview. */ - (void)mountChildComponentView:(UIView *)childComponentView index:(NSInteger)index; /* * Called for unmounting (detaching) a child component view from `self` * component view. * Receiver must remove `childComponentView` as a subview. */ - (void)unmountChildComponentView:(UIView *)childComponentView index:(NSInteger)index; /* * Called for updating component's props. * Receiver must update native view props accordingly changed props. */ - (void)updateProps:(facebook::react::Props::Shared const &)props oldProps:(facebook::react::Props::Shared const &)oldProps; /* * Called for updating component's state. * Receiver must update native view according to changed state. */ - (void)updateState:(facebook::react::State::Shared const &)state oldState:(facebook::react::State::Shared const &)oldState; /* * Called for updating component's event handlers set. * Receiver must cache `eventEmitter` object inside and use it for emitting * events when needed. */ - (void)updateEventEmitter:(facebook::react::EventEmitter::Shared const &)eventEmitter; /* * Called for updating component's layout metrics. * Receiver must update `UIView` layout-related fields (such as `frame`, * `bounds`, `layer.zPosition`, and so on) accordingly. */ - (void)updateLayoutMetrics:(facebook::react::LayoutMetrics const &)layoutMetrics oldLayoutMetrics:(facebook::react::LayoutMetrics const &)oldLayoutMetrics; /* * Called when receiving a command */ - (void)handleCommand:(NSString const *)commandName args:(NSArray const *)args; /* * Called right after all update methods were called for a particular component view. * Useful for performing updates that require knowledge of several independent aspects of the compound mounting change * (e.g. props *and* layout constraints). */ - (void)finalizeUpdates:(RNComponentViewUpdateMask)updateMask; /* * Called right after the component view is moved to a recycle pool. * Receiver must reset any local state and release associated * non-reusable resources. */ - (void)prepareForRecycle; /** * Read the last props used to update the view. */ - (facebook::react::SharedProps)props; @end NS_ASSUME_NONNULL_END