tweb/src/components/sidebarLeft/tabs/newGroup.ts

108 lines
3.5 KiB
TypeScript
Raw Normal View History

2021-04-08 15:52:31 +02:00
/*
* https://github.com/morethanwords/tweb
* Copyright (C) 2019-2021 Eduard Kuzmenko
* https://github.com/morethanwords/tweb/blob/master/LICENSE
*/
import appSidebarLeft from "..";
import { InputFile } from "../../../layer";
import appChatsManager from "../../../lib/appManagers/appChatsManager";
import appDialogsManager from "../../../lib/appManagers/appDialogsManager";
import appUsersManager from "../../../lib/appManagers/appUsersManager";
import { SearchGroup } from "../../appSearch";
import Button from "../../button";
import InputField from "../../inputField";
2021-01-02 09:59:38 +01:00
import { SliderSuperTab } from "../../slider";
import AvatarEdit from "../../avatarEdit";
2021-03-25 19:07:00 +01:00
import { i18n } from "../../../lib/langPack";
2021-01-02 09:59:38 +01:00
export default class AppNewGroupTab extends SliderSuperTab {
2020-06-15 13:21:40 +02:00
private searchGroup = new SearchGroup(' ', 'contacts', true, 'new-group-members disable-hover', false);
2021-01-02 09:59:38 +01:00
private avatarEdit: AvatarEdit;
private uploadAvatar: () => Promise<InputFile> = null;
private userIds: number[];
private nextBtn: HTMLButtonElement;
private groupNameInputField: InputField;
2021-01-02 09:59:38 +01:00
2021-01-06 10:16:53 +01:00
protected init() {
2021-01-02 09:59:38 +01:00
this.container.classList.add('new-group-container');
2021-03-25 19:07:00 +01:00
this.setTitle('NewGroup');
2021-01-02 09:59:38 +01:00
this.avatarEdit = new AvatarEdit((_upload) => {
this.uploadAvatar = _upload;
});
const inputWrapper = document.createElement('div');
inputWrapper.classList.add('input-wrapper');
this.groupNameInputField = new InputField({
2021-03-25 19:07:00 +01:00
label: 'CreateGroup.NameHolder',
maxLength: 128
});
inputWrapper.append(this.groupNameInputField.container);
this.groupNameInputField.input.addEventListener('input', () => {
const value = this.groupNameInputField.value;
this.nextBtn.classList.toggle('is-visible', !!value.length && !this.groupNameInputField.input.classList.contains('error'));
});
this.nextBtn = Button('btn-corner btn-circle', {icon: 'arrow_next'});
this.nextBtn.addEventListener('click', () => {
const title = this.groupNameInputField.value;
this.nextBtn.disabled = true;
appChatsManager.createChat(title, this.userIds).then((chatId) => {
if(this.uploadAvatar) {
this.uploadAvatar().then((inputFile) => {
appChatsManager.editPhoto(chatId, inputFile);
});
}
2021-02-20 18:10:26 +01:00
appSidebarLeft.removeTabFromHistory(this);
appSidebarLeft.selectTab(0);
});
});
2020-06-15 13:21:40 +02:00
const chatsContainer = document.createElement('div');
chatsContainer.classList.add('chatlist-container');
chatsContainer.append(this.searchGroup.container);
2021-01-02 09:59:38 +01:00
this.content.append(this.nextBtn);
this.scrollable.append(this.avatarEdit.container, inputWrapper, chatsContainer);
}
public onCloseAfterTimeout() {
this.searchGroup.clear();
2021-01-02 09:59:38 +01:00
this.avatarEdit.clear();
this.uploadAvatar = null;
this.groupNameInputField.value = '';
this.nextBtn.disabled = false;
}
2021-01-06 10:16:53 +01:00
public open(userIds: number[]) {
const result = super.open();
result.then(() => {
this.userIds = userIds;
this.userIds.forEach(userId => {
let {dom} = appDialogsManager.addDialogNew({
dialog: userId,
container: this.searchGroup.list,
drawStatus: false,
rippleEnabled: false,
avatarSize: 48
});
2021-03-28 20:37:11 +02:00
dom.lastMessageSpan.append(appUsersManager.getUserStatusString(userId));
2021-01-06 10:16:53 +01:00
});
2021-03-25 19:07:00 +01:00
this.searchGroup.nameEl.textContent = '';
this.searchGroup.nameEl.append(i18n('Members', [this.userIds.length]));
2021-01-06 10:16:53 +01:00
this.searchGroup.setActive();
});
2021-01-06 10:16:53 +01:00
return result;
}
}