[FEAT] Close all panes on hardware back button event
Closed this issue · 2 comments
What are you trying to add to Cupertino-Pane?
Ability to close any and all existing panes.
Describe your feature request detailed
Throughout my Ionic App i use Cupertino Panes (they're great) and i track my hardware back button (see below)... it goes back in the navigation stack and shows a toast "press back again to exist app" once it has reached the last page. This is working well.
I want to add something, so that when a pane is opened... it is closed first when somebody presses the back button.. and then the normal behaviour continues.
This function (see below) is in a service file, and doesn't have access to the components in which the panes are presented.
public hardwareBackButtonEvent(): void {
this.platform.backButton.subscribeWithPriority(10, () => {
let currentTime = new Date().getTime();
if (!this.canGoBack() && this.lastBackTime && this.lastBackTime > 0 && (currentTime - this.lastBackTime < this.intervalExitApp)) {
(window.navigator as any)["app"].exitApp();
return;
}
// if there is no previous page, show toast to exit app
if (!this.canGoBack()) {
this._createToastExitApp();
} else {
this.back();
}
});
} // End of backButtonEvent()
I'm not sure how best to approach it, perhaps with events. that when i create a pane, it sends a signal to the navigation service? i'm not sure.
Is there an alternative at the latest version?
[ ] Yes (descripe the alternative)
[X] No
Is this related to an issue?
[ ] Yes (Give a link to the issue)
[X] No
@woutersteven2020 Thank you, I'm understand the issue.
Good a feature request, it's would be nice access to Pane instances from window
object, from any code part, like window['pane']: [CupertinoPane, CupertinoPane, CupertinoPane, ...]
.
I will review this feature for the future.
For now, I suggest you to place your pane to some Singleton service where you collect global app variables:
import { SharedService } from '../services/shared/shared/shared.service.ts';
constructor (shared: SharedService) {
// when you initiate a pane save it to shared scope
this.shared.pane = new CupertinoPane(...);
}
Than access it from your hardware button service.
Thank you for your reply. I wrote Singeton service and updated my hardwareBackButtonEvent() to check for openPanes first (and close them) before trying to navigate back through the history, it's working nicely!