fox-block-builder
Version:
Maintainable code for loop slack-block-kit-like modal builder
90 lines • 4.2 kB
JavaScript
"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