Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
139 changes: 134 additions & 5 deletions src/components/EditorSidePanel/TablesTab/TableInfo.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import {
Button,
Card,
Select,
Checkbox,
} from "@douyinfe/semi-ui";
import ColorPicker from "../ColorPicker";
import { IconDeleteStroked } from "@douyinfe/semi-icons";
Expand Down Expand Up @@ -72,11 +73,11 @@ export default function TableInfo({ data }) {
const inheritedFieldNames =
Array.isArray(data.inherits) && data.inherits.length > 0
? data.inherits
.map((parentName) => {
const parent = tables.find((t) => t.name === parentName);
return parent ? parent.fields.map((f) => f.name) : [];
})
.flat()
.map((parentName) => {
const parent = tables.find((t) => t.name === parentName);
return parent ? parent.fields.map((f) => f.name) : [];
})
.flat()
: [];

return (
Expand Down Expand Up @@ -337,6 +338,134 @@ export default function TableInfo({ data }) {
/>
</div>
</div>
<div className="flex justify-between items-center gap-2 mb-2">
<Checkbox
checked={data.fields.some((f) => f.name === "created_at")}
disabled={layout.readOnly}
onChange={(e) => {
const exists = data.fields.some((f) => f.name === "created_at");
if (e.target.checked && !exists) {
const id = nanoid();
const newField = {
id,
name: "created_at",
type: "TIMESTAMP",
default: "CURRENT_TIMESTAMP",
check: "",
primary: false,
unique: false,
notNull: false,
increment: false,
comment: "",
};
setUndoStack((prev) => [
...prev,
{
action: Action.EDIT,
element: ObjectType.TABLE,
component: "field_add",
tid: data.id,
fid: id,
message: t("edit_table", {
tableName: data.name,
extra: "[add created_at]",
}),
},
]);
setRedoStack([]);
updateTable(data.id, {
fields: [...data.fields, newField],
});
} else if (!e.target.checked && exists) {
const field = data.fields.find((f) => f.name === "created_at");
setUndoStack((prev) => [
...prev,
{
action: Action.EDIT,
element: ObjectType.TABLE,
component: "field_delete",
tid: data.id,
fid: field.id,
data: field,
message: t("edit_table", {
tableName: data.name,
extra: "[delete created_at]",
}),
},
]);
setRedoStack([]);
updateTable(data.id, {
fields: data.fields.filter((f) => f.name !== "created_at"),
});
}
}}
>
created_at
</Checkbox>
<Checkbox
checked={data.fields.some((f) => f.name === "updated_at")}
disabled={layout.readOnly}
onChange={(e) => {
const exists = data.fields.some((f) => f.name === "updated_at");
if (e.target.checked && !exists) {
const id = nanoid();
const newField = {
id,
name: "updated_at",
type: "TIMESTAMP",
default: "CURRENT_TIMESTAMP",
check: "",
primary: false,
unique: false,
notNull: false,
increment: false,
comment: "",
};
setUndoStack((prev) => [
...prev,
{
action: Action.EDIT,
element: ObjectType.TABLE,
component: "field_add",
tid: data.id,
fid: id,
message: t("edit_table", {
tableName: data.name,
extra: "[add updated_at]",
}),
},
]);
setRedoStack([]);
updateTable(data.id, {
fields: [...data.fields, newField],
});
} else if (!e.target.checked && exists) {
const field = data.fields.find((f) => f.name === "updated_at");
setUndoStack((prev) => [
...prev,
{
action: Action.EDIT,
element: ObjectType.TABLE,
component: "field_delete",
tid: data.id,
fid: field.id,
data: field,
message: t("edit_table", {
tableName: data.name,
extra: "[delete updated_at]",
}),
},
]);
setRedoStack([]);
updateTable(data.id, {
fields: data.fields.filter((f) => f.name !== "updated_at"),
});
}
}}
>
updated_at
</Checkbox>
</div>
</div>
);
}
8 changes: 5 additions & 3 deletions src/i18n/locales/es.js
Original file line number Diff line number Diff line change
Expand Up @@ -229,8 +229,8 @@ const es = {
not_found: "No encontrado",
pick_db: "Elegir base de datos",
generic: "Genérico",
generic_description:
"Los diagramas genéricos se pueden exportar a cualquier formato SQL, pero soportan un número limitado de tipos de datos.",
generic_description:
"Los diagramas genéricos se pueden exportar a cualquier formato SQL, pero soportan un número limitado de tipos de datos.",
enums: "Enumeraciones",
add_enum: "Añadir enumeración",
edit_enum: "{{extra}} Editar enumeración {{enumName}}",
Expand All @@ -249,7 +249,7 @@ const es = {
copy_link: "Copiar enlace",
readme: "README",
failed_to_load: "Error al cargar. Asegurate de que el enlace sea correcto.",
share_info:
share_info:
"* Compartir este enlace no creará una sesión de colaboración en tiempo real.",
show_relationship_labels: "Mostrar etiquetas de relación",
docs: "Documentación",
Expand Down Expand Up @@ -279,6 +279,8 @@ const es = {
failed_to_record_version: "Error al grabar versión",
failed_to_load_diagram: "Error al cargar diagrama",
see_all: "Ver todo",
insert_sql: "Insertar SQL",
upload_file: "Subir archivo",
},
};

Expand Down
54 changes: 54 additions & 0 deletions src/i18n/locales/fr.js
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,61 @@ const fr = {
edit_relationship: "{{extra}} Modifier la relation {{refName}}",
delete_relationship: "Supprimer la relation {{refName}}",
not_found: "Non trouvé",
pick_db: "Choisir une base de données",
generic: "Générique",
generic_description:
"Les diagrammes génériques peuvent être exportés vers n'importe quelle saveur SQL mais supportent peu de types de données.",
enums: "Énumérations",
add_enum: "Ajouter une énumération",
edit_enum: "{{extra}} Modifier l'énumération {{enumName}}",
delete_enum: "Supprimer l'énumération",
enum_w_no_name: "Énumération trouvée sans nom",
enum_w_no_values: "Énumération '{{enumName}}' trouvée sans valeurs",
duplicate_enums: "Énumérations en double avec le nom '{{enumName}}'",
enum_deleted: "Énumération supprimée",
no_enums: "Aucune énumération",
no_enums_text: "Définissez les énumérations ici",
declare_array: "Déclarer un tableau",
empty_index_name: "Index déclaré sans nom dans la table '{{tableName}}'",
didnt_find_diagram: "Oups! Diagramme introuvable.",
unsigned: "Non signé",
share: "Partager",
unshare: "Arrêter le partage",
copy_link: "Copier le lien",
readme: "README",
failed_to_load: "Échec du chargement. Assurez-vous que le lien est correct.",
share_info:
"* Le partage de ce lien ne créera pas une session de collaboration en temps réel.",
show_relationship_labels: "Afficher les étiquettes de relation",
docs: "Docs",
supported_types: "Types de fichiers supportés:",
bulk_update: "Mise à jour en masse",
multiselect: "Sélection multiple",
export_saved_data: "Exporter les données enregistrées",
dbml_view: "Vue DBML",
tab_view: "Vue par onglets",
label: "Étiquette",
many_side_label: "Étiquette côté plusieurs(n)",
version: "Version",
versions: "Versions",
no_saved_versions: "Aucune version enregistrée",
record_version: "Enregistrer une version",
commited_at: "Validé à",
read_only: "Lecture seule",
continue: "Continuer",
restore_version: "Restaurer la version",
restore_warning: "Le chargement d'une autre version écrasera toutes les modifications.",
return_to_current: "Retour au diagramme",
no_changes_to_record: "Aucun changement à enregistrer",
click_to_view: "Cliquez pour voir",
load_more: "Charger plus",
clear_cache: "Vider le cache",
cache_cleared: "Cache vidé",
failed_to_record_version: "Échec de l'enregistrement de la version",
failed_to_load_diagram: "Échec du chargement du diagramme",
see_all: "Voir tout",
insert_sql: "Insérer SQL",
upload_file: "Télécharger un fichier",
},
};

Expand Down