JSFiddle - React, Tailwind, and code Playground

by Bjolja

JavaScript

ajax.loadViewModel = function (opts) {
    if (!opts) return null;
    var defferedLoader = $.Deferred();
    var defferedPromise = defferedLoader.promise();

    if (!ajax.currentUser().IsOfflineUser() || !opts.storeName) {
        defferedPromise = defferedPromise.then(function () {
            var resultDef = $.Deferred();
            ajax._getAjaxAsync(opts.url, opts).done(function (result) {
                resultDef.resolve(result);
            });

            return resultDef;
        });
    }

    if (opts.storeName) {
        defferedPromise = defferedPromise.then(function () {
            var resultDef = $.Deferred();
            var storageFunctionToExecute = !opts.mode || opts.mode == 'list' ? data.indexedDB.getAllItemsNew : data.indexedDB.getSingleItem;
            if (opts.mode == 'single') {
                opts.includeKeyInResponse = true;
            }
            storageFunctionToExecute.call(this, opts.storeName, opts).done(function (result) {
                var isArray = Object.prototype.toString.call(result) === '[object Array]';
                if (!isArray || (isArray && result.length > 0)) {
                    resultDef.resolve(result);
                } else if (opts.url) {
                    ajax._getAjaxAsync(opts.url, {
                        data: opts.data,
                        storeName: opts.storeName,
                        onAjaxload: opts.onAjaxload
                    }).done(function (ajaxResult) {
                        resultDef.resolve(ajaxResult);
                    });
                }
            });

            return resultDef;
        });
    }

    defferedPromise = defferedPromise.then(function (result) {
        return ajax._mapData(result, opts);
    });

    defferedLoader.resolve();
    return defferedPromise;
}