Skip to content

Commit

Permalink
Refactor componentNameByReactViewName into separate file
Browse files Browse the repository at this point in the history
Summary:
Changelog: [internal]

Extract componentNameByReactViewName to separate file so it can be used elsewhere.

Reviewed By: shergin, mdvacca

Differential Revision: D26946159

fbshipit-source-id: cf69df1f80f1c1938fc667f4666a5d3fec5a9658
  • Loading branch information
sammy-SC authored and facebook-github-bot committed Mar 11, 2021
1 parent 6d1a4d3 commit fdb2bb7
Show file tree
Hide file tree
Showing 3 changed files with 95 additions and 58 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@

#include "ComponentDescriptorRegistry.h"

#include "componentNameByReactViewName.h"

#include <react/debug/react_native_assert.h>
#include <react/renderer/componentregistry/ComponentDescriptorProviderRegistry.h>
#include <react/renderer/core/ShadowNodeFragment.h>
Expand Down Expand Up @@ -50,64 +52,6 @@ void ComponentDescriptorRegistry::registerComponentDescriptor(
_registryByName[componentName] = componentDescriptor;
}

static std::string componentNameByReactViewName(std::string viewName) {
// We need this function only for the transition period;
// eventually, all names will be unified.

std::string rctPrefix("RCT");
if (std::mismatch(rctPrefix.begin(), rctPrefix.end(), viewName.begin())
.first == rctPrefix.end()) {
// If `viewName` has "RCT" prefix, remove it.
viewName.erase(0, rctPrefix.length());
}

// Fabric uses slightly new names for Text components because of differences
// in semantic.
if (viewName == "Text") {
return "Paragraph";
}

// TODO T63839307: remove this condition after deleting TextInlineImage from
// non-Fabric code
if (viewName == "TextInlineImage") {
return "Image";
}
if (viewName == "VirtualText") {
return "Text";
}

if (viewName == "ImageView") {
return "Image";
}

if (viewName == "AndroidHorizontalScrollView") {
return "ScrollView";
}

if (viewName == "RKShimmeringView") {
return "ShimmeringView";
}

if (viewName == "RefreshControl") {
return "PullToRefreshView";
}

// We need this temporarily for testing purposes until we have proper
// implementation of core components.
// iOS-only
if (viewName == "ScrollContentView") {
return "View";
}

// iOS-only
if (viewName == "MultilineTextInputView" ||
viewName == "SinglelineTextInputView") {
return "TextInput";
}

return viewName;
}

ComponentDescriptor const &ComponentDescriptorRegistry::at(
std::string const &componentName) const {
std::shared_lock<better::shared_mutex> lock(mutex_);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
/*
* 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.
*/

#include "componentNameByReactViewName.h"

namespace facebook {
namespace react {

std::string componentNameByReactViewName(std::string viewName) {
// We need this function only for the transition period;
// eventually, all names will be unified.

std::string rctPrefix("RCT");
if (std::mismatch(rctPrefix.begin(), rctPrefix.end(), viewName.begin())
.first == rctPrefix.end()) {
// If `viewName` has "RCT" prefix, remove it.
viewName.erase(0, rctPrefix.length());
}

// Fabric uses slightly new names for Text components because of differences
// in semantic.
if (viewName == "Text") {
return "Paragraph";
}

// TODO T63839307: remove this condition after deleting TextInlineImage from
// non-Fabric code
if (viewName == "TextInlineImage") {
return "Image";
}
if (viewName == "VirtualText") {
return "Text";
}

if (viewName == "ImageView") {
return "Image";
}

if (viewName == "AndroidHorizontalScrollView") {
return "ScrollView";
}

if (viewName == "RKShimmeringView") {
return "ShimmeringView";
}

if (viewName == "RefreshControl") {
return "PullToRefreshView";
}

// We need this temporarily for testing purposes until we have proper
// implementation of core components.
// iOS-only
if (viewName == "ScrollContentView") {
return "View";
}

// iOS-only
if (viewName == "MultilineTextInputView" ||
viewName == "SinglelineTextInputView") {
return "TextInput";
}

return viewName;
}

} // namespace react
} // namespace facebook
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
/*
* 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.
*/

#pragma once

#include <string>

namespace facebook {
namespace react {

/**
* Provides mapping from old view name format to the new format.
*/
std::string componentNameByReactViewName(std::string viewName);

} // namespace react
} // namespace facebook

0 comments on commit fdb2bb7

Please sign in to comment.