summaryrefslogtreecommitdiffstats
path: root/webapp/stores/opengraph_store.jsx
diff options
context:
space:
mode:
authorDebanshu Kundu <debanshu.kundu@joshtechnologygroup.com>2017-01-20 23:11:13 +0530
committerenahum <nahumhbl@gmail.com>2017-01-20 14:41:13 -0300
commit3aaf71fdea914af1a7f2b2fb97bb6ae44132fcc4 (patch)
treeb954407a03a6c0ed9836d8b14d910fc52c8dc1dc /webapp/stores/opengraph_store.jsx
parentfefe4b70d9e69910a8e3acd6890497553b5eff2f (diff)
downloadchat-3aaf71fdea914af1a7f2b2fb97bb6ae44132fcc4.tar.gz
chat-3aaf71fdea914af1a7f2b2fb97bb6ae44132fcc4.tar.bz2
chat-3aaf71fdea914af1a7f2b2fb97bb6ae44132fcc4.zip
#4257 Added functionality to create previews for post links using open graph data from those links. (#4890)
Diffstat (limited to 'webapp/stores/opengraph_store.jsx')
-rw-r--r--webapp/stores/opengraph_store.jsx68
1 files changed, 68 insertions, 0 deletions
diff --git a/webapp/stores/opengraph_store.jsx b/webapp/stores/opengraph_store.jsx
new file mode 100644
index 000000000..4ad156df0
--- /dev/null
+++ b/webapp/stores/opengraph_store.jsx
@@ -0,0 +1,68 @@
+import EventEmitter from 'events';
+
+import AppDispatcher from 'dispatcher/app_dispatcher.jsx';
+import Constants from 'utils/constants.jsx';
+
+const ActionTypes = Constants.ActionTypes;
+
+const CHANGE_EVENT = 'change';
+const URL_DATA_CHANGE_EVENT = 'url_data_change';
+
+class OpenGraphStoreClass extends EventEmitter {
+ constructor() {
+ super();
+ this.ogDataObject = {}; // Format: {<url>: <data-object>}
+ }
+
+ emitChange() {
+ this.emit(CHANGE_EVENT);
+ }
+
+ addChangeListener(callback) {
+ this.on(CHANGE_EVENT, callback);
+ }
+
+ removeChangeListener(callback) {
+ this.removeListener(CHANGE_EVENT, callback);
+ }
+
+ emitUrlDataChange(url) {
+ this.emit(URL_DATA_CHANGE_EVENT, url);
+ }
+
+ addUrlDataChangeListener(callback) {
+ this.on(URL_DATA_CHANGE_EVENT, callback);
+ }
+
+ removeUrlDataChangeListener(callback) {
+ this.removeListener(URL_DATA_CHANGE_EVENT, callback);
+ }
+
+ storeOgInfo(url, ogInfo) {
+ this.ogDataObject[url] = ogInfo;
+ }
+
+ getOgInfo(url) {
+ return this.ogDataObject[url];
+ }
+}
+
+var OpenGraphStore = new OpenGraphStoreClass();
+
+// Not expecting more that `Constants.POST_CHUNK_SIZE` post previews rendered at a time
+OpenGraphStore.setMaxListeners(Constants.POST_CHUNK_SIZE);
+
+OpenGraphStore.dispatchToken = AppDispatcher.register((payload) => {
+ var action = payload.action;
+
+ switch (action.type) {
+ case ActionTypes.RECIVED_OPEN_GRAPH_METADATA:
+ OpenGraphStore.storeOgInfo(action.url, action.data);
+ OpenGraphStore.emitUrlDataChange(action.url);
+ OpenGraphStore.emitChange();
+ break;
+ default:
+ }
+});
+
+export default OpenGraphStore;