This repository has been archived on 2023-03-18. You can view files and clone it, but cannot push or open issues or pull requests.
osr-discourse-src/app/assets/javascripts/discourse/app/lib/preload-store.js
Robin Ward 01929e3505 DEV: Move preload-store to discourse/lib/preload-store
It's only used inside Discourse so it needn't be its own module
2020-05-06 15:28:06 -04:00

55 lines
1.2 KiB
JavaScript

// We can insert data into the PreloadStore when the document is loaded.
// The data can be accessed once by a key, after which it is removed
import { Promise } from "rsvp";
export default {
data: {},
store(key, value) {
this.data[key] = value;
},
/**
To retrieve a key, you provide the key you want, plus a finder to load
it if the key cannot be found. Once the key is used once, it is removed
from the store.
So, for example, you can't load a preloaded topic more than once.
**/
getAndRemove(key, finder) {
if (this.data[key]) {
let promise = Promise.resolve(this.data[key]);
delete this.data[key];
return promise;
}
if (finder) {
return new Promise(function(resolve, reject) {
let result = finder();
// If the finder returns a promise, we support that too
if (result && result.then) {
result
.then(toResolve => resolve(toResolve))
.catch(toReject => reject(toReject));
} else {
resolve(result);
}
});
}
return Promise.resolve(null);
},
get(key) {
return this.data[key];
},
remove(key) {
if (this.data[key]) delete this.data[key];
},
reset() {
this.data = {};
}
};