refactor: replace Select hook logic with ref-function
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
"use client"
|
"use client"
|
||||||
import { RefObject, useEffect, useRef, useState } from "react"
|
import { useState } from "react"
|
||||||
import {
|
import {
|
||||||
Button,
|
Button,
|
||||||
type Key,
|
type Key,
|
||||||
@@ -15,7 +15,7 @@ import SelectChevron from "../SelectChevron"
|
|||||||
|
|
||||||
import styles from "./select.module.css"
|
import styles from "./select.module.css"
|
||||||
|
|
||||||
import type { SelectProps } from "./select"
|
import type { SelectPortalContainer, SelectProps } from "./select"
|
||||||
|
|
||||||
export default function Select({
|
export default function Select({
|
||||||
"aria-label": ariaLabel,
|
"aria-label": ariaLabel,
|
||||||
@@ -26,18 +26,20 @@ export default function Select({
|
|||||||
value,
|
value,
|
||||||
defaultSelectedKey,
|
defaultSelectedKey,
|
||||||
}: SelectProps) {
|
}: SelectProps) {
|
||||||
const ref = useRef<HTMLDivElement>(null)
|
const [rootDiv, setRootDiv] = useState<SelectPortalContainer>(null)
|
||||||
const [rootDiv, setRootDiv] = useState<HTMLDivElement | null>(null)
|
|
||||||
useEffect(() => {
|
function setRef(node: SelectPortalContainer) {
|
||||||
setRootDiv(ref.current)
|
if (node) {
|
||||||
}, [setRootDiv])
|
setRootDiv(node)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function handleOnSelect(key: Key) {
|
function handleOnSelect(key: Key) {
|
||||||
onSelect(key)
|
onSelect(key)
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={styles.container} ref={ref}>
|
<div className={styles.container} ref={setRef}>
|
||||||
<ReactAriaSelect
|
<ReactAriaSelect
|
||||||
defaultSelectedKey={defaultSelectedKey}
|
defaultSelectedKey={defaultSelectedKey}
|
||||||
aria-label={ariaLabel}
|
aria-label={ariaLabel}
|
||||||
|
|||||||
@@ -9,3 +9,5 @@ export interface SelectProps
|
|||||||
placeholder?: string
|
placeholder?: string
|
||||||
defaultSelectedKey?: Key
|
defaultSelectedKey?: Key
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type SelectPortalContainer = HTMLDivElement | null
|
||||||
|
|||||||
Reference in New Issue
Block a user