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;
});