olivetin/frontend/resources/vue/utils/rerunArguments.js

69 lines
1.5 KiB
JavaScript

import { needsArgumentForm } from './needsArgumentForm.js'
const nonStorableArgumentTypes = new Set([
'password',
'very_dangerous_raw_string'
])
function isNonStorableArgumentType (type) {
return nonStorableArgumentTypes.has(type)
}
export function logEntryArgumentsToStartActionArgs (logEntry) {
return (logEntry?.arguments ?? []).map((arg) => ({
name: arg.name,
value: arg.value
}))
}
export function rerunNeedsArgumentForm (action, logEntry) {
if (action?.justification && !logEntry?.justification) {
return true
}
if (!needsArgumentForm(action)) {
return false
}
return hasMissingRerunArguments(action, logEntry?.arguments ?? [])
}
export function hasMissingRerunArguments (action, storedArgs) {
const stored = new Map(storedArgs.map((arg) => [arg.name, arg.value]))
for (const arg of action?.arguments ?? []) {
if (isNonStorableArgumentType(arg.type)) {
return true
}
if (arg.required && !stored.has(arg.name)) {
return true
}
}
return false
}
export function buildArgumentFormQuery (logEntry) {
const query = {}
for (const arg of logEntry?.arguments ?? []) {
query[arg.name] = arg.value
}
return query
}
export function buildRerunStartActionArgs (bindingId, logEntry, action) {
const startActionArgs = {
bindingId,
arguments: logEntryArgumentsToStartActionArgs(logEntry)
}
if (action?.justification && logEntry?.justification) {
startActionArgs.justification = logEntry.justification
}
return startActionArgs
}