forked from mystiq/hydrogen-web
Extract ComposerViewModel to its own file
This commit is contained in:
parent
f0b6384ad7
commit
1a0e305212
2 changed files with 72 additions and 70 deletions
71
src/domain/session/room/ComposerViewModel.js
Normal file
71
src/domain/session/room/ComposerViewModel.js
Normal file
|
@ -0,0 +1,71 @@
|
|||
import {ViewModel} from "../../ViewModel.js";
|
||||
|
||||
export class ComposerViewModel extends ViewModel {
|
||||
constructor(roomVM) {
|
||||
super();
|
||||
this._roomVM = roomVM;
|
||||
this._isEmpty = true;
|
||||
this._replyVM = null;
|
||||
}
|
||||
|
||||
setReplyingTo(tile) {
|
||||
const changed = this._replyVM !== tile;
|
||||
this._replyVM = tile;
|
||||
if (changed) {
|
||||
this.emitChange("replyViewModel");
|
||||
}
|
||||
}
|
||||
|
||||
clearReplyingTo() {
|
||||
this.setReplyingTo(null);
|
||||
}
|
||||
|
||||
get replyViewModel() {
|
||||
return this._replyVM;
|
||||
}
|
||||
|
||||
get isEncrypted() {
|
||||
return this._roomVM.isEncrypted;
|
||||
}
|
||||
|
||||
sendMessage(message) {
|
||||
const success = this._roomVM._sendMessage(message, this._replyVM);
|
||||
if (success) {
|
||||
this._isEmpty = true;
|
||||
this.emitChange("canSend");
|
||||
this.clearReplyingTo();
|
||||
}
|
||||
return success;
|
||||
}
|
||||
|
||||
sendPicture() {
|
||||
this._roomVM._pickAndSendPicture();
|
||||
}
|
||||
|
||||
sendFile() {
|
||||
this._roomVM._pickAndSendFile();
|
||||
}
|
||||
|
||||
sendVideo() {
|
||||
this._roomVM._pickAndSendVideo();
|
||||
}
|
||||
|
||||
get canSend() {
|
||||
return !this._isEmpty;
|
||||
}
|
||||
|
||||
async setInput(text) {
|
||||
const wasEmpty = this._isEmpty;
|
||||
this._isEmpty = text.length === 0;
|
||||
if (wasEmpty && !this._isEmpty) {
|
||||
this._roomVM._room.ensureMessageKeyIsShared();
|
||||
}
|
||||
if (wasEmpty !== this._isEmpty) {
|
||||
this.emitChange("canSend");
|
||||
}
|
||||
}
|
||||
|
||||
get kind() {
|
||||
return "composer";
|
||||
}
|
||||
}
|
|
@ -16,6 +16,7 @@ limitations under the License.
|
|||
*/
|
||||
|
||||
import {TimelineViewModel} from "./timeline/TimelineViewModel.js";
|
||||
import {ComposerViewModel} from "./ComposerViewModel.js"
|
||||
import {avatarInitials, getIdentifierColorNumber, getAvatarHttpUrl} from "../../avatar.js";
|
||||
import {ViewModel} from "../../ViewModel.js";
|
||||
|
||||
|
@ -307,76 +308,6 @@ export class RoomViewModel extends ViewModel {
|
|||
}
|
||||
}
|
||||
|
||||
class ComposerViewModel extends ViewModel {
|
||||
constructor(roomVM) {
|
||||
super();
|
||||
this._roomVM = roomVM;
|
||||
this._isEmpty = true;
|
||||
this._replyVM = null;
|
||||
}
|
||||
|
||||
setReplyingTo(tile) {
|
||||
const changed = this._replyVM !== tile;
|
||||
this._replyVM = tile;
|
||||
if (changed) {
|
||||
this.emitChange("replyViewModel");
|
||||
}
|
||||
}
|
||||
|
||||
clearReplyingTo() {
|
||||
this.setReplyingTo(null);
|
||||
}
|
||||
|
||||
get replyViewModel() {
|
||||
return this._replyVM;
|
||||
}
|
||||
|
||||
get isEncrypted() {
|
||||
return this._roomVM.isEncrypted;
|
||||
}
|
||||
|
||||
sendMessage(message) {
|
||||
const success = this._roomVM._sendMessage(message, this._replyVM);
|
||||
if (success) {
|
||||
this._isEmpty = true;
|
||||
this.emitChange("canSend");
|
||||
this.clearReplyingTo();
|
||||
}
|
||||
return success;
|
||||
}
|
||||
|
||||
sendPicture() {
|
||||
this._roomVM._pickAndSendPicture();
|
||||
}
|
||||
|
||||
sendFile() {
|
||||
this._roomVM._pickAndSendFile();
|
||||
}
|
||||
|
||||
sendVideo() {
|
||||
this._roomVM._pickAndSendVideo();
|
||||
}
|
||||
|
||||
get canSend() {
|
||||
return !this._isEmpty;
|
||||
}
|
||||
|
||||
async setInput(text) {
|
||||
const wasEmpty = this._isEmpty;
|
||||
this._isEmpty = text.length === 0;
|
||||
if (wasEmpty && !this._isEmpty) {
|
||||
this._roomVM._room.ensureMessageKeyIsShared();
|
||||
}
|
||||
if (wasEmpty !== this._isEmpty) {
|
||||
this.emitChange("canSend");
|
||||
}
|
||||
}
|
||||
|
||||
get kind() {
|
||||
return "composer";
|
||||
}
|
||||
}
|
||||
|
||||
function imageToInfo(image) {
|
||||
return {
|
||||
w: image.width,
|
||||
|
|
Loading…
Reference in a new issue