allow apps to set their own default followed tags
This commit is contained in:
parent
82a5f242d0
commit
ae2f720d1d
4 changed files with 54 additions and 105 deletions
21
dist/bundle.es.js
vendored
21
dist/bundle.es.js
vendored
|
@ -3732,24 +3732,9 @@ function contentReducer(state = defaultState$6, action) {
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
const defaultFollowedTags = ['gaming', 'blockchain', 'news', 'learning', 'funny', 'technology', 'automotive', 'economics', 'sports', 'food', 'science', 'art', 'nature', 'beliefs', 'music', 'pop culture', 'weapons'];
|
|
||||||
|
|
||||||
const defaultRecommendedTags = [];
|
|
||||||
|
|
||||||
var _extends$b = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
|
var _extends$b = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
|
||||||
|
|
||||||
function getDefaultRecommendedTags() {
|
const tagsReducerBuilder = defaultState => handleActions({
|
||||||
return defaultFollowedTags.concat(defaultRecommendedTags).reduce((tagsMap, tag) => _extends$b({}, tagsMap, {
|
|
||||||
[tag]: { name: tag }
|
|
||||||
}), {});
|
|
||||||
}
|
|
||||||
|
|
||||||
const defaultState$7 = {
|
|
||||||
followedTags: defaultFollowedTags,
|
|
||||||
knownTags: getDefaultRecommendedTags()
|
|
||||||
};
|
|
||||||
|
|
||||||
const tagsReducer = handleActions({
|
|
||||||
[TOGGLE_TAG_FOLLOW]: (state, action) => {
|
[TOGGLE_TAG_FOLLOW]: (state, action) => {
|
||||||
const { followedTags } = state;
|
const { followedTags } = state;
|
||||||
const { name } = action.data;
|
const { name } = action.data;
|
||||||
|
@ -3792,7 +3777,7 @@ const tagsReducer = handleActions({
|
||||||
followedTags: newFollowedTags
|
followedTags: newFollowedTags
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}, defaultState$7);
|
}, defaultState);
|
||||||
|
|
||||||
const selectState$5 = state => state.content || {};
|
const selectState$5 = state => state.content || {};
|
||||||
|
|
||||||
|
@ -4041,6 +4026,6 @@ exports.selectWalletUnlockPending = selectWalletUnlockPending;
|
||||||
exports.selectWalletUnlockResult = selectWalletUnlockResult;
|
exports.selectWalletUnlockResult = selectWalletUnlockResult;
|
||||||
exports.selectWalletUnlockSucceeded = selectWalletUnlockSucceeded;
|
exports.selectWalletUnlockSucceeded = selectWalletUnlockSucceeded;
|
||||||
exports.setSearchApi = setSearchApi;
|
exports.setSearchApi = setSearchApi;
|
||||||
exports.tagsReducer = tagsReducer;
|
exports.tagsReducerBuilder = tagsReducerBuilder;
|
||||||
exports.toQueryString = toQueryString;
|
exports.toQueryString = toQueryString;
|
||||||
exports.walletReducer = walletReducer;
|
exports.walletReducer = walletReducer;
|
||||||
|
|
|
@ -1,21 +0,0 @@
|
||||||
export const defaultFollowedTags = [
|
|
||||||
'gaming',
|
|
||||||
'blockchain',
|
|
||||||
'news',
|
|
||||||
'learning',
|
|
||||||
'funny',
|
|
||||||
'technology',
|
|
||||||
'automotive',
|
|
||||||
'economics',
|
|
||||||
'sports',
|
|
||||||
'food',
|
|
||||||
'science',
|
|
||||||
'art',
|
|
||||||
'nature',
|
|
||||||
'beliefs',
|
|
||||||
'music',
|
|
||||||
'pop culture',
|
|
||||||
'weapons',
|
|
||||||
];
|
|
||||||
|
|
||||||
export const defaultRecommendedTags = [];
|
|
|
@ -104,7 +104,7 @@ export { notificationsReducer } from 'redux/reducers/notifications';
|
||||||
export { searchReducer } from 'redux/reducers/search';
|
export { searchReducer } from 'redux/reducers/search';
|
||||||
export { walletReducer } from 'redux/reducers/wallet';
|
export { walletReducer } from 'redux/reducers/wallet';
|
||||||
export { contentReducer } from 'redux/reducers/content';
|
export { contentReducer } from 'redux/reducers/content';
|
||||||
export { tagsReducer } from 'redux/reducers/tags';
|
export { tagsReducerBuilder } from 'redux/reducers/tags';
|
||||||
|
|
||||||
// selectors
|
// selectors
|
||||||
export { makeSelectContentPositionForUri } from 'redux/selectors/content';
|
export { makeSelectContentPositionForUri } from 'redux/selectors/content';
|
||||||
|
|
|
@ -1,70 +1,55 @@
|
||||||
// @flow
|
// @flow
|
||||||
import * as ACTIONS from 'constants/action_types';
|
import * as ACTIONS from 'constants/action_types';
|
||||||
import { handleActions } from 'util/redux-utils';
|
import { handleActions } from 'util/redux-utils';
|
||||||
import { defaultRecommendedTags, defaultFollowedTags } from 'constants/tags';
|
|
||||||
|
|
||||||
function getDefaultRecommendedTags() {
|
export const tagsReducerBuilder = (defaultState: TagState) =>
|
||||||
return defaultFollowedTags.concat(defaultRecommendedTags).reduce(
|
handleActions(
|
||||||
(tagsMap, tag) => ({
|
{
|
||||||
...tagsMap,
|
[ACTIONS.TOGGLE_TAG_FOLLOW]: (state: TagState, action: TagAction): TagState => {
|
||||||
[tag]: { name: tag },
|
const { followedTags } = state;
|
||||||
}),
|
const { name } = action.data;
|
||||||
{}
|
|
||||||
|
let newFollowedTags = followedTags.slice();
|
||||||
|
|
||||||
|
if (newFollowedTags.includes(name)) {
|
||||||
|
newFollowedTags = newFollowedTags.filter(tag => tag !== name);
|
||||||
|
} else {
|
||||||
|
newFollowedTags.push(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
...state,
|
||||||
|
followedTags: newFollowedTags,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
[ACTIONS.TAG_ADD]: (state: TagState, action: TagAction) => {
|
||||||
|
const { knownTags } = state;
|
||||||
|
const { name } = action.data;
|
||||||
|
|
||||||
|
let newKnownTags = { ...knownTags };
|
||||||
|
newKnownTags[name] = { name };
|
||||||
|
|
||||||
|
return {
|
||||||
|
...state,
|
||||||
|
knownTags: newKnownTags,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
[ACTIONS.TAG_DELETE]: (state: TagState, action: TagAction) => {
|
||||||
|
const { knownTags, followedTags } = state;
|
||||||
|
const { name } = action.data;
|
||||||
|
|
||||||
|
let newKnownTags = { ...knownTags };
|
||||||
|
delete newKnownTags[name];
|
||||||
|
const newFollowedTags = followedTags.filter(tag => tag !== name);
|
||||||
|
|
||||||
|
return {
|
||||||
|
...state,
|
||||||
|
knownTags: newKnownTags,
|
||||||
|
followedTags: newFollowedTags,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
defaultState
|
||||||
);
|
);
|
||||||
}
|
|
||||||
|
|
||||||
const defaultState: TagState = {
|
|
||||||
followedTags: defaultFollowedTags,
|
|
||||||
knownTags: getDefaultRecommendedTags(),
|
|
||||||
};
|
|
||||||
|
|
||||||
export const tagsReducer = handleActions(
|
|
||||||
{
|
|
||||||
[ACTIONS.TOGGLE_TAG_FOLLOW]: (state: TagState, action: TagAction): TagState => {
|
|
||||||
const { followedTags } = state;
|
|
||||||
const { name } = action.data;
|
|
||||||
|
|
||||||
let newFollowedTags = followedTags.slice();
|
|
||||||
|
|
||||||
if (newFollowedTags.includes(name)) {
|
|
||||||
newFollowedTags = newFollowedTags.filter(tag => tag !== name);
|
|
||||||
} else {
|
|
||||||
newFollowedTags.push(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
...state,
|
|
||||||
followedTags: newFollowedTags,
|
|
||||||
};
|
|
||||||
},
|
|
||||||
|
|
||||||
[ACTIONS.TAG_ADD]: (state: TagState, action: TagAction) => {
|
|
||||||
const { knownTags } = state;
|
|
||||||
const { name } = action.data;
|
|
||||||
|
|
||||||
let newKnownTags = { ...knownTags };
|
|
||||||
newKnownTags[name] = { name };
|
|
||||||
|
|
||||||
return {
|
|
||||||
...state,
|
|
||||||
knownTags: newKnownTags,
|
|
||||||
};
|
|
||||||
},
|
|
||||||
|
|
||||||
[ACTIONS.TAG_DELETE]: (state: TagState, action: TagAction) => {
|
|
||||||
const { knownTags, followedTags } = state;
|
|
||||||
const { name } = action.data;
|
|
||||||
|
|
||||||
let newKnownTags = { ...knownTags };
|
|
||||||
delete newKnownTags[name];
|
|
||||||
const newFollowedTags = followedTags.filter(tag => tag !== name);
|
|
||||||
|
|
||||||
return {
|
|
||||||
...state,
|
|
||||||
knownTags: newKnownTags,
|
|
||||||
followedTags: newFollowedTags,
|
|
||||||
};
|
|
||||||
},
|
|
||||||
},
|
|
||||||
defaultState
|
|
||||||
);
|
|
||||||
|
|
Loading…
Reference in a new issue