@@ -47,65 +33,8 @@ export default class ProfileLayout extends ImmutablePureComponent {
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -122,6 +51,7 @@ export default class ProfileLayout extends ImmutablePureComponent {
+
diff --git a/app/javascript/gabsocial/layouts/search_layout.js b/app/javascript/gabsocial/layouts/search_layout.js
index c2f0bcad..27412ba6 100644
--- a/app/javascript/gabsocial/layouts/search_layout.js
+++ b/app/javascript/gabsocial/layouts/search_layout.js
@@ -6,17 +6,40 @@ import Sidebar from '../components/sidebar'
export default class SearchLayout extends PureComponent {
static propTypes = {
actions: PropTypes.array,
- tabs: PropTypes.array,
layout: PropTypes.object,
showBackBtn: PropTypes.bool,
}
render() {
- const { children, showBackBtn, layout, actions, tabs } = this.props
+ const { children, showBackBtn, layout, actions } = this.props
// const shouldHideFAB = path => path.match(/^\/posts\/|^\/search|^\/getting-started/);
// const floatingActionButton = shouldHideFAB(this.context.router.history.location.pathname) ? null :
;
+ const tabs = [
+ {
+ title: 'Top',
+ to: '/search'
+ },
+ {
+ title: 'People',
+ to: '/search/people'
+ },
+ {
+ title: 'Groups',
+ to: '/search/groups'
+ },
+ {
+ title: 'Gabs',
+ to: '/search/gabs'
+ },
+ {
+ title: 'Hashtags',
+ to: '/search/hashtags'
+ },
+ ]
+
+
return (
diff --git a/app/javascript/gabsocial/middleware/errors.js b/app/javascript/gabsocial/middleware/errors.js
index 3cebb42e..1751b7e5 100644
--- a/app/javascript/gabsocial/middleware/errors.js
+++ b/app/javascript/gabsocial/middleware/errors.js
@@ -1,4 +1,4 @@
-import { showAlertForError } from '../actions/alerts';
+// import { showAlertForError } from '../actions/alerts';
const defaultFailSuffix = 'FAIL';
@@ -8,7 +8,7 @@ export default function errorsMiddleware() {
const isFail = new RegExp(`${defaultFailSuffix}$`, 'g');
if (action.type.match(isFail)) {
- dispatch(showAlertForError(action.error));
+ // dispatch(showAlertForError(action.error));
}
}
diff --git a/app/javascript/gabsocial/reducers/alerts.js b/app/javascript/gabsocial/reducers/alerts.js
deleted file mode 100644
index 089d920c..00000000
--- a/app/javascript/gabsocial/reducers/alerts.js
+++ /dev/null
@@ -1,25 +0,0 @@
-import {
- ALERT_SHOW,
- ALERT_DISMISS,
- ALERT_CLEAR,
-} from '../actions/alerts';
-import { Map as ImmutableMap, List as ImmutableList } from 'immutable';
-
-const initialState = ImmutableList([]);
-
-export default function alerts(state = initialState, action) {
- switch(action.type) {
- case ALERT_SHOW:
- return state.push(ImmutableMap({
- key: state.size > 0 ? state.last().get('key') + 1 : 0,
- title: action.title,
- message: action.message,
- }));
- case ALERT_DISMISS:
- return state.filterNot(item => item.get('key') === action.alert.key);
- case ALERT_CLEAR:
- return state.clear();
- default:
- return state;
- }
-};
diff --git a/app/javascript/gabsocial/reducers/index.js b/app/javascript/gabsocial/reducers/index.js
index 9efcf413..c7b746c9 100644
--- a/app/javascript/gabsocial/reducers/index.js
+++ b/app/javascript/gabsocial/reducers/index.js
@@ -2,7 +2,6 @@ import { combineReducers } from 'redux-immutable';
import popover from './popover';
import timelines from './timelines';
import meta from './meta';
-import alerts from './alerts';
import { loadingBarReducer } from 'react-redux-loading-bar';
import modal from './modal';
import user_lists from './user_lists';
@@ -43,7 +42,6 @@ const reducers = {
popover,
timelines,
meta,
- alerts,
loadingBar: loadingBarReducer,
modal,
user_lists,
diff --git a/app/javascript/gabsocial/reducers/popover.js b/app/javascript/gabsocial/reducers/popover.js
index 74d51b19..69d53e14 100644
--- a/app/javascript/gabsocial/reducers/popover.js
+++ b/app/javascript/gabsocial/reducers/popover.js
@@ -7,20 +7,17 @@ import {
const initialState = Immutable.Map({
popoverType: null,
placement: null,
- keyboard: false
})
export default function popoverMenu(state = initialState, action) {
switch (action.type) {
case POPOVER_OPEN:
- console.log("POPOVER_OPEN:", action)
return {
popoverType: action.popoverType,
popoverProps: action.popoverProps,
}
case POPOVER_CLOSE:
- console.log("POPOVER_CLOSE:", action)
- return initialState;
+ return initialState
default:
return state
}
diff --git a/app/javascript/gabsocial/reducers/statuses.js b/app/javascript/gabsocial/reducers/statuses.js
index 83d3c635..8c450b7e 100644
--- a/app/javascript/gabsocial/reducers/statuses.js
+++ b/app/javascript/gabsocial/reducers/statuses.js
@@ -1,6 +1,6 @@
import {
- REBLOG_REQUEST,
- REBLOG_FAIL,
+ REPOST_REQUEST,
+ REPOST_FAIL,
FAVORITE_REQUEST,
FAVORITE_FAIL,
UNFAVORITE_REQUEST,
@@ -42,9 +42,9 @@ export default function statuses(state = initialState, action) {
return state.get(action.status.get('id')) === undefined ? state : state.setIn([action.status.get('id'), 'favourited'], false);
case UNFAVORITE_REQUEST:
return state.setIn([action.status.get('id'), 'favourited'], false);
- case REBLOG_REQUEST:
+ case REPOST_REQUEST:
return state.setIn([action.status.get('id'), 'reblogged'], true);
- case REBLOG_FAIL:
+ case REPOST_FAIL:
return state.get(action.status.get('id')) === undefined ? state : state.setIn([action.status.get('id'), 'reblogged'], false);
case STATUS_MUTE_SUCCESS:
return state.setIn([action.id, 'muted'], true);
diff --git a/app/javascript/gabsocial/selectors/index.js b/app/javascript/gabsocial/selectors/index.js
index 36298209..858b1592 100644
--- a/app/javascript/gabsocial/selectors/index.js
+++ b/app/javascript/gabsocial/selectors/index.js
@@ -67,6 +67,7 @@ export const makeGetStatus = () => {
return createSelector(
[
(state, { id }) => state.getIn(['statuses', id]),
+ (state, { id }) => state.getIn(['statuses', state.getIn(['statuses', id, 'quote_of_id'])]),
(state, { id }) => state.getIn(['statuses', state.getIn(['statuses', id, 'reblog'])]),
(state, { id }) => state.getIn(['accounts', state.getIn(['statuses', id, 'account'])]),
(state, { id }) => state.getIn(['accounts', state.getIn(['statuses', state.getIn(['statuses', id, 'reblog']), 'account'])]),
@@ -74,7 +75,7 @@ export const makeGetStatus = () => {
getFilters,
],
- (statusBase, statusRepost, accountBase, accountRepost, username, filters) => {
+ (statusBase, quotedStatus, statusRepost, accountBase, accountRepost, username, filters) => {
if (!statusBase) {
return null;
}
@@ -95,6 +96,7 @@ export const makeGetStatus = () => {
const filtered = regex && regex.test(statusBase.get('reblog') ? statusRepost.get('search_index') : statusBase.get('search_index'));
return statusBase.withMutations(map => {
+ map.set('quoted_status', quotedStatus);
map.set('reblog', statusRepost);
map.set('account', accountBase);
map.set('filtered', filtered);
@@ -103,26 +105,6 @@ export const makeGetStatus = () => {
);
};
-const getAlertsBase = state => state.get('alerts');
-
-export const getAlerts = createSelector([getAlertsBase], (base) => {
- let arr = [];
-
- base.forEach(item => {
- arr.push({
- message: item.get('message'),
- title: item.get('title'),
- key: item.get('key'),
- dismissAfter: 5000,
- barStyle: {
- zIndex: 200,
- },
- });
- });
-
- return arr;
-});
-
export const makeGetNotification = () => {
return createSelector([
(_, base) => base,
diff --git a/app/javascript/gabsocial/utils/cursor_token_match.js b/app/javascript/gabsocial/utils/cursor_token_match.js
index 9d1d9e4e..732de418 100644
--- a/app/javascript/gabsocial/utils/cursor_token_match.js
+++ b/app/javascript/gabsocial/utils/cursor_token_match.js
@@ -12,7 +12,9 @@ export function textAtCursorMatchesToken(str, caretPosition, searchTokens) {
word = str.slice(left, right + caretPosition);
}
- if (!word || word.trim().length < 3 || searchTokens.indexOf(word[0]) === -1) {
+ console.log("left, right, word, caretPosition:", left, right, word, caretPosition)
+
+ if (!word || word.trim().length < 2 || searchTokens.indexOf(word[0]) === -1) {
return [null, null];
}
diff --git a/app/javascript/styles/global.css b/app/javascript/styles/global.css
index 8c4126f0..6b45c4f4 100644
--- a/app/javascript/styles/global.css
+++ b/app/javascript/styles/global.css
@@ -10,6 +10,11 @@ body {
overscroll-behavior-y: none;
}
+.overflowYScroll {
+ overflow: hidden;
+ overflow-y: scroll;
+}
+
.statusContent,
.statusContent * {
margin-top: 0;
@@ -880,6 +885,10 @@ body {
box-shadow: 1px 1px 1px 1px rgba(0, 0, 0, .25);
}
+.boxShadow2 {
+ box-shadow: 0 0 15px -5px rgba(0,0,0,0.15);
+}
+
.listStyleNone {
list-style: none;
}
diff --git a/package.json b/package.json
index 4d51f34d..0cfd8f69 100644
--- a/package.json
+++ b/package.json
@@ -88,6 +88,7 @@
"blurhash": "^1.0.0",
"classnames": "^2.2.5",
"compression-webpack-plugin": "^2.0.0",
+ "cron": "^1.8.2",
"cross-env": "^5.1.4",
"css-loader": "^2.1.1",
"cssnano": "^4.1.10",
diff --git a/yarn.lock b/yarn.lock
index f580ee47..6972dba0 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -4567,6 +4567,13 @@ create-react-context@0.3.0, create-react-context@^0.3.0:
gud "^1.0.0"
warning "^4.0.3"
+cron@^1.8.2:
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/cron/-/cron-1.8.2.tgz#4ac5e3c55ba8c163d84f3407bde94632da8370ce"
+ integrity sha512-Gk2c4y6xKEO8FSAUTklqtfSr7oTq0CiPQeLBG5Fl0qoXpZyMcj1SG59YL+hqq04bu6/IuEA7lMkYDAplQNKkyg==
+ dependencies:
+ moment-timezone "^0.5.x"
+
cross-env@^5.1.4:
version "5.2.1"
resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.2.1.tgz#b2c76c1ca7add66dc874d11798466094f551b34d"
@@ -9239,7 +9246,14 @@ mixin-object@^2.0.1:
dependencies:
minimist "0.0.8"
-moment@^2.24.0:
+moment-timezone@^0.5.x:
+ version "0.5.28"
+ resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.28.tgz#f093d789d091ed7b055d82aa81a82467f72e4338"
+ integrity sha512-TDJkZvAyKIVWg5EtVqRzU97w0Rb0YVbfpqyjgu6GwXCAohVRqwZjf4fOzDE6p1Ch98Sro/8hQQi65WDXW5STPw==
+ dependencies:
+ moment ">= 2.9.0"
+
+"moment@>= 2.9.0", moment@^2.24.0:
version "2.24.0"
resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b"
integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==