@craftercms/studio-ui
Version:
Services, components, models & utils to build CrafterCMS authoring extensions.
82 lines (80 loc) • 2.43 kB
JavaScript
/*
* Copyright (C) 2007-2022 Crafter Software Corporation. All Rights Reserved.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3 as published by
* the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* Copyright (C) 2007-2022 Crafter Software Corporation. All Rights Reserved.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3 as published by
* the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
export function createFakeResource(result) {
return {
complete: true,
error: false,
read() {
return result;
}
};
}
export function createResource(factoryFn) {
let result,
promise,
resource,
status = 'pending';
promise = factoryFn().then(
(response) => {
status = 'success';
result = response;
},
(error) => {
status = 'error';
result = error;
}
);
resource = {
complete: false,
error: false,
read() {
if (status === 'pending') {
throw promise;
} else if (status === 'error') {
resource.complete = true;
resource.error = true;
throw result;
} else if (status === 'success') {
resource.complete = true;
return result;
}
}
};
return resource;
}
export function createResourceBundle() {
let resolve, reject;
let promise = new Promise((resolvePromise, rejectPromise) => {
resolve = resolvePromise;
reject = rejectPromise;
});
return [createResource(() => promise), resolve, reject];
}