diff --git a/app/src/interfaces/code/code.vue b/app/src/interfaces/code/code.vue
index 621a93d341..e712d10b8e 100644
--- a/app/src/interfaces/code/code.vue
+++ b/app/src/interfaces/code/code.vue
@@ -268,8 +268,12 @@ export default defineComponent({
};
function fillTemplate() {
- const parse = JSON.parse(props.template);
- emit('input', parse || props.template);
+ try {
+ const parse = JSON.parse(props.template);
+ emit('input', parse || props.template);
+ } catch {
+ // We won't stage invalid JSON
+ }
}
},
});
diff --git a/app/src/interfaces/code/index.ts b/app/src/interfaces/code/index.ts
index 2636d675ac..ae64b77109 100644
--- a/app/src/interfaces/code/index.ts
+++ b/app/src/interfaces/code/index.ts
@@ -55,4 +55,5 @@ export default defineInterface(({ i18n }) => ({
},
},
],
+ recommendedDisplays: ['raw'],
}));
diff --git a/app/src/interfaces/collections/index.ts b/app/src/interfaces/collections/index.ts
index 7e8803eea2..5f13ab4333 100644
--- a/app/src/interfaces/collections/index.ts
+++ b/app/src/interfaces/collections/index.ts
@@ -21,7 +21,8 @@ export default defineInterface(({ i18n }) => ({
},
schema: {
default_value: false,
- }
+ },
},
],
+ recommendedDisplays: ['collection'],
}));
diff --git a/app/src/interfaces/hash/index.ts b/app/src/interfaces/hash/index.ts
index 451145183c..50bd3e152a 100644
--- a/app/src/interfaces/hash/index.ts
+++ b/app/src/interfaces/hash/index.ts
@@ -4,7 +4,7 @@ import { defineInterface } from '@/interfaces/define';
export default defineInterface(({ i18n }) => ({
id: 'hash',
name: i18n.t('hash'),
- icon: 'text_fields',
+ icon: 'fingerprint',
component: InterfaceHash,
types: ['string'],
options: [
@@ -15,7 +15,7 @@ export default defineInterface(({ i18n }) => ({
meta: {
width: 'half',
interface: 'text-input',
- }
+ },
},
{
field: 'masked',
@@ -24,7 +24,7 @@ export default defineInterface(({ i18n }) => ({
meta: {
width: 'half',
interface: 'toggle',
- }
+ },
},
],
}));
diff --git a/app/src/interfaces/markdown/index.ts b/app/src/interfaces/markdown/index.ts
index 8746bf648f..35efc1df99 100644
--- a/app/src/interfaces/markdown/index.ts
+++ b/app/src/interfaces/markdown/index.ts
@@ -4,7 +4,7 @@ import { defineInterface } from '@/interfaces/define';
export default defineInterface(({ i18n }) => ({
id: 'markdown',
name: i18n.t('markdown'),
- icon: 'text_fields',
+ icon: 'functions',
component: InterfaceMarkdown,
types: ['text'],
options: [
diff --git a/app/src/interfaces/slug/index.ts b/app/src/interfaces/slug/index.ts
index 91080acc3b..518a0e61d6 100644
--- a/app/src/interfaces/slug/index.ts
+++ b/app/src/interfaces/slug/index.ts
@@ -7,5 +7,35 @@ export default defineInterface(({ i18n }) => ({
icon: 'link',
component: InterfaceSlug,
types: ['string'],
- options: [],
+ options: [
+ {
+ field: 'placeholder',
+ name: i18n.t('placeholder'),
+ meta: {
+ width: 'half',
+ interface: 'text-input',
+ options: {
+ placeholder: i18n.t('text_shown_when_no_value'),
+ },
+ },
+ },
+ {
+ field: 'iconLeft',
+ name: i18n.t('icon_left'),
+ type: 'string',
+ meta: {
+ width: 'half',
+ interface: 'icon',
+ },
+ },
+ {
+ field: 'iconRight',
+ name: i18n.t('icon_right'),
+ type: 'string',
+ meta: {
+ width: 'half',
+ interface: 'icon',
+ },
+ },
+ ],
}));
diff --git a/app/src/interfaces/slug/slug.vue b/app/src/interfaces/slug/slug.vue
index 6d10c77b90..e5c0621ee7 100644
--- a/app/src/interfaces/slug/slug.vue
+++ b/app/src/interfaces/slug/slug.vue
@@ -1,5 +1,16 @@
-
+
+
+
+
diff --git a/app/src/modules/settings/routes/data-model/field-detail/components/interface.vue b/app/src/modules/settings/routes/data-model/field-detail/components/interface.vue
index cdd7d90cab..817bed18f3 100644
--- a/app/src/modules/settings/routes/data-model/field-detail/components/interface.vue
+++ b/app/src/modules/settings/routes/data-model/field-detail/components/interface.vue
@@ -64,7 +64,7 @@ export default defineComponent({
datetime: ['datetime'],
date: ['datetime'],
time: ['datetime'],
- json: ['code'],
+ json: ['checkboxes', 'tags'],
uuid: ['text-input'],
};
@@ -85,15 +85,18 @@ export default defineComponent({
return item;
});
+ const recommendedItems: (FancySelectItem | { divider: boolean } | undefined)[] = [
+ ...recommended.map((key) => interfaceItems.find((item) => item.value === key)),
+ ];
+
if (interfaceItems.length >= 5 && recommended.length > 0) {
- return [
- ...recommended.map((key) => interfaceItems.find((item) => item.value === key)),
- { divider: true },
- ...interfaceItems.filter((item) => recommended.includes(item.value as string) === false),
- ];
- } else {
- return interfaceItems;
+ recommendedItems.push({ divider: true });
}
+
+ recommendedItems.push(
+ ...interfaceItems.filter((item) => recommended.includes(item.value as string) === false)
+ );
+ return recommendedItems;
});
const selectedInterface = computed(() => {