Source: widget/learning/Data.js

(function() {
    /**
     * @typedef {Object} Help4.widget.learning.Data.Params
     * @property {Help4.widget.learning.Widget} widget - the owner widget
     * @property {Help4.widget.learning.Backend} backend - the corresponding backend connector
     */

    /**
     * Data handler for learning widget.
     * @augments Help4.jscore.DataBase
     * @property {boolean} showLearningCenter - whether the learning center shall be shown
     * @property {string} learningCenterUrl - URL to external learning center
     * @property {string} learningAppCommunityUrl - URL to learning community
     * @property {Help4.jscore.DataContainer} assets - container of learning assets
     * @property {Help4.widget.learning.Widget} __widget
     * @property {*} __backend - see {@link Help4.widget.learning.Backend}
     */
    Help4.widget.learning.Data = class extends Help4.jscore.DataBase {
        /**
         * @override
         * @param {Help4.widget.learning.Data.Params} params
         */
        constructor(params) {
            /** @returns {Help4.typedef.SystemConfiguration} */
            const getConfig = () => this.__widget.getContext().configuration;

            /** @returns {Help4.typedef.LearningConfiguration} */
            const getLearningConfig = () => getConfig().learning;

            /** @type {Help4.jscore.ControlBase.Types} */
            const T = Help4.jscore.DataBase.TYPES;

            super(params, {
                params: {
                    widget:  {type: T.instance, mandatory: true, private: true, readonly: true},
                    backend: {type: T.instance, mandatory: true, private: true, readonly: true}
                },
                data: {
                    showLearningCenter:      {type: T.boolean, retrieve: {onInitialize: true}},
                    learningCenterUrl:       {type: T.string_null, retrieve: {onInitialize: true}},
                    learningAppCommunityUrl: {type: T.string_null, retrieve: {onInitialize: true}},
                    assets:                  {type: T.dataContainer, retrieve: {onInitialize: true, onUpdate: true}}
                },
                retrieve: {
                    /** @returns {boolean} */
                    showLearningCenter: () => getLearningConfig().showLearningCenter,
                    /** @returns {string|null} */
                    learningCenterUrl: () => getLearningConfig().learningCenterUrl,
                    /** @returns {string|null} */
                    learningAppCommunityUrl: () => getLearningConfig().learningAppCommunityUrl,
                    /** @returns {Promise<Array<Help4.widget.learning.Asset>>} */
                    assets: () => this.__backend.getAssets(getConfig())
                }
            });
        }
    }
})();