validation of editor is modified

This commit is contained in:
병준 박 2019-12-09 10:53:25 +09:00
parent 2a6623f7b0
commit aa364cac67
3 changed files with 103 additions and 26 deletions

View File

@ -10,6 +10,7 @@
class="ucap-message-write-editor" class="ucap-message-write-editor"
contenteditable="true" contenteditable="true"
(paste)="onPasteEditor($event)" (paste)="onPasteEditor($event)"
(input)="onInputEditor()"
></div> ></div>
<input type="file" #fileInput style="display: none" multiple /> <input type="file" #fileInput style="display: none" multiple />
<mat-list> <mat-list>
@ -52,6 +53,15 @@
</button> </button>
</div> </div>
<div class="editor-actions-spacer"></div> <div class="editor-actions-spacer"></div>
<div>
<span
[class.editor-length-invalid]="
0 === contentLength || 1000 < contentLength
"
>{{ contentLength }}</span
>/1000
</div>
<div class="editor-actions-spacer"></div>
<div class="editor-actions"> <div class="editor-actions">
<button <button
mat-stroked-button mat-stroked-button
@ -67,10 +77,18 @@
</button> </button>
</mat-menu> </mat-menu>
<ucap-split-button [menu]="appMenu" (buttonClick)="onClickSend()" <ucap-split-button
[menu]="appMenu"
(buttonClick)="onClickSend()"
[disabled]="
messageWriteForm.invalid ||
!receiverList ||
0 === receiverList.length ||
0 === contentLength ||
1000 < contentLength
"
>보내기</ucap-split-button >보내기</ucap-split-button
> >
<!-- [disabled]="messageWriteForm.invalid" -->
</div> </div>
</mat-card-actions> </mat-card-actions>
</form> </form>

View File

@ -39,6 +39,10 @@
} }
} }
.editor-length-invalid {
color: crimson;
}
mat-card-actions { mat-card-actions {
display: flex; display: flex;
width: 100%; width: 100%;

View File

@ -77,6 +77,7 @@ export class WriteComponent implements OnInit, OnDestroy, AfterViewInit {
attachmentList: File[]; attachmentList: File[];
fileUploadItem: FileUploadItem; fileUploadItem: FileUploadItem;
receiverList: UserInfo[] = []; receiverList: UserInfo[] = [];
contentLength = 0;
constructor( constructor(
private formBuilder: FormBuilder, private formBuilder: FormBuilder,
@ -87,8 +88,7 @@ export class WriteComponent implements OnInit, OnDestroy, AfterViewInit {
ngOnInit() { ngOnInit() {
this.messageWriteForm = this.formBuilder.group({ this.messageWriteForm = this.formBuilder.group({
receiverList: ['', [Validators.required]], title: ['', []]
title: ['', [Validators.required]]
}); });
} }
@ -143,9 +143,15 @@ export class WriteComponent implements OnInit, OnDestroy, AfterViewInit {
); );
this.insertNode(text, true); this.insertNode(text, true);
this.checkContentLength();
return false; return false;
} }
onInputEditor() {
this.checkContentLength();
}
onRemovedReceiver(receiver: UserInfo) { onRemovedReceiver(receiver: UserInfo) {
const index = this.receiverList.indexOf(receiver); const index = this.receiverList.indexOf(receiver);
@ -183,32 +189,39 @@ export class WriteComponent implements OnInit, OnDestroy, AfterViewInit {
} }
} }
private sendMessage(reservationDate?: moment.Moment) { private checkContentLength() {
const contentList: Content[] = this.generateContent(); const result = this.parseContent();
if (!contentList || 0 === contentList.length) { if (!result) {
return; return;
} }
const listOrder: ContentType[] = []; const { textContent } = result;
const textContent: { text: string }[] = [];
const recvUserList: { userSeq: number; userName: string }[] = [];
const files: File[] = [];
const title = this.messageWriteForm.get('title').value;
contentList.forEach(v => { if (!textContent || 0 === textContent.length) {
listOrder.push(v.contentType); this.contentLength = 0;
switch (v.contentType) { } else {
case ContentType.Text: let len = 0;
textContent.push({ text: v.content as string }); textContent.forEach(c => {
break; len += c.text.length;
case ContentType.Image:
case ContentType.AttachFile:
files.push(v.content as File);
break;
default:
break;
}
}); });
this.contentLength = len;
}
}
private sendMessage(reservationDate?: moment.Moment) {
const result = this.parseContent();
if (!result) {
return;
}
const { listOrder, textContent, files } = result;
if (!listOrder || 0 === listOrder.length) {
return;
}
const recvUserList: { userSeq: number; userName: string }[] = [];
const title = this.messageWriteForm.get('title').value;
this.receiverList.forEach(v => { this.receiverList.forEach(v => {
recvUserList.push({ recvUserList.push({
@ -234,6 +247,48 @@ export class WriteComponent implements OnInit, OnDestroy, AfterViewInit {
}); });
} }
private parseContent():
| {
listOrder: ContentType[];
textContent: { text: string }[];
files: File[];
}
| undefined {
const contentList: Content[] = this.generateContent();
if (!contentList || 0 === contentList.length) {
return;
}
const listOrder: ContentType[] = [];
const textContent: { text: string }[] = [];
const files: File[] = [];
contentList.forEach(v => {
listOrder.push(v.contentType);
switch (v.contentType) {
case ContentType.Text:
let content = v.content as string;
if ('\n' === content.charAt(content.length - 1)) {
content = content.substring(0, content.length - 2);
}
textContent.push({ text: content });
break;
case ContentType.Image:
case ContentType.AttachFile:
files.push(v.content as File);
break;
default:
break;
}
});
return {
listOrder,
textContent,
files
};
}
private generateContent(): Content[] { private generateContent(): Content[] {
const contentList: Content[] = []; const contentList: Content[] = [];