fox-block-builder
Version:
Maintainable code for loop slack-block-kit-like modal builder
124 lines • 5.1 kB
JavaScript
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ModalRdo = exports.ModalViewRdo = void 0;
const class_transformer_1 = require("class-transformer");
const modal_block_rdo_1 = require("./modal-block.rdo");
const findBlockByParams = (block, params) => {
return Object.keys(params)
.map((key) => {
var _a;
switch (key) {
case 'access':
/** Ищем также по доступу */
return block.access === params.access;
case 'forTeams':
/** Ищем также по командам */
return (_a = block.forTeams) === null || _a === void 0 ? void 0 : _a.some((teamId) => { var _a; return (_a = params.forTeams) === null || _a === void 0 ? void 0 : _a.includes(teamId); });
case 'customField':
return 'customField' in block
? block.customField === params.customField
: true;
}
})
.every((v) => !!v);
};
/** Задает класс блока по его типу */
const setBlockType = (block) => {
const type = block.type;
switch (type) {
case 'divider':
return (0, class_transformer_1.plainToInstance)(modal_block_rdo_1.DividerBlockRdo, block);
case 'input':
return (0, class_transformer_1.plainToInstance)(modal_block_rdo_1.InputBlockRdo, block);
case 'section':
return (0, class_transformer_1.plainToInstance)(modal_block_rdo_1.SectionBlockRdo, block);
case 'header':
return (0, class_transformer_1.plainToInstance)(modal_block_rdo_1.HeaderBlockRdo, block);
}
};
const transformBlockType = ({ value }) => value === null || value === void 0 ? void 0 : value.map((block) => setBlockType(block));
class ModalViewRdo {
constructor() {
this.private_metadata = '{}';
this.blocks = [];
}
filterBlocks(filterFn) {
const isDefinedFilter = (b) => !!b;
this.blocks = this.blocks.filter(filterFn || isDefinedFilter);
return this;
}
/** Получение блока по айди */
getBlock(blockId, params) {
return this.blocks.find((block) => {
const idOk = block.block_id.includes(blockId);
/** Задаем метч по параметрам */
const paramOk = params ? findBlockByParams(block, params) : true;
return paramOk && idOk;
});
}
/** Убираем блоки по (части) ID и параметрам */
removeBlocksById(blockIdOrPart, params) {
this.blocks = this.blocks.filter((block) => {
const idFound = block.block_id.includes(blockIdOrPart);
/** Задаем метч по параметрам */
const paramFound = params ? findBlockByParams(block, params) : false;
return !paramFound || !idFound;
});
return this;
}
}
exports.ModalViewRdo = ModalViewRdo;
__decorate([
(0, class_transformer_1.Exclude)()
], ModalViewRdo.prototype, "modalName", void 0);
__decorate([
(0, class_transformer_1.Exclude)()
], ModalViewRdo.prototype, "type", void 0);
__decorate([
(0, class_transformer_1.Expose)()
], ModalViewRdo.prototype, "callback_id", void 0);
__decorate([
(0, class_transformer_1.Expose)()
], ModalViewRdo.prototype, "private_metadata", void 0);
__decorate([
(0, class_transformer_1.Expose)()
], ModalViewRdo.prototype, "title", void 0);
__decorate([
(0, class_transformer_1.Expose)()
], ModalViewRdo.prototype, "submit", void 0);
__decorate([
(0, class_transformer_1.Expose)()
], ModalViewRdo.prototype, "close", void 0);
__decorate([
(0, class_transformer_1.Expose)(),
(0, class_transformer_1.Transform)(transformBlockType)
], ModalViewRdo.prototype, "blocks", void 0);
__decorate([
(0, class_transformer_1.Expose)()
], ModalViewRdo.prototype, "fetchValues", void 0);
class ModalRdo {
constructor() {
this.map = null;
}
}
exports.ModalRdo = ModalRdo;
__decorate([
(0, class_transformer_1.Expose)()
], ModalRdo.prototype, "name", void 0);
__decorate([
(0, class_transformer_1.Expose)()
], ModalRdo.prototype, "type", void 0);
__decorate([
(0, class_transformer_1.Expose)()
], ModalRdo.prototype, "map", void 0);
__decorate([
(0, class_transformer_1.Expose)(),
(0, class_transformer_1.Type)(() => ModalViewRdo)
], ModalRdo.prototype, "view", void 0);
//# sourceMappingURL=modal.rdo.js.map
;