From 1ff3adbb46fbfcf3135845cd45ca468f913ba75e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Varela?= Date: Wed, 29 Sep 2021 00:16:30 +0100 Subject: [PATCH] Convert to object default json value (#8041) * convert to object default json value * return same value if falsy or parse fail --- api/src/utils/get-default-value.ts | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/api/src/utils/get-default-value.ts b/api/src/utils/get-default-value.ts index ad33f029fd..307ea9a433 100644 --- a/api/src/utils/get-default-value.ts +++ b/api/src/utils/get-default-value.ts @@ -1,10 +1,12 @@ import { SchemaOverview } from '@directus/schema/dist/types/overview'; import { Column } from 'knex-schema-inspector/dist/types/column'; import getLocalType from './get-local-type'; +import logger from '../logger'; +import env from '../env'; export default function getDefaultValue( column: SchemaOverview[string]['columns'][string] | Column -): string | boolean | null { +): string | boolean | number | Record | any[] | null { const { type } = getLocalType(column); let defaultValue = column.default_value ?? null; @@ -29,6 +31,8 @@ export default function getDefaultValue( return Number.isNaN(Number(defaultValue)) === false ? Number(defaultValue) : defaultValue; case 'boolean': return castToBoolean(defaultValue); + case 'json': + return castToObject(defaultValue); default: return defaultValue; } @@ -45,3 +49,23 @@ function castToBoolean(value: any): boolean { return Boolean(value); } + +function castToObject(value: any): any | any[] { + if (!value) return value; + + if (typeof value === 'object') return value; + + if (typeof value === 'string') { + try { + return JSON.parse(value); + } catch (err: any) { + if (env.NODE_ENV === 'development') { + logger.error(err); + } + + return value; + } + } + + return {}; +}