UNPKG

fox-block-builder

Version:

Maintainable code for loop slack-block-kit-like modal builder

90 lines 4.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PluginModalMapBuilder = void 0; /** Конструктор обьекта видимости блоков */ class PluginModalMapBuilder { constructor(values = {}) { this.values = {}; /** Для одного блока по id */ this.forIds = (...blockIds) => ({ byIds: (...refs) => { for (const blockId of blockIds) { for (const ref of refs) { this.addValues([blockId, ref]); } } /** Отдаем обьект для дальнейших манипуляций */ return this; }, byBuilders: (...refs) => { for (const [refBlock, refValues] of refs) { const refId = refBlock.buildToObject().block_id; /** Если есть айди - ставим значения */ if (refId) { this.forIds(...blockIds).byIds([refId, refValues]); } } /** Отдаем обьект для дальнейших манипуляций */ return this; }, }); /** Для одного блока */ this.forBuilders = (...builders) => ({ /** Простановка по id реф блоков @see TPluginModalMapIdRef */ byIds: (...refs) => { for (const ref of refs) { const values = []; /** Обходим билдеры */ for (const builder of builders) { const block_id = builder.buildToObject().block_id; /** Если есть айди - ставим значения */ values.push([block_id, ref]); } this.addValues(...values); } /** Отдаем обьект для дальнейших манипуляций */ return this; }, /** Простановка по билдерам */ byBuilders: (...refs) => { /** Обходим рефы */ for (const [refBlock, refValues] of refs) { const refId = refBlock.buildToObject().block_id; /** Если есть айди - ставим значения */ if (refId) { this.forBuilders(...builders).byIds([refId, refValues]); } } /** Отдаем обьект для дальнейших манипуляций */ return this; }, }); this.values = values; this.forIds.bind(this); this.forBuilders.bind(this); } addValues(...values) { var _a, _b; /** Сложная формула забивания вложенных обьектов */ for (const [blockId, [refId, refValues]] of values) { /** Задаем значение, если его не было */ if (!this.values[blockId]) { this.values[blockId] = {}; } /** Задаем вложенное значение, если его не было */ if (!this.values[blockId][refId]) { this.values[blockId][refId] = []; } /** Набиваем вложенный массив значениями */ for (const refBlockValue of refValues) { if (!((_b = (_a = this.values[blockId]) === null || _a === void 0 ? void 0 : _a[refId]) === null || _b === void 0 ? void 0 : _b.includes(refBlockValue))) { this.values[blockId][refId].push(refBlockValue); } } } /** Отдаем обьект для дальнейших манипуляций */ return this; } } exports.PluginModalMapBuilder = PluginModalMapBuilder; //# sourceMappingURL=plugin-modal-map.builder.js.map