Browse Source

Handle replyKeyboardForceReply

master
morethanwords 3 years ago
parent
commit
6ceaa261d6
  1. 3
      src/components/chat/input.ts
  2. 27
      src/components/chat/replyKeyboard.ts
  3. 1
      src/layer.d.ts
  4. 5
      src/scripts/in/schema_additional_params.json

3
src/components/chat/input.ts

@ -355,7 +355,8 @@ export default class ChatInput {
appendTo: this.rowsWrapper, appendTo: this.rowsWrapper,
listenerSetter: this.listenerSetter, listenerSetter: this.listenerSetter,
appMessagesManager: this.appMessagesManager, appMessagesManager: this.appMessagesManager,
btnHover: this.btnToggleReplyMarkup btnHover: this.btnToggleReplyMarkup,
chatInput: this
}); });
this.listenerSetter.add(this.replyKeyboard)('open', () => this.btnToggleReplyMarkup.classList.add('active')); this.listenerSetter.add(this.replyKeyboard)('open', () => this.btnToggleReplyMarkup.classList.add('active'));
this.listenerSetter.add(this.replyKeyboard)('close', () => this.btnToggleReplyMarkup.classList.remove('active')); this.listenerSetter.add(this.replyKeyboard)('close', () => this.btnToggleReplyMarkup.classList.remove('active'));

27
src/components/chat/replyKeyboard.ts

@ -5,6 +5,7 @@
*/ */
import type { AppMessagesManager } from "../../lib/appManagers/appMessagesManager"; import type { AppMessagesManager } from "../../lib/appManagers/appMessagesManager";
import type ChatInput from "./input";
import DropdownHover from "../../helpers/dropdownHover"; import DropdownHover from "../../helpers/dropdownHover";
import { ReplyMarkup } from "../../layer"; import { ReplyMarkup } from "../../layer";
import RichTextProcessor from "../../lib/richtextprocessor"; import RichTextProcessor from "../../lib/richtextprocessor";
@ -15,6 +16,7 @@ import findUpClassName from "../../helpers/dom/findUpClassName";
import { isTouchSupported } from "../../helpers/touchSupport"; import { isTouchSupported } from "../../helpers/touchSupport";
import findUpAsChild from "../../helpers/dom/findUpAsChild"; import findUpAsChild from "../../helpers/dom/findUpAsChild";
import { cancelEvent } from "../../helpers/dom/cancelEvent"; import { cancelEvent } from "../../helpers/dom/cancelEvent";
import { getHeavyAnimationPromise } from "../../hooks/useHeavyAnimationCheck";
export default class ReplyKeyboard extends DropdownHover { export default class ReplyKeyboard extends DropdownHover {
private static BASE_CLASS = 'reply-keyboard'; private static BASE_CLASS = 'reply-keyboard';
@ -24,12 +26,14 @@ export default class ReplyKeyboard extends DropdownHover {
private btnHover: HTMLElement; private btnHover: HTMLElement;
private peerId: number; private peerId: number;
private touchListener: Listener; private touchListener: Listener;
private chatInput: ChatInput;
constructor(options: { constructor(options: {
listenerSetter: ListenerSetter, listenerSetter: ListenerSetter,
appMessagesManager: AppMessagesManager, appMessagesManager: AppMessagesManager,
appendTo: HTMLElement, appendTo: HTMLElement,
btnHover: HTMLElement btnHover: HTMLElement,
chatInput: ChatInput
}) { }) {
super({ super({
element: document.createElement('div') element: document.createElement('div')
@ -42,9 +46,15 @@ export default class ReplyKeyboard extends DropdownHover {
this.attachButtonListener(this.btnHover, this.listenerSetter); this.attachButtonListener(this.btnHover, this.listenerSetter);
this.listenerSetter.add(rootScope)('history_reply_markup', ({peerId}) => { this.listenerSetter.add(rootScope)('history_reply_markup', ({peerId}) => {
if(this.peerId === peerId && this.checkAvailability() && this.isActive()) { if(this.peerId === peerId) {
if(this.checkAvailability() && this.isActive()) {
this.render(); this.render();
} }
getHeavyAnimationPromise().then(() => {
this.checkForceReply();
});
}
}); });
} }
@ -83,6 +93,16 @@ export default class ReplyKeyboard extends DropdownHover {
} }
}; };
public checkForceReply() {
const replyMarkup = this.getReplyMarkup();
if(replyMarkup._ === 'replyKeyboardForceReply' &&
!replyMarkup.pFlags.hidden &&
!replyMarkup.pFlags.used) {
replyMarkup.pFlags.used = true;
this.chatInput.initMessageReply(replyMarkup.mid);
}
}
private getReplyMarkup(): ReplyMarkup { private getReplyMarkup(): ReplyMarkup {
return this.appMessagesManager.getHistoryStorage(this.peerId).replyMarkup ?? { return this.appMessagesManager.getHistoryStorage(this.peerId).replyMarkup ?? {
_: 'replyKeyboardHide' _: 'replyKeyboardHide'
@ -109,7 +129,7 @@ export default class ReplyKeyboard extends DropdownHover {
} }
public checkAvailability(replyMarkup: ReplyMarkup = this.getReplyMarkup()) { public checkAvailability(replyMarkup: ReplyMarkup = this.getReplyMarkup()) {
const hide = replyMarkup._ === 'replyKeyboardHide'; const hide = replyMarkup._ === 'replyKeyboardHide' || !(replyMarkup as ReplyMarkup.replyInlineMarkup).rows?.length;
this.btnHover.classList.toggle('hide', hide); this.btnHover.classList.toggle('hide', hide);
if(hide) { if(hide) {
@ -123,5 +143,6 @@ export default class ReplyKeyboard extends DropdownHover {
this.peerId = peerId; this.peerId = peerId;
this.checkAvailability(); this.checkAvailability();
this.checkForceReply();
} }
} }

1
src/layer.d.ts vendored

@ -4055,6 +4055,7 @@ export namespace ReplyMarkup {
single_use?: true, single_use?: true,
selective?: true, selective?: true,
hidden?: true, hidden?: true,
used?: true,
}>, }>,
placeholder?: string, placeholder?: string,
mid?: number, mid?: number,

5
src/scripts/in/schema_additional_params.json

@ -295,6 +295,11 @@
{"name": "hidden", "type": "true"}, {"name": "hidden", "type": "true"},
{"name": "fromId", "type": "number"} {"name": "fromId", "type": "number"}
] ]
}, {
"predicate": "replyKeyboardForceReply",
"params": [
{"name": "used", "type": "true"}
]
}, { }, {
"predicate": "inputDocumentFileLocation", "predicate": "inputDocumentFileLocation",
"params": [ "params": [

Loading…
Cancel
Save