Compare commits
3 commits
43a70929ec
...
a23f836358
| Author | SHA1 | Date | |
|---|---|---|---|
| a23f836358 | |||
| 3c1b7a094d | |||
| 60654d5d2f |
4 changed files with 32 additions and 8 deletions
|
|
@ -164,6 +164,16 @@ export async function deleteField(
|
||||||
await api.delete(`/api/v1/admin/fields/${fieldId}`);
|
await api.delete(`/api/v1/admin/fields/${fieldId}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function listViews(
|
||||||
|
tableId: number,
|
||||||
|
bridgeUrl?: string | null,
|
||||||
|
): Promise<Array<{ id: number; name: string; type: string }>> {
|
||||||
|
const api = getBridgeClient(resolveBridgeUrl(bridgeUrl));
|
||||||
|
return unwrap<Array<{ id: number; name: string; type: string }>>(
|
||||||
|
api.get(`/api/v1/admin/tables/${tableId}/views`),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
export async function createView(
|
export async function createView(
|
||||||
tableId: number,
|
tableId: number,
|
||||||
payload: { name: string; type: 'grid' | 'gallery' | 'kanban' | 'calendar' | 'timeline' | 'form' },
|
payload: { name: string; type: 'grid' | 'gallery' | 'kanban' | 'calendar' | 'timeline' | 'form' },
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,7 @@ import {
|
||||||
createDatabase,
|
createDatabase,
|
||||||
createTable,
|
createTable,
|
||||||
createField,
|
createField,
|
||||||
|
listViews,
|
||||||
} from "../services/admin-client";
|
} from "../services/admin-client";
|
||||||
|
|
||||||
type Step = "name" | "fields" | "creating";
|
type Step = "name" | "fields" | "creating";
|
||||||
|
|
@ -184,15 +185,24 @@ export function CreateDatabaseModal({
|
||||||
await createField(table.id, payload as never, bridgeUrl);
|
await createField(table.id, payload as never, bridgeUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Step 4: insert the new table as a Tiptap node into the editor.
|
// Step 4: resolve the auto-created Grid view of the new table, then
|
||||||
// We don't have a viewId here yet — Baserow auto-creates a default Grid
|
// insert the embed node with a real viewId (without it the renderer
|
||||||
// view at table creation. We let the rendererfetch the first view.
|
// shows "No rows found in this view").
|
||||||
|
const views = await listViews(table.id, bridgeUrl);
|
||||||
|
const defaultView =
|
||||||
|
views.find((v) => v.type === "grid") ?? views[0] ?? null;
|
||||||
|
if (!defaultView) {
|
||||||
|
throw new Error(
|
||||||
|
"Table creee mais aucune vue par defaut trouvee. Reessayez ou contactez un admin.",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
editor
|
editor
|
||||||
.chain()
|
.chain()
|
||||||
.focus()
|
.focus()
|
||||||
.insertDatabaseView({
|
.insertDatabaseView({
|
||||||
tableId: String(table.id),
|
tableId: String(table.id),
|
||||||
viewId: "",
|
viewId: String(defaultView.id),
|
||||||
viewType: "grid",
|
viewType: "grid",
|
||||||
bridgeUrl: bridgeUrl ?? null,
|
bridgeUrl: bridgeUrl ?? null,
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,10 @@ export class BacklinkIndexerService {
|
||||||
let page: { content: any; workspaceId: string } | null = null;
|
let page: { content: any; workspaceId: string } | null = null;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const result = await sql<{ content: any; workspace_id: string }>`
|
// Kysely's CamelCasePlugin (configured in database.module.ts) maps
|
||||||
|
// snake_case columns to camelCase keys at runtime, so the row type
|
||||||
|
// must reflect the post-plugin shape.
|
||||||
|
const result = await sql<{ content: any; workspaceId: string }>`
|
||||||
SELECT p.content, s.workspace_id
|
SELECT p.content, s.workspace_id
|
||||||
FROM pages p
|
FROM pages p
|
||||||
JOIN spaces s ON s.id = p.space_id
|
JOIN spaces s ON s.id = p.space_id
|
||||||
|
|
@ -51,7 +54,7 @@ export class BacklinkIndexerService {
|
||||||
|
|
||||||
page = {
|
page = {
|
||||||
content: result.rows[0].content,
|
content: result.rows[0].content,
|
||||||
workspaceId: result.rows[0].workspace_id,
|
workspaceId: result.rows[0].workspaceId,
|
||||||
};
|
};
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
this.logger.error(
|
this.logger.error(
|
||||||
|
|
|
||||||
|
|
@ -137,8 +137,9 @@ export class BacklinkParserService {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- R3.1.c databaseView node (embed links a page indirectly via pageId attr) ---
|
// --- R3.1.c database-view node (embed links a page indirectly via pageId attr) ---
|
||||||
if (type === 'databaseView' && attrs.pageId) {
|
// The shared schema in @docmost/editor-ext uses kebab-case as the node name.
|
||||||
|
if (type === 'database-view' && attrs.pageId) {
|
||||||
out.push({
|
out.push({
|
||||||
linkType: 'database_embed',
|
linkType: 'database_embed',
|
||||||
pageId: attrs.pageId,
|
pageId: attrs.pageId,
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue