Created
October 23, 2018 14:40
-
-
Save BerezhniyDmitro/bd3cfb189195e861ce911e106c5e3971 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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