Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(DropdownTrigger): Dropdown triggerでtooltipを表示できるようにする #5291

Open
wants to merge 6 commits into
base: master
Choose a base branch
from

Conversation

daiHash
Copy link
Contributor

@daiHash daiHash commented Jan 16, 2025

関連URL

https://smarthr.atlassian.net/browse/SHRUI-1209

概要

Dropdownメニューのトリガーボタンにツールチップでラベルを表示させたい場合、DropdownMenuButton・FilterDropdownコンポーネントをTooltipでラップすると、ドロップダウンメニューのコンテンツまでラップされてしまい、pointerenter/pointerleaveイベントの挙動が想定通りにならないため(ツールチップのトリガー以外の要素でもイベントが発火したり、しなかったりしまいます)。
この問題を解消するため、DropdownTriggerにツールチップ表示用のpropsを追加し、条件付きでツールチップでラップできるように修正しました。

Use case

Dropdown/FilterDropdown menuのtriggerがアイコンのみの場合、操作を可視ラベルとして表示したい

FilterDropdown DropdownMenu
FilterDropdownのtriggerがアイコンのみでツールチップで可視ラベルを表示されているキャプチャ DropdownMenuのtriggerがアイコンのみでツールチップで可視ラベルを表示されているキャプチャ
開いてるFilterDropdownのtriggerがアイコンのみでツールチップで可視ラベルを表示されているキャプチャ 開いてるDropdownMenuのtriggerがアイコンのみでツールチップで可視ラベルを表示されているキャプチャ

変更内容

  • 条件付きでDropdownTriggerをtooltipでラップできるためにtooltipのprops追加
    • 条件付きでコンポーネントでラップできるために、ConditionalWrapperのコンポーネント追加しております。現在はプロダクト側では使う予定はないため一旦export対象外にしております
  • DropdownMenuButton / FilterDropdown のtriggerがアイコンのみの場合tooltipで操作のラベルを表示するように修正
  • iconOnlyTriggerの場合のVRTを追加しました

BEFORE

[現在発生している問題]: TooltipでDropdownMenuButton / FilterDropdownをラップして表示することしかできませんでしたので、Tooltipの表示・非表示を処理するポインターイベントがDropdownContentでも発火されて、tooltipが表示されたり、されなかったりになっていました

397699260-516f8667-188a-4d3e-94f5-27865fbb279e.mov

AFTER

DropdownMenuButton / FilterDropdownにprops渡して条件付きでdropdown trigger buttonのみをtooltipでラップするように修正し、Tooltipの表示・非表示を処理するポインターイベントがdropdown trigger buttonのみで発火するようになります

Screen.Recording.2025-01-20.at.9.59.00.mov

確認方法

Storybook や Chromatic で確認いただけます
プロダクト側で確認済みです

@daiHash daiHash added the WIP label Jan 16, 2025
@daiHash daiHash self-assigned this Jan 16, 2025
Copy link

pkg-pr-new bot commented Jan 16, 2025

Open in Stackblitz

npm i https://pkg.pr.new/kufu/smarthr-ui@5291

commit: 5a5cd09

@daiHash daiHash added accessibility and removed WIP labels Jan 16, 2025
@daiHash daiHash marked this pull request as ready for review January 17, 2025 09:26
@daiHash daiHash requested a review from a team as a code owner January 17, 2025 09:26
@daiHash daiHash requested review from yt-ymmt and hiroki0525 and removed request for a team January 17, 2025 09:26
@daiHash daiHash changed the title feat(DropdownTrigger)!: Dropdown triggerでtooltipを表示できるようにする feat(DropdownTrigger): Dropdown triggerでtooltipを表示できるようにする Jan 20, 2025
Copy link
Contributor

@Qs-F Qs-F left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

変更の方向性は良いと思いました!細かい部分でコメント入れてます〜

Comment on lines +1 to +13
import type { FC, JSX, ReactNode } from 'react'

type Props = {
shouldWrapContent: boolean
wrapper: (children: ReactNode) => JSX.Element
children: ReactNode
}

/**
* 条件付きでラッパをレンダリングする
*/
export const ConditionalWrapper: FC<Props> = ({ shouldWrapContent, wrapper, children }) =>
shouldWrapContent ? wrapper(children) : children
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

現状DropdownTriggerからしかimportされていないようなので、ほかで使用する予定がなければDropdownTriggerの中 (もしくはDropdownの中) におさめてほしい気がしました!

Comment on lines +16 to +20
* s true undefined
* s false undefined
* default true undefined
* s true 指定あり
* default false udnefined
* default false undefined
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

@@ -86,6 +88,7 @@ export const FilterDropdown: FC<Props & ElementProps> = ({
decorators,
responseMessage,
triggerSize,
onlyIconTrigger = false,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Buttonに合わせてsquare propsでも良いかもと思いました!

@@ -7,7 +7,7 @@ import ts from 'typescript'
const readFile = util.promisify(fs.readFile)
const readdir = util.promisify(fs.readdir)

const IGNORE_COMPONENTS = ['Experimental']
const IGNORE_COMPONENTS = ['Experimental', 'ConditionalWrapper']
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ConditioinalWrapperを移動すると消していいかも、と思いました!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants