Skip to content

Instantly share code, notes, and snippets.

@BerezhniyDmitro
Created October 23, 2018 14:40
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/bd3cfb189195e861ce911e106c5e3971 to your computer and use it in GitHub Desktop.
Save BerezhniyDmitro/bd3cfb189195e861ce911e106c5e3971 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 = [];
};
/**
* Отдает дефолтный блок для вставки в список
*
* @returns {{placeholder: string, active: boolean}}
*/
buildDefaultCodeBlock() {
defaultCodeBlock.schema = _.cloneDeep(this.schema);
return defaultCodeBlock;
};
/**
* Метод проверяет не является ли добавляемый блок дубликатом в списке.
*
* @param newItem
*/
preValidateToAdd(newItem) {
if (_.some(this.stackCodeBlocks, newItem) && ! newItem.multiplay) {
throw new DuplicateCodeBlockInStack({...newItem});
}
};
/**
* Метод возвращает все промисы валидации для всех блоков на странице
* @returns {Promise<any[]>}
*/
createAllValidationPromises() {
const promises = this.stackCodeBlocks.filter(block => block.active)
.map((codeBlock) => codeBlock.alias)
.map((alias) => codeBlockPromiseFactory.factory(alias));
return Promise.all(promises);
}
/**
* Метод добавляет блок в стек, стек нужен для проверки на дубликацию
*
* @param newItem
*/
addCodeBlockToStack(newItem) {
this.stackCodeBlocks.push(newItem);
};
/**
* Метод удаляет блок со стека
*
* @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