Skip to content

Commit 36a32e4

Browse files
committed
Optimize rendering
1 parent 503a81f commit 36a32e4

File tree

3 files changed

+24
-21
lines changed

3 files changed

+24
-21
lines changed

src/lib/seam/components/AccessCodeDetails/AccessCodeDevice.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ function Content(props: {
5151
}): JSX.Element {
5252
const { device, disableLockUnlock, onSelectDevice } = props
5353

54-
const { renderSnackbar, showToggleSnackbar } = useToggleLockSnackbar()
54+
const { SnackbarNode, showToggleSnackbar } = useToggleLockSnackbar()
5555
const toggleLock = useToggleLock({
5656
onSuccess: () => {
5757
showToggleSnackbar('success')
@@ -65,7 +65,7 @@ function Content(props: {
6565

6666
return (
6767
<>
68-
{renderSnackbar()}
68+
{SnackbarNode}
6969

7070
<div className='seam-access-code-device'>
7171
<div className='seam-device-image'>

src/lib/seam/components/DeviceDetails/LockDeviceDetails.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ export function LockDeviceDetails({
4343
device_id: device.device_id,
4444
})
4545

46-
const { renderSnackbar, showToggleSnackbar } = useToggleLockSnackbar()
46+
const { SnackbarNode, showToggleSnackbar } = useToggleLockSnackbar()
4747
const toggleLock = useToggleLock({
4848
onSuccess: () => {
4949
showToggleSnackbar('success')
@@ -99,7 +99,7 @@ export function LockDeviceDetails({
9999

100100
return (
101101
<>
102-
{renderSnackbar()}
102+
{SnackbarNode}
103103

104104
<div className={classNames('seam-device-details', className)}>
105105
<ContentHeader title='Device' onBack={onBack} />

src/lib/seam/locks/use-toggle-lock-snackbar.tsx

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,39 @@
1-
import { useCallback, useState } from 'react'
1+
import { useCallback, useMemo, useState } from 'react'
22

33
import { Snackbar, type SnackbarProps } from 'lib/ui/Snackbar/Snackbar.js'
44

55
export interface UseToggleLockSnackbarContext {
66
showToggleSnackbar: (type: SnackbarProps['variant']) => void
7-
renderSnackbar: () => JSX.Element
7+
SnackbarNode: JSX.Element
88
}
99

1010
export function useToggleLockSnackbar(): UseToggleLockSnackbarContext {
1111
const [visible, setVisible] = useState(false)
1212
const [variant, setVariant] = useState<SnackbarProps['variant']>('success')
1313

14+
const SnackbarNode = useMemo(
15+
() => (
16+
<Snackbar
17+
variant={variant}
18+
visible={visible}
19+
onClose={() => {
20+
setVisible(false)
21+
}}
22+
message={
23+
variant === 'success' ? t.successfullyUpdated : t.failedToUpdate
24+
}
25+
autoDismiss
26+
/>
27+
),
28+
[visible, variant]
29+
)
30+
1431
return {
1532
showToggleSnackbar: useCallback((type) => {
1633
setVariant(type)
1734
setVisible(true)
1835
}, []),
19-
renderSnackbar: useCallback(() => {
20-
return (
21-
<Snackbar
22-
variant={variant}
23-
visible={visible}
24-
onClose={() => {
25-
setVisible(false)
26-
}}
27-
message={
28-
variant === 'success' ? t.successfullyUpdated : t.failedToUpdate
29-
}
30-
autoDismiss
31-
/>
32-
)
33-
}, [visible, variant]),
36+
SnackbarNode,
3437
}
3538
}
3639

0 commit comments

Comments
 (0)