Created
October 23, 2018 13:28
-
-
Save BerezhniyDmitro/5b4b1bd0e6e58729f050ac3dab9c1149 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 = []; | |
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