mirror of
https://github.com/status-im/react-native.git
synced 2025-01-09 09:12:02 +00:00
cb19621dfe
Summary: On JS reload the FabricUIManager and EventDispatcher didn't get release due to a retain cycle. This breaks the cycle. In addition, force release the Scheduler on reload so that the stale classes get cleaned up properly, avoiding crashes. Also the surface now remounts the content correctly Reviewed By: shergin Differential Revision: D8414916 fbshipit-source-id: 4b14031f29b3bc9987d7aa765dc0d930a7de2b1e
45 lines
1.3 KiB
C++
45 lines
1.3 KiB
C++
/**
|
|
* Copyright (c) 2015-present, Facebook, Inc.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
#include "SchedulerEventDispatcher.h"
|
|
|
|
namespace facebook {
|
|
namespace react {
|
|
|
|
// TODO(T29874519): Get rid of "top" prefix once and for all.
|
|
/*
|
|
* Capitalizes the first letter of the event type and adds "top" prefix
|
|
* (e.g. "layout" becames "topLayout").
|
|
*/
|
|
static std::string normalizeEventType(const std::string &type) {
|
|
std::string prefixedType = type;
|
|
prefixedType[0] = toupper(prefixedType[0]);
|
|
prefixedType.insert(0, "top");
|
|
return prefixedType;
|
|
}
|
|
|
|
void SchedulerEventDispatcher::setUIManager(std::shared_ptr<const FabricUIManager> uiManager) const {
|
|
uiManager_ = uiManager;
|
|
}
|
|
|
|
EventTarget SchedulerEventDispatcher::createEventTarget(const InstanceHandle &instanceHandle) const {
|
|
return uiManager_->createEventTarget(instanceHandle);
|
|
}
|
|
|
|
void SchedulerEventDispatcher::dispatchEvent(
|
|
const EventTarget &eventTarget,
|
|
const std::string &type,
|
|
const folly::dynamic &payload,
|
|
const EventPriority &priority
|
|
) const {
|
|
// TODO: Schedule the event based on priority.
|
|
uiManager_->dispatchEvent(eventTarget, normalizeEventType(type), payload);
|
|
}
|
|
|
|
} // namespace react
|
|
} // namespace facebook
|