blob: 98d298b7698fd9e5f78a8d97686b9c5a8523c435 [file] [log] [blame]
/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { HttpClient } from '@angular/common/http';
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';
import { ConfigurationService, MessageService, TicketService } from '@zeppelin/services';
import { NzModalRef } from 'ng-zorro-antd/modal';
import { NzUploadFile } from 'ng-zorro-antd/upload';
import { MessageListener, MessageListenersManager } from '@zeppelin/core';
import { ImportNote, MessageReceiveDataTypeMap, OP } from '@zeppelin/sdk';
@Component({
selector: 'zeppelin-note-import',
templateUrl: './note-import.component.html',
styleUrls: ['./note-import.component.less'],
changeDetection: ChangeDetectionStrategy.OnPush
})
export class NoteImportComponent extends MessageListenersManager implements OnInit {
noteImportName?: string;
importUrl?: string;
errorText?: string;
importLoading = false;
wsMaxLimit?: number;
@MessageListener(OP.IMPORT_NOTE)
noteImported(_: MessageReceiveDataTypeMap[OP.IMPORT_NOTE]) {
this.nzModalRef.destroy();
}
importNote() {
this.errorText = '';
this.importLoading = true;
this.httpClient.get(this.importUrl ?? '').subscribe(
data => {
this.importLoading = false;
this.processImportJson(data);
this.cdr.markForCheck();
},
() => {
this.errorText = 'Unable to Fetch URL';
this.importLoading = false;
this.cdr.markForCheck();
},
() => {}
);
}
beforeUpload = (file: NzUploadFile): boolean => {
this.errorText = '';
if (file.size !== undefined && this.wsMaxLimit && file.size > this.wsMaxLimit) {
this.errorText = 'File size limit Exceeded!';
} else {
const reader = new FileReader();
// eslint-disable-next-line @typescript-eslint/no-explicit-any
reader.readAsText(file as any);
reader.onloadend = () => {
this.processImportJson(reader.result);
};
}
this.cdr.markForCheck();
return false;
};
processImportJson(data: unknown) {
let result = data;
if (typeof result !== 'object') {
try {
result = JSON.parse(result as string);
} catch (e) {
this.errorText = 'JSON parse exception';
return;
}
}
// @ts-ignore
if (result.paragraphs && result.paragraphs.length > 0) {
if (!this.noteImportName) {
// @ts-ignore
this.noteImportName = result.name;
} else {
// @ts-ignore
result.name = this.noteImportName;
}
this.messageService.importNote(result as ImportNote['note']);
} else {
this.errorText = 'Invalid JSON';
}
this.cdr.markForCheck();
}
constructor(
public messageService: MessageService,
private ticketService: TicketService,
private configurationService: ConfigurationService,
private cdr: ChangeDetectorRef,
private nzModalRef: NzModalRef,
private httpClient: HttpClient
) {
super(messageService);
}
async ngOnInit() {
this.wsMaxLimit = await this.configurationService.fetchWsMaxMessageSize();
}
}