mirror of
https://github.com/mastodon/mastodon.git
synced 2025-09-07 18:31:07 +00:00
This commit is contained in:
parent
e5aa8c1ff3
commit
6166e61638
|
@ -23,7 +23,7 @@ import { useColumnsContext } from '../util/columns_context';
|
||||||
|
|
||||||
import BundleColumnError from './bundle_column_error';
|
import BundleColumnError from './bundle_column_error';
|
||||||
import { ColumnLoading } from './column_loading';
|
import { ColumnLoading } from './column_loading';
|
||||||
import { ComposePanel } from './compose_panel';
|
import { ComposePanel, RedirectToMobileComposeIfNeeded } from './compose_panel';
|
||||||
import DrawerLoading from './drawer_loading';
|
import DrawerLoading from './drawer_loading';
|
||||||
import { NavigationPanel } from 'mastodon/features/navigation_panel';
|
import { NavigationPanel } from 'mastodon/features/navigation_panel';
|
||||||
|
|
||||||
|
@ -124,6 +124,7 @@ export default class ColumnsArea extends ImmutablePureComponent {
|
||||||
<div className='columns-area__panels__pane columns-area__panels__pane--compositional'>
|
<div className='columns-area__panels__pane columns-area__panels__pane--compositional'>
|
||||||
<div className='columns-area__panels__pane__inner'>
|
<div className='columns-area__panels__pane__inner'>
|
||||||
{renderComposePanel && <ComposePanel />}
|
{renderComposePanel && <ComposePanel />}
|
||||||
|
<RedirectToMobileComposeIfNeeded />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { useCallback, useEffect } from 'react';
|
import { useCallback, useEffect, useLayoutEffect } from 'react';
|
||||||
|
|
||||||
import { useLayout } from '@/mastodon/hooks/useLayout';
|
import { useLayout } from '@/mastodon/hooks/useLayout';
|
||||||
import { useAppDispatch, useAppSelector } from '@/mastodon/store';
|
import { useAppDispatch, useAppSelector } from '@/mastodon/store';
|
||||||
|
@ -7,6 +7,7 @@ import {
|
||||||
mountCompose,
|
mountCompose,
|
||||||
unmountCompose,
|
unmountCompose,
|
||||||
} from 'mastodon/actions/compose';
|
} from 'mastodon/actions/compose';
|
||||||
|
import { useAppHistory } from 'mastodon/components/router';
|
||||||
import ServerBanner from 'mastodon/components/server_banner';
|
import ServerBanner from 'mastodon/components/server_banner';
|
||||||
import { Search } from 'mastodon/features/compose/components/search';
|
import { Search } from 'mastodon/features/compose/components/search';
|
||||||
import ComposeFormContainer from 'mastodon/features/compose/containers/compose_form_container';
|
import ComposeFormContainer from 'mastodon/features/compose/containers/compose_form_container';
|
||||||
|
@ -54,3 +55,25 @@ export const ComposePanel: React.FC = () => {
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Redirect the user to the standalone compose page when the
|
||||||
|
* sidebar composer is hidden due to a change in viewport size
|
||||||
|
* while a post is being written.
|
||||||
|
*/
|
||||||
|
|
||||||
|
export const RedirectToMobileComposeIfNeeded: React.FC = () => {
|
||||||
|
const history = useAppHistory();
|
||||||
|
|
||||||
|
const shouldRedirect = useAppSelector((state) =>
|
||||||
|
state.compose.get('should_redirect_to_compose_page'),
|
||||||
|
);
|
||||||
|
|
||||||
|
useLayoutEffect(() => {
|
||||||
|
if (shouldRedirect) {
|
||||||
|
history.push('/publish');
|
||||||
|
}
|
||||||
|
}, [history, shouldRedirect]);
|
||||||
|
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
|
|
@ -68,6 +68,7 @@ const initialState = ImmutableMap({
|
||||||
is_submitting: false,
|
is_submitting: false,
|
||||||
is_changing_upload: false,
|
is_changing_upload: false,
|
||||||
is_uploading: false,
|
is_uploading: false,
|
||||||
|
should_redirect_to_compose_page: false,
|
||||||
progress: 0,
|
progress: 0,
|
||||||
isUploadingThumbnail: false,
|
isUploadingThumbnail: false,
|
||||||
thumbnailProgress: 0,
|
thumbnailProgress: 0,
|
||||||
|
@ -322,11 +323,21 @@ export const composeReducer = (state = initialState, action) => {
|
||||||
case STORE_HYDRATE:
|
case STORE_HYDRATE:
|
||||||
return hydrate(state, action.state.get('compose'));
|
return hydrate(state, action.state.get('compose'));
|
||||||
case COMPOSE_MOUNT:
|
case COMPOSE_MOUNT:
|
||||||
return state.set('mounted', state.get('mounted') + 1);
|
return state
|
||||||
|
.set('mounted', state.get('mounted') + 1)
|
||||||
|
.set('should_redirect_to_compose_page', false);
|
||||||
case COMPOSE_UNMOUNT:
|
case COMPOSE_UNMOUNT:
|
||||||
return state
|
return state
|
||||||
.set('mounted', Math.max(state.get('mounted') - 1, 0))
|
.set('mounted', Math.max(state.get('mounted') - 1, 0))
|
||||||
.set('is_composing', false);
|
.set('is_composing', false)
|
||||||
|
.set(
|
||||||
|
'should_redirect_to_compose_page',
|
||||||
|
(state.get('mounted') === 1 &&
|
||||||
|
state.get('is_composing') === true &&
|
||||||
|
(state.get('text').trim() !== '' ||
|
||||||
|
state.get('media_attachments').size > 0)
|
||||||
|
)
|
||||||
|
);
|
||||||
case COMPOSE_SENSITIVITY_CHANGE:
|
case COMPOSE_SENSITIVITY_CHANGE:
|
||||||
return state.withMutations(map => {
|
return state.withMutations(map => {
|
||||||
if (!state.get('spoiler')) {
|
if (!state.get('spoiler')) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user