76 lines
3.3 KiB
JavaScript
76 lines
3.3 KiB
JavaScript
import Component from '../../../../core/components/component/Component';
|
||
import ButtonComponent from '../../../../core/components/button-component/ButtonComponent';
|
||
import './CreateApiComponent.css';
|
||
import storageApi from '../../api/StorageServiceAPI';
|
||
import Modal from '../../../../core/components/modal/Modal';
|
||
|
||
class CreateApiComponent extends Component {
|
||
constructor (container) {
|
||
super('#create-api', container);
|
||
|
||
this.inputKey = this.mainNode.querySelector('.Create__key');
|
||
this.inputServiceName = this.mainNode.querySelector('.Create__serviceName');
|
||
this.inputDescription = this.mainNode.querySelector('.Create__description');
|
||
this.inputAuthor = this.mainNode.querySelector('.Create__author');
|
||
this.createError = this.mainNode.querySelector('.Create__error-container');
|
||
this.header = this.mainNode.querySelector('.Create__title');
|
||
this.body = this.mainNode.querySelector('.Create__body');
|
||
this.footer = this.mainNode.querySelector('.Create__footer');
|
||
this.form = this.mainNode.querySelector('.Create__form');
|
||
this.editor = this.mainNode.querySelector('.Create__editor');
|
||
this.button = this.createComponent(ButtonComponent, this.footer, 'Создать', 'btn btn-outline-primary Create__send');
|
||
this.content = {
|
||
headerNode: this.header,
|
||
contentNode: this.body,
|
||
footerNode: this.footer
|
||
};
|
||
this.modal = this.createComponent(Modal, document.body, this.content);
|
||
this.modal.container.classList.add('Large__container');
|
||
this.modal.content.classList.add('Scroll__body');
|
||
|
||
this.button.subscribe('click', () => {
|
||
this.send();
|
||
});
|
||
}
|
||
|
||
show = () => {
|
||
this.modal.show();
|
||
}
|
||
|
||
parseString = async (text) => {
|
||
const obj = await JSON.parse(text);
|
||
return obj;
|
||
}
|
||
|
||
send = async () => {
|
||
try {
|
||
const obj = await JSON.parse(this.editor.textContent);
|
||
this.data = {
|
||
key: this.inputKey.value,
|
||
value: obj,
|
||
description: this.inputDescription.value,
|
||
service_name: this.inputServiceName.value,
|
||
author: this.inputAuthor.value
|
||
};
|
||
|
||
try {
|
||
await storageApi.create(this.data);
|
||
this.createError.textContent = '';
|
||
this.modal.hide();
|
||
this.next('renderTable');
|
||
} catch (err) {
|
||
if (err.response.status === 502) {
|
||
this.createError.textContent = 'Заполните все необходимые поля для создания хранилища';
|
||
} else if (err.response.status === 404) {
|
||
this.createError.textContent = 'Не удалось создать хранилище. Возможно Вы используете не уникальное название хранилища';
|
||
} else {
|
||
this.createError.textContent = 'Что-то пошло не так';
|
||
}
|
||
}
|
||
} catch {
|
||
this.createError.textContent = 'Тело хранилища не соответствует требованиям';
|
||
}
|
||
}
|
||
}
|
||
export default CreateApiComponent;
|