Skip to content

Commit 7170bff

Browse files
committed
fix: warn when leaving page with selections
1 parent 1388477 commit 7170bff

File tree

4 files changed

+27
-39
lines changed

4 files changed

+27
-39
lines changed

src/components/BrowserRow/BrowserRow.react.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ export default class BrowserRow extends Component {
9292
>
9393
<input
9494
type="checkbox"
95-
checked={selection['*'] || selection[obj.id]}
95+
checked={!!selection['*'] || !!selection[obj.id]}
9696
onChange={e => selectRow(obj.id, e.target.checked)}
9797
onMouseDown={e => onMouseDownRowCheckBox(e.target.checked)}
9898
/>

src/dashboard/Dashboard.js

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,13 @@ import { AsyncStatus } from 'lib/Constants';
4848
import baseStyles from 'stylesheets/base.scss';
4949
import { get } from 'lib/AJAX';
5050
import { setBasePath } from 'lib/AJAX';
51-
import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom';
51+
import {
52+
unstable_HistoryRouter as HistoryRouter,
53+
Routes,
54+
Route,
55+
Navigate,
56+
} from 'react-router-dom';
57+
import history from 'lib/history';
5258
import { Helmet } from 'react-helmet';
5359
import Playground from './Data/Playground/Playground.react';
5460
import DashboardSettings from './Settings/DashboardSettings/DashboardSettings.react';
@@ -306,7 +312,7 @@ export default class Dashboard extends React.Component {
306312
);
307313

308314
return (
309-
<BrowserRouter basename={window.PARSE_DASHBOARD_PATH || '/'}>
315+
<HistoryRouter history={history} basename={window.PARSE_DASHBOARD_PATH || '/'}>
310316
<Helmet>
311317
<title>Parse Dashboard</title>
312318
</Helmet>
@@ -317,7 +323,7 @@ export default class Dashboard extends React.Component {
317323
<Route index element={<Navigate replace to="/apps" />} />
318324
<Route path="*" element={<FourOhFour />} />
319325
</Routes>
320-
</BrowserRouter>
326+
</HistoryRouter>
321327
);
322328
}
323329
}

src/dashboard/Data/Browser/Browser.react.js

Lines changed: 12 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -38,58 +38,35 @@ import subscribeTo from 'lib/subscribeTo';
3838
import * as ColumnPreferences from 'lib/ColumnPreferences';
3939
import * as ClassPreferences from 'lib/ClassPreferences';
4040
import { Helmet } from 'react-helmet';
41-
import {
42-
UNSAFE_NavigationContext,
43-
useBeforeUnload,
44-
} from 'react-router-dom';
41+
import { useBeforeUnload } from 'react-router-dom';
42+
import history from 'lib/history';
4543
import generatePath from 'lib/generatePath';
4644
import { withRouter } from 'lib/withRouter';
4745
import { get } from 'lib/AJAX';
4846
import BrowserFooter from './BrowserFooter.react';
4947

50-
function useBlocker(blocker, when = true) {
51-
const { navigator } = React.useContext(UNSAFE_NavigationContext);
52-
48+
function SelectedRowsNavigationPrompt({ when }) {
49+
const message = 'There are selected rows. Are you sure you want to leave this page?';
5350
React.useEffect(() => {
5451
if (!when) {
55-
return;
52+
return undefined;
5653
}
57-
58-
const unblock = navigator.block(tx => {
59-
const autoUnblockingTx = {
60-
...tx,
61-
retry() {
62-
unblock();
63-
tx.retry();
64-
}
65-
};
66-
blocker(autoUnblockingTx);
67-
});
68-
69-
return unblock;
70-
}, [navigator, blocker, when]);
71-
}
72-
73-
function usePrompt(message, when = true) {
74-
const blocker = React.useCallback(
75-
tx => {
54+
const unblock = history.block(tx => {
7655
if (window.confirm(message)) {
56+
unblock();
7757
tx.retry();
7858
}
79-
},
80-
[message]
81-
);
82-
83-
useBlocker(blocker, when);
84-
}
59+
});
60+
return unblock;
61+
}, [when]);
8562

86-
function SelectedRowsNavigationPrompt({ when }) {
87-
usePrompt('There are selected rows. Are you sure you want to leave this page?', when);
8863
useBeforeUnload(
8964
React.useCallback(
9065
event => {
9166
if (when) {
9267
event.preventDefault();
68+
event.returnValue = message;
69+
return message;
9370
}
9471
},
9572
[when]

src/lib/history.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { createBrowserHistory } from 'history';
2+
3+
const history = createBrowserHistory();
4+
5+
export default history;

0 commit comments

Comments
 (0)