fox-block-builder
Version:
Maintainable code for loop slack-block-kit-like modal builder
108 lines • 4.59 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.fillPluginFormBlock = exports.arrayToString = exports.setBlockValueData = void 0;
const class_transformer_1 = require("class-transformer");
const loop_1 = require("../../internal/constants/loop");
const internal_1 = require("../../internal");
const plugin_form_block_dto_1 = require("./plugin-form-block.dto");
const setBlockValueData = ({ value, obj }) => {
const isObject = obj.value && typeof obj.value === 'object' && !Array.isArray(value);
if (isObject) {
obj.text = obj.value.label;
}
if (obj.value === null) {
return null;
}
/** Если тип value - строка и нет поля text - это текстовое поле */
if (!obj.text && typeof value === 'string') {
obj.text = value;
}
const blockValue = isObject ? obj.value.value : obj.value;
/** Также обрабатываем массивы */
/** Если значение не задано - так и возвращаем */
if (blockValue === undefined) {
return undefined;
}
/** Если массив значений */
if (Array.isArray(blockValue)) {
/** Задаем флаг у обьекта */
obj.multi = true;
/** Если массив labelInValue */
if (typeof blockValue[0] === 'object' &&
'label' in obj.value[0] &&
'value' in obj.value[0]) {
const labels = [];
const values = [];
blockValue.forEach((val) => {
labels.push(val.label);
values.push(val.value);
});
obj.text = labels.join(loop_1.LOOP_JOIN_ARG);
return values;
}
else {
/** Если другой массив */
return blockValue;
}
}
return String(blockValue);
};
exports.setBlockValueData = setBlockValueData;
/**
* Преобразование из массива в строку
*
* @param params.value - значение поля
* @returns - строка, если значение было массивом
*/
const arrayToString = ({ value }) => {
/** Если значение не задано - так и возвращаем */
if (!value)
return undefined;
/** Если массив - клеим */
if (Array.isArray(value))
return value.join(loop_1.LOOP_JOIN_ARG);
/** В прочих случаях отдаем строку */
return String(value);
};
exports.arrayToString = arrayToString;
const fillPluginFormBlock = (block) => {
switch (block.elementType) {
case internal_1.ElementType.UserMultiSelect:
case internal_1.ElementType.StaticMultiSelect:
case internal_1.ElementType.ChannelsMultiSelect:
case internal_1.ElementType.Checkboxes:
return (0, class_transformer_1.plainToInstance)(plugin_form_block_dto_1.PluginFormMultiBlock, block, {
exposeDefaultValues: true,
});
case internal_1.ElementType.Button:
case internal_1.ElementType.DatePicker:
case internal_1.ElementType.DateTimePicker:
case internal_1.ElementType.TimePicker:
case internal_1.ElementType.Image:
case internal_1.ElementType.Overflow:
case internal_1.ElementType.TextInput:
case internal_1.ElementType.RadioButtons:
case internal_1.ElementType.StaticSelect:
case internal_1.ElementType.ExternalSelect:
case internal_1.ElementType.UserSelect:
case internal_1.ElementType.ConversationSelect:
case internal_1.ElementType.ChannelSelect:
case internal_1.ElementType.ExternalMultiSelect:
case internal_1.ElementType.ConversationsMultiSelect:
case internal_1.ElementType.URLInput:
case internal_1.ElementType.EmailInput:
case internal_1.ElementType.NumberInput:
case internal_1.ElementType.FileInput:
case internal_1.ElementType.PhoneInput:
case internal_1.ElementType.DirectorySelect:
case internal_1.ElementType.OneSSelect:
case internal_1.ElementType.ImageSelect:
case internal_1.ElementType.DateRangePicker:
case internal_1.ElementType.Addable:
return (0, class_transformer_1.plainToInstance)(plugin_form_block_dto_1.PluginFormSingleBlock, block, {
exposeDefaultValues: true,
});
}
};
exports.fillPluginFormBlock = fillPluginFormBlock;
//# sourceMappingURL=plugin-form-block.utils.js.map