/
wax_boy
/
semaphore_custom
Обзор
Документация
Войти
/
wax_boy
/
semaphore_custom
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop
web/src/lib/templateList.js
82 строки
2 KB
Alex
feat: customize semaphore task controls
04 авг 2026, 19:06
04 авг 2026, 19:06
a0a5136
Код
Авторство
О чём код?
function getResourceName(resources, collectionName, id) { const collection = resources?.[collectionName] || []; return (collection.find((item) => item.id === id) || {}).name || ''; } function getEnvironmentNames(template, resources) { if (!Array.isArray(template.environment_ids)) { return []; } return template.environment_ids .map((id) => getResourceName(resources, 'environment', id)) .filter((name) => name !== ''); } export function getTemplateSearchText(template, resources = {}) { const status = template.last_task?.status || 'not launched'; return [ template.name, template.playbook, status, getResourceName(resources, 'inventory', template.inventory_id), getResourceName(resources, 'repositories', template.repository_id), ...getEnvironmentNames(template, resources), ] .filter((value) => value != null && value !== '') .join(' ') .toLowerCase(); } export function filterTemplates(templates, search, resources = {}) { const query = (search || '').trim().toLowerCase(); if (query === '') { return templates; } return templates.filter((template) => getTemplateSearchText(template, resources).includes(query)); } export function getNextTemplateCopyName(sourceName, existingNames) { const names = new Set(existingNames); const firstCopyName = `Copy of ${sourceName}`; if (!names.has(firstCopyName)) { return firstCopyName; } let copyNumber = 2; while (names.has(`Copy ${copyNumber} of ${sourceName}`)) { copyNumber += 1; } return `Copy ${copyNumber} of ${sourceName}`; } export function prepareTemplateCopyPayload(template, name) { const payload = { ...template, name, environment_ids: Array.isArray(template.environment_ids) ? [...template.environment_ids] : [], arguments: template.arguments || '[]', }; [ 'id', 'last_task', 'last_task_id', 'tasks', 'permissions', 'user_permissions', 'vault_key_id', 'build_template_id', ].forEach((field) => { delete payload[field]; }); return payload; }