Skip to content

Commit 55fdb81

Browse files
committed
feat(m3-react): M3Popper target hook, createM3PopperCloserEffect renamed into useM3PopperCloserEffect
1 parent a316486 commit 55fdb81

File tree

5 files changed

+41
-21
lines changed

5 files changed

+41
-21
lines changed

m3-react/src/components/popper/closer.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@ import {
88

99
import { useCallback } from 'react'
1010

11-
export type CloserOptions = {
11+
export type M3PopperCloserOptions = {
1212
active?: boolean;
1313
all?: boolean;
1414
}
1515

16-
export const createM3PopperCloserEffect = <T extends Element>({
16+
export default <T extends Element>({
1717
active = true,
1818
all = false,
19-
}: CloserOptions = {}): ElementEffect<T> => {
19+
}: M3PopperCloserOptions = {}): ElementEffect<T> => {
2020
return useCallback((el: T) => {
2121
const _el = el as CloserTarget<T>
2222
_el.m3PopperCloseAll = all

m3-react/src/components/popper/index.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@ export type {
33
M3PopperProps,
44
} from './types'
55

6-
export { createM3PopperCloserEffect } from './closer'
6+
export type {
7+
M3PopperCloserOptions,
8+
} from './closer'
79

810
export { default as M3Popper } from './M3Popper'
11+
12+
export { default as useM3PopperCloserEffect } from './closer'
13+
export { default as useM3PopperTarget } from './target'
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import type { ElementEffect } from '@/hooks/useElementEffect'
2+
3+
import {
4+
useCallback,
5+
useState,
6+
} from 'react'
7+
8+
export default <T extends Element>(): [T | null, ElementEffect<T>] => {
9+
const [target, setTarget] = useState<T | null>(null)
10+
11+
return [target, useCallback((el: T) => {
12+
setTarget(el)
13+
return () => {}
14+
}, [setTarget])]
15+
}

m3-react/src/index.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,12 @@ export type {
3030
M3NavigationTabProps,
3131
} from '@/components/navigation'
3232

33+
export type {
34+
M3PopperMethods,
35+
M3PopperProps,
36+
M3PopperCloserOptions,
37+
} from '@/components/popper'
38+
3339
export type {
3440
M3RichTooltipMethods,
3541
M3RichTooltipProps,
@@ -80,7 +86,8 @@ export {
8086

8187
export {
8288
M3Popper,
83-
createM3PopperCloserEffect,
89+
useM3PopperCloserEffect,
90+
useM3PopperTarget,
8491
} from '@/components/popper'
8592

8693
export {

m3-react/storybook/examples/rich-tooltip/DeleteTooltip.tsx

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,16 @@ import { M3Button } from '@/components/button'
44
import { M3RichTooltip } from '@/components/rich-tooltip'
55

66
import {
7-
useState,
8-
} from 'react'
9-
10-
import { createM3PopperCloserEffect } from '@/components/popper/closer'
7+
useM3PopperCloserEffect,
8+
useM3PopperTarget,
9+
} from '@/components/popper'
1110

1211
const DeleteTooltip: FC = () => {
13-
const [target, setTarget] = useState<HTMLElement | null>(null)
12+
const [target, setTarget] = useM3PopperTarget()
1413

1514
return (
16-
<span ref={setTarget} style={{ display: 'inline-block' }}>
17-
<M3Button>
15+
<>
16+
<M3Button effects={[setTarget]}>
1817
Delete
1918
</M3Button>
2019

@@ -26,22 +25,16 @@ const DeleteTooltip: FC = () => {
2625
This action can not be undone
2726

2827
<M3RichTooltip.Footer>
29-
<M3Button
30-
appearance="text"
31-
effects={[createM3PopperCloserEffect()]}
32-
>
28+
<M3Button appearance="text" effects={[useM3PopperCloserEffect()]}>
3329
Proceed
3430
</M3Button>
3531

36-
<M3Button
37-
appearance="text"
38-
effects={[createM3PopperCloserEffect()]}
39-
>
32+
<M3Button appearance="text" effects={[useM3PopperCloserEffect()]}>
4033
Cancel
4134
</M3Button>
4235
</M3RichTooltip.Footer>
4336
</M3RichTooltip>
44-
</span>
37+
</>
4538
)
4639
}
4740

0 commit comments

Comments
 (0)