UNPKG

fox-block-builder

Version:

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

125 lines 5.05 kB
"use strict"; /* eslint-disable max-len */ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Utilities = void 0; exports.BlockCollection = BlockCollection; exports.AttachmentCollection = AttachmentCollection; exports.OptionCollection = OptionCollection; exports.OptionGroupCollection = OptionGroupCollection; exports.buildBlock = buildBlock; exports.buildBlocks = buildBlocks; exports.getModalAnalytics = getModalAnalytics; const lib_1 = require("../internal/lib"); __exportStar(require("./block-parser"), exports); const getBuiltCollection = (...builders) => lib_1.Builder.pruneUndefinedFromArray(builders.flat()).map((builder) => builder && builder.build()); /** * @description Creates and returns an array of built blocks. Behaves in the same way as all appending methods, such as Surface.blocks(). */ function BlockCollection(...blocks) { return getBuiltCollection(...blocks); } /** * @description Creates and returns an array of built attachments. Behaves in the same way as all appending methods, such as Message.attachments(). */ function AttachmentCollection(...attachments) { return getBuiltCollection(...attachments); } function OptionCollection(...options) { return getBuiltCollection(...options); } function OptionGroupCollection(...optionGroups) { return getBuiltCollection(...optionGroups); } /** * @description Returns the block passed into the function as a built block, an object that conforms to the Slack API. */ function buildBlock(block) { return block.build(); } /** * @description Creates and returns an array of built blocks. Behaves in the same way as all appending methods, such as Surface.blocks(). */ function buildBlocks(...blocks) { return getBuiltCollection(...blocks); } /** Обработка аналитики блоков */ function getModalAnalytics(form) { const result = []; for (const block of form.blocks) { /** Если есть аналитика */ if (block.analytics) { const { analyticId, fieldId, labelId, refs } = block.analytics; const blockItemData = []; if (!refs) { /** Если надо добавляем вопрос */ if (labelId) { blockItemData.push({ fieldId: labelId, value: block.label || 'Поле не задано', }); } /** Добавляем ответ */ blockItemData.push({ fieldId, value: block.text || block.value || 'Поле не задано', }); } else { /** Если есть референсы */ for (const ref of refs) { const refBlock = form.getBlockById(ref.blockId); /** Добавляем значение */ if (refBlock && ref.field && (refBlock === null || refBlock === void 0 ? void 0 : refBlock.value) === ref.value) { blockItemData.push({ fieldId: ref.field, value: block.text || block.value || 'Поле не задано', }); } } } const lastAnalytics = result[result.length - 1]; const hasBlockData = lastAnalytics && lastAnalytics.analiticData.itemData.some((iData) => blockItemData .map(({ fieldId: bFieldId }) => bFieldId) .includes(iData.fieldId)); if (hasBlockData || !lastAnalytics) { /** Добавляем аналитику в общий массив */ result.push({ id: analyticId, analiticData: { itemData: blockItemData, }, }); } else { lastAnalytics.analiticData.itemData.push(...blockItemData); } } } return result; } const utilities = { AttachmentCollection, BlockCollection, OptionCollection, OptionGroupCollection, buildBlock, buildBlocks, getModalAnalytics, }; exports.Utilities = utilities; //# sourceMappingURL=index.js.map