diff --git a/assets/images/cards-and-domains.svg b/assets/images/cards-and-domains.svg
new file mode 100644
index 0000000000000..4467ad4cf2223
--- /dev/null
+++ b/assets/images/cards-and-domains.svg
@@ -0,0 +1,5 @@
+
diff --git a/assets/images/home.svg b/assets/images/home.svg
new file mode 100644
index 0000000000000..6b2411407be7a
--- /dev/null
+++ b/assets/images/home.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/images/new-expensify.svg b/assets/images/new-expensify.svg
index 38276ecd93851..dc7aec87c6fd5 100644
--- a/assets/images/new-expensify.svg
+++ b/assets/images/new-expensify.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/assets/images/wrench.svg b/assets/images/wrench.svg
new file mode 100644
index 0000000000000..2865c40eb9524
--- /dev/null
+++ b/assets/images/wrench.svg
@@ -0,0 +1,10 @@
+
diff --git a/patches/@react-navigation+stack+6.3.16+002+dontDetachScreen.patch b/patches/@react-navigation+stack+6.3.16+002+dontDetachScreen.patch
index d64fc4fecf744..877521094cd4f 100644
--- a/patches/@react-navigation+stack+6.3.16+002+dontDetachScreen.patch
+++ b/patches/@react-navigation+stack+6.3.16+002+dontDetachScreen.patch
@@ -43,7 +43,7 @@ index 7558eb3..b7bb75e 100644
}) : STATE_TRANSITIONING_OR_BELOW_TOP;
}
+
-+ const isHomeScreenAndNotOnTop = route.name === 'Home' && isScreenActive !== STATE_ON_TOP;
++ const isHomeScreenAndNotOnTop = (route.name === 'BottomTabNavigator' || route.name === 'Settings_Root') && isScreenActive !== STATE_ON_TOP;
+
const {
headerShown = true,
diff --git a/src/App.js b/src/App.js
index 3553900bbc7fc..8045f4eb30adc 100644
--- a/src/App.js
+++ b/src/App.js
@@ -6,6 +6,7 @@ import Onyx from 'react-native-onyx';
import {PickerStateProvider} from 'react-native-picker-select';
import {SafeAreaProvider} from 'react-native-safe-area-context';
import '../wdyr';
+import ActiveWorkspaceContextProvider from './components/ActiveWorkspace/ActiveWorkspaceProvider';
import ColorSchemeWrapper from './components/ColorSchemeWrapper';
import ComposeProviders from './components/ComposeProviders';
import CustomStatusBarAndBackground from './components/CustomStatusBarAndBackground';
@@ -69,6 +70,7 @@ function App() {
PickerStateProvider,
EnvironmentProvider,
CustomStatusBarAndBackgroundContextProvider,
+ ActiveWorkspaceContextProvider,
]}
>
diff --git a/src/CONST.ts b/src/CONST.ts
index c6849db630f20..e0e5753031083 100755
--- a/src/CONST.ts
+++ b/src/CONST.ts
@@ -480,6 +480,8 @@ const CONST = {
// Use Environment.getEnvironmentURL to get the complete URL with port number
DEV_NEW_EXPENSIFY_URL: 'https://dev.new.expensify.com:',
EXPENSIFY_INBOX_URL: 'https://www.expensify.com/inbox',
+ ADMIN_POLICIES_URL: 'admin_policies',
+ ADMIN_DOMAINS_URL: 'admin_domains',
SIGN_IN_FORM_WIDTH: 300,
@@ -993,6 +995,7 @@ const CONST = {
3: 100,
},
},
+ CENTRAL_PANE_ANIMATION_HEIGHT: 200,
LHN_SKELETON_VIEW_ITEM_HEIGHT: 64,
EXPENSIFY_PARTNER_NAME: 'expensify.com',
EMAIL: {
@@ -1445,7 +1448,7 @@ const CONST = {
GUIDES_CALL_TASK_IDS: {
CONCIERGE_DM: 'NewExpensifyConciergeDM',
WORKSPACE_INITIAL: 'WorkspaceHome',
- WORKSPACE_SETTINGS: 'WorkspaceGeneralSettings',
+ WORKSPACE_OVERVIEW: 'WorkspaceGeneralSettings',
WORKSPACE_CARD: 'WorkspaceCorporateCards',
WORKSPACE_REIMBURSE: 'WorkspaceReimburseReceipts',
WORKSPACE_BILLS: 'WorkspacePayBills',
@@ -3062,7 +3065,11 @@ const CONST = {
DEFAULT: 5,
CAROUSEL: 3,
},
+ BRICK_ROAD: {
+ GBR: 'info',
+ RBR: 'error',
+ },
VIOLATIONS: {
ALL_TAG_LEVELS_REQUIRED: 'allTagLevelsRequired',
AUTO_REPORTED_REJECTED_EXPENSE: 'autoReportedRejectedExpense',
@@ -3106,6 +3113,11 @@ const CONST = {
EMAIL: 'EMAIL',
REPORT: 'REPORT',
},
+
+ WORKSPACE_SWITCHER: {
+ NAME: 'Expensify',
+ SUBSCRIPT_ICON_SIZE: 8,
+ },
} as const;
export default CONST;
diff --git a/src/NAVIGATORS.ts b/src/NAVIGATORS.ts
index c68a950d35010..3bc9c5e57b9bf 100644
--- a/src/NAVIGATORS.ts
+++ b/src/NAVIGATORS.ts
@@ -4,6 +4,7 @@
* */
export default {
CENTRAL_PANE_NAVIGATOR: 'CentralPaneNavigator',
+ BOTTOM_TAB_NAVIGATOR: 'BottomTabNavigator',
LEFT_MODAL_NAVIGATOR: 'LeftModalNavigator',
RIGHT_MODAL_NAVIGATOR: 'RightModalNavigator',
FULL_SCREEN_NAVIGATOR: 'FullScreenNavigator',
diff --git a/src/ROUTES.ts b/src/ROUTES.ts
index e8a860582bb15..75f92c76c4b7c 100644
--- a/src/ROUTES.ts
+++ b/src/ROUTES.ts
@@ -14,6 +14,8 @@ function getUrlWithBackToParam(url: TUrl, backTo?: string):
const ROUTES = {
HOME: '',
+ ALL_SETTINGS: 'all-settings',
+
// This is a utility route used to go to the user's concierge chat, or the sign-in page if the user's not authenticated
CONCIERGE: 'concierge',
FLAG_COMMENT: {
@@ -55,7 +57,7 @@ const ROUTES = {
route: 'bank-account/:stepToOpen?',
getRoute: (stepToOpen = '', policyID = '', backTo?: string) => getUrlWithBackToParam(`bank-account/${stepToOpen}?policyID=${policyID}`, backTo),
},
-
+ WORKSPACE_SWITCHER: 'workspaceSwitcher',
SETTINGS: 'settings',
SETTINGS_PROFILE: 'settings/profile',
SETTINGS_SHARE_CODE: 'settings/shareCode',
@@ -438,13 +440,17 @@ const ROUTES = {
route: 'workspace/:policyID/invite-message',
getRoute: (policyID: string) => `workspace/${policyID}/invite-message` as const,
},
- WORKSPACE_SETTINGS: {
- route: 'workspace/:policyID/settings',
- getRoute: (policyID: string) => `workspace/${policyID}/settings` as const,
+ WORKSPACE_OVERVIEW: {
+ route: 'workspace/:policyID/overview',
+ getRoute: (policyID: string) => `workspace/${policyID}/overview` as const,
+ },
+ WORKSPACE_OVERVIEW_CURRENCY: {
+ route: 'workspace/:policyID/overview/currency',
+ getRoute: (policyID: string) => `workspace/${policyID}/overview/currency` as const,
},
- WORKSPACE_SETTINGS_CURRENCY: {
- route: 'workspace/:policyID/settings/currency',
- getRoute: (policyID: string) => `workspace/${policyID}/settings/currency` as const,
+ WORKSPACE_OVERVIEW_NAME: {
+ route: 'workspace/:policyID/overview/name',
+ getRoute: (policyID: string) => `workspace/${policyID}/overview/name` as const,
},
WORKSPACE_CARD: {
route: 'workspace/:policyID/card',
diff --git a/src/SCREENS.ts b/src/SCREENS.ts
index 703cb309d641b..d9e637d0f316e 100644
--- a/src/SCREENS.ts
+++ b/src/SCREENS.ts
@@ -12,11 +12,13 @@ const PROTECTED_SCREENS = {
const SCREENS = {
...PROTECTED_SCREENS,
+ ALL_SETTINGS: 'AllSettings',
REPORT: 'Report',
NOT_FOUND: 'not-found',
TRANSITION_BETWEEN_APPS: 'TransitionBetweenApps',
VALIDATE_LOGIN: 'ValidateLogin',
UNLINK_LOGIN: 'UnlinkLogin',
+ SETTINGS_CENTRAL_PANE: 'SettingsCentralPane',
SETTINGS: {
ROOT: 'Settings_Root',
SHARE_CODE: 'Settings_Share_Code',
@@ -83,6 +85,10 @@ const SCREENS = {
},
LEFT_MODAL: {
SEARCH: 'Search',
+ WORKSPACE_SWITCHER: 'WorkspaceSwitcher',
+ },
+ WORKSPACE_SWITCHER: {
+ ROOT: 'WorkspaceSwitcher_Root',
},
RIGHT_MODAL: {
SETTINGS: 'Settings',
@@ -192,7 +198,7 @@ const SCREENS = {
WORKSPACE: {
INITIAL: 'Workspace_Initial',
- SETTINGS: 'Workspace_Settings',
+ OVERVIEW: 'Workspace_Overview',
CARD: 'Workspace_Card',
REIMBURSE: 'Workspace_Reimburse',
RATE_AND_UNIT: 'Workspace_RateAndUnit',
@@ -202,7 +208,8 @@ const SCREENS = {
MEMBERS: 'Workspace_Members',
INVITE: 'Workspace_Invite',
INVITE_MESSAGE: 'Workspace_Invite_Message',
- CURRENCY: 'Workspace_Settings_Currency',
+ CURRENCY: 'Workspace_Overview_Currency',
+ NAME: 'Workspace_Overview_Name',
},
EDIT_REQUEST: {
diff --git a/src/components/ActiveWorkspace/ActiveWorkspaceContext.tsx b/src/components/ActiveWorkspace/ActiveWorkspaceContext.tsx
new file mode 100644
index 0000000000000..aefc4954f9219
--- /dev/null
+++ b/src/components/ActiveWorkspace/ActiveWorkspaceContext.tsx
@@ -0,0 +1,11 @@
+import {createContext} from 'react';
+
+type ActiveWorkspaceContextType = {
+ activeWorkspaceID?: string;
+ setActiveWorkspaceID: (activeWorkspaceID?: string) => void;
+}
+
+const ActiveWorkspaceContext = createContext({activeWorkspaceID: undefined, setActiveWorkspaceID: () => undefined});
+
+export default ActiveWorkspaceContext;
+export {type ActiveWorkspaceContextType};
\ No newline at end of file
diff --git a/src/components/ActiveWorkspace/ActiveWorkspaceProvider.tsx b/src/components/ActiveWorkspace/ActiveWorkspaceProvider.tsx
new file mode 100644
index 0000000000000..a602a6b602696
--- /dev/null
+++ b/src/components/ActiveWorkspace/ActiveWorkspaceProvider.tsx
@@ -0,0 +1,17 @@
+import React, {useMemo, useState} from 'react';
+import ActiveWorkspaceContext from './ActiveWorkspaceContext';
+
+function ActiveWorkspaceContextProvider({children}: React.PropsWithChildren) {
+ const [activeWorkspaceID, setActiveWorkspaceID] = useState(undefined);
+
+ const value = useMemo(
+ () => ({
+ activeWorkspaceID,
+ setActiveWorkspaceID,
+ }), [activeWorkspaceID]
+ )
+
+ return {children};
+}
+
+export default ActiveWorkspaceContextProvider;
\ No newline at end of file
diff --git a/src/components/AvatarWithImagePicker.js b/src/components/AvatarWithImagePicker.js
index 71193147c292e..86c74f4aa4f8f 100644
--- a/src/components/AvatarWithImagePicker.js
+++ b/src/components/AvatarWithImagePicker.js
@@ -95,6 +95,9 @@ const propTypes = {
horizontal: PropTypes.oneOf(_.values(CONST.MODAL.ANCHOR_ORIGIN_HORIZONTAL)),
vertical: PropTypes.oneOf(_.values(CONST.MODAL.ANCHOR_ORIGIN_VERTICAL)),
}),
+
+ /** Style applied to the avatar */
+ avatarStyle: stylePropTypes.isRequired,
};
const defaultProps = {
@@ -142,6 +145,7 @@ function AvatarWithImagePicker({
anchorAlignment,
onImageSelected,
editorMaskImage,
+ avatarStyle,
}) {
const theme = useTheme();
const styles = useThemeStyles();
@@ -288,7 +292,7 @@ function AvatarWithImagePicker({
return (
-
+
{source ? (
);
}
diff --git a/src/components/FloatingActionButton.tsx b/src/components/FloatingActionButton.tsx
index 2e9996a92f873..3cffeda7c89ff 100644
--- a/src/components/FloatingActionButton.tsx
+++ b/src/components/FloatingActionButton.tsx
@@ -97,11 +97,10 @@ function FloatingActionButton({onPress, isActive, accessibilityLabel, role}: Flo
return (
-
+
{
fabPressable.current = el;
-
if (buttonRef && 'current' in buttonRef) {
buttonRef.current = el;
}
diff --git a/src/components/HeaderPageLayout.tsx b/src/components/HeaderPageLayout.tsx
index 304bb2ce49b16..6f7e66ba42134 100644
--- a/src/components/HeaderPageLayout.tsx
+++ b/src/components/HeaderPageLayout.tsx
@@ -36,8 +36,10 @@ type HeaderPageLayoutProps = ChildrenProps &
/** Style to apply to the whole section container */
style?: StyleProp;
- };
+ /** Whether or not to show the offline indicator */
+ shouldShowOfflineIndicator?: boolean;
+ };
function HeaderPageLayout({
backgroundColor,
children,
@@ -47,6 +49,7 @@ function HeaderPageLayout({
childrenContainerStyles,
style,
headerContent,
+ shouldShowOfflineIndicator = false,
...rest
}: HeaderPageLayoutProps) {
const theme = useTheme();
@@ -70,6 +73,7 @@ function HeaderPageLayout({
includeSafeAreaPaddingBottom={false}
offlineIndicatorStyle={[appBGColor]}
testID={HeaderPageLayout.displayName}
+ shouldShowOfflineIndicator={shouldShowOfflineIndicator}
>
{({safeAreaPaddingBottomStyle}) => (
<>
diff --git a/src/components/HeaderWithBackButton/index.tsx b/src/components/HeaderWithBackButton/index.tsx
index 209803f2a5d1d..1481c1030648b 100755
--- a/src/components/HeaderWithBackButton/index.tsx
+++ b/src/components/HeaderWithBackButton/index.tsx
@@ -70,7 +70,7 @@ function HeaderWithBackButton({
// Hover on some part of close icons will not work on Electron if dragArea is true
// https://github.com/Expensify/App/issues/29598
dataSet={{dragArea: false}}
- style={[styles.headerBar, shouldShowBorderBottom && styles.borderBottom, shouldShowBackButton && styles.pl2]}
+ style={[styles.headerBar, shouldShowBorderBottom && styles.borderBottom, shouldShowBackButton ? styles.pl2 : styles.pl5]}
>
{shouldShowBackButton && (
diff --git a/src/components/Icon/Expensicons.ts b/src/components/Icon/Expensicons.ts
index 2ddee8b2939b9..3a1f2926dab99 100644
--- a/src/components/Icon/Expensicons.ts
+++ b/src/components/Icon/Expensicons.ts
@@ -25,6 +25,7 @@ import Building from '@assets/images/building.svg';
import Calendar from '@assets/images/calendar.svg';
import Camera from '@assets/images/camera.svg';
import Car from '@assets/images/car.svg';
+import CardsAndDomains from '@assets/images/cards-and-domains.svg';
import Cash from '@assets/images/cash.svg';
import Chair from '@assets/images/chair.svg';
import ChatBubble from '@assets/images/chatbubble.svg';
@@ -51,6 +52,7 @@ import EReceiptIcon from '@assets/images/eReceiptIcon.svg';
import Exclamation from '@assets/images/exclamation.svg';
import Exit from '@assets/images/exit.svg';
import Expand from '@assets/images/expand.svg';
+import ExpensifyAppIcon from '@assets/images/expensify-app-icon.svg';
import ExpensifyCard from '@assets/images/expensify-card-icon.svg';
import ExpensifyFooterLogoVertical from '@assets/images/expensify-footer-logo-vertical.svg';
import ExpensifyFooterLogo from '@assets/images/expensify-footer-logo.svg';
@@ -67,6 +69,7 @@ import Globe from '@assets/images/globe.svg';
import Hashtag from '@assets/images/hashtag.svg';
import Heart from '@assets/images/heart.svg';
import History from '@assets/images/history.svg';
+import Home from '@assets/images/home.svg';
import Hourglass from '@assets/images/hourglass.svg';
import ImageCropCircleMask from '@assets/images/image-crop-circle-mask.svg';
import ImageCropSquareMask from '@assets/images/image-crop-square-mask.svg';
@@ -128,6 +131,7 @@ import User from '@assets/images/user.svg';
import Users from '@assets/images/users.svg';
import Wallet from '@assets/images/wallet.svg';
import Workspace from '@assets/images/workspace-default-avatar.svg';
+import Wrench from '@assets/images/wrench.svg';
import Zoom from '@assets/images/zoom.svg';
import LoungeAccess from './svgs/LoungeAccessIcon';
@@ -142,6 +146,7 @@ export {
ArrowRight,
ArrowRightLong,
ArrowsUpDown,
+ Wrench,
BackArrow,
Bank,
Bill,
@@ -154,6 +159,7 @@ export {
Calendar,
Camera,
Car,
+ CardsAndDomains,
Cash,
ChatBubble,
ChatBubbles,
@@ -182,6 +188,7 @@ export {
EmptyStateAttachReceipt,
Exclamation,
Exit,
+ ExpensifyAppIcon,
ExpensifyCard,
ExpensifyWordmark,
ExpensifyFooterLogo,
@@ -202,6 +209,7 @@ export {
Hashtag,
Heart,
History,
+ Home,
Hourglass,
ImageCropCircleMask,
ImageCropSquareMask,
diff --git a/src/components/Icon/index.tsx b/src/components/Icon/index.tsx
index 20f3fd4a8acb3..d3214565ba467 100644
--- a/src/components/Icon/index.tsx
+++ b/src/components/Icon/index.tsx
@@ -104,4 +104,5 @@ function Icon({
Icon.displayName = 'Icon';
+export type {IconProps};
export default Icon;
diff --git a/src/components/IllustratedHeaderPageLayout.tsx b/src/components/IllustratedHeaderPageLayout.tsx
index 72ec0adf7672e..c40a4e33e67ad 100644
--- a/src/components/IllustratedHeaderPageLayout.tsx
+++ b/src/components/IllustratedHeaderPageLayout.tsx
@@ -21,6 +21,8 @@ type IllustratedHeaderPageLayoutProps = HeaderPageLayoutProps & {
function IllustratedHeaderPageLayout({backgroundColor, children, illustration, overlayContent, ...rest}: IllustratedHeaderPageLayoutProps) {
const theme = useTheme();
const styles = useThemeStyles();
+ const shouldLimitHeight = !rest.shouldShowBackButton;
+
return (
{overlayContent?.()}
>
}
- headerContainerStyles={[styles.justifyContentCenter, styles.w100]}
+ headerContainerStyles={[styles.justifyContentCenter, styles.w100, shouldLimitHeight && styles.centralPaneAnimation]}
// eslint-disable-next-line react/jsx-props-no-spreading
{...rest}
>
diff --git a/src/components/MenuItem.tsx b/src/components/MenuItem.tsx
index ce44db72598a8..b3ed858cbd622 100644
--- a/src/components/MenuItem.tsx
+++ b/src/components/MenuItem.tsx
@@ -223,6 +223,9 @@ type MenuItemProps = (IconProps | AvatarProps | NoIcon) & {
/** Determines how the icon should be resized to fit its container */
contentFit?: ImageContentFit;
+
+ /** Is this in the Pane */
+ isPaneMenu?: boolean;
};
function MenuItem(
@@ -285,6 +288,7 @@ function MenuItem(
titleWithTooltips,
displayInDefaultIconColor = false,
contentFit = 'cover',
+ isPaneMenu = false,
}: MenuItemProps,
ref: ForwardedRef,
) {
@@ -435,7 +439,8 @@ function MenuItem(
fill={
displayInDefaultIconColor
? undefined
- : iconFill ?? StyleUtils.getIconFillColor(getButtonState(focused || isHovered, pressed, success, disabled, interactive), true)
+ : iconFill ??
+ StyleUtils.getIconFillColor(getButtonState(focused || isHovered, pressed, success, disabled, interactive), true, isPaneMenu)
}
/>
)}
diff --git a/src/components/MultipleAvatars.tsx b/src/components/MultipleAvatars.tsx
index a6f34cd459fcc..8ab26595b9824 100644
--- a/src/components/MultipleAvatars.tsx
+++ b/src/components/MultipleAvatars.tsx
@@ -153,6 +153,7 @@ function MultipleAvatars({
)}
+ {option.brickRoadIndicator === CONST.BRICK_ROAD_INDICATOR_STATUS.INFO && (
+
+
+
+ )}
{showSelectedState && (
<>
{shouldShowSelectedStateAsButton && !isSelected ? (
diff --git a/src/components/OptionsList/BaseOptionsList.js b/src/components/OptionsList/BaseOptionsList.js
index bd3695eb7aa92..0441cdf3b7095 100644
--- a/src/components/OptionsList/BaseOptionsList.js
+++ b/src/components/OptionsList/BaseOptionsList.js
@@ -191,6 +191,10 @@ function BaseOptionsList({
return true;
}
+ if (option.policyID && option.policyID === item.policyID) {
+ return true;
+ }
+
if (_.isEmpty(option.name)) {
return false;
}
@@ -201,7 +205,7 @@ function BaseOptionsList({
return (
0 && shouldHaveOptionSeparator}
shouldDisableRowInnerPadding={shouldDisableRowInnerPadding}
diff --git a/src/components/OptionsSelector/BaseOptionsSelector.js b/src/components/OptionsSelector/BaseOptionsSelector.js
index 792073b72613c..3611922729d96 100755
--- a/src/components/OptionsSelector/BaseOptionsSelector.js
+++ b/src/components/OptionsSelector/BaseOptionsSelector.js
@@ -8,7 +8,7 @@ import Button from '@components/Button';
import FixedFooter from '@components/FixedFooter';
import FormHelpMessage from '@components/FormHelpMessage';
import Icon from '@components/Icon';
-import {Info} from '@components/Icon/Expensicons';
+import {Info, MagnifyingGlass} from '@components/Icon/Expensicons';
import OptionsList from '@components/OptionsList';
import {PressableWithoutFeedback} from '@components/Pressable';
import ShowMoreButton from '@components/ShowMoreButton';
@@ -492,6 +492,7 @@ class BaseOptionsSelector extends Component {
spellCheck={false}
shouldInterceptSwipe={this.props.shouldTextInputInterceptSwipe}
isLoading={this.props.isLoadingNewOptions}
+ iconLeft={MagnifyingGlass}
testID="options-selector-input"
/>
);
@@ -502,6 +503,7 @@ class BaseOptionsSelector extends Component {
onSelectRow={this.props.onSelectRow ? this.selectRow : undefined}
sections={this.state.sections}
focusedIndex={this.state.focusedIndex}
+ disableFocusOptions={this.props.disableFocusOptions}
selectedOptions={this.props.selectedOptions}
canSelectMultipleOptions={this.props.canSelectMultipleOptions}
shouldShowMultipleOptionSelectorAsButton={this.props.shouldShowMultipleOptionSelectorAsButton}
diff --git a/src/components/OptionsSelector/optionsSelectorPropTypes.js b/src/components/OptionsSelector/optionsSelectorPropTypes.js
index e52187fa76d78..847409c702698 100644
--- a/src/components/OptionsSelector/optionsSelectorPropTypes.js
+++ b/src/components/OptionsSelector/optionsSelectorPropTypes.js
@@ -72,6 +72,9 @@ const propTypes = {
/** Whether to disable interactivity of option rows */
isDisabled: PropTypes.bool,
+ /** Whether to disable focus options of rows */
+ disableFocusOptions: PropTypes.bool,
+
/** Display the text of the option in bold font style */
boldStyle: PropTypes.bool,
@@ -163,6 +166,7 @@ const defaultProps = {
shouldShowOptions: true,
disableArrowKeysActions: false,
isDisabled: false,
+ disableFocusOptions: false,
shouldHaveOptionSeparator: false,
initiallyFocusedOptionKey: undefined,
maxLength: CONST.SEARCH_MAX_LENGTH,
diff --git a/src/components/QRShare/index.tsx b/src/components/QRShare/index.tsx
index c7e9e7637a6c9..45a4a4fd4964c 100644
--- a/src/components/QRShare/index.tsx
+++ b/src/components/QRShare/index.tsx
@@ -9,12 +9,15 @@ import QRCode from '@components/QRCode';
import Text from '@components/Text';
import useTheme from '@hooks/useTheme';
import useThemeStyles from '@hooks/useThemeStyles';
+import useWindowDimensions from '@hooks/useWindowDimensions';
import variables from '@styles/variables';
+import CONST from '@src/CONST';
import type {QRShareHandle, QRShareProps} from './types';
function QRShare({url, title, subtitle, logo, logoRatio, logoMarginRatio}: QRShareProps, ref: ForwardedRef) {
const styles = useThemeStyles();
const theme = useTheme();
+ const {isSmallScreenWidth} = useWindowDimensions();
const [qrCodeSize, setQrCodeSize] = useState(1);
const svgRef = useRef