Skip to content

Instantly share code, notes, and snippets.

@BerezhniyDmitro
Created October 23, 2018 13:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save BerezhniyDmitro/5b4b1bd0e6e58729f050ac3dab9c1149 to your computer and use it in GitHub Desktop.
Save BerezhniyDmitro/5b4b1bd0e6e58729f050ac3dab9c1149 to your computer and use it in GitHub Desktop.
import _ from 'lodash';
import { EmptySchemaException, DuplicateCodeBlockInStack } from '../exception/CodeBlockExceptions';
import codeBlockPromiseFactory from '../factory/CodeBlockPromiseFactory.js';
/**
* Дефолтный блок
*
* @type {{placeholder: string, active: boolean}}
*/
const defaultCodeBlock = {
placeholder: 'Новый блок',
active: true
};
/**
* Сервис для работы с блоками кода
*
* @type {CodeBlockService}
*/
const codeBlockService = class CodeBlockService {
constructor(schema = {}) {
if (_.isEmpty(schema)) {
throw new EmptySchemaException(schema);
}
this.schema = schema;
this.stackCodeBlocks = [];
this.names = [];
};
/**
* Отдает дефолтный блок для вставки в список
*
* @returns {{placeholder: string, active: boolean}}
*/
buildDefaultCodeBlock() {
defaultCodeBlock.schema = _.cloneDeep(this.schema);
return defaultCodeBlock;
};
/**
* Метод проверяет не является ли добавляемый блок дубликатом в списке.
*
* @param newItem
*/
preValidateToAdd(newItem) {
// console.log('_.some()'); //FIXME
// console.log(_.some(this.stackCodeBlocks, newItem)); //FIXME
// console.log('newItem'); //FIXME
// console.log(newItem); //FIXME
//
// console.log('this.stackCodeBlocks'); //FIXME
// console.log(this.stackCodeBlocks); //FIXME
// const item = this.stackCodeBlocks.find(item => item.alias === newItem.alias);
if (_.some(this.stackCodeBlocks, newItem) && ! newItem.multiplay) {
throw new DuplicateCodeBlockInStack({...newItem});
}
};
/**
* Метод добавляет обещания для валидации блока кода перед отправкой на сервер.
*/
addAliasForCreateValidationPromise(alias) {
this.names.push(alias);
}
/**
* Метод возвращает все промисы валидации для всех блоков на странице
* @returns {Promise<any[]>}
*/
createAllValidationPromises() {
// console.log('this.names'); //FIXME
// console.log(this.names); //FIXME
let promises = this.names.map((name) => codeBlockPromiseFactory.factory(name));
return Promise.all(promises);
}
/**
* Метод добавляет блок в стек, стек нужен для проверки на дубликацию
*
* @param newItem
*/
addCodeBlockToStack(newItem) {
this.stackCodeBlocks.push(newItem);
// console.log(' this.stackCodeBlocks'); //FIXME
// console.log( this.stackCodeBlocks); //FIXME
};
/**
* Метод удаляет блок со стека
*
* @param index
*/
removeCodeBlock(index) {
this.stackCodeBlocks.splice(index, 1);
};
};
export default codeBlockService;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment