/* * https://github.com/morethanwords/tweb * Copyright (C) 2019-2021 Eduard Kuzmenko * https://github.com/morethanwords/tweb/blob/master/LICENSE */ import { cancelEvent } from "../../helpers/dom/cancelEvent"; import ListenerSetter from "../../helpers/listenerSetter"; import rootScope from "../../lib/rootScope"; import ButtonMenu, { ButtonMenuItemOptions } from "../buttonMenu"; import { attachContextMenuListener, openBtnMenu } from "../misc"; export default class SendMenu { public sendMenu: HTMLDivElement; private sendMenuButtons: (ButtonMenuItemOptions & {verify: () => boolean})[]; private type: 'schedule' | 'reminder'; constructor(options: { onSilentClick: () => void, onScheduleClick: () => void, listenerSetter?: ListenerSetter, openSide: string, onContextElement: HTMLElement, onOpen?: () => boolean }) { this.sendMenuButtons = [{ icon: 'mute', text: 'Chat.Send.WithoutSound', onClick: options.onSilentClick, verify: () => this.type === 'schedule' }, { icon: 'schedule', text: 'Chat.Send.ScheduledMessage', onClick: options.onScheduleClick, verify: () => this.type === 'schedule' }, { icon: 'schedule', text: 'Chat.Send.SetReminder', onClick: options.onScheduleClick, verify: () => this.type === 'reminder' }]; this.sendMenu = ButtonMenu(this.sendMenuButtons, options.listenerSetter); this.sendMenu.classList.add('menu-send', options.openSide); attachContextMenuListener(options.onContextElement, (e: any) => { if(options.onOpen && !options.onOpen()) { return; } this.sendMenuButtons.forEach(button => { button.element.classList.toggle('hide', !button.verify()); }); cancelEvent(e); openBtnMenu(this.sendMenu); }, options.listenerSetter); } public setPeerId(peerId: PeerId) { this.type = peerId === rootScope.myId ? 'reminder' : 'schedule'; } };