General/random internal cleanup (part 1) (#1484)

* sort React imports

* improve type signature of the `useEvent` hook

* use more correct `useIsoMorphicEffect` check in `useEvent`

* refactor `useCallback` to cleaner `useEvent`

* convert `const` to `let`

Just for consistency..

* cleanup `Tabs` code

Created explicit functions that can be called from child components
instead of calling `dispatch` directly. Introduced a `useData` and
`useActions` hook to make child components easier.

The seperation of `useData` allows us to pass down props directly
instead of going via the `useReducer` hook and dispatching actions to
make values up to date.

* cleanup `Combobox` code

* cleanup `RadioGroup` code
This commit is contained in:
Robin Malfait
2022-05-23 11:26:22 +02:00
committed by GitHub
parent d200be5f6f
commit e819c0a7b2
18 changed files with 1063 additions and 1218 deletions
@@ -1,11 +1,10 @@
import React, {
Fragment,
createContext,
useCallback,
useContext,
useMemo,
useState,
useRef,
useState,
// Types
ElementType,
@@ -25,6 +24,7 @@ import { useResolveButtonType } from '../../hooks/use-resolve-button-type'
import { useSyncRefs } from '../../hooks/use-sync-refs'
import { Hidden, Features as HiddenFeatures } from '../../internal/hidden'
import { attemptSubmit } from '../../utils/form'
import { useEvent } from '../../hooks/use-event'
interface StateDefinition {
switch: HTMLButtonElement | null
@@ -121,32 +121,23 @@ let SwitchRoot = forwardRefWithAs(function Switch<
groupContext === null ? null : groupContext.setSwitch
)
let toggle = useCallback(() => onChange(!checked), [onChange, checked])
let handleClick = useCallback(
(event: ReactMouseEvent) => {
if (isDisabledReactIssue7711(event.currentTarget)) return event.preventDefault()
let toggle = useEvent(() => onChange(!checked))
let handleClick = useEvent((event: ReactMouseEvent) => {
if (isDisabledReactIssue7711(event.currentTarget)) return event.preventDefault()
event.preventDefault()
toggle()
})
let handleKeyUp = useEvent((event: ReactKeyboardEvent<HTMLButtonElement>) => {
if (event.key === Keys.Space) {
event.preventDefault()
toggle()
},
[toggle]
)
let handleKeyUp = useCallback(
(event: ReactKeyboardEvent<HTMLButtonElement>) => {
if (event.key === Keys.Space) {
event.preventDefault()
toggle()
} else if (event.key === Keys.Enter) {
attemptSubmit(event.currentTarget)
}
},
[toggle]
)
} else if (event.key === Keys.Enter) {
attemptSubmit(event.currentTarget)
}
})
// This is needed so that we can "cancel" the click event when we use the `Enter` key on a button.
let handleKeyPress = useCallback(
(event: ReactKeyboardEvent<HTMLElement>) => event.preventDefault(),
[]
)
let handleKeyPress = useEvent((event: ReactKeyboardEvent<HTMLElement>) => event.preventDefault())
let slot = useMemo<SwitchRenderPropArg>(() => ({ checked }), [checked])
let ourProps = {