Make the UI properly handle filters using `exclude_media` and `media_only` flags.

staging
multiple creatures 2019-04-28 12:46:43 -05:00
parent 8dbefa3966
commit 933d7afa87
1 changed files with 12 additions and 5 deletions

View File

@ -41,10 +41,16 @@ export const getFilters = (state, { contextType }) => state.get('filters', Immut
const escapeRegExp = string =>
string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
export const regexFromFilters = filters => {
if (filters.size === 0) {
return null;
}
export const regexFromFilters = (status, filters) => {
if (filters.size === 0) { return null; }
let has_media = status.get('media_attachments').size > 0;
filters = filters.filter(filter => {
return (!has_media && filter.get('exclude_media')) || (has_media && filter.get('media_only'))
});
if (filters.size === 0) { return null; }
return new RegExp(filters.map(filter => {
let expr = escapeRegExp(filter.get('phrase'));
@ -78,10 +84,10 @@ export const makeGetStatus = () => {
return null;
}
const regex = (accountReblog || accountBase).get('id') !== me && regexFromFilters(filters);
let filtered = false;
if (statusReblog) {
const regex = (accountReblog || accountBase).get('id') !== me && regexFromFilters(statusReblog, filters);
filtered = regex && regex.test(statusReblog.get('search_index'));
statusReblog = statusReblog.set('account', accountReblog);
statusReblog = statusReblog.set('filtered', filtered);
@ -89,6 +95,7 @@ export const makeGetStatus = () => {
statusReblog = null;
}
const regex = (accountReblog || accountBase).get('id') !== me && regexFromFilters(statusBase, filters);
filtered = filtered || regex && regex.test(statusBase.get('search_index'));
return statusBase.withMutations(map => {