71 lines
2.1 KiB
TypeScript
71 lines
2.1 KiB
TypeScript
/*
|
|
* 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,
|
|
onClose?: () => void,
|
|
placeholder: LangPackKey,
|
|
chatRightsAction?: AppSelectPeers['chatRightsAction'],
|
|
peerId?: number,
|
|
selfPresence?: LangPackKey
|
|
}) {
|
|
super('popup-forward', null, {closable: true, overlayClosable: true, body: true});
|
|
|
|
if(options.onClose) this.onClose = options.onClose;
|
|
|
|
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);
|
|
}
|
|
}
|