Remember sort plugin

This commit is contained in:
Chi Vinh Le
2017-09-08 17:50:22 +07:00
parent e5bd8e2a3b
commit c8d1da5715
6 changed files with 74 additions and 0 deletions
+1
View File
@@ -22,5 +22,6 @@ plugins/*
!plugins/talk-plugin-author-menu
!plugins/talk-plugin-member-since
!plugins/talk-plugin-ignore-user
!plugins/talk-plugin-remember-sort
node_modules
+1
View File
@@ -38,5 +38,6 @@ plugins/*
!plugins/talk-plugin-author-menu
!plugins/talk-plugin-member-since
!plugins/talk-plugin-ignore-user
!plugins/talk-plugin-remember-sort
**/node_modules/*
@@ -0,0 +1,14 @@
{
"presets": [
"es2015"
],
"plugins": [
"add-module-exports",
"transform-class-properties",
"transform-decorators-legacy",
"transform-object-assign",
"transform-object-rest-spread",
"transform-async-to-generator",
"transform-react-jsx"
]
}
@@ -0,0 +1,23 @@
{
"env": {
"browser": true,
"es6": true,
"mocha": true
},
"parserOptions": {
"sourceType": "module",
"ecmaFeatures": {
"experimentalObjectRestSpread": true,
"jsx": true
}
},
"parser": "babel-eslint",
"plugins": [
"react"
],
"rules": {
"react/jsx-uses-react": "error",
"react/jsx-uses-vars": "error",
"no-console": ["warn", { "allow": ["warn", "error"] }]
}
}
@@ -0,0 +1,34 @@
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: ({store, storage, 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;
}
const sort = JSON.parse(storage.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);
if (!sort || sort.sortOrder !== sortOrder || sort.sortBy !== sortBy) {
storage.setItem(STORAGE_PATH, JSON.stringify({sortOrder, sortBy}));
}
});
}
};
@@ -0,0 +1 @@
module.exports = {};