bsgriggs / mendix-unsaved-changes-message

Mendix widget to block the user from closing the browser, closing the tab, or clicking a Mendix navigation when they have unsaved changes
MIT License
1 stars 1 forks source link

Mendix Unsaved Changes Message

Mendix widget to block the user from closing the browser, closing the tab, or clicking a Mendix navigation when they have unsaved changes.

Note: the browser based message when the user tries to close the tab or close the browser CANNOT be customized. This was deprecated by most modern browsers.

Mendix Nav Browser Close
mendix nav browser close

Features

Limitations

Usage

config

  1. Create a non-persistent helper object with a hasChanges boolean
    entity
  2. Add a data view that returns the helper to your form that wraps your input data view
  3. Add the Unsaved Changes Message widget inside your form's data view and set the Block Exit expression page
  4. On each input widget, add an on-change action that sets hasChanges to true
    onchange

Observe Mode - Browser

Only prevents Browser close and tab close

  1. All set! Run the project, make some changes and attempt to close the browser tab
    • Debug mode will show you in the UI when the widget's Block Exit flag is enabled/disabled. It will also log useful information to the browser console.
  2. TURN OFF DEBUG MODE!

Observe Mode - Mendix & Both

  1. Set/Copy the Watching Class Name to all containers & buttons that you want to block (i.e. cancel button, layout's navigation list, etc)
Navigation in layout Cancel button
navigation cancel

Note: the Navigation Menu class should be the class on the navigation menu itself while the Sidebar class should be the class on the highest level of that layout section. These are used to find the navigation menu and the sidebar in the DOM and adds a watcher for when the menu is opened and closed. If you do not have a collapsable menu, you do not need Navigation Menu or Sidebar Class.

sidebar
Sidebar Class

  1. Set the On Process action as either a Microflow or a Nanoflow that performs a rollback on your form object. If you're using a non-persistent form object, then you might need to delete the objects. OnProceed
  2. All set! Run the project, make some changes.
    • With debug mode on, you will see any content found using your configured Watching Class Name has a red box on top of it. It will also log useful information to the browser console.
  3. TURN OFF DEBUG MODE!

Demo project

https://widgettesting105-sandbox.mxapps.io/p/unsaved-changes-message

Issues, suggestions and feature requests

https://github.com/bsgriggs/mendix-onBeforeUnload

Development and contribution

Benjamin Griggs @2023