first commit
This commit is contained in:
78
resources/js/Utils/optionsFormatter.js
Normal file
78
resources/js/Utils/optionsFormatter.js
Normal file
@@ -0,0 +1,78 @@
|
||||
// utils/optionsFormatter.js
|
||||
|
||||
/**
|
||||
* Преобразует массив [key: value] в массив объектов {value: key, label: value}
|
||||
*/
|
||||
export const formatOptions = (optionsArray) => {
|
||||
if (!optionsArray || !Array.isArray(optionsArray)) return []
|
||||
|
||||
return optionsArray.map((item, index) => {
|
||||
// Если это объект с ключами key и value
|
||||
if (item && typeof item === 'object' && item.key !== undefined && item.value !== undefined) {
|
||||
return {
|
||||
value: item.value,
|
||||
label: item.key
|
||||
}
|
||||
}
|
||||
|
||||
// Если это массив [key, value]
|
||||
if (Array.isArray(item) && item.length >= 2) {
|
||||
return {
|
||||
value: item[0],
|
||||
label: item[1]
|
||||
}
|
||||
}
|
||||
|
||||
// Если это простой массив значений
|
||||
if (typeof item === 'string' || typeof item === 'number') {
|
||||
return {
|
||||
value: item,
|
||||
label: String(item)
|
||||
}
|
||||
}
|
||||
|
||||
// Если это объект с произвольными ключами
|
||||
if (item && typeof item === 'object') {
|
||||
const keys = Object.keys(item)
|
||||
if (keys.length > 0) {
|
||||
return {
|
||||
value: keys[0],
|
||||
label: item[keys[0]]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Fallback для непредвиденных форматов
|
||||
return {
|
||||
value: index,
|
||||
label: String(item)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Преобразует объект {key: value, key: value} в массив {value: key, label: value}
|
||||
*/
|
||||
export const formatObjectOptions = (optionsObject) => {
|
||||
if (!optionsObject || typeof optionsObject !== 'object') return []
|
||||
|
||||
return Object.entries(optionsObject).map(([key, value]) => ({
|
||||
value: key,
|
||||
label: value
|
||||
}))
|
||||
}
|
||||
|
||||
/**
|
||||
* Универсальная функция, которая определяет тип данных и форматирует соответствующим образом
|
||||
*/
|
||||
export const normalizeOptions = (input) => {
|
||||
if (Array.isArray(input)) {
|
||||
return formatOptions(input)
|
||||
}
|
||||
|
||||
if (typeof input === 'object' && input !== null) {
|
||||
return formatObjectOptions(input)
|
||||
}
|
||||
|
||||
return []
|
||||
}
|
||||
Reference in New Issue
Block a user