55 lines
1.2 KiB
JavaScript
55 lines
1.2 KiB
JavaScript
function parseLegacyChecklistValue(value) {
|
|
return value.split(',').map((segment) => segment.trim()).filter((segment) => segment !== '')
|
|
}
|
|
|
|
export function parseChecklistValue(value) {
|
|
if (!value || value === '') {
|
|
return []
|
|
}
|
|
|
|
const trimmed = value.trim()
|
|
if (trimmed.startsWith('[')) {
|
|
try {
|
|
const parsed = JSON.parse(trimmed)
|
|
if (!Array.isArray(parsed)) {
|
|
return []
|
|
}
|
|
|
|
return parsed.map((segment) => String(segment).trim()).filter((segment) => segment !== '')
|
|
} catch {
|
|
return []
|
|
}
|
|
}
|
|
|
|
return parseLegacyChecklistValue(value)
|
|
}
|
|
|
|
export function formatChecklistValue(selected) {
|
|
if (!Array.isArray(selected) || selected.length === 0) {
|
|
return ''
|
|
}
|
|
|
|
return JSON.stringify(selected)
|
|
}
|
|
|
|
export function toggleChoice(selected, value) {
|
|
const current = Array.isArray(selected) ? [...selected] : []
|
|
const index = current.indexOf(value)
|
|
|
|
if (index === -1) {
|
|
current.push(value)
|
|
return current
|
|
}
|
|
|
|
current.splice(index, 1)
|
|
return current
|
|
}
|
|
|
|
export function choiceLabel(choice) {
|
|
return choice.title || choice.value || ''
|
|
}
|
|
|
|
export function allChoiceValues(choices) {
|
|
return choices.map((choice) => choice.value)
|
|
}
|