funkwhale/front/src/utils/index.ts

51 lines
1.3 KiB
TypeScript

import type { APIErrorResponse } from '~/types'
import { startCase } from 'lodash-es'
export function parseAPIErrors (responseData: APIErrorResponse, parentField?: string): string[] {
const errors = []
const getErrorMessage = (err: string, fieldName?: string) => err.toLocaleLowerCase().includes('this field ')
? `${fieldName}: ${err}`
: err
for (const [field, value] of Object.entries(responseData)) {
let fieldName = startCase(field.replace(/_/g, ' '))
if (parentField) {
fieldName = `${parentField} - ${fieldName}`
}
if (typeof value === 'string') {
errors.push(getErrorMessage(value, fieldName))
continue
}
if (Array.isArray(value)) {
errors.push(...value.map(err => typeof err === 'string'
? getErrorMessage(err, fieldName)
: startCase(err.code.replace(/_/g, ' '))
))
continue
}
// Handle nested errors
errors.push(...parseAPIErrors(value, fieldName))
}
return errors
}
export function getDomain (url: string) {
return new URL(url).hostname
}
export function arrayMove (arr: unknown[], oldIndex: number, newIndex: number) {
if (newIndex >= arr.length) {
arr.push(...Array(newIndex - arr.length + 1))
}
arr.splice(newIndex, 0, arr.splice(oldIndex, 1)[0])
return arr
}