Files
talk/plugins/talk-plugin-remember-sort/client/index.js
T
2018-02-01 13:28:28 +01:00

43 lines
1.4 KiB
JavaScript

import { setSort } from 'plugin-api/beta/client/actions/stream';
import {
sortOrderSelector,
sortBySelector,
} from 'plugin-api/beta/client/selectors/stream';
const STORAGE_PATH = 'talkPluginRememberSort';
export default {
init: async ({ store, pymLocalStorage, introspection }) => {
// TODO: workaround as this plugin is included in any target and
// embeds (e.g. admin), but should only be included inside the stream.
// Detect if we are currently running inside the stream.
if (!store.getState().stream) {
return;
}
// We use pymLocalStorage instead to persist the data directly on the parent page,
// in order to mitigate strict cross domain security settings.
let sort = JSON.parse(await pymLocalStorage.getItem(STORAGE_PATH));
if (
sort &&
introspection.isValidEnumValue('SORT_ORDER', sort.sortOrder) &&
introspection.isValidEnumValue('SORT_COMMENTS_BY', sort.sortBy)
) {
store.dispatch(setSort(sort));
}
store.subscribe(() => {
const state = store.getState();
const sortOrder = sortOrderSelector(state);
const sortBy = sortBySelector(state);
// Save sorting choice to storage if it has changed.
if (!sort || sort.sortOrder !== sortOrder || sort.sortBy !== sortBy) {
sort = { sortOrder, sortBy };
pymLocalStorage.setItem(STORAGE_PATH, JSON.stringify(sort));
}
});
},
};