npm i fox-loop-modal-utils
Модуль предоставляет несколько классов, упрощающих создание элементов для плагина Loop
Пример использования:
import { Blocks } from 'fox-slack-block-builder';
import { BlockId } from 'fox-loop-modal-utils';
Blocks.Input({
label: 'Адрес электронной почты пользователя, которому открываем доступ',
blockId: BlockId('blockId', {
/** Надо ли дополнительно задать название блоку вручную (нужно когда у разных блоков один custom id) */
name: 'имяБлока',
/** Надо ли при сабмите формы проставить в пф value поля вместо text/label */
value: true,
/** Номер custom field в ПФ */
custom: 123456,
/** Создать id для поля LoopForm */
loop: true,
/** Ключ хендбука для простановки опций в селекте */
handbook: 'bu',
/** Заполнение годами по текущий начиная с заданного */
setYear: {
/** Год, с которого начать */
since: 1990,
/** флажок заполнения одним числом (2020) - 'single' или двумя (2020-2021) - 'double' */
type: 'single',
},
/** Добавляет блок в название задачи */
asTitle: true,
/** Задает параметры аналитики */
analytics: { id: 123456, field: 123456 },
/** Показывать блок в соотв. команде - 'forFoxford' | 'forTeachers' */
forTeam: 'forFoxford',
/** нужно ли проставить изначальную дату относительно сегодня */
initialDate: {
/** Дни +/- от сегодня, например -1 или 5 */
days: 2,
/** Какие учитывать дни, рабочие - 'business' или все - 'regular' */
type: 'business',
},
/** Позволяет ограничивать доступ к блоку добавляя в него access_modalAccess */
access: 'modalAccess',
/** Флаг удаления блока из описания задачи */
exclude: false,
}),
});
import { ViewMeta } from 'fox-loop-modal-utils';
const meta = new ViewMeta({
/** Номер шаблона планфикса */
template: 1234567890;
/** Название задачи */
title: 'Название задачи';
/** Кастомные поля для шаблонов */
customValue: [
{ id: 123456; value: 123456 },
];
/** ID проекта планфикса */
projectId: 123456;
/** Статус задачи */
statusSet: 1;
/** Ответственные */
workers: {
users: { id: [123456, 123456] };
groups: { id: [123456, 123456] };
};
/** Нужно ли установить ответственных */
setWorkers?: true;
/** Статус задачи */
status?: 2
/** General задачи */
general?: 123456;
/** Родительская задача */
parentTask?: 123456;
parentFieldId?: 123456;
emailNameInBody?: true;
tag?: 'тег';
subject?: 'тема';
isOwner?: true;
stage?: 'стадия заявки';
/** Канал сообщения в Loop */
channelId?: 'qwerty12356';
/** ID сообщения в Loop */
messageId?: 'qwerty12356';
/** Действия с описанием задачи, если оно уже есть */
descAction?: 'keep' | 'add' | 'set';
/** Отправка сообщений при сабмите формы */
postMessage?: 'сообщение';
/** Дата начала */
beginDateTime?: '11.12.1990';
});
import { Blocks } from 'fox-slack-block-builder';
import { ViewMap } from 'fox-loop-modal-utils';
const block = Blocks.Input();
const blocks = [block, block];
const map = new ViewMap({
/** ID блока, которому задаем видимость */
blockId: {
/** [ID блока, на значения которого ориентируемся]: [{верное значение или его часть}, {верное значение или его часть}] */
refBlockId: ['value'],
},
})
.setForBlockId('blockId', { refBlockId: ['value'] })
.setForBlocks(blocks, {
refBlockId: ['value'],
})
.setForSingleBlock(block, { productType: ['courses'] });
const analytics = new ViewAnalytics({
/** ID аналитики */
analyticId: 123456,
/** Значения для блоков */
blockFields: {
blockId: 123456,
},
}).setForBlockValue({
/** Задать значения по значению одного из блоков */
/** ID блока */
blockId: 'blockId',
/** Значение */
value: 'value',
/** Значения аналитики для других блоков */
blockFields: {
otherBlockId: 12345,
},
});
import { Blocks, Elements, Modal } from 'fox-slack-block-builder';
import { LoopModalBuilder } from 'fox-loop-modal-utils';
const view = Modal({
title: 'Название',
close: 'Назад',
submit: 'Выйти',
}).blocks(
Blocks.Section({
text: 'text',
}).accessory(
Elements.Button({
text: 'Перейти',
value: 'value',
}),
),
Blocks.Section({
text: 'Text',
}).accessory(
Elements.Button({
text: 'Перейти',
value: 'value',
}),
),
);
export const page = LoopModalBuilder.Page({ view });
import { Blocks, Elements, Modal } from 'fox-slack-block-builder';
import { LoopModalBuilder } from 'fox-loop-modal-utils';
const view = Modal({
title: 'Название',
close: 'Назад',
submit: 'Выйти',
}).blocks(
Blocks.Section({
text: 'text',
}).accessory(
Elements.Button({
text: 'Перейти',
value: 'value',
}),
),
Blocks.Section({
text: 'Text',
}).accessory(
Elements.Button({
text: 'Перейти',
value: 'value',
}),
),
);
export const menu = LoopModalBuilder.Menu({ view });
import { Blocks, Elements, Modal } from 'fox-slack-block-builder';
import { ViewAnalyticsBuilder, ViewMapBuilder, ViewMetaBuilder } from './src';
import { LoopModalBuilder } from './src/entities/modal-builder';
enum ECallbackId {
CallbackId = 'callbackId',
}
const meta = ViewMetaBuilder.Create();
const view = Modal({
title: 'Название',
close: 'Назад',
submit: 'Выйти',
}).blocks(
/** Блоки */
Blocks.Input({
blockId: 'userBlock',
label: 'Выбор пользователя',
}).element(Elements.UserSelect()),
);
const map = ViewMapBuilder.Create();
const analytics = ViewAnalyticsBuilder.Create({
analyticId: 123456,
blockFields: {},
});
export const form = LoopModalBuilder.Form({
meta,
view,
map,
analytics,
callbackId: ECallbackId.CallbackId,
});