blob: 2c7bd5bcb2ca1e6cf6d0d558bc97e7189123e8d8 [file] [log] [blame]
/*
*
* Copyright 2017 RIFT.IO Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
import rw from 'utils/rw'
import schemaActions from './schemaActions'
import Utils from 'utils/utils'
import $ from 'jquery';
import StoreCache from '../SourceCache'
const storeCache = new StoreCache('schema');
storeCache.init(); // get the ball rolling
function getCachedSchema(request) {
const cachedSchema = {};
const requestSchema = [];
request.forEach((path) => {
let schema = storeCache.get(path);
if (schema) {
cachedSchema[path] = schema
} else {
requestSchema.push(path);
}
});
return {
cachedSchema,
requestSchema
};
}
const schemaSource = {
loadSchema: function () {
return {
local: function (state, request) {
request = Array.isArray(request) ? request : [request];
const results = getCachedSchema(request);
if (!results.requestSchema.length) {
return(Promise.resolve(results.cachedSchema));
}
},
remote: function (state, request) {
return new Promise(function (resolve, reject) {
storeCache.init().then(() => {
request = Array.isArray(request) ? request : [request];
const results = getCachedSchema(request);
if (!results.requestSchema.length) {
resolve({
schema: results.cachedSchema
});
} else {
$.ajax({
url: '/schema?request=' + results.requestSchema.join(','),
type: 'GET',
success: function ({
schema
}) {
for (let path in schema) {
storeCache.set(path, schema[path]);
}
resolve(getCachedSchema(request).cachedSchema);
},
error: function (error) {
console.log("There was an error getting the schema: ", error);
reject(error);
}
}).fail(function (xhr) {
console.log("There was an error getting the schema: ", xhr);
Utils.checkAuthentication(xhr.status);
reject("There was an error getting the schema.")
});
}
})
})
},
success: schemaActions.loadSchemaSuccess,
loading: schemaActions.loadSchemaLoading,
error: schemaActions.loadSchemaFail
}
},
}
export default schemaSource;