Alert Dialog
Alert Dialog를 Stackflow와 함께 사용하는 방법을 안내합니다.
Alert Dialog
Alert Dialog 컴포넌트에 대해 자세히 알아봅니다.
Making an Alert Dialog Activity
일반적인 경우 Alert Dialog를 Activity로 만들어 사용하는 것을 권장합니다.
- Activity로 관리되므로, 하위 Activity보다 높고 상위 Activity보다는 낮은 z-index를 갖도록 관리하기 쉽습니다.
- 딥링킹이 가능합니다. (URL 접속으로 Alert Dialog를 열 수 있습니다.)
- @stackflow/plugin-basic-ui
Modal에서의 마이그레이션이 쉽습니다.
Usage
openprop에useActivity().isActive를 전달하여 Activity가 활성화될 때 Alert Dialog가 열리도록 합니다.onOpenChange를 통해 Alert Dialog가 닫힐 때pop()을 실행하여 Activity를 종료합니다.layerIndex={useActivityZIndexBase()}로 Alert Dialog Activity의 z-index 기준점을 전달합니다.
Keeping Alert Dialog Mounted
Alert Dialog Activity 위에 다른 Activity를 push할 때 Alert Dialog가 unmount되는 것을 방지하려면,
open상태를isActive대신transitionState로 관리하고modalprop을isActive로 설정하고onOpenChange핸들러에서!isOpen && isActive인 경우pop()을 실행하도록 합니다.
이 패턴은 Alert Dialog 액티비티 위에 다른 오버레이 컴포넌트 액티비티를 중첩하여 표시하고 싶은 경우 유용합니다.
open을transitionState로 관리하여 다른 Activity가 위에 push되어도 Alert Dialog가 unmount되지 않도록 합니다.modal={isActive}로 Alert Dialog Activity가 비활성 상태일 때modal을false로 설정합니다. 이렇게 하지 않으면, 위에 push된 Activity에서 포커스 및 스크린 리더 접근이 동작하지 않습니다.onOpenChange핸들러에서isActive인 경우에만pop()을 실행하여, 비활성 상태에서의 의도치 않은 Activity 종료를 방지합니다.
Syncing Alert Dialog State with a Step
Alert Dialog를 Activity로 만들 수 없는 경우, Alert Dialog가 표시된 상태를 Step으로 만들 수 있습니다.
- 현재 Activity를 유지하면서도, 뒤로 가기 버튼 등으로 Alert Dialog를 닫을 수 있습니다.
AlertDialogTrigger를 사용하여 Alert Dialog를 열고 닫을 수 있습니다.
Activity로 만들지 않은 Alert Dialog에서 다른 Activity를 push하기 전, z-index 문제를 방지하기 위해 Alert Dialog를 닫으세요.
Alert Dialog를 닫을 수 없거나, Alert Dialog를 연 Activity로 돌아왔을 때 Alert Dialog가 열린 상태를 유지해야 하는 경우 Alert Dialog를 Activity로 만들어 사용하는 것을 권장합니다.
Activity 간 유려한 트랜지션을 제공하기 위해 하위 AppScreen 요소 중 일부가 상위 AppScreen 요소보다 위에 위치합니다. 이 제약으로 인해, 열린 상태의 Alert Dialog는 독립적인 Activity로 만들지 않는 경우 하위 Activity와 상위 Activity 사이에 위치시키는 것이 불가능합니다.
Usage
Portal을 사용하여 Alert Dialog가 DOM 상 현재 Activity 밖에 렌더링되도록 합니다.openprop를 관리하고,onOpenChange핸들러를 통해 Step 상태와 동기화합니다.- 뒤로 가기 버튼 등을 통해 Activity 파라미터가 변경될 때 Alert Dialog의
open상태를 동기화합니다. layerIndex={useActivityZIndexBase({ activityOffset: 1 })}로 현재 Activity보다 한 단계 높은 z-index 기준점을 전달합니다.
useStepOverlay
#2와 #3을 일반화하여 useStepOverlay를 사용하면 편리합니다. useStepOverlay 구현 예시는 코드를 참고하세요.
About useActivityZIndexBase
useActivityZIndexBase는 각 Activity의 z-index 기준점을 반환하는 훅입니다.
useActivity().zIndex * 5를 반환합니다.useActivity().zIndex는 현재 Activity가 enter된 Activity 중 몇 번째 Activity인지를 나타내는 값입니다.- AppScreen을 구성하는 요소들(layer, appbar, dim, edge)은
useActivityZIndexBase()값을 바탕으로 계산된 z-index를 갖습니다.
activityOffset옵션은 현재 Activity가 아닌 다음 Activity의 z-index 기준점을 사용하고 싶을 때 사용합니다.- 예를 들어,
useActivityZIndexBase({ activityOffset: 1 })는 다음 Activity의 z-index 기준점을 반환합니다. - 이는 Step 패턴에서 현재 Activity 위에 AlertDialog를 표시할 때 유용합니다.
- 두 훅 모두 현재 Activity가 enter된 Activity 중 몇 번째 Activity인지를 바탕으로 z-index 스타일링에 필요한 값을 반환하는 훅입니다.
- 두 훅이 반환하는 값은 같으나, @stackflow/plugin-basic-ui가 아닌, SEED 컴포넌트를 사용하는 경우 SEED가 관리하는
@seed-design/stackflow패키지의useActivityZIndexBase훅을 사용하는 것을 권장합니다. @stackflow/react-ui-core패키지의useZIndexBase는activityOffset옵션을 제공하지 않습니다.@seed-design/[email protected]부터useActivityZIndexBase훅이 제공됩니다.
layerIndex를 useActivity().zIndex * 5 + n 형태로 지정하고 있었다면 useActivityZIndexBase() + n으로 변경할 수 있습니다. 변경 과정에서 + n이 필요한지 함께 검토해보세요.
Last updated on