1
- import React , { useState , useEffect , useDeferredValue } from 'react'
1
+ import React , { useState , useEffect , useReducer , useDeferredValue } from 'react'
2
2
import styled from '@emotion/styled'
3
3
import { ThemeProvider } from '@emotion/react'
4
4
import { Card , Input , Typography , ConfigProvider , theme } from 'antd'
@@ -125,6 +125,12 @@ const StarButton = styled(({ className, ...props }: StarButtonProps) => (
125
125
// will have dark mode automatically if they've selected it previously.
126
126
const useDarkModeState = createPersistedState ( 'darkMode' )
127
127
128
+ // The value returns to `defaultValue` when an empty string is entered,
129
+ // this makes our down-tree props behaviour simpler without having to swap
130
+ // empty values for the default.
131
+ const useDefaultState = ( defaultValue : string ) =>
132
+ useReducer ( ( _ , v : string ) => ( v === '' ? defaultValue : v ) , defaultValue )
133
+
128
134
const Home = ( ) => {
129
135
const { packageName : defaultPackageName , isPackageNameDefinedInURL } =
130
136
useGetPackageNameFromURL ( )
@@ -138,8 +144,8 @@ const Home = () => {
138
144
[ `${ SHOW_LATEST_RCS } ` ] : false ,
139
145
} )
140
146
141
- const [ appName , setAppName ] = useState < string > ( '' )
142
- const [ appPackage , setAppPackage ] = useState < string > ( '' )
147
+ const [ appName , setAppName ] = useDefaultState ( DEFAULT_APP_NAME )
148
+ const [ appPackage , setAppPackage ] = useDefaultState ( DEFAULT_APP_PACKAGE )
143
149
144
150
// Avoid UI lag when typing.
145
151
const deferredAppName = useDeferredValue ( appName )
@@ -276,8 +282,8 @@ const Home = () => {
276
282
< Input
277
283
size = "large"
278
284
placeholder = { DEFAULT_APP_NAME }
279
- value = { appName }
280
- onChange = { ( { target } ) => setAppName ( ( value ) => target . value ) }
285
+ value = { appName === DEFAULT_APP_NAME ? '' : appName }
286
+ onChange = { ( { target } ) => setAppName ( target . value ) }
281
287
/>
282
288
</ AppNameField >
283
289
@@ -289,10 +295,8 @@ const Home = () => {
289
295
< Input
290
296
size = "large"
291
297
placeholder = { DEFAULT_APP_PACKAGE }
292
- value = { appPackage }
293
- onChange = { ( { target } ) =>
294
- setAppPackage ( ( value ) => target . value )
295
- }
298
+ value = { appPackage === DEFAULT_APP_PACKAGE ? '' : appPackage }
299
+ onChange = { ( { target } ) => setAppPackage ( target . value ) }
296
300
/>
297
301
</ AppPackageField >
298
302
</ AppDetailsContainer >
@@ -315,14 +319,8 @@ const Home = () => {
315
319
shouldShowDiff = { shouldShowDiff }
316
320
fromVersion = { fromVersion }
317
321
toVersion = { toVersion }
318
- appName = {
319
- deferredAppName !== DEFAULT_APP_NAME ? deferredAppName : ''
320
- }
321
- appPackage = {
322
- deferredAppPackage !== DEFAULT_APP_PACKAGE
323
- ? deferredAppPackage
324
- : ''
325
- }
322
+ appName = { deferredAppName }
323
+ appPackage = { deferredAppPackage }
326
324
packageName = { packageName }
327
325
language = { language }
328
326
/>
0 commit comments