MDL-78324 core: Simplify modal configuration
commit9073225c985e0277ba3ca21fd5f1725cda313f81
authorAndrew Nicols <andrew@nicols.co.uk>
Mon, 22 May 2023 01:11:05 +0000 (22 09:11 +0800)
committerAndrew Nicols <andrew@nicols.co.uk>
Fri, 8 Sep 2023 15:49:12 +0000 (8 23:49 +0800)
treed86592c1848a7a9fe45a820ead778a56edf5f7ac
parentb4c6ed36503c0d1e69efdb9b18e6846234706da7
MDL-78324 core: Simplify modal configuration

This change moves configuration of the modal from the ModalFactory to
a new `configure` function on the Modal class which does exactly the
same thing. This means that the API is fully encapsulated within the
Modal, and an individual Modal can specify its own configuration more
easily.

This change will make it much easier to instantiate new modals,
significantly reducing boilerplate in many instances.

This change allows modals to extend the `configure()` method to provide
their own defaults, or to override standard ones.

```js
class MyModal extends Modal {
    static TYPE = 'my_module/mymodal';
    static TEMPLATE = 'my_module/mymodal';

    configure(params = {}) {
        // Override the default value for large.
        params.large = true;

        super.configure(params);

        // Handle our own properties here.
        const {
          makeSound = true,
        } = params;

        this.setSoundEmitter(makeSound);
    }
```

Prior to this change, it was common to see this happen in the _calling_
code, rather than the modal itself.
lib/amd/build/modal.min.js
lib/amd/build/modal.min.js.map
lib/amd/build/modal_factory.min.js
lib/amd/build/modal_factory.min.js.map
lib/amd/src/modal.js
lib/amd/src/modal_factory.js