mirror of
https://github.com/chartdb/chartdb.git
synced 2025-11-14 19:05:53 +00:00
add index, add fields
This commit is contained in:
@@ -5,6 +5,7 @@ import { nanoid } from 'nanoid';
|
||||
import { chartDBContext } from './chartdb-context';
|
||||
import { DatabaseType } from '@/lib/domain/database-type';
|
||||
import { DBField } from '@/lib/domain/db-field';
|
||||
import { DBIndex } from '@/lib/domain/db-index';
|
||||
|
||||
export const ChartDBProvider: React.FC<React.PropsWithChildren> = ({
|
||||
children,
|
||||
@@ -19,7 +20,7 @@ export const ChartDBProvider: React.FC<React.PropsWithChildren> = ({
|
||||
};
|
||||
|
||||
const createTable = () => {
|
||||
addTable({
|
||||
const table: DBTable = {
|
||||
id: nanoid(),
|
||||
name: `table_${tables.length + 1}`,
|
||||
x: 0,
|
||||
@@ -38,9 +39,15 @@ export const ChartDBProvider: React.FC<React.PropsWithChildren> = ({
|
||||
indexes: [],
|
||||
color: randomHSLA(),
|
||||
createdAt: Date.now(),
|
||||
});
|
||||
};
|
||||
addTable(table);
|
||||
|
||||
return table;
|
||||
};
|
||||
|
||||
const getTable = (id: string) =>
|
||||
tables.find((table) => table.id === id) ?? null;
|
||||
|
||||
const removeTable = (id: string) => {
|
||||
setTables((tables) => tables.filter((table) => table.id !== id));
|
||||
};
|
||||
@@ -70,6 +77,115 @@ export const ChartDBProvider: React.FC<React.PropsWithChildren> = ({
|
||||
);
|
||||
};
|
||||
|
||||
const removeField = (tableId: string, fieldId: string) => {
|
||||
setTables((tables) =>
|
||||
tables.map((table) =>
|
||||
table.id === tableId
|
||||
? {
|
||||
...table,
|
||||
fields: table.fields.filter((f) => f.id !== fieldId),
|
||||
}
|
||||
: table
|
||||
)
|
||||
);
|
||||
};
|
||||
|
||||
const addField = (tableId: string, field: DBField) => {
|
||||
setTables((tables) =>
|
||||
tables.map((table) =>
|
||||
table.id === tableId
|
||||
? { ...table, fields: [...table.fields, field] }
|
||||
: table
|
||||
)
|
||||
);
|
||||
};
|
||||
|
||||
const getField = (tableId: string, fieldId: string) => {
|
||||
const table = getTable(tableId);
|
||||
return table?.fields.find((f) => f.id === fieldId) ?? null;
|
||||
};
|
||||
|
||||
const createField = (tableId: string) => {
|
||||
const table = getTable(tableId);
|
||||
const field: DBField = {
|
||||
id: nanoid(),
|
||||
name: `field_${(table?.fields?.length ?? 0) + 1}`,
|
||||
type: 'bigint',
|
||||
unique: false,
|
||||
nullable: true,
|
||||
primaryKey: false,
|
||||
createdAt: Date.now(),
|
||||
};
|
||||
|
||||
addField(tableId, field);
|
||||
|
||||
return field;
|
||||
};
|
||||
|
||||
const addIndex = (tableId: string, index: DBIndex) => {
|
||||
setTables((tables) =>
|
||||
tables.map((table) =>
|
||||
table.id === tableId
|
||||
? { ...table, indexes: [...table.indexes, index] }
|
||||
: table
|
||||
)
|
||||
);
|
||||
};
|
||||
|
||||
const removeIndex = (tableId: string, indexId: string) => {
|
||||
setTables((tables) =>
|
||||
tables.map((table) =>
|
||||
table.id === tableId
|
||||
? {
|
||||
...table,
|
||||
indexes: table.indexes.filter(
|
||||
(i) => i.id !== indexId
|
||||
),
|
||||
}
|
||||
: table
|
||||
)
|
||||
);
|
||||
};
|
||||
|
||||
const createIndex = (tableId: string) => {
|
||||
const table = getTable(tableId);
|
||||
const index: DBIndex = {
|
||||
id: nanoid(),
|
||||
name: `index_${(table?.indexes?.length ?? 0) + 1}`,
|
||||
fieldIds: [],
|
||||
unique: false,
|
||||
createdAt: Date.now(),
|
||||
};
|
||||
|
||||
addIndex(tableId, index);
|
||||
|
||||
return index;
|
||||
};
|
||||
|
||||
const getIndex = (tableId: string, indexId: string) => {
|
||||
const table = getTable(tableId);
|
||||
return table?.indexes.find((i) => i.id === indexId) ?? null;
|
||||
};
|
||||
|
||||
const updateIndex = (
|
||||
tableId: string,
|
||||
indexId: string,
|
||||
index: Partial<DBIndex>
|
||||
) => {
|
||||
setTables((tables) =>
|
||||
tables.map((table) =>
|
||||
table.id === tableId
|
||||
? {
|
||||
...table,
|
||||
indexes: table.indexes.map((i) =>
|
||||
i.id === indexId ? { ...i, ...index } : i
|
||||
),
|
||||
}
|
||||
: table
|
||||
)
|
||||
);
|
||||
};
|
||||
|
||||
return (
|
||||
<chartDBContext.Provider
|
||||
value={{
|
||||
@@ -78,9 +194,19 @@ export const ChartDBProvider: React.FC<React.PropsWithChildren> = ({
|
||||
setDatabaseType,
|
||||
createTable,
|
||||
addTable,
|
||||
getTable,
|
||||
removeTable,
|
||||
updateTable,
|
||||
updateField,
|
||||
removeField,
|
||||
createField,
|
||||
addField,
|
||||
addIndex,
|
||||
createIndex,
|
||||
removeIndex,
|
||||
getField,
|
||||
getIndex,
|
||||
updateIndex,
|
||||
}}
|
||||
>
|
||||
{children}
|
||||
|
||||
Reference in New Issue
Block a user