tweb/src/components/editPeer.ts

64 lines
1.8 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
*/
2021-03-12 20:02:05 +01:00
import { InputFile } from "../layer";
import AvatarEdit from "./avatarEdit";
import AvatarElement from "./avatar";
import InputField from "./inputField";
import ListenerSetter from "../helpers/listenerSetter";
import Button from "./button";
2021-03-21 15:36:14 +01:00
import { safeAssign } from "../helpers/object";
2021-03-12 20:02:05 +01:00
export default class EditPeer {
public nextBtn: HTMLButtonElement;
public uploadAvatar: () => Promise<InputFile>;
public avatarEdit: AvatarEdit;
public avatarElem: AvatarElement;
private inputFields: InputField[];
private listenerSetter: ListenerSetter;
private peerId: number;
constructor(options: {
peerId: number,
inputFields: EditPeer['inputFields'],
2021-03-13 04:03:59 +01:00
listenerSetter: ListenerSetter,
doNotEditAvatar?: boolean,
2021-03-12 20:02:05 +01:00
}) {
2021-03-21 15:36:14 +01:00
safeAssign(this, options);
2021-03-12 20:02:05 +01:00
this.nextBtn = Button('btn-circle btn-corner tgico-check');
this.avatarElem = document.createElement('avatar-element') as AvatarElement;
this.avatarElem.classList.add('avatar-placeholder', 'avatar-120');
this.avatarElem.setAttribute('peer', '' + this.peerId);
2021-03-13 04:03:59 +01:00
if(!options.doNotEditAvatar) {
this.avatarEdit = new AvatarEdit((_upload) => {
this.uploadAvatar = _upload;
this.handleChange();
this.avatarElem.remove();
});
2021-03-12 20:02:05 +01:00
this.avatarEdit.container.append(this.avatarElem);
}
this.inputFields.forEach(inputField => {
this.listenerSetter.add(inputField.input, 'input', this.handleChange);
});
}
public isChanged = () => {
return !!this.uploadAvatar || !!this.inputFields.find(inputField => inputField.isValid());
};
public handleChange = () => {
this.nextBtn.classList.toggle('is-visible', this.isChanged());
};
}