diff --git a/app/javascript/flavours/glitch/features/firehose/index.jsx b/app/javascript/flavours/glitch/features/firehose/index.jsx
index 6510ee7a7b..ae71ba1764 100644
--- a/app/javascript/flavours/glitch/features/firehose/index.jsx
+++ b/app/javascript/flavours/glitch/features/firehose/index.jsx
@@ -11,6 +11,7 @@ import { changeSetting } from 'flavours/glitch/actions/settings';
import { connectPublicStream, connectCommunityStream } from 'flavours/glitch/actions/streaming';
import { expandPublicTimeline, expandCommunityTimeline } from 'flavours/glitch/actions/timelines';
import DismissableBanner from 'flavours/glitch/components/dismissable_banner';
+import SettingText from 'flavours/glitch/components/setting_text';
import initialState, { domain } from 'flavours/glitch/initial_state';
import { useAppDispatch, useAppSelector } from 'flavours/glitch/store';
@@ -21,6 +22,7 @@ import StatusListContainer from '../ui/containers/status_list_container';
const messages = defineMessages({
title: { id: 'column.firehose', defaultMessage: 'Live feeds' },
+ filter_regex: { id: 'home.column_settings.filter_regex', defaultMessage: 'Filter out by regular expressions' },
});
// TODO: use a proper React context later on
@@ -33,6 +35,7 @@ const useIdentity = () => ({
});
const ColumnSettings = () => {
+ const intl = useIntl();
const dispatch = useAppDispatch();
const settings = useAppSelector((state) => state.getIn(['settings', 'firehose']));
const onChange = useCallback(
@@ -55,6 +58,13 @@ const ColumnSettings = () => {
onChange={onChange}
label={}
/>
+
+
);
@@ -70,22 +80,23 @@ const Firehose = ({ feedType, multiColumn }) => {
const hasUnread = useAppSelector((state) => state.getIn(['timelines', `${feedType}${onlyMedia ? ':media' : ''}`, 'unread'], 0) > 0);
const allowLocalOnly = useAppSelector((state) => state.getIn(['settings', 'firehose', 'allowLocalOnly']));
+ const regex = useAppSelector((state) => state.getIn(['settings', 'firehose', 'regex', 'body']));
const handlePin = useCallback(
() => {
switch(feedType) {
case 'community':
- dispatch(addColumn('COMMUNITY', { other: { onlyMedia } }));
+ dispatch(addColumn('COMMUNITY', { other: { onlyMedia }, regex: { body: regex } }));
break;
case 'public':
- dispatch(addColumn('PUBLIC', { other: { onlyMedia, allowLocalOnly } }));
+ dispatch(addColumn('PUBLIC', { other: { onlyMedia, allowLocalOnly }, regex: { body: regex } }));
break;
case 'public:remote':
- dispatch(addColumn('REMOTE', { other: { onlyMedia, onlyRemote: true } }));
+ dispatch(addColumn('REMOTE', { other: { onlyMedia, onlyRemote: true }, regex: { body: regex } }));
break;
}
},
- [dispatch, onlyMedia, feedType, allowLocalOnly],
+ [dispatch, onlyMedia, feedType, allowLocalOnly, regex],
);
const handleLoadMore = useCallback(
@@ -199,6 +210,7 @@ const Firehose = ({ feedType, multiColumn }) => {
scrollKey='firehose'
emptyMessage={emptyMessage}
bindToDocument={!multiColumn}
+ regex={regex}
/>
diff --git a/app/javascript/flavours/glitch/reducers/settings.js b/app/javascript/flavours/glitch/reducers/settings.js
index fcf72a0b15..19a6e43e34 100644
--- a/app/javascript/flavours/glitch/reducers/settings.js
+++ b/app/javascript/flavours/glitch/reducers/settings.js
@@ -87,6 +87,10 @@ const initialState = ImmutableMap({
firehose: ImmutableMap({
onlyMedia: false,
allowLocalOnly: true,
+
+ regex: ImmutableMap({
+ body: '',
+ }),
}),
community: ImmutableMap({