custom column type

This commit is contained in:
Clément Zitouni 2024-05-14 14:25:48 +02:00
parent 30886ac48f
commit 42c56ead44
4 changed files with 25 additions and 6 deletions

View File

@ -51,18 +51,22 @@ export default function FieldDetails({ data, tid, index }) {
setRedoStack([]);
}}
/>
{(data.type === "ENUM" || data.type === "SET") && (
{(data.type === "ENUM" || data.type === "SET" || data.type === "CUSTOM") && (
<>
<div className="font-semibold mb-1">{data.type} values</div>
<TagInput
separator={[",", ", ", " ,"]}
separator={
data.type === "CUSTOM" ? [] : [",", ", ", " ,"]
}
value={data.values}
validateStatus={
!data.values || data.values.length === 0 ? "error" : "default"
}
addOnBlur
className="my-2"
placeholder="Use ',' for batch input"
placeholder={
data.type === "CUSTOM" ? "Enter a custom value" : "Use ',' for batch input"
}
onChange={(v) => updateField(tid, index, { values: v })}
onFocus={() => setEditField({ values: data.values })}
onBlur={() => {

View File

@ -123,11 +123,13 @@ export default function TypeField({ data, tid, fid }) {
<Popover
content={
<div className="popover-theme w-[240px]">
{(data.type === "ENUM" || data.type === "SET") && (
{(data.type === "ENUM" || data.type === "SET" || data.type === "CUSTOM") && (
<>
<div className="font-semibold mb-1">{data.type} values</div>
<TagInput
separator={[",", ", ", " ,"]}
separator={
data.type === "CUSTOM" ? [] : [",", ", ", " ,"]
}
value={data.values}
validateStatus={
!data.values || data.values.length === 0
@ -135,7 +137,9 @@ export default function TypeField({ data, tid, fid }) {
: "default"
}
className="my-2"
placeholder="Use ',' for batch input"
placeholder={
data.type === "CUSTOM" ? "Enter a custom value" : "Use ',' for batch input"
}
onChange={(v) =>
updateType(tid, {
fields: types[tid].fields.map((e, id) =>

View File

@ -22,6 +22,7 @@ export const sqlDataTypes = [
"UUID",
"ENUM",
"SET",
"CUSTOM"
];
export const tableThemes = [

View File

@ -50,6 +50,9 @@ export function getTypeString(field, dbms = "mysql", baseType = false) {
if (field.type === "SET" || field.type === "ENUM") {
return `${field.type}(${field.values.map((v) => `"${v}"`).join(", ")})`;
}
if (field.type === "CUSTOM") {
return `${field.values}`;
}
if (!sqlDataTypes.includes(field.type)) {
return "JSON";
}
@ -67,6 +70,9 @@ export function getTypeString(field, dbms = "mysql", baseType = false) {
if (field.type === "ENUM") {
return `${field.name}_t`;
}
if (field.type === "CUSTOM") {
return `${field.values}`;
}
if (field.type === "SET") {
return `${field.name}_t[]`;
}
@ -98,6 +104,8 @@ export function getTypeString(field, dbms = "mysql", baseType = false) {
: `NVARCHAR(255) CHECK([${field.name}] in (${field.values
.map((v) => `'${v}'`)
.join(", ")}))`;
case "CUSTOM":
return field.values;
case "VARCHAR":
type = `NVARCHAR`;
break;
@ -333,6 +341,8 @@ export function getSQLiteType(field) {
return `TEXT CHECK("${field.name}" in (${field.values
.map((v) => `'${v}'`)
.join(", ")}))`;
case "CUSTOM":
return field.values;
default:
return "BLOB";
}