JavaScript Extension Development API for Oracle Visual Builder Cloud Service - Classic Applications

Source: components.dt/js/spi/registration/DeleterProvider.js

define([], function () {

    'use strict';

    /**
     * Provider interface for returning instances of components' view {@link components.dt/js/spi/deleters/Deleter deleters}.
     * Registers into ABCS with the {@link components.dt/js/api/ComponentProviderRegistry Component Registration API}.
     *
     * <p>Deleter is called when a {@link pages.dt/js/api/View view} (or whole component)
     * is to be removed from a page. ABCS gives you a chance to clean up any artifacts created by the
     * view's {@link components.dt/js/spi/creators/Creator creator} or {@link components.dt/js/spi/propertyinspectors/PropertyInspector property inspector}.</p>
     *
     * <p>If your component created any artifacts that need to be cleaned up implement
     * this interface and return an instance of {@link components.dt/js/spi/deleters/Deleter Deleter}
     * in {@link components.dt/js/spi/registration/DeleterProvider#getDeleter DeleterProvider.getDeleter}.</p>
     *
     * <p>When deleting a view ABCS iterates over registered providers and calls
     * the first deleter returned from {@link components.dt/js/spi/registration/DeleterProvider#getDeleter DeleterProvider.getDeleter}.<br>
     * That means your provider may be asked to return a deleter for an unrelated
     * view in which case you are to return <code>undefined</code> and ABCS will
     * continue searching for the proper view deleter.</p>
     *
     * @AbcsExtension stable
     * @exports components.dt/js/spi/registration/DeleterProvider
     * @constructor
     * @private
     * @version 16.3.5
     * @example <caption>An example of a view deleter provider.</caption>
     * define([
     *    'myComponent/MyDeleter'
     * ], function (
     *    Deleter
     *    ) {
     *
     *    'use strict';
     *
     *    var DeleterProvider = function () {
     *    };
     *
     *    DeleterProvider.prototype.getDeleter = function (view) {
     *        if (view.getType() === 'my-view-type' || view.getType() === 'my-other-view-type') {
     *            // return a deleter instance understanding and capable of
     *            // cleaning artefacts of views of type 'my-view-type' and 'my-other-view-type'
     *            return new Deleter();
     *        }
     *    };
     *
     *    return new DeleterProvider();
     *
     * });
     * @see {@link components.dt/js/api/ComponentProviderRegistry Component Registration API}
     * @see {@link components.dt/js/spi/deleters/Deleter Deleter SPI}
     * @see {@link components.dt/js/spi/deleters/Deleter Deleter implementation example}
     */
    var DeleterProvider = function() {
        AbcsLib.checkThis(this);
    };

    /**
     * Get the component's view deleter that is responsible for full removal
     * of the view and parts of the model that need some cleanup.
     *
     * @AbcsExtension stable
     * @version 16.3.5
     * @param {pages.dt/js/api/View} view view to be deleted.
     * @returns {components.dt/js/spi/deleters/Deleter|undefined} deleter instance
     * for the given <code>view</code> or <code>undefined</code> if the component
     * does not provide a deleter for the <code>view</code>.
     */
    DeleterProvider.prototype.getDeleter = function (/*view*/) {};

    return DeleterProvider;

});