Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 34 additions & 26 deletions packages/ui-modal/src/Modal/v1/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,14 @@ class Modal extends Component<ModalProps, ModalState> {
componentDidUpdate(prevProps: ModalProps) {
if (this.props.open !== prevProps.open) {
this.setState({ transitioning: true, open: !!this.props.open })
// When closing, release focus from the Dialog.
// The Dialog stays open so its content can fade out, but the
// Transition marks the exiting subtree aria-hidden -- keeping focus inside
// it would hide a focused element from assistive tech resulting in a
// console warning
if (prevProps.open && !this.props.open) {
this._content?.blur()
}
}
this.props.makeStyles?.()
}
Expand Down Expand Up @@ -284,31 +292,31 @@ class Modal extends Component<ModalProps, ModalState> {
onOpen={this.handlePortalOpen}
data-cid="Modal"
>
<Transition
in={open}
transitionOnMount
type={transition}
onEnter={onEnter}
onEntering={onEntering}
onEntered={createChainedFunction(
this.handleTransitionComplete,
onEntered,
onOpen
)}
onExit={onExit}
onExiting={onExiting}
onExited={createChainedFunction(
this.handleTransitionComplete,
onExited,
onClose
)}
<ModalContext.Provider
value={{
bodyScrollAriaLabel: this.state.bodyScrollAriaLabel,
setBodyScrollAriaLabel: (txt: string) =>
this.setState({ bodyScrollAriaLabel: txt })
}}
>
<ModalContext.Provider
value={{
bodyScrollAriaLabel: this.state.bodyScrollAriaLabel,
setBodyScrollAriaLabel: (txt: string) =>
this.setState({ bodyScrollAriaLabel: txt })
}}
<Transition
in={open}
transitionOnMount
type={transition}
onEnter={onEnter}
onEntering={onEntering}
onEntered={createChainedFunction(
this.handleTransitionComplete,
onEntered,
onOpen
)}
onExit={onExit}
onExiting={onExiting}
onExited={createChainedFunction(
this.handleTransitionComplete,
onExited,
onClose
)}
>
{constrain === 'parent' ? (
<span css={this.props.styles?.constrainContext}>
Expand All @@ -317,8 +325,8 @@ class Modal extends Component<ModalProps, ModalState> {
) : (
this.renderDialog(passthroughProps)
)}
</ModalContext.Provider>
</Transition>
</Transition>
</ModalContext.Provider>
</Portal>
)
}
Expand Down
16 changes: 6 additions & 10 deletions packages/ui-modal/src/Modal/v2/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -618,16 +618,12 @@ You can do this with the `insertAt` prop or a theme override:
type: code
---
<InstUISettingsProvider
theme={{
themeOverrides: {
componentOverrides: {
Mask: {
zIndex: 555,
}
}
}
}}
>
themeOverride={{
Mask: {
zIndex: 555
}
}}
>
Comment on lines +621 to +626

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Note: This token does not exist yet in v2, I've asked Adam to create it

<Modal />
</InstUISettingsProvider>
```
Expand Down
69 changes: 38 additions & 31 deletions packages/ui-modal/src/Modal/v2/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,14 @@ class Modal extends Component<ModalProps, ModalState> {
componentDidUpdate(prevProps: ModalProps) {
if (this.props.open !== prevProps.open) {
this.setState({ transitioning: true, open: !!this.props.open })
// When closing, release focus from the Dialog.
// The Dialog stays open so its content can fade out, but the
// Transition marks the exiting subtree aria-hidden -- keeping focus inside
// it would hide a focused element from assistive tech resulting in a
// console warning
if (prevProps.open && !this.props.open) {
this._content?.blur()
}
}
this.props.makeStyles?.()
}
Expand Down Expand Up @@ -205,8 +213,7 @@ class Modal extends Component<ModalProps, ModalState> {
| keyof ModalPropsForTransition
| 'constrain'
| 'overflow'
>,
open?: boolean
>
) {
const {
onDismiss,
Expand All @@ -225,7 +232,7 @@ class Modal extends Component<ModalProps, ModalState> {
<Dialog
{...passthroughProps(props)}
as={as}
open={open && !this.state.transitioning}
open
label={label}
defaultFocusElement={this.defaultFocusElement}
shouldCloseOnDocumentClick={shouldCloseOnDocumentClick}
Expand Down Expand Up @@ -284,41 +291,41 @@ class Modal extends Component<ModalProps, ModalState> {
onOpen={this.handlePortalOpen}
data-cid="Modal"
>
<Transition
in={open}
transitionOnMount
type={transition}
onEnter={onEnter}
onEntering={onEntering}
onEntered={createChainedFunction(
this.handleTransitionComplete,
onEntered,
onOpen
)}
onExit={onExit}
onExiting={onExiting}
onExited={createChainedFunction(
this.handleTransitionComplete,
onExited,
onClose
)}
<ModalContext.Provider
value={{
bodyScrollAriaLabel: this.state.bodyScrollAriaLabel,
setBodyScrollAriaLabel: (txt: string) =>
this.setState({ bodyScrollAriaLabel: txt })
}}
>
<ModalContext.Provider
value={{
bodyScrollAriaLabel: this.state.bodyScrollAriaLabel,
setBodyScrollAriaLabel: (txt: string) =>
this.setState({ bodyScrollAriaLabel: txt })
}}
<Transition
in={open}
transitionOnMount
type={transition}
onEnter={onEnter}
onEntering={onEntering}
onEntered={createChainedFunction(
this.handleTransitionComplete,
onEntered,
onOpen
)}
onExit={onExit}
onExiting={onExiting}
onExited={createChainedFunction(
this.handleTransitionComplete,
onExited,
onClose
)}
>
{constrain === 'parent' ? (
<span css={this.props.styles?.constrainContext}>
{this.renderDialog(passthroughProps, open)}
{this.renderDialog(passthroughProps)}
</span>
) : (
this.renderDialog(passthroughProps, open)
this.renderDialog(passthroughProps)
)}
</ModalContext.Provider>
</Transition>
</Transition>
</ModalContext.Provider>
</Portal>
)
}
Expand Down
Loading