Rework the project editor to include file edition and display the file sorter in the sidebar.

This commit is contained in:
2024-12-02 15:31:16 +01:00
parent 602b0af212
commit fd951c294f
12 changed files with 270 additions and 263 deletions

View File

@@ -20,22 +20,27 @@ export default defineEventHandler(async (e) => {
throw body.error;
}
const items = buildOrder(body.data.items);
const items = buildOrder(body.data.items) as Array<ProjectItem & { content?: string, match?: number }>;
const db = useDatabase();
const { content, ...cols } = getTableColumns(explorerContentTable);
const full = db.select(cols).from(explorerContentTable).all();
const { ...cols } = getTableColumns(explorerContentTable);
const full = db.select(cols).from(explorerContentTable).all() as Record<string, any>[];
for(let i = full.length - 1; i >= 0; i--)
{
if(items.find(e => (e.path === '' ? [e.parent, parsePath(e.name === '' ? e.title : e.name)].filter(e => !!e).join('/') : e.path) === full[i].path))
full.splice(i, 1);
const item = items.find(e => (e.path === '' ? [e.parent, parsePath(e.name === '' ? e.title : e.name)].filter(e => !!e).join('/') : e.path) === full[i].path);
if(item)
{
item.match = i;
full[i].include = true;
}
}
db.transaction((tx) => {
for(let i = 0; i < items.length; i++)
{
const item = items[i];
const old = full[item.match!];
tx.insert(explorerContentTable).values({
path: item.path,
@@ -45,7 +50,7 @@ export default defineEventHandler(async (e) => {
navigable: item.navigable,
private: item.private,
order: item.order,
content: null,
content: item.content ?? old.content,
}).onConflictDoUpdate({
set: {
path: [item.parent, parsePath(item.name === '' ? item.title : item.name)].filter(e => !!e).join('/'),
@@ -55,13 +60,15 @@ export default defineEventHandler(async (e) => {
private: item.private,
order: item.order,
timestamp: new Date(),
content: item.content ?? old.content,
},
target: explorerContentTable.path,
}).run();
}
for(let i = 0; i < full.length; i++)
{
tx.delete(explorerContentTable).where(eq(explorerContentTable.path, full[i].path)).run();
if(full[i].include !== true)
tx.delete(explorerContentTable).where(eq(explorerContentTable.path, full[i].path)).run();
}
});
});