feat: add isInstantRendered check to safeguard against double renders and double removes
This commit is contained in:
@@ -27,6 +27,10 @@
|
||||
<body>
|
||||
<div id="zeroExInstantContainer"></div>
|
||||
<script>
|
||||
// Simulate history
|
||||
window.history.pushState({ page: 1 }, '0x Instant');
|
||||
window.history.pushState({ page: 2 }, '0x Instant');
|
||||
window.history.pushState({ page: 3 }, '0x Instant');
|
||||
const removeUndefined = (obj) => {
|
||||
for (let k in obj) if (obj[k] === undefined) delete obj[k];
|
||||
return obj;
|
||||
|
||||
@@ -68,7 +68,9 @@ export const render = (config: ZeroExInstantConfig, selector: string = DEFAULT_Z
|
||||
return closeInstant;
|
||||
};
|
||||
if (config.shouldDisablePushToHistory) {
|
||||
renderInstant();
|
||||
if (!isInstantRendered()) {
|
||||
renderInstant();
|
||||
}
|
||||
} else {
|
||||
// Before we render, push to history saying that instant is showing for this part of the history.
|
||||
window.history.pushState({ zeroExInstantShowing: true }, '0x Instant');
|
||||
@@ -83,12 +85,18 @@ export const render = (config: ZeroExInstantConfig, selector: string = DEFAULT_Z
|
||||
prevOnPopState(e);
|
||||
// e.state represents the new state
|
||||
if (e.state && e.state.zeroExInstantShowing) {
|
||||
// The user pressed fowards, so re-render instant.
|
||||
removeInstant = renderInstant();
|
||||
// We have returned to a history state that expects instant to be rendered.
|
||||
if (!isInstantRendered()) {
|
||||
removeInstant = renderInstant();
|
||||
}
|
||||
} else {
|
||||
// User pressed back, so close instant.
|
||||
removeInstant();
|
||||
// History has changed to a different state.
|
||||
if (isInstantRendered()) {
|
||||
removeInstant();
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
const isInstantRendered = (): boolean => !!document.getElementById(INJECTED_DIV_ID);
|
||||
|
||||
Reference in New Issue
Block a user