this.activeElement = null;
}).catch(console.error);
- this.handleModalClose();
+ this._handleModalClose();
}
if (this.props.children && !prevProps.children) {
- this.handleModalOpen();
+ this._handleModalOpen();
+ }
+ if (this.props.children) {
+ this._ensureHistoryBuffer();
}
}
window.removeEventListener('keydown', this.handleKeyDown);
}
- handleModalClose () {
+ _handleModalOpen () {
+ this._modalHistoryKey = Date.now();
+ this.unlistenHistory = this.history.listen((_, action) => {
+ if (action === 'POP') {
+ this.props.onClose();
+ }
+ });
+ }
+
+ _handleModalClose () {
this.unlistenHistory();
- const state = this.history.location.state;
- if (state && state.mastodonModalOpen) {
+ const { state } = this.history.location;
+ if (state && state.mastodonModalKey === this._modalHistoryKey) {
this.history.goBack();
}
}
- handleModalOpen () {
- const history = this.history;
- const state = {...history.location.state, mastodonModalOpen: true};
- history.push(history.location.pathname, state);
- this.unlistenHistory = history.listen(() => {
- this.props.onClose();
- });
+ _ensureHistoryBuffer () {
+ const { pathname, state } = this.history.location;
+ if (!state || state.mastodonModalKey !== this._modalHistoryKey) {
+ this.history.push(pathname, { ...state, mastodonModalKey: this._modalHistoryKey });
+ }
}
getSiblings = () => {
backgroundColor: null,
};
- getSnapshotBeforeUpdate () {
- return { visible: !!this.props.type };
- }
-
- componentDidUpdate (prevProps, prevState, { visible }) {
- if (visible) {
+ componentDidUpdate () {
+ if (!!this.props.type) {
document.body.classList.add('with-modals--active');
document.documentElement.style.marginRight = `${getScrollbarWidth()}px`;
} else {