fox-block-builder
Version:
Maintainable code for loop slack-block-kit-like modal builder
125 lines • 5.05 kB
JavaScript
/* 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
;