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

61 lines
1.3 KiB
JavaScript

export function cloneLogEntry (logEntry) {
if (!logEntry) {
return null
}
return {
...logEntry,
tags: Array.isArray(logEntry.tags) ? [...logEntry.tags] : logEntry.tags
}
}
export function getExecutionLogEntry (evt) {
const logEntry = evt?.payload?.logEntry ?? evt?.detail?.logEntry ?? null
return cloneLogEntry(logEntry)
}
export function updateLogEntryInList (entries, logEntry) {
if (!logEntry?.executionTrackingId || !entries) {
return false
}
const index = entries.findIndex(
item => item.executionTrackingId === logEntry.executionTrackingId
)
if (index < 0) {
return false
}
entries[index] = logEntry
return true
}
export function updateLogEntryInGroups (groups, logEntry) {
const entry = cloneLogEntry(logEntry)
if (!entry?.executionTrackingId || !groups) {
return null
}
let firstMatch = null
for (const group of groups) {
for (const action of group.actions || []) {
const entries = action.entries || []
const index = entries.findIndex(
item => item.executionTrackingId === entry.executionTrackingId
)
if (index < 0) {
continue
}
const previous = entries[index]
entries[index] = entry
if (!firstMatch) {
firstMatch = { group, action, index, previous }
}
}
}
return firstMatch
}