Telegram Web K with changes to work inside I2P
https://web.telegram.i2p/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
2.0 KiB
67 lines
2.0 KiB
/* |
|
* https://github.com/morethanwords/tweb |
|
* Copyright (C) 2019-2021 Eduard Kuzmenko |
|
* https://github.com/morethanwords/tweb/blob/master/LICENSE |
|
*/ |
|
|
|
import { IS_TOUCH_SUPPORTED } from "../../environment/touchSupport"; |
|
import AppSelectPeers from "../appSelectPeers"; |
|
import PopupElement from "."; |
|
import { LangPackKey, _i18n } from "../../lib/langPack"; |
|
|
|
export default class PopupPickUser extends PopupElement { |
|
protected selector: AppSelectPeers; |
|
|
|
constructor(options: { |
|
peerTypes: AppSelectPeers['peerType'], |
|
onSelect?: (peerId: PeerId) => Promise<void> | void, |
|
placeholder: LangPackKey, |
|
chatRightsAction?: AppSelectPeers['chatRightsAction'], |
|
peerId?: number, |
|
selfPresence?: LangPackKey |
|
}) { |
|
super('popup-forward', null, {closable: true, overlayClosable: true, body: true}); |
|
|
|
this.selector = new AppSelectPeers({ |
|
appendTo: this.body, |
|
onChange: async() => { |
|
const selected = this.selector.getSelected(); |
|
const peerId = selected[selected.length - 1].toPeerId(); |
|
|
|
if(options.onSelect) { |
|
const res = options.onSelect(peerId); |
|
if(res instanceof Promise) { |
|
try { |
|
await res; |
|
} catch(err) { |
|
return; |
|
} |
|
} |
|
} |
|
|
|
this.selector = null; |
|
this.hide(); |
|
}, |
|
peerType: options.peerTypes, |
|
onFirstRender: () => { |
|
this.show(); |
|
this.selector.checkForTriggers(); // ! due to zero height before mounting |
|
|
|
if(!IS_TOUCH_SUPPORTED) { |
|
this.selector.input.focus(); |
|
} |
|
}, |
|
chatRightsAction: options.chatRightsAction, |
|
multiSelect: false, |
|
rippleEnabled: false, |
|
avatarSize: 46, |
|
peerId: options.peerId, |
|
placeholder: options.placeholder, |
|
selfPresence: options.selfPresence |
|
}); |
|
|
|
//this.scrollable = new Scrollable(this.body); |
|
|
|
this.title.append(this.selector.input); |
|
} |
|
}
|
|
|