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: Step 付き FormDialog の新規作成(FormDialogの拡張ではないバージョン) #5004

Draft
wants to merge 9 commits into
base: master
Choose a base branch
from

Conversation

schktjm
Copy link
Contributor

@schktjm schktjm commented Oct 11, 2024

関連URL

asana: https://app.asana.com/0/1206535203416259/1208178713972396/f
イメージ図: https://kufuinc.slack.com/archives/CGC58MW01/p1725506017398559?thread_ts=1725505216.026419&cid=CGC58MW01

#4972 で、FormDialog の拡張版を作ったのですが、若干ロジックが複雑になってしまったため独立で作ってみました!
比較用に PR は残しています!

概要

Step を持つ FormDialog の実装をしました。

目的

  • Step 付きダイアログの見た目を統一するため
  • アクセシビリティの観点で、次ステップへ移動したときのフォーカスをダイアログトップへ移動させるため

使用イメージ

<StepFormDialog>
  <Step />
  <Step />
  <Step />
</StepFormDialog>
type FormDialogに追加したProps = {
  decorators?: DecoratorsType<'nextButtonLabel' | 'backButtonLabel'>
  onClickNext?: () => void  // 次へボタンを押したときのイベントハンドラ
  onClickBack?: () => void  // 前へボタンを押したときのイベントハンドラ
}

変更内容

  • feat: Step つき FormDialog の実装 #4972 から路線変更をして、コンポーネントを新しく生成する方法で実装しました
  • FormDialog に、戻る・次へボタンなどをデフォルトで設置するようにしました

確認方法

storybook のコンポーネントを作ったのでそこから確認お願いします!
http://localhost:6006/?path=/story/dialog%EF%BC%88%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%EF%BC%89-stepformdialog--default

Copy link

pkg-pr-new bot commented Oct 15, 2024

Open in Stackblitz

pnpm add https://pkg.pr.new/kufu/smarthr-ui@5004

commit: 30b5923

Copy link
Contributor Author

Choose a reason for hiding this comment

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

FormDialog の拡張と比べて、ボタンのラベルの出し分けなどは DialogContentInnner に寄せたため、 hooks は activeStep 関連の処理のみになりました。
いっそ分けなくてもいいかもというレベルです 🤔


const onNextSteps = useCallback(() => {
focusTrapRef.current?.focus()
startTransition(() => setActiveStep((pre) => pre + 1))
Copy link
Contributor Author

Choose a reason for hiding this comment

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

最終ステップのひとつ前のステップで、次へボタンを押すと即座に button の type が submit に更新され、onSubmit が発火するという現象が起きていたため、この step の更新をトランジションとして即座にUI更新されないようにしました。

Copy link
Contributor Author

Choose a reason for hiding this comment

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

基本的な構成は FormDialog からほぼ変えず、次へ、戻るボタンなどをを表示しています!

DialogProps
type ElementProps = Omit<ComponentProps<'div'>, keyof Props>

export const StepFormDialog: React.FC<Props & ElementProps> = ({
Copy link
Contributor Author

Choose a reason for hiding this comment

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

eslint のカスタムルールでエラーが出てしまうので、こういう名前 FormDialog$ にしてるのですが、この方法で進めるなら適切な名前に変更して、ルールに付け足していいと思いました!

@schktjm schktjm marked this pull request as ready for review October 15, 2024 12:54
@schktjm schktjm requested a review from a team as a code owner October 15, 2024 12:54
@schktjm schktjm requested review from s-sasaki-0529 and uknmr and removed request for a team October 15, 2024 12:54
@schktjm schktjm self-assigned this Oct 15, 2024
@schktjm schktjm requested a review from masuP9 October 15, 2024 12:54
@schktjm schktjm marked this pull request as draft October 24, 2024 06:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant