Composer: Add "Send When Online" button (#3067)
This commit is contained in:
parent
fab245cc83
commit
5ca115c527
Binary file not shown.
Binary file not shown.
@ -35,6 +35,7 @@ import {
|
|||||||
EDITABLE_INPUT_CSS_SELECTOR,
|
EDITABLE_INPUT_CSS_SELECTOR,
|
||||||
MAX_UPLOAD_FILEPART_SIZE,
|
MAX_UPLOAD_FILEPART_SIZE,
|
||||||
EDITABLE_INPUT_MODAL_ID,
|
EDITABLE_INPUT_MODAL_ID,
|
||||||
|
SCHEDULED_WHEN_ONLINE,
|
||||||
} from '../../../config';
|
} from '../../../config';
|
||||||
import { IS_VOICE_RECORDING_SUPPORTED, IS_IOS } from '../../../util/windowEnvironment';
|
import { IS_VOICE_RECORDING_SUPPORTED, IS_IOS } from '../../../util/windowEnvironment';
|
||||||
import { MEMO_EMPTY_ARRAY } from '../../../util/memo';
|
import { MEMO_EMPTY_ARRAY } from '../../../util/memo';
|
||||||
@ -1218,6 +1219,10 @@ const Composer: FC<OwnProps & StateProps> = ({
|
|||||||
sendSilent();
|
sendSilent();
|
||||||
}, [sendSilent]);
|
}, [sendSilent]);
|
||||||
|
|
||||||
|
const handleSendWhenOnline = useCallback(() => {
|
||||||
|
handleMessageSchedule({ }, SCHEDULED_WHEN_ONLINE);
|
||||||
|
}, [handleMessageSchedule]);
|
||||||
|
|
||||||
const handleSendScheduledAttachments = useCallback((sendCompressed: boolean, sendGrouped: boolean) => {
|
const handleSendScheduledAttachments = useCallback((sendCompressed: boolean, sendGrouped: boolean) => {
|
||||||
requestCalendar((scheduledAt) => {
|
requestCalendar((scheduledAt) => {
|
||||||
handleMessageSchedule({ sendCompressed, sendGrouped }, scheduledAt);
|
handleMessageSchedule({ sendCompressed, sendGrouped }, scheduledAt);
|
||||||
@ -1542,8 +1547,10 @@ const Composer: FC<OwnProps & StateProps> = ({
|
|||||||
{canShowCustomSendMenu && (
|
{canShowCustomSendMenu && (
|
||||||
<CustomSendMenu
|
<CustomSendMenu
|
||||||
isOpen={isCustomSendMenuOpen}
|
isOpen={isCustomSendMenuOpen}
|
||||||
|
canScheduleUntilOnline={canScheduleUntilOnline}
|
||||||
onSendSilent={!isChatWithSelf ? handleSendSilent : undefined}
|
onSendSilent={!isChatWithSelf ? handleSendSilent : undefined}
|
||||||
onSendSchedule={!shouldSchedule ? handleSendScheduled : undefined}
|
onSendSchedule={!shouldSchedule ? handleSendScheduled : undefined}
|
||||||
|
onSendWhenOnline={handleSendWhenOnline}
|
||||||
onClose={handleContextMenuClose}
|
onClose={handleContextMenuClose}
|
||||||
onCloseAnimationEnd={handleContextMenuHide}
|
onCloseAnimationEnd={handleContextMenuHide}
|
||||||
isSavedMessages={isChatWithSelf}
|
isSavedMessages={isChatWithSelf}
|
||||||
|
|||||||
@ -1,7 +1,10 @@
|
|||||||
|
import React, { memo, useState } from '../../../lib/teact/teact';
|
||||||
|
|
||||||
import type { FC } from '../../../lib/teact/teact';
|
import type { FC } from '../../../lib/teact/teact';
|
||||||
import React, { memo } from '../../../lib/teact/teact';
|
|
||||||
|
|
||||||
import { IS_TOUCH_ENV } from '../../../util/windowEnvironment';
|
import { IS_TOUCH_ENV } from '../../../util/windowEnvironment';
|
||||||
|
|
||||||
|
import useEffectWithPrevDeps from '../../../hooks/useEffectWithPrevDeps';
|
||||||
import useMouseInside from '../../../hooks/useMouseInside';
|
import useMouseInside from '../../../hooks/useMouseInside';
|
||||||
import useLang from '../../../hooks/useLang';
|
import useLang from '../../../hooks/useLang';
|
||||||
|
|
||||||
@ -14,8 +17,10 @@ export type OwnProps = {
|
|||||||
isOpen: boolean;
|
isOpen: boolean;
|
||||||
isOpenToBottom?: boolean;
|
isOpenToBottom?: boolean;
|
||||||
isSavedMessages?: boolean;
|
isSavedMessages?: boolean;
|
||||||
|
canScheduleUntilOnline?: boolean;
|
||||||
onSendSilent?: NoneToVoidFunction;
|
onSendSilent?: NoneToVoidFunction;
|
||||||
onSendSchedule?: NoneToVoidFunction;
|
onSendSchedule?: NoneToVoidFunction;
|
||||||
|
onSendWhenOnline?: NoneToVoidFunction;
|
||||||
onClose: NoneToVoidFunction;
|
onClose: NoneToVoidFunction;
|
||||||
onCloseAnimationEnd?: NoneToVoidFunction;
|
onCloseAnimationEnd?: NoneToVoidFunction;
|
||||||
};
|
};
|
||||||
@ -24,15 +29,25 @@ const CustomSendMenu: FC<OwnProps> = ({
|
|||||||
isOpen,
|
isOpen,
|
||||||
isOpenToBottom = false,
|
isOpenToBottom = false,
|
||||||
isSavedMessages,
|
isSavedMessages,
|
||||||
|
canScheduleUntilOnline,
|
||||||
onSendSilent,
|
onSendSilent,
|
||||||
onSendSchedule,
|
onSendSchedule,
|
||||||
|
onSendWhenOnline,
|
||||||
onClose,
|
onClose,
|
||||||
onCloseAnimationEnd,
|
onCloseAnimationEnd,
|
||||||
}) => {
|
}) => {
|
||||||
const [handleMouseEnter, handleMouseLeave] = useMouseInside(isOpen, onClose);
|
const [handleMouseEnter, handleMouseLeave] = useMouseInside(isOpen, onClose);
|
||||||
|
const [displayScheduleUntilOnline, setDisplayScheduleUntilOnline] = useState(false);
|
||||||
|
|
||||||
const lang = useLang();
|
const lang = useLang();
|
||||||
|
|
||||||
|
useEffectWithPrevDeps(([prevIsOpen]) => {
|
||||||
|
// Avoid context menu item shuffling when opened
|
||||||
|
if (isOpen && !prevIsOpen) {
|
||||||
|
setDisplayScheduleUntilOnline(Boolean(canScheduleUntilOnline));
|
||||||
|
}
|
||||||
|
}, [isOpen, canScheduleUntilOnline]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Menu
|
<Menu
|
||||||
isOpen={isOpen}
|
isOpen={isOpen}
|
||||||
@ -52,6 +67,11 @@ const CustomSendMenu: FC<OwnProps> = ({
|
|||||||
{lang(isSavedMessages ? 'SetReminder' : 'ScheduleMessage')}
|
{lang(isSavedMessages ? 'SetReminder' : 'ScheduleMessage')}
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
)}
|
)}
|
||||||
|
{onSendSchedule && displayScheduleUntilOnline && (
|
||||||
|
<MenuItem icon="user-online" onClick={onSendWhenOnline}>
|
||||||
|
{lang('SendWhenOnline')}
|
||||||
|
</MenuItem>
|
||||||
|
)}
|
||||||
</Menu>
|
</Menu>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -49,6 +49,9 @@
|
|||||||
.icon-volume-3:before {
|
.icon-volume-3:before {
|
||||||
content: "\e991";
|
content: "\e991";
|
||||||
}
|
}
|
||||||
|
.icon-user-online:before {
|
||||||
|
content: "\e9c0";
|
||||||
|
}
|
||||||
.icon-pinned-message:before {
|
.icon-pinned-message:before {
|
||||||
content: "\e9bf";
|
content: "\e9bf";
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user