From 5a20e3f4c30aa77f88c263b3f3af7fc68d1a8b23 Mon Sep 17 00:00:00 2001 From: Gabriel Donadel Dall'Agnol Date: Thu, 15 Jun 2023 23:32:17 -0300 Subject: [PATCH] [dev-launcher] Improve URL input validation responsiveness (#22786) # Why Closes ENG-7616 # How Improve URL input validation responsiveness by debouncing the `onChangeText` function # Test Plan Run dev-launcher locally through bare-expo
iOSAndroid
# Checklist - [ ] Documentation is up to date to reflect these changes (eg: https://docs.expo.dev and README.md). - [ ] Conforms with the [Documentation Writing Style Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md) - [ ] This diff will work correctly for `npx expo prebuild` & EAS Build (eg: updated a module plugin). --- packages/expo-dev-launcher/CHANGELOG.md | 1 + .../assets/expo_dev_launcher_android.bundle | 15 ++++++++------- .../bundle/components/UrlDropdown.tsx | 19 +++++-------------- .../bundle/functions/debounce.ts | 7 +++++++ .../screens/__tests__/HomeScreen.test.tsx | 4 +++- packages/expo-dev-launcher/ios/main.jsbundle | 15 ++++++++------- 6 files changed, 32 insertions(+), 29 deletions(-) create mode 100644 packages/expo-dev-launcher/bundle/functions/debounce.ts diff --git a/packages/expo-dev-launcher/CHANGELOG.md b/packages/expo-dev-launcher/CHANGELOG.md index 1719da8ac8a814..23da5064bf2729 100644 --- a/packages/expo-dev-launcher/CHANGELOG.md +++ b/packages/expo-dev-launcher/CHANGELOG.md @@ -29,6 +29,7 @@ - Migrate iOS native modules to use the new Module API. ([#22319](https://github.com/expo/expo/pull/22319) by [@gabrieldonadel](https://github.com/gabrieldonadel)) - Bump `babel-plugin-module-resolver` dev dependency. ([#22871](https://github.com/expo/expo/pull/22871) by [@EvanBacon](https://github.com/EvanBacon)) +- Improve URL input validation responsiveness. ([#22786](https://github.com/expo/expo/pull/22786) by [@gabrieldonadel](https://github.com/gabrieldonadel)) ## 2.3.0 — 2023-05-08 diff --git a/packages/expo-dev-launcher/android/src/debug/assets/expo_dev_launcher_android.bundle b/packages/expo-dev-launcher/android/src/debug/assets/expo_dev_launcher_android.bundle index 08364ca143b9af..520b337394534e 100644 --- a/packages/expo-dev-launcher/android/src/debug/assets/expo_dev_launcher_android.bundle +++ b/packages/expo-dev-launcher/android/src/debug/assets/expo_dev_launcher_android.bundle @@ -426,7 +426,7 @@ __d((function(e,s,t,r,i,c,a){i.exports={name:"react-native",version:"0.72.0-rc.5 __d((function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,u=new WeakMap;return(t=function(t){return t?u:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var u=t(o);if(u&&u.has(n))return u.get(n);var f={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in n)if("default"!==l&&Object.prototype.hasOwnProperty.call(n,l)){var p=c?Object.getOwnPropertyDescriptor(n,l):null;p&&(p.get||p.set)?Object.defineProperty(f,l,p):f[l]=n[l]}f.default=n,u&&u.set(n,f);return f})(r(d[0])).createContext(void 0);e.default=n}),420,[96]); __d((function(g,r,i,a,m,e,d){var t=r(d[0]);Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){var t=n.useContext(o.default);if(void 0===t)throw new Error("Couldn't find values for transition progress. Are you inside a screen in Native Stack?");return t};var n=(function(t,n){if(!n&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var o=u(n);if(o&&o.has(t))return o.get(t);var f={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in t)if("default"!==l&&Object.prototype.hasOwnProperty.call(t,l)){var p=c?Object.getOwnPropertyDescriptor(t,l):null;p&&(p.get||p.set)?Object.defineProperty(f,l,p):f[l]=t[l]}f.default=t,o&&o.set(t,f);return f})(r(d[1])),o=t(r(d[2]));function u(t){if("function"!=typeof WeakMap)return null;var n=new WeakMap,o=new WeakMap;return(u=function(t){return t?o:n})(t)}}),421,[6,96,420]); __d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.executeNativeBackPress=function(){return t.BackHandler.exitApp(),!0},e.isSearchBarAvailableForCurrentPlatform=void 0;var t=r(d[0]),o=['ios','android'].includes(t.Platform.OS);e.isSearchBarAvailableForCurrentPlatform=o}),422,[2]); -__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.App=function(n){return(0,x.jsx)(c.View,{style:{direction:'ltr',flex:1},children:(0,x.jsx)(s.LoadInitialData,{loader:(0,x.jsx)(u.Splash,{}),children:(0,x.jsx)(l.AppProviders,{children:(0,x.jsxs)(w.Navigator,{initialRouteName:"Main",screenOptions:{presentation:'modal',gestureEnabled:!1},detachInactiveScreens:!1,children:[(0,x.jsx)(w.Screen,{name:"Main",component:y,options:{headerShown:!1}}),(0,x.jsx)(w.Screen,{name:"User Profile",component:j.UserProfileScreen,options:{headerShown:!1}}),(0,x.jsx)(w.Screen,{name:"Crash Report",component:p.CrashReportScreen})]})})})})};var n=r(d[0]),t=r(d[1]),o=r(d[2]),c=((function(n,t){if(!t&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var o=v(t);if(o&&o.has(n))return o.get(n);var c={},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in n)if("default"!==u&&Object.prototype.hasOwnProperty.call(n,u)){var l=s?Object.getOwnPropertyDescriptor(n,u):null;l&&(l.get||l.set)?Object.defineProperty(c,u,l):c[u]=n[u]}c.default=n,o&&o.set(n,c)})(r(d[3])),r(d[4])),s=r(d[5]),u=r(d[6]),l=r(d[7]),p=r(d[8]),f=r(d[9]),S=r(d[10]),h=(r(d[11]),r(d[12])),j=r(d[13]),x=r(d[14]);function v(n){if("function"!=typeof WeakMap)return null;var t=new WeakMap,o=new WeakMap;return(v=function(n){return n?o:t})(n)}var b=(0,n.createBottomTabNavigator)(),w=(0,t.createStackNavigator)();var y=function(){return(0,x.jsxs)(b.Navigator,{detachInactiveScreens:!1,children:[(0,x.jsx)(b.Screen,{name:"Home",component:S.HomeScreen,options:{headerShown:!1,tabBarIcon:function(n){var t=n.focused;return(0,x.jsx)(o.HomeFilledIcon,{focused:t})}}}),(0,x.jsx)(b.Screen,{name:"ExtensionsStack",component:f.ExtensionsStack,options:{headerShown:!1,tabBarIcon:function(n){var t=n.focused;return(0,x.jsx)(o.ExtensionsFilledIcon,{focused:t})},title:'Extensions'}}),(0,x.jsx)(b.Screen,{name:"Settings",component:h.SettingsScreen,options:{headerShown:!1,tabBarIcon:function(n){var t=n.focused;return(0,x.jsx)(o.SettingsFilledIcon,{focused:t})}}}),!1]})}}),423,[424,591,622,96,2,1012,1120,1121,1142,1143,1161,1166,1167,1168,204]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.App=function(n){return(0,x.jsx)(c.View,{style:{direction:'ltr',flex:1},children:(0,x.jsx)(s.LoadInitialData,{loader:(0,x.jsx)(u.Splash,{}),children:(0,x.jsx)(l.AppProviders,{children:(0,x.jsxs)(w.Navigator,{initialRouteName:"Main",screenOptions:{presentation:'modal',gestureEnabled:!1},detachInactiveScreens:!1,children:[(0,x.jsx)(w.Screen,{name:"Main",component:y,options:{headerShown:!1}}),(0,x.jsx)(w.Screen,{name:"User Profile",component:j.UserProfileScreen,options:{headerShown:!1}}),(0,x.jsx)(w.Screen,{name:"Crash Report",component:p.CrashReportScreen})]})})})})};var n=r(d[0]),t=r(d[1]),o=r(d[2]),c=((function(n,t){if(!t&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var o=v(t);if(o&&o.has(n))return o.get(n);var c={},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in n)if("default"!==u&&Object.prototype.hasOwnProperty.call(n,u)){var l=s?Object.getOwnPropertyDescriptor(n,u):null;l&&(l.get||l.set)?Object.defineProperty(c,u,l):c[u]=n[u]}c.default=n,o&&o.set(n,c)})(r(d[3])),r(d[4])),s=r(d[5]),u=r(d[6]),l=r(d[7]),p=r(d[8]),f=r(d[9]),S=r(d[10]),h=(r(d[11]),r(d[12])),j=r(d[13]),x=r(d[14]);function v(n){if("function"!=typeof WeakMap)return null;var t=new WeakMap,o=new WeakMap;return(v=function(n){return n?o:t})(n)}var b=(0,n.createBottomTabNavigator)(),w=(0,t.createStackNavigator)();var y=function(){return(0,x.jsxs)(b.Navigator,{detachInactiveScreens:!1,children:[(0,x.jsx)(b.Screen,{name:"Home",component:S.HomeScreen,options:{headerShown:!1,tabBarIcon:function(n){var t=n.focused;return(0,x.jsx)(o.HomeFilledIcon,{focused:t})}}}),(0,x.jsx)(b.Screen,{name:"ExtensionsStack",component:f.ExtensionsStack,options:{headerShown:!1,tabBarIcon:function(n){var t=n.focused;return(0,x.jsx)(o.ExtensionsFilledIcon,{focused:t})},title:'Extensions'}}),(0,x.jsx)(b.Screen,{name:"Settings",component:h.SettingsScreen,options:{headerShown:!1,tabBarIcon:function(n){var t=n.focused;return(0,x.jsx)(o.SettingsFilledIcon,{focused:t})}}}),!1]})}}),423,[424,591,622,96,2,1012,1120,1121,1142,1143,1161,1167,1168,1169,204]); __d((function(g,r,i,a,m,e,d){var t=r(d[0]);Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"BottomTabBar",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(e,"BottomTabBarHeightCallbackContext",{enumerable:!0,get:function(){return b.default}}),Object.defineProperty(e,"BottomTabBarHeightContext",{enumerable:!0,get:function(){return f.default}}),Object.defineProperty(e,"BottomTabView",{enumerable:!0,get:function(){return u.default}}),Object.defineProperty(e,"createBottomTabNavigator",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(e,"useBottomTabBarHeight",{enumerable:!0,get:function(){return c.default}});var n=t(r(d[1])),o=t(r(d[2])),u=t(r(d[3])),b=t(r(d[4])),f=t(r(d[5])),c=t(r(d[6]))}),424,[6,425,576,524,574,575,590]); __d((function(g,r,_i,a,m,e,d){var t=r(d[0]);Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=t(r(d[1])),o=t(r(d[2])),i=r(d[3]),c=((function(t,n){if(!n&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var o=p(n);if(o&&o.has(t))return o.get(t);var i={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in t)if("default"!==l&&Object.prototype.hasOwnProperty.call(t,l)){var s=c?Object.getOwnPropertyDescriptor(t,l):null;s&&(s.get||s.set)?Object.defineProperty(i,l,s):i[l]=t[l]}i.default=t,o&&o.set(t,i)})(r(d[4])),t(r(d[5]))),l=t(r(d[6])),s=r(d[7]),b=["id","initialRouteName","backBehavior","children","screenListeners","screenOptions","sceneContainerStyle"],u=["lazy","tabBarOptions"];function p(t){if("function"!=typeof WeakMap)return null;var n=new WeakMap,o=new WeakMap;return(p=function(t){return t?o:n})(t)}function f(t,n){var o=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(t,n).enumerable}))),o.push.apply(o,i)}return o}function y(t){for(var o=1;o0&&(0,T.jsx)(l.Button.FadeOnPressContainer,{bg:"ghost",rounded:"full",onPress:function(){F.push((function(){return(0,T.jsx)(x.DevServerExplainerModal,{})}))},children:(0,T.jsx)(l.View,{rounded:"full",padding:"tiny",children:(0,T.jsx)(l.InfoIcon,{})})})]}),(0,T.jsx)(l.Spacer.Vertical,{size:"small"}),(0,T.jsx)(l.View,{px:"medium",children:(0,T.jsxs)(l.View,{children:[0===Q.length&&(0,T.jsxs)(T.Fragment,{children:[(0,T.jsxs)(l.View,{padding:"medium",bg:"default",roundedTop:"large",children:[(0,T.jsx)(l.Text,{children:"Start a local development server with:"}),(0,T.jsx)(l.Spacer.Vertical,{size:"small"}),(0,T.jsx)(l.View,{bg:"secondary",border:"default",rounded:"medium",padding:"medium",children:(0,T.jsx)(l.Text,{type:"mono",size:"small",children:"npx expo start --dev-client"})}),(0,T.jsx)(l.Spacer.Vertical,{size:"small"}),(0,T.jsx)(l.Text,{children:"Then, select the local server when it appears here."}),(0,T.jsx)(l.Spacer.Vertical,{size:"small"}),(0,T.jsx)(l.Text,{children:"Alternatively, open the Camera app and scan the QR code that appears in your terminal"})]}),(0,T.jsx)(l.Divider,{})]}),(null==Q?void 0:Q.length)>0&&(0,T.jsx)(C,{devSessions:Q,onDevSessionPress:ne}),(0,T.jsx)(A,{isFetching:G,onRefetchPress:function(){q({pollAmount:B,pollInterval:H})}}),(0,T.jsx)(l.Divider,{}),(0,T.jsx)(w.UrlDropdown,{onSubmit:re,inputValue:k,setInputValue:E,isLoading:''!==k&&k===N})]})}),(0,T.jsx)(l.Spacer.Vertical,{size:"medium"}),(0,T.jsx)(I,{onRecentAppPress:se,loadingUrl:N})]})]})})]})})};var s=n(r(d[1])),t=n(r(d[2])),l=r(d[3]),o=(function(n,s){if(!s&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var t=H(s);if(t&&t.has(n))return t.get(n);var l={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in n)if("default"!==c&&Object.prototype.hasOwnProperty.call(n,c)){var u=o?Object.getOwnPropertyDescriptor(n,c):null;u&&(u.get||u.set)?Object.defineProperty(l,c,u):l[c]=n[c]}l.default=n,t&&t.set(n,l);return l})(r(d[4])),c=r(d[5]),u=r(d[6]),x=r(d[7]),p=r(d[8]),h=r(d[9]),f=r(d[10]),j=r(d[11]),v=r(d[12]),w=r(d[13]),y=r(d[14]),b=r(d[15]),S=r(d[16]),z=r(d[17]),V=r(d[18]),R=r(d[19]),P=r(d[20]),O=r(d[21]),T=r(d[22]);function H(n){if("function"!=typeof WeakMap)return null;var s=new WeakMap,t=new WeakMap;return(H=function(n){return n?t:s})(n)}function A(n){var s=n.isFetching,t=n.onRefetchPress,o=(0,l.useExpoTheme)(),c=s?o.status.info:o.status.default;return(0,T.jsx)(l.Button.FadeOnPressContainer,{onPress:t,disabled:s,bg:"default",rounded:"none",children:(0,T.jsxs)(l.Row,{align:"center",padding:"medium",bg:"default",children:[(0,T.jsx)(l.View,{width:"6",children:(0,T.jsx)(f.PulseIndicator,{isActive:s,color:c})}),(0,T.jsx)(l.Button.Text,{color:"default",children:s?'Searching for development servers...':'Fetch development servers'}),(0,T.jsx)(l.Spacer.Horizontal,{}),!s&&(0,T.jsx)(l.RefreshIcon,{})]})})}function C(n){var s=n.devSessions,t=void 0===s?[]:s,o=n.onDevSessionPress;return 0===t.length?null:(0,T.jsx)(l.View,{children:t.map((function(n){return(0,T.jsxs)(l.View,{children:[(0,T.jsx)(l.Button.FadeOnPressContainer,{onPress:function(){return o(n)},roundedTop:"large",roundedBottom:"none",bg:"default",children:(0,T.jsxs)(l.Row,{align:"center",padding:"medium",bg:"default",children:[(0,T.jsx)(l.StatusIndicator,{size:"small",status:"success"}),(0,T.jsx)(l.Spacer.Horizontal,{size:"small"}),(0,T.jsx)(l.View,{flex:"1",children:(0,T.jsx)(l.Button.Text,{color:"default",numberOfLines:1,children:n.description})}),(0,T.jsx)(l.Spacer.Horizontal,{size:"small"}),(0,T.jsx)(l.ChevronRightIcon,{})]})}),(0,T.jsx)(l.Divider,{})]},n.url)}))})}function I(n){var s=n.onRecentAppPress,t=n.loadingUrl,o=(0,R.useRecentlyOpenedApps)(),c=o.data,u=o.clear;if(0===c.length)return null;function x(n){var s,t=null!=(s=n.name)?s:n.url;return n.isEASUpdate&&null!=n.updateMessage?(0,T.jsx)(D,{url:n.url,message:n.updateMessage,branchName:n.branchName}):(0,T.jsx)(B,{label:t,url:n.url})}return(0,T.jsxs)(l.View,{px:"medium",children:[(0,T.jsxs)(l.Row,{align:"center",py:"small",children:[(0,T.jsx)(l.Spacer.Horizontal,{size:"small"}),(0,T.jsx)(l.Heading,{color:"secondary",children:"Recently opened"}),(0,T.jsx)(l.Spacer.Horizontal,{}),(0,T.jsx)(l.Button.FadeOnPressContainer,{bg:"ghost",onPress:u,children:(0,T.jsx)(l.View,{rounded:"medium",px:"small",py:"micro",children:(0,T.jsx)(l.Heading,{size:"small",weight:"semibold",color:"secondary",children:"Reset"})})})]}),(0,T.jsx)(l.View,{children:c.map((function(n,o,c){var u=0===o,p=o===c.length-1,h=n.url===t;return(0,T.jsxs)(M,{isLoading:h,children:[(0,T.jsx)(l.Button.FadeOnPressContainer,{onPress:function(){return s(n)},roundedTop:u?'large':'none',roundedBottom:p?'large':'none',py:"small",bg:"default",children:x(n)}),!p&&(0,T.jsx)(l.Divider,{})]},n.id)}))})]})}function M(n){var s=n.children,t=n.isLoading,l=(0,p.useLoadingContainerStyle)(t);return(0,T.jsx)(c.Animated.View,{style:l,children:s})}function B(n){var s=n.label,t=n.url;return(0,T.jsxs)(T.Fragment,{children:[(0,T.jsxs)(l.Row,{align:"center",px:"medium",bg:"default",children:[(0,T.jsx)(l.StatusIndicator,{size:"small",status:"success"}),(0,T.jsx)(l.Spacer.Horizontal,{size:"small"}),(0,T.jsx)(l.View,{flex:"1",children:(0,T.jsx)(l.Button.Text,{color:"default",numberOfLines:1,children:s})}),(0,T.jsx)(l.ChevronRightIcon,{})]}),(0,T.jsxs)(l.Row,{px:"medium",align:"center",bg:"default",children:[(0,T.jsx)(l.Spacer.Vertical,{size:"tiny"}),(0,T.jsx)(l.Spacer.Horizontal,{size:"large"}),(0,T.jsx)(l.Row,{style:{flexWrap:'wrap',flexShrink:1},children:(0,T.jsx)(l.Text,{size:"small",color:"secondary",numberOfLines:1,children:t})})]})]})}function D(n){var s=n.url,t=n.branchName,o=n.message,c=(0,l.useExpoPalette)();return(0,T.jsxs)(l.View,{children:[(0,T.jsxs)(l.Row,{align:"center",px:"medium",bg:"default",children:[(0,T.jsxs)(l.Row,{shrink:"1",style:{backgroundColor:c.blue[100]},py:"tiny",px:"1.5",rounded:"medium",align:"center",children:[(0,T.jsx)(l.BranchIcon,{style:{maxHeight:10,maxWidth:12,resizeMode:'contain'},resizeMethod:"scale"}),(0,T.jsx)(l.Spacer.Horizontal,{size:"tiny"}),(0,T.jsx)(l.View,{shrink:"1",children:(0,T.jsx)(l.Text,{size:"small",numberOfLines:1,children:`Branch: ${t}`})})]}),(0,T.jsx)(l.Spacer.Horizontal,{}),(0,T.jsx)(l.ChevronRightIcon,{})]}),(0,T.jsx)(l.Spacer.Vertical,{size:"small",bg:"default"}),Boolean(o)&&(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(l.Row,{px:"medium",align:"center",bg:"default",children:(0,T.jsx)(l.View,{children:(0,T.jsx)(l.Heading,{size:"small",numberOfLines:1,children:`Update "${o}"`})})}),(0,T.jsx)(l.Spacer.Vertical,{size:"micro",bg:"default"})]}),(0,T.jsx)(l.Row,{px:"medium",align:"center",bg:"default",children:(0,T.jsx)(l.Row,{style:{flexWrap:'wrap',flexShrink:1},children:(0,T.jsx)(l.Text,{size:"small",color:"secondary",numberOfLines:1,children:s})})})]})}}),1161,[6,315,47,622,96,2,1157,1162,1147,1141,1163,1153,1112,1164,1155,1014,1123,1125,1136,1139,1113,1115,204]); __d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.DevServerExplainerModal=function(){return(0,l.jsxs)(n.BaseModal,{title:"Development servers",children:[(0,l.jsx)(t.Spacer.Vertical,{size:"small"}),(0,l.jsx)(t.Text,{size:"medium",children:"Start a local development server with:"}),(0,l.jsx)(t.Spacer.Vertical,{size:"small"}),(0,l.jsx)(t.View,{bg:"secondary",border:"default",rounded:"medium",padding:"medium",children:(0,l.jsx)(t.Text,{type:"mono",size:"small",children:"npx expo start --dev-client"})}),(0,l.jsx)(t.Spacer.Vertical,{size:"large"}),(0,l.jsx)(t.Text,{children:"Then, select the local server when it appears here."}),(0,l.jsx)(t.Spacer.Vertical,{size:"small"}),(0,l.jsx)(t.Text,{children:"Alternatively, open the Camera app and scan the QR code that appears in your terminal"})]})};var t=r(d[0]),n=((function(t,n){if(!n&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var l=s(n);if(l&&l.has(t))return l.get(t);var o={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var p in t)if("default"!==p&&Object.prototype.hasOwnProperty.call(t,p)){var u=c?Object.getOwnPropertyDescriptor(t,p):null;u&&(u.get||u.set)?Object.defineProperty(o,p,u):o[p]=t[p]}o.default=t,l&&l.set(t,o)})(r(d[1])),r(d[2])),l=r(d[3]);function s(t){if("function"!=typeof WeakMap)return null;var n=new WeakMap,l=new WeakMap;return(s=function(t){return t?l:n})(t)}}),1162,[622,96,1140,204]); __d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.PulseIndicator=function(c){var l=c.isActive,f=c.color,s=n.useRef(new u.Animated.Value(0)),p=s.current.interpolate({inputRange:[0,1],outputRange:[.95,2]}),y=s.current.interpolate({inputRange:[0,1],outputRange:[1,0]}),v=n.useRef(u.Animated.loop(u.Animated.timing(s.current,{toValue:1,duration:1200,useNativeDriver:!0})));return n.useEffect((function(){l?v.current.start():(s.current.setValue(0),v.current.stop(),v.current.reset())}),[l]),(0,o.jsx)(t.StatusIndicator,{size:"small",style:{backgroundColor:f},children:(0,o.jsx)(u.Animated.View,{style:{flex:1,borderRadius:100,transform:[{scale:p}],opacity:y,backgroundColor:f}})})};var t=r(d[0]),n=(function(t,n){if(!n&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var u=c(n);if(u&&u.has(t))return u.get(t);var o={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var f in t)if("default"!==f&&Object.prototype.hasOwnProperty.call(t,f)){var s=l?Object.getOwnPropertyDescriptor(t,f):null;s&&(s.get||s.set)?Object.defineProperty(o,f,s):o[f]=t[f]}o.default=t,u&&u.set(t,o);return o})(r(d[1])),u=r(d[2]),o=r(d[3]);function c(t){if("function"!=typeof WeakMap)return null;var n=new WeakMap,u=new WeakMap;return(c=function(t){return t?u:n})(t)}}),1163,[622,96,2,204]); -__d((function(g,r,_i,a,m,e,d){var t=r(d[0]);Object.defineProperty(e,"__esModule",{value:!0}),e.UrlDropdown=function(t){var n=t.onSubmit,p=t.isLoading,y=t.inputValue,h=t.setInputValue,j=(0,i.useExpoTheme)(),O=(0,i.useCurrentTheme)(),v={dark:{active:j.background.secondary,inactive:j.background.default},light:{active:j.background.secondary,inactive:j.background.default}},w=u.useRef(),x=u.useState(!1),P=(0,o.default)(x,2),D=P[0],C=P[1],k=u.useState(!0),I=(0,o.default)(k,2),T=I[0],V=I[1],L=u.useState(!1),S=(0,o.default)(L,2),B=S[0],R=S[1],U={transform:[{translateX:-3},{rotate:D?'90deg':'0deg'}]},M=u.useRef(Date.now()),_=v[O],z=B?_.active:_.inactive;return(0,f.jsxs)(i.View,{rounded:"large",children:[(0,f.jsx)(i.Button.Container,{onPressIn:function(){return R(!0)},onPressOut:function(){return R(!1)},onPress:function(){C(!D)},roundedTop:"none",roundedBottom:D?'none':'large',testID:"DevLauncherURLToggle",children:(0,f.jsxs)(i.Row,{align:"center",padding:"medium",style:{backgroundColor:z},children:[(0,f.jsx)(i.View,{width:"6",children:(0,f.jsx)(i.ChevronRightIcon,{style:U})}),(0,f.jsx)(i.Text,{color:"default",children:"Enter URL manually"})]})}),D&&(0,f.jsxs)(i.View,{px:"medium",py:"medium",roundedBottom:"large",bg:"default",children:[(0,f.jsxs)(i.View,{border:"default",rounded:"medium",py:l.Platform.select({android:'tiny',ios:'medium'}),px:"medium",shadow:"micro",children:[(0,f.jsx)(i.TextInput,{autoFocus:!0,clearButtonMode:"while-editing",keyboardType:"url",autoCapitalize:"none",autoComplete:"off",autoCorrect:!1,placeholder:"http://10.0.0.25:19000",placeholderTextColor:j.text.secondary,ref:w,value:y,onChangeText:function(t){T||''===t||Date.now()>=M.current+500&&(V((0,c.validateUrl)(t)),M.current=Date.now()),h(t)},onBlur:function(){V((0,c.validateUrl)(y))},testID:"DevLauncherURLInput"}),(0,f.jsx)(i.View,{style:{position:'absolute',bottom:-20},children:!T&&''!==y&&(0,f.jsx)(i.Text,{color:"error",size:"small",children:"Invalid URL"})})]}),(0,f.jsx)(i.Spacer.Vertical,{size:"xl"}),(0,f.jsxs)(i.Button.FadeOnPressContainer,{bg:T?'tertiary':'disabled',shadow:"button",rounded:"medium",disabled:!T||p,onPress:function(){n(y),w.current.blur()},testID:"DevLauncherLoadAppButton",children:[(0,f.jsx)(i.View,{py:"small",opacity:p?'0.5':'1',children:(0,f.jsx)(i.Button.Text,{align:"center",weight:"semibold",color:"tertiary",children:"Connect"})}),p&&(0,f.jsx)(i.View,{style:b(b({},l.StyleSheet.absoluteFillObject),{},{justifyContent:'center',alignItems:'center'}),children:(0,f.jsx)(s.ActivityIndicator,{size:"small"})})]})]})]})};var n=t(r(d[1])),o=t(r(d[2])),i=r(d[3]),u=(function(t,n){if(!n&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var o=p(n);if(o&&o.has(t))return o.get(t);var i={},u=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in t)if("default"!==l&&Object.prototype.hasOwnProperty.call(t,l)){var c=u?Object.getOwnPropertyDescriptor(t,l):null;c&&(c.get||c.set)?Object.defineProperty(i,l,c):i[l]=t[l]}i.default=t,o&&o.set(t,i);return i})(r(d[4])),l=r(d[5]),c=r(d[6]),s=r(d[7]),f=r(d[8]);function p(t){if("function"!=typeof WeakMap)return null;var n=new WeakMap,o=new WeakMap;return(p=function(t){return t?o:n})(t)}function y(t,n){var o=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(t,n).enumerable}))),o.push.apply(o,i)}return o}function b(t){for(var o=1;o1&&void 0!==arguments[1]?arguments[1]:200;return function(){for(var u=arguments.length,c=new Array(u),f=0;f(); const [open, setOpen] = React.useState(false); - const [isValidUrl, setIsValidUrl] = React.useState(true); + const [isValidUrl, setIsValidUrl] = React.useState(validateUrl(inputValue)); const [isPressing, setIsPressing] = React.useState(false); @@ -50,24 +51,15 @@ export function UrlDropdown({ onSubmit, isLoading, inputValue, setInputValue }: const onConnectPress = () => { onSubmit(inputValue); - ref.current.blur(); + ref.current?.blur(); }; const onTogglePress = () => { setOpen(!open); }; - const lastExecuted = React.useRef(Date.now()); - const throttleValidationInterval = 500; - const onChangeText = (input: string) => { - if (!isValidUrl && input !== '') { - if (Date.now() >= lastExecuted.current + throttleValidationInterval) { - setIsValidUrl(validateUrl(input)); - lastExecuted.current = Date.now(); - } - } - + setIsValidUrl(validateUrl(input)); setInputValue(input); }; @@ -113,8 +105,7 @@ export function UrlDropdown({ onSubmit, isLoading, inputValue, setInputValue }: placeholder="http://10.0.0.25:19000" placeholderTextColor={theme.text.secondary} ref={ref as any} - value={inputValue} - onChangeText={onChangeText} + onChangeText={debounce(onChangeText)} onBlur={onBlur} testID="DevLauncherURLInput" /> diff --git a/packages/expo-dev-launcher/bundle/functions/debounce.ts b/packages/expo-dev-launcher/bundle/functions/debounce.ts new file mode 100644 index 00000000000000..d3b2ab1a6e0581 --- /dev/null +++ b/packages/expo-dev-launcher/bundle/functions/debounce.ts @@ -0,0 +1,7 @@ +export function debounce(func: (...args: T[]) => unknown, delay = 200): typeof func { + let timeout: number | NodeJS.Timeout; + return function (...args: T[]) { + clearTimeout(timeout as number); + timeout = setTimeout(() => func(...args), delay); + }; +} diff --git a/packages/expo-dev-launcher/bundle/screens/__tests__/HomeScreen.test.tsx b/packages/expo-dev-launcher/bundle/screens/__tests__/HomeScreen.test.tsx index 1f293aade63239..f5251f4b6e9e7d 100644 --- a/packages/expo-dev-launcher/bundle/screens/__tests__/HomeScreen.test.tsx +++ b/packages/expo-dev-launcher/bundle/screens/__tests__/HomeScreen.test.tsx @@ -109,7 +109,7 @@ describe('', () => { }); test('select dev session by entered url', async () => { - const { getByText, getByPlaceholderText } = renderHomeScreen(); + const { getByText, getByPlaceholderText, getByTestId } = renderHomeScreen(); await act(async () => { expect(() => getByPlaceholderText(textInputPlaceholder)).toThrow(); @@ -120,6 +120,8 @@ describe('', () => { expect(loadApp).toHaveBeenCalledTimes(0); fireEvent.changeText(input, 'exp://tester'); + const loadButton = getByTestId('DevLauncherLoadAppButton'); + await waitFor(() => expect(loadButton).not.toBeDisabled()); fireEvent.press(getByText(/connect/i)); expect(loadApp).toHaveBeenCalledTimes(1); diff --git a/packages/expo-dev-launcher/ios/main.jsbundle b/packages/expo-dev-launcher/ios/main.jsbundle index fefc3099398ee8..9d66507718a7cd 100644 --- a/packages/expo-dev-launcher/ios/main.jsbundle +++ b/packages/expo-dev-launcher/ios/main.jsbundle @@ -425,7 +425,7 @@ __d((function(e,s,t,r,i,c,a){i.exports={name:"react-native",version:"0.72.0-rc.5 __d((function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,u=new WeakMap;return(t=function(t){return t?u:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var u=t(o);if(u&&u.has(n))return u.get(n);var f={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in n)if("default"!==l&&Object.prototype.hasOwnProperty.call(n,l)){var p=c?Object.getOwnPropertyDescriptor(n,l):null;p&&(p.get||p.set)?Object.defineProperty(f,l,p):f[l]=n[l]}f.default=n,u&&u.set(n,f);return f})(r(d[0])).createContext(void 0);e.default=n}),419,[96]); __d((function(g,r,i,a,m,e,d){var t=r(d[0]);Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){var t=n.useContext(o.default);if(void 0===t)throw new Error("Couldn't find values for transition progress. Are you inside a screen in Native Stack?");return t};var n=(function(t,n){if(!n&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var o=u(n);if(o&&o.has(t))return o.get(t);var f={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in t)if("default"!==l&&Object.prototype.hasOwnProperty.call(t,l)){var p=c?Object.getOwnPropertyDescriptor(t,l):null;p&&(p.get||p.set)?Object.defineProperty(f,l,p):f[l]=t[l]}f.default=t,o&&o.set(t,f);return f})(r(d[1])),o=t(r(d[2]));function u(t){if("function"!=typeof WeakMap)return null;var n=new WeakMap,o=new WeakMap;return(u=function(t){return t?o:n})(t)}}),420,[6,96,419]); __d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.executeNativeBackPress=function(){return t.BackHandler.exitApp(),!0},e.isSearchBarAvailableForCurrentPlatform=void 0;var t=r(d[0]),o=['ios','android'].includes(t.Platform.OS);e.isSearchBarAvailableForCurrentPlatform=o}),421,[2]); -__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.App=function(n){return(0,x.jsx)(c.View,{style:{direction:'ltr',flex:1},children:(0,x.jsx)(s.LoadInitialData,{loader:(0,x.jsx)(u.Splash,{}),children:(0,x.jsx)(l.AppProviders,{children:(0,x.jsxs)(w.Navigator,{initialRouteName:"Main",screenOptions:{presentation:'modal',gestureEnabled:!1},detachInactiveScreens:!1,children:[(0,x.jsx)(w.Screen,{name:"Main",component:y,options:{headerShown:!1}}),(0,x.jsx)(w.Screen,{name:"User Profile",component:j.UserProfileScreen,options:{headerShown:!1}}),(0,x.jsx)(w.Screen,{name:"Crash Report",component:p.CrashReportScreen})]})})})})};var n=r(d[0]),t=r(d[1]),o=r(d[2]),c=((function(n,t){if(!t&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var o=v(t);if(o&&o.has(n))return o.get(n);var c={},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in n)if("default"!==u&&Object.prototype.hasOwnProperty.call(n,u)){var l=s?Object.getOwnPropertyDescriptor(n,u):null;l&&(l.get||l.set)?Object.defineProperty(c,u,l):c[u]=n[u]}c.default=n,o&&o.set(n,c)})(r(d[3])),r(d[4])),s=r(d[5]),u=r(d[6]),l=r(d[7]),p=r(d[8]),f=r(d[9]),S=r(d[10]),h=(r(d[11]),r(d[12])),j=r(d[13]),x=r(d[14]);function v(n){if("function"!=typeof WeakMap)return null;var t=new WeakMap,o=new WeakMap;return(v=function(n){return n?o:t})(n)}var b=(0,n.createBottomTabNavigator)(),w=(0,t.createStackNavigator)();var y=function(){return(0,x.jsxs)(b.Navigator,{detachInactiveScreens:!1,children:[(0,x.jsx)(b.Screen,{name:"Home",component:S.HomeScreen,options:{headerShown:!1,tabBarIcon:function(n){var t=n.focused;return(0,x.jsx)(o.HomeFilledIcon,{focused:t})}}}),(0,x.jsx)(b.Screen,{name:"ExtensionsStack",component:f.ExtensionsStack,options:{headerShown:!1,tabBarIcon:function(n){var t=n.focused;return(0,x.jsx)(o.ExtensionsFilledIcon,{focused:t})},title:'Extensions'}}),(0,x.jsx)(b.Screen,{name:"Settings",component:h.SettingsScreen,options:{headerShown:!1,tabBarIcon:function(n){var t=n.focused;return(0,x.jsx)(o.SettingsFilledIcon,{focused:t})}}}),!1]})}}),422,[423,590,621,96,2,1011,1119,1120,1141,1142,1160,1165,1166,1167,206]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.App=function(n){return(0,x.jsx)(c.View,{style:{direction:'ltr',flex:1},children:(0,x.jsx)(s.LoadInitialData,{loader:(0,x.jsx)(u.Splash,{}),children:(0,x.jsx)(l.AppProviders,{children:(0,x.jsxs)(w.Navigator,{initialRouteName:"Main",screenOptions:{presentation:'modal',gestureEnabled:!1},detachInactiveScreens:!1,children:[(0,x.jsx)(w.Screen,{name:"Main",component:y,options:{headerShown:!1}}),(0,x.jsx)(w.Screen,{name:"User Profile",component:j.UserProfileScreen,options:{headerShown:!1}}),(0,x.jsx)(w.Screen,{name:"Crash Report",component:p.CrashReportScreen})]})})})})};var n=r(d[0]),t=r(d[1]),o=r(d[2]),c=((function(n,t){if(!t&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var o=v(t);if(o&&o.has(n))return o.get(n);var c={},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in n)if("default"!==u&&Object.prototype.hasOwnProperty.call(n,u)){var l=s?Object.getOwnPropertyDescriptor(n,u):null;l&&(l.get||l.set)?Object.defineProperty(c,u,l):c[u]=n[u]}c.default=n,o&&o.set(n,c)})(r(d[3])),r(d[4])),s=r(d[5]),u=r(d[6]),l=r(d[7]),p=r(d[8]),f=r(d[9]),S=r(d[10]),h=(r(d[11]),r(d[12])),j=r(d[13]),x=r(d[14]);function v(n){if("function"!=typeof WeakMap)return null;var t=new WeakMap,o=new WeakMap;return(v=function(n){return n?o:t})(n)}var b=(0,n.createBottomTabNavigator)(),w=(0,t.createStackNavigator)();var y=function(){return(0,x.jsxs)(b.Navigator,{detachInactiveScreens:!1,children:[(0,x.jsx)(b.Screen,{name:"Home",component:S.HomeScreen,options:{headerShown:!1,tabBarIcon:function(n){var t=n.focused;return(0,x.jsx)(o.HomeFilledIcon,{focused:t})}}}),(0,x.jsx)(b.Screen,{name:"ExtensionsStack",component:f.ExtensionsStack,options:{headerShown:!1,tabBarIcon:function(n){var t=n.focused;return(0,x.jsx)(o.ExtensionsFilledIcon,{focused:t})},title:'Extensions'}}),(0,x.jsx)(b.Screen,{name:"Settings",component:h.SettingsScreen,options:{headerShown:!1,tabBarIcon:function(n){var t=n.focused;return(0,x.jsx)(o.SettingsFilledIcon,{focused:t})}}}),!1]})}}),422,[423,590,621,96,2,1011,1119,1120,1141,1142,1160,1166,1167,1168,206]); __d((function(g,r,i,a,m,e,d){var t=r(d[0]);Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"BottomTabBar",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(e,"BottomTabBarHeightCallbackContext",{enumerable:!0,get:function(){return b.default}}),Object.defineProperty(e,"BottomTabBarHeightContext",{enumerable:!0,get:function(){return f.default}}),Object.defineProperty(e,"BottomTabView",{enumerable:!0,get:function(){return u.default}}),Object.defineProperty(e,"createBottomTabNavigator",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(e,"useBottomTabBarHeight",{enumerable:!0,get:function(){return c.default}});var n=t(r(d[1])),o=t(r(d[2])),u=t(r(d[3])),b=t(r(d[4])),f=t(r(d[5])),c=t(r(d[6]))}),423,[6,424,575,523,573,574,589]); __d((function(g,r,_i,a,m,e,d){var t=r(d[0]);Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=t(r(d[1])),o=t(r(d[2])),i=r(d[3]),c=((function(t,n){if(!n&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var o=p(n);if(o&&o.has(t))return o.get(t);var i={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in t)if("default"!==l&&Object.prototype.hasOwnProperty.call(t,l)){var s=c?Object.getOwnPropertyDescriptor(t,l):null;s&&(s.get||s.set)?Object.defineProperty(i,l,s):i[l]=t[l]}i.default=t,o&&o.set(t,i)})(r(d[4])),t(r(d[5]))),l=t(r(d[6])),s=r(d[7]),b=["id","initialRouteName","backBehavior","children","screenListeners","screenOptions","sceneContainerStyle"],u=["lazy","tabBarOptions"];function p(t){if("function"!=typeof WeakMap)return null;var n=new WeakMap,o=new WeakMap;return(p=function(t){return t?o:n})(t)}function f(t,n){var o=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(t,n).enumerable}))),o.push.apply(o,i)}return o}function y(t){for(var o=1;o0&&(0,T.jsx)(l.Button.FadeOnPressContainer,{bg:"ghost",rounded:"full",onPress:function(){F.push((function(){return(0,T.jsx)(x.DevServerExplainerModal,{})}))},children:(0,T.jsx)(l.View,{rounded:"full",padding:"tiny",children:(0,T.jsx)(l.InfoIcon,{})})})]}),(0,T.jsx)(l.Spacer.Vertical,{size:"small"}),(0,T.jsx)(l.View,{px:"medium",children:(0,T.jsxs)(l.View,{children:[0===Q.length&&(0,T.jsxs)(T.Fragment,{children:[(0,T.jsxs)(l.View,{padding:"medium",bg:"default",roundedTop:"large",children:[(0,T.jsx)(l.Text,{children:"Start a local development server with:"}),(0,T.jsx)(l.Spacer.Vertical,{size:"small"}),(0,T.jsx)(l.View,{bg:"secondary",border:"default",rounded:"medium",padding:"medium",children:(0,T.jsx)(l.Text,{type:"mono",size:"small",children:"npx expo start --dev-client"})}),(0,T.jsx)(l.Spacer.Vertical,{size:"small"}),(0,T.jsx)(l.Text,{children:"Then, select the local server when it appears here."}),(0,T.jsx)(l.Spacer.Vertical,{size:"small"}),(0,T.jsx)(l.Text,{children:"Alternatively, open the Camera app and scan the QR code that appears in your terminal"})]}),(0,T.jsx)(l.Divider,{})]}),(null==Q?void 0:Q.length)>0&&(0,T.jsx)(C,{devSessions:Q,onDevSessionPress:ne}),(0,T.jsx)(A,{isFetching:G,onRefetchPress:function(){q({pollAmount:B,pollInterval:H})}}),(0,T.jsx)(l.Divider,{}),(0,T.jsx)(w.UrlDropdown,{onSubmit:re,inputValue:k,setInputValue:E,isLoading:''!==k&&k===N})]})}),(0,T.jsx)(l.Spacer.Vertical,{size:"medium"}),(0,T.jsx)(I,{onRecentAppPress:se,loadingUrl:N})]})]})})]})})};var s=n(r(d[1])),t=n(r(d[2])),l=r(d[3]),o=(function(n,s){if(!s&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var t=H(s);if(t&&t.has(n))return t.get(n);var l={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in n)if("default"!==c&&Object.prototype.hasOwnProperty.call(n,c)){var u=o?Object.getOwnPropertyDescriptor(n,c):null;u&&(u.get||u.set)?Object.defineProperty(l,c,u):l[c]=n[c]}l.default=n,t&&t.set(n,l);return l})(r(d[4])),c=r(d[5]),u=r(d[6]),x=r(d[7]),p=r(d[8]),h=r(d[9]),f=r(d[10]),j=r(d[11]),v=r(d[12]),w=r(d[13]),y=r(d[14]),b=r(d[15]),S=r(d[16]),z=r(d[17]),V=r(d[18]),R=r(d[19]),P=r(d[20]),O=r(d[21]),T=r(d[22]);function H(n){if("function"!=typeof WeakMap)return null;var s=new WeakMap,t=new WeakMap;return(H=function(n){return n?t:s})(n)}function A(n){var s=n.isFetching,t=n.onRefetchPress,o=(0,l.useExpoTheme)(),c=s?o.status.info:o.status.default;return(0,T.jsx)(l.Button.FadeOnPressContainer,{onPress:t,disabled:s,bg:"default",rounded:"none",children:(0,T.jsxs)(l.Row,{align:"center",padding:"medium",bg:"default",children:[(0,T.jsx)(l.View,{width:"6",children:(0,T.jsx)(f.PulseIndicator,{isActive:s,color:c})}),(0,T.jsx)(l.Button.Text,{color:"default",children:s?'Searching for development servers...':'Fetch development servers'}),(0,T.jsx)(l.Spacer.Horizontal,{}),!s&&(0,T.jsx)(l.RefreshIcon,{})]})})}function C(n){var s=n.devSessions,t=void 0===s?[]:s,o=n.onDevSessionPress;return 0===t.length?null:(0,T.jsx)(l.View,{children:t.map((function(n){return(0,T.jsxs)(l.View,{children:[(0,T.jsx)(l.Button.FadeOnPressContainer,{onPress:function(){return o(n)},roundedTop:"large",roundedBottom:"none",bg:"default",children:(0,T.jsxs)(l.Row,{align:"center",padding:"medium",bg:"default",children:[(0,T.jsx)(l.StatusIndicator,{size:"small",status:"success"}),(0,T.jsx)(l.Spacer.Horizontal,{size:"small"}),(0,T.jsx)(l.View,{flex:"1",children:(0,T.jsx)(l.Button.Text,{color:"default",numberOfLines:1,children:n.description})}),(0,T.jsx)(l.Spacer.Horizontal,{size:"small"}),(0,T.jsx)(l.ChevronRightIcon,{})]})}),(0,T.jsx)(l.Divider,{})]},n.url)}))})}function I(n){var s=n.onRecentAppPress,t=n.loadingUrl,o=(0,R.useRecentlyOpenedApps)(),c=o.data,u=o.clear;if(0===c.length)return null;function x(n){var s,t=null!=(s=n.name)?s:n.url;return n.isEASUpdate&&null!=n.updateMessage?(0,T.jsx)(D,{url:n.url,message:n.updateMessage,branchName:n.branchName}):(0,T.jsx)(B,{label:t,url:n.url})}return(0,T.jsxs)(l.View,{px:"medium",children:[(0,T.jsxs)(l.Row,{align:"center",py:"small",children:[(0,T.jsx)(l.Spacer.Horizontal,{size:"small"}),(0,T.jsx)(l.Heading,{color:"secondary",children:"Recently opened"}),(0,T.jsx)(l.Spacer.Horizontal,{}),(0,T.jsx)(l.Button.FadeOnPressContainer,{bg:"ghost",onPress:u,children:(0,T.jsx)(l.View,{rounded:"medium",px:"small",py:"micro",children:(0,T.jsx)(l.Heading,{size:"small",weight:"semibold",color:"secondary",children:"Reset"})})})]}),(0,T.jsx)(l.View,{children:c.map((function(n,o,c){var u=0===o,p=o===c.length-1,h=n.url===t;return(0,T.jsxs)(M,{isLoading:h,children:[(0,T.jsx)(l.Button.FadeOnPressContainer,{onPress:function(){return s(n)},roundedTop:u?'large':'none',roundedBottom:p?'large':'none',py:"small",bg:"default",children:x(n)}),!p&&(0,T.jsx)(l.Divider,{})]},n.id)}))})]})}function M(n){var s=n.children,t=n.isLoading,l=(0,p.useLoadingContainerStyle)(t);return(0,T.jsx)(c.Animated.View,{style:l,children:s})}function B(n){var s=n.label,t=n.url;return(0,T.jsxs)(T.Fragment,{children:[(0,T.jsxs)(l.Row,{align:"center",px:"medium",bg:"default",children:[(0,T.jsx)(l.StatusIndicator,{size:"small",status:"success"}),(0,T.jsx)(l.Spacer.Horizontal,{size:"small"}),(0,T.jsx)(l.View,{flex:"1",children:(0,T.jsx)(l.Button.Text,{color:"default",numberOfLines:1,children:s})}),(0,T.jsx)(l.ChevronRightIcon,{})]}),(0,T.jsxs)(l.Row,{px:"medium",align:"center",bg:"default",children:[(0,T.jsx)(l.Spacer.Vertical,{size:"tiny"}),(0,T.jsx)(l.Spacer.Horizontal,{size:"large"}),(0,T.jsx)(l.Row,{style:{flexWrap:'wrap',flexShrink:1},children:(0,T.jsx)(l.Text,{size:"small",color:"secondary",numberOfLines:1,children:t})})]})]})}function D(n){var s=n.url,t=n.branchName,o=n.message,c=(0,l.useExpoPalette)();return(0,T.jsxs)(l.View,{children:[(0,T.jsxs)(l.Row,{align:"center",px:"medium",bg:"default",children:[(0,T.jsxs)(l.Row,{shrink:"1",style:{backgroundColor:c.blue[100]},py:"tiny",px:"1.5",rounded:"medium",align:"center",children:[(0,T.jsx)(l.BranchIcon,{style:{maxHeight:10,maxWidth:12,resizeMode:'contain'},resizeMethod:"scale"}),(0,T.jsx)(l.Spacer.Horizontal,{size:"tiny"}),(0,T.jsx)(l.View,{shrink:"1",children:(0,T.jsx)(l.Text,{size:"small",numberOfLines:1,children:`Branch: ${t}`})})]}),(0,T.jsx)(l.Spacer.Horizontal,{}),(0,T.jsx)(l.ChevronRightIcon,{})]}),(0,T.jsx)(l.Spacer.Vertical,{size:"small",bg:"default"}),Boolean(o)&&(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(l.Row,{px:"medium",align:"center",bg:"default",children:(0,T.jsx)(l.View,{children:(0,T.jsx)(l.Heading,{size:"small",numberOfLines:1,children:`Update "${o}"`})})}),(0,T.jsx)(l.Spacer.Vertical,{size:"micro",bg:"default"})]}),(0,T.jsx)(l.Row,{px:"medium",align:"center",bg:"default",children:(0,T.jsx)(l.Row,{style:{flexWrap:'wrap',flexShrink:1},children:(0,T.jsx)(l.Text,{size:"small",color:"secondary",numberOfLines:1,children:s})})})]})}}),1160,[6,315,47,621,96,2,1156,1161,1146,1140,1162,1152,1111,1163,1154,1013,1122,1124,1135,1138,1112,1114,206]); __d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.DevServerExplainerModal=function(){return(0,l.jsxs)(n.BaseModal,{title:"Development servers",children:[(0,l.jsx)(t.Spacer.Vertical,{size:"small"}),(0,l.jsx)(t.Text,{size:"medium",children:"Start a local development server with:"}),(0,l.jsx)(t.Spacer.Vertical,{size:"small"}),(0,l.jsx)(t.View,{bg:"secondary",border:"default",rounded:"medium",padding:"medium",children:(0,l.jsx)(t.Text,{type:"mono",size:"small",children:"npx expo start --dev-client"})}),(0,l.jsx)(t.Spacer.Vertical,{size:"large"}),(0,l.jsx)(t.Text,{children:"Then, select the local server when it appears here."}),(0,l.jsx)(t.Spacer.Vertical,{size:"small"}),(0,l.jsx)(t.Text,{children:"Alternatively, open the Camera app and scan the QR code that appears in your terminal"})]})};var t=r(d[0]),n=((function(t,n){if(!n&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var l=s(n);if(l&&l.has(t))return l.get(t);var o={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var p in t)if("default"!==p&&Object.prototype.hasOwnProperty.call(t,p)){var u=c?Object.getOwnPropertyDescriptor(t,p):null;u&&(u.get||u.set)?Object.defineProperty(o,p,u):o[p]=t[p]}o.default=t,l&&l.set(t,o)})(r(d[1])),r(d[2])),l=r(d[3]);function s(t){if("function"!=typeof WeakMap)return null;var n=new WeakMap,l=new WeakMap;return(s=function(t){return t?l:n})(t)}}),1161,[621,96,1139,206]); __d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.PulseIndicator=function(c){var l=c.isActive,f=c.color,s=n.useRef(new u.Animated.Value(0)),p=s.current.interpolate({inputRange:[0,1],outputRange:[.95,2]}),y=s.current.interpolate({inputRange:[0,1],outputRange:[1,0]}),v=n.useRef(u.Animated.loop(u.Animated.timing(s.current,{toValue:1,duration:1200,useNativeDriver:!0})));return n.useEffect((function(){l?v.current.start():(s.current.setValue(0),v.current.stop(),v.current.reset())}),[l]),(0,o.jsx)(t.StatusIndicator,{size:"small",style:{backgroundColor:f},children:(0,o.jsx)(u.Animated.View,{style:{flex:1,borderRadius:100,transform:[{scale:p}],opacity:y,backgroundColor:f}})})};var t=r(d[0]),n=(function(t,n){if(!n&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var u=c(n);if(u&&u.has(t))return u.get(t);var o={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var f in t)if("default"!==f&&Object.prototype.hasOwnProperty.call(t,f)){var s=l?Object.getOwnPropertyDescriptor(t,f):null;s&&(s.get||s.set)?Object.defineProperty(o,f,s):o[f]=t[f]}o.default=t,u&&u.set(t,o);return o})(r(d[1])),u=r(d[2]),o=r(d[3]);function c(t){if("function"!=typeof WeakMap)return null;var n=new WeakMap,u=new WeakMap;return(c=function(t){return t?u:n})(t)}}),1162,[621,96,2,206]); -__d((function(g,r,_i,a,m,e,d){var t=r(d[0]);Object.defineProperty(e,"__esModule",{value:!0}),e.UrlDropdown=function(t){var n=t.onSubmit,p=t.isLoading,y=t.inputValue,h=t.setInputValue,j=(0,i.useExpoTheme)(),O=(0,i.useCurrentTheme)(),v={dark:{active:j.background.secondary,inactive:j.background.default},light:{active:j.background.secondary,inactive:j.background.default}},w=u.useRef(),x=u.useState(!1),P=(0,o.default)(x,2),D=P[0],C=P[1],k=u.useState(!0),I=(0,o.default)(k,2),T=I[0],V=I[1],L=u.useState(!1),S=(0,o.default)(L,2),B=S[0],R=S[1],U={transform:[{translateX:-3},{rotate:D?'90deg':'0deg'}]},M=u.useRef(Date.now()),_=v[O],z=B?_.active:_.inactive;return(0,f.jsxs)(i.View,{rounded:"large",children:[(0,f.jsx)(i.Button.Container,{onPressIn:function(){return R(!0)},onPressOut:function(){return R(!1)},onPress:function(){C(!D)},roundedTop:"none",roundedBottom:D?'none':'large',testID:"DevLauncherURLToggle",children:(0,f.jsxs)(i.Row,{align:"center",padding:"medium",style:{backgroundColor:z},children:[(0,f.jsx)(i.View,{width:"6",children:(0,f.jsx)(i.ChevronRightIcon,{style:U})}),(0,f.jsx)(i.Text,{color:"default",children:"Enter URL manually"})]})}),D&&(0,f.jsxs)(i.View,{px:"medium",py:"medium",roundedBottom:"large",bg:"default",children:[(0,f.jsxs)(i.View,{border:"default",rounded:"medium",py:l.Platform.select({android:'tiny',ios:'medium'}),px:"medium",shadow:"micro",children:[(0,f.jsx)(i.TextInput,{autoFocus:!0,clearButtonMode:"while-editing",keyboardType:"url",autoCapitalize:"none",autoComplete:"off",autoCorrect:!1,placeholder:"http://10.0.0.25:19000",placeholderTextColor:j.text.secondary,ref:w,value:y,onChangeText:function(t){T||''===t||Date.now()>=M.current+500&&(V((0,c.validateUrl)(t)),M.current=Date.now()),h(t)},onBlur:function(){V((0,c.validateUrl)(y))},testID:"DevLauncherURLInput"}),(0,f.jsx)(i.View,{style:{position:'absolute',bottom:-20},children:!T&&''!==y&&(0,f.jsx)(i.Text,{color:"error",size:"small",children:"Invalid URL"})})]}),(0,f.jsx)(i.Spacer.Vertical,{size:"xl"}),(0,f.jsxs)(i.Button.FadeOnPressContainer,{bg:T?'tertiary':'disabled',shadow:"button",rounded:"medium",disabled:!T||p,onPress:function(){n(y),w.current.blur()},testID:"DevLauncherLoadAppButton",children:[(0,f.jsx)(i.View,{py:"small",opacity:p?'0.5':'1',children:(0,f.jsx)(i.Button.Text,{align:"center",weight:"semibold",color:"tertiary",children:"Connect"})}),p&&(0,f.jsx)(i.View,{style:b(b({},l.StyleSheet.absoluteFillObject),{},{justifyContent:'center',alignItems:'center'}),children:(0,f.jsx)(s.ActivityIndicator,{size:"small"})})]})]})]})};var n=t(r(d[1])),o=t(r(d[2])),i=r(d[3]),u=(function(t,n){if(!n&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var o=p(n);if(o&&o.has(t))return o.get(t);var i={},u=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in t)if("default"!==l&&Object.prototype.hasOwnProperty.call(t,l)){var c=u?Object.getOwnPropertyDescriptor(t,l):null;c&&(c.get||c.set)?Object.defineProperty(i,l,c):i[l]=t[l]}i.default=t,o&&o.set(t,i);return i})(r(d[4])),l=r(d[5]),c=r(d[6]),s=r(d[7]),f=r(d[8]);function p(t){if("function"!=typeof WeakMap)return null;var n=new WeakMap,o=new WeakMap;return(p=function(t){return t?o:n})(t)}function y(t,n){var o=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(t,n).enumerable}))),o.push.apply(o,i)}return o}function b(t){for(var o=1;o1&&void 0!==arguments[1]?arguments[1]:200;return function(){for(var u=arguments.length,c=new Array(u),f=0;f