/* * 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. */ #include "BaseTextInputProps.h" #include #include #include #include #include #include #include #include #include #include #include #include namespace facebook::react { BaseTextInputProps::BaseTextInputProps( const PropsParserContext& context, const BaseTextInputProps& sourceProps, const RawProps& rawProps) : ViewProps(context, sourceProps, rawProps), BaseTextProps(context, sourceProps, rawProps), paragraphAttributes(convertRawProp( context, rawProps, sourceProps.paragraphAttributes, {})), defaultValue(convertRawProp( context, rawProps, "defaultValue", sourceProps.defaultValue, {})), placeholder(convertRawProp( context, rawProps, "placeholder", sourceProps.placeholder, {})), placeholderTextColor(convertRawProp( context, rawProps, "placeholderTextColor", sourceProps.placeholderTextColor, {})), cursorColor(convertRawProp( context, rawProps, "cursorColor", sourceProps.cursorColor, {})), selectionColor(convertRawProp( context, rawProps, "selectionColor", sourceProps.selectionColor, {})), selectionHandleColor(convertRawProp( context, rawProps, "selectionHandleColor", sourceProps.selectionHandleColor, {})), underlineColorAndroid(convertRawProp( context, rawProps, "underlineColorAndroid", sourceProps.underlineColorAndroid, {})), maxLength(convertRawProp( context, rawProps, "maxLength", sourceProps.maxLength, {})), text(convertRawProp(context, rawProps, "text", sourceProps.text, {})), mostRecentEventCount(convertRawProp( context, rawProps, "mostRecentEventCount", sourceProps.mostRecentEventCount, {})), autoFocus(convertRawProp( context, rawProps, "autoFocus", sourceProps.autoFocus, {})), autoCapitalize(convertRawProp( context, rawProps, "autoCapitalize", sourceProps.autoCapitalize, {})), editable(convertRawProp( context, rawProps, "editable", sourceProps.editable, {})), readOnly(convertRawProp( context, rawProps, "readOnly", sourceProps.readOnly, {})), submitBehavior(convertRawProp( context, rawProps, "submitBehavior", sourceProps.submitBehavior, {})), multiline(convertRawProp( context, rawProps, "multiline", sourceProps.multiline, {false})), disableKeyboardShortcuts(convertRawProp( context, rawProps, "disableKeyboardShortcuts", sourceProps.disableKeyboardShortcuts, {false})), acceptDragAndDropTypes(convertRawProp( context, rawProps, "acceptDragAndDropTypes", sourceProps.acceptDragAndDropTypes, {})) {} void BaseTextInputProps::setProp( const PropsParserContext& context, RawPropsPropNameHash hash, const char* propName, const RawValue& value) { ViewProps::setProp(context, hash, propName, value); BaseTextProps::setProp(context, hash, propName, value); static auto defaults = BaseTextInputProps{}; // ParagraphAttributes has its own switch statement - to keep all // of these fields together, and because there are some collisions between // propnames parsed here and outside of ParagraphAttributes. For example, // textBreakStrategy is duplicated. // This code is also duplicated in ParagraphProps. static auto paDefaults = ParagraphAttributes{}; switch (hash) { REBUILD_FIELD_SWITCH_CASE( paDefaults, value, paragraphAttributes, maximumNumberOfLines, "numberOfLines"); REBUILD_FIELD_SWITCH_CASE( paDefaults, value, paragraphAttributes, ellipsizeMode, "ellipsizeMode"); REBUILD_FIELD_SWITCH_CASE( paDefaults, value, paragraphAttributes, textBreakStrategy, "textBreakStrategy"); REBUILD_FIELD_SWITCH_CASE( paDefaults, value, paragraphAttributes, adjustsFontSizeToFit, "adjustsFontSizeToFit"); REBUILD_FIELD_SWITCH_CASE( paDefaults, value, paragraphAttributes, minimumFontSize, "minimumFontSize"); REBUILD_FIELD_SWITCH_CASE( paDefaults, value, paragraphAttributes, maximumFontSize, "maximumFontSize"); REBUILD_FIELD_SWITCH_CASE( paDefaults, value, paragraphAttributes, includeFontPadding, "includeFontPadding"); REBUILD_FIELD_SWITCH_CASE( paDefaults, value, paragraphAttributes, android_hyphenationFrequency, "android_hyphenationFrequency"); REBUILD_FIELD_SWITCH_CASE( paDefaults, value, paragraphAttributes, textAlignVertical, "textAlignVertical"); } switch (hash) { RAW_SET_PROP_SWITCH_CASE_BASIC(underlineColorAndroid); RAW_SET_PROP_SWITCH_CASE_BASIC(autoFocus); RAW_SET_PROP_SWITCH_CASE_BASIC(maxLength); RAW_SET_PROP_SWITCH_CASE_BASIC(placeholder); RAW_SET_PROP_SWITCH_CASE_BASIC(placeholderTextColor); RAW_SET_PROP_SWITCH_CASE_BASIC(selectionColor); RAW_SET_PROP_SWITCH_CASE_BASIC(selectionHandleColor); RAW_SET_PROP_SWITCH_CASE_BASIC(defaultValue); RAW_SET_PROP_SWITCH_CASE_BASIC(cursorColor); RAW_SET_PROP_SWITCH_CASE_BASIC(text); RAW_SET_PROP_SWITCH_CASE_BASIC(mostRecentEventCount); RAW_SET_PROP_SWITCH_CASE_BASIC(autoCapitalize); RAW_SET_PROP_SWITCH_CASE_BASIC(editable); RAW_SET_PROP_SWITCH_CASE_BASIC(readOnly); RAW_SET_PROP_SWITCH_CASE_BASIC(submitBehavior); RAW_SET_PROP_SWITCH_CASE_BASIC(multiline); RAW_SET_PROP_SWITCH_CASE_BASIC(disableKeyboardShortcuts); RAW_SET_PROP_SWITCH_CASE_BASIC(acceptDragAndDropTypes); } } TextAttributes BaseTextInputProps::getEffectiveTextAttributes( Float fontSizeMultiplier) const { auto result = TextAttributes::defaultTextAttributes(); result.fontSizeMultiplier = fontSizeMultiplier; result.apply(textAttributes); /* * These props are applied to `View`, therefore they must not be a part of * base text attributes. */ result.backgroundColor = clearColor(); result.opacity = 1; return result; } SubmitBehavior BaseTextInputProps::getNonDefaultSubmitBehavior() const { if (submitBehavior == SubmitBehavior::Default) { return multiline ? SubmitBehavior::Newline : SubmitBehavior::BlurAndSubmit; } return submitBehavior; } } // namespace facebook::react