@antelopejs/dms-database 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/pages/schemas.js +2 -1
- package/dist/pages/schemas.js.map +1 -1
- package/dist/routes/tables.d.ts +1 -0
- package/dist/routes/tables.js +35 -10
- package/dist/routes/tables.js.map +1 -1
- package/frontend-vue/app/components/JsonCellPanel.vue +27 -14
- package/frontend-vue/app/components/TableInspector.vue +18 -4
- package/frontend-vue/i18n/locales/database-en-GB.json +2 -1
- package/frontend-vue/i18n/locales/database-fr-FR.json +2 -1
- package/frontend-vue/package.json +1 -1
- package/frontend-vue/tests/registration.test.ts +0 -12
- package/package.json +6 -5
package/dist/pages/schemas.js
CHANGED
|
@@ -15,10 +15,11 @@ const table_view_1 = require("@antelopejs/interface-dms/base/table-view");
|
|
|
15
15
|
const page_1 = require("@antelopejs/interface-dms/page");
|
|
16
16
|
const module_1 = require("../module");
|
|
17
17
|
const schemaFilters_1 = require("../service/schemaFilters");
|
|
18
|
-
const TABLE_QUERY = "schema={schema}&table={name}";
|
|
18
|
+
const TABLE_QUERY = "schema={{row.schema}}&table={{row.name}}";
|
|
19
19
|
const tables = table_view_1.TableView.fromSource({
|
|
20
20
|
caption: "$dms_database.schemas.caption",
|
|
21
21
|
fetchUrl: "/api/database/tables/source",
|
|
22
|
+
fetchRowUrl: "/api/database/tables/source/row?id={{row.id}}",
|
|
22
23
|
rowIdKey: "id",
|
|
23
24
|
labelKey: "name",
|
|
24
25
|
capabilities: { search: false, filter: true },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/pages/schemas.ts"],"names":[],"mappings":";;;;;;;;;AAAA,wEAA4E;AAC5E,kEAAwE;AACxE,0EAA6E;AAC7E,oEAAuE;AACvE,0EAGmD;AACnD,yDAA8E;AAC9E,sCAA+E;AAC/E,4DAA4D;AAG5D,MAAM,WAAW,GAAG,
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/pages/schemas.ts"],"names":[],"mappings":";;;;;;;;;AAAA,wEAA4E;AAC5E,kEAAwE;AACxE,0EAA6E;AAC7E,oEAAuE;AACvE,0EAGmD;AACnD,yDAA8E;AAC9E,sCAA+E;AAC/E,4DAA4D;AAG5D,MAAM,WAAW,GAAG,0CAA0C,CAAC;AAE/D,MAAM,MAAM,GAAG,sBAAS,CAAC,UAAU,CAAC;IAClC,OAAO,EAAE,+BAA+B;IACxC,QAAQ,EAAE,6BAA6B;IAGvC,WAAW,EAAE,+CAA+C;IAC5D,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,MAAM;IAChB,YAAY,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;IAC7C,WAAW,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE;IAClD,QAAQ,EAAE,EAAE;IACZ,OAAO,EAAE;QACP,IAAI,EAAE;YACJ,IAAI,EAAE,kCAAkC;YACxC,IAAI,EAAE,IAAI,6BAAgB,CAAC,UAAU,EAAE;YACvC,OAAO,EAAE,IAAI,4BAAe,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YACxD,QAAQ,EAAE,IAAI;YAEd,IAAI,EAAE,GAAG;YACT,KAAK,EAAE,CAAC;SACT;QACD,MAAM,EAAE;YACN,IAAI,EAAE,mCAAmC;YACzC,IAAI,EAAE,IAAI,6BAAgB,CAAC,UAAU,EAAE;YACvC,OAAO,EAAE,IAAI,4BAAe,CAAC,WAAW,EAAE;YAC1C,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,CAAC;SACT;QACD,YAAY,EAAE;YACZ,IAAI,EAAE,iCAAiC;YACvC,IAAI,EAAE,IAAI,6BAAgB,CAAC,UAAU,EAAE;YACvC,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,CAAC;SACT;QACD,WAAW,EAAE;YACX,IAAI,EAAE,oCAAoC;YAC1C,IAAI,EAAE,IAAI,6BAAgB,CAAC,UAAU,EAAE;YACvC,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,CAAC;SACT;QACD,UAAU,EAAE;YACV,IAAI,EAAE,oCAAoC;YAC1C,IAAI,EAAE,IAAI,6BAAgB,CAAC,UAAU,EAAE;YACvC,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,CAAC;SACT;QACD,SAAS,EAAE;YACT,IAAI,EAAE,sCAAsC;YAC5C,IAAI,EAAE,IAAI,6BAAgB,CAAC,QAAQ,EAAE;YACrC,KAAK,EAAE,CAAC;SACT;QACD,SAAS,EAAE;YACT,IAAI,EAAE,sCAAsC;YAC5C,IAAI,EAAE,IAAI,6BAAgB,CAAC,QAAQ,EAAE;YACrC,KAAK,EAAE,CAAC;SACT;KACF;IACD,UAAU,EAAE;QACV,MAAM,EAAE;YACN;gBAGE,KAAK,EAAE,uCAAuC;gBAC9C,IAAI,EAAE,qBAAqB;gBAC3B,SAAS,EAAE,IAAI;gBACf,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,SAAS,EAAE,OAAO;oBAClB,KAAK,EAAE,uCAAuC;oBAC9C,SAAS,EAAE,IAAA,wBAAe,EAAC,2BAA2B,CAAC,CAAC,IAAI,CAAC;wBAC3D,IAAI,EAAE,sCAAsC;wBAC5C,IAAI,EAAE,qBAAqB;wBAC3B,WAAW,EAAE,kDAAkD;qBAChE,CAAC;iBACH;aACF;YACD;gBACE,KAAK,EAAE,sCAAsC;gBAC7C,IAAI,EAAE,WAAW;gBACjB,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,uBAAc,CAAC,IAAI,IAAI,WAAW,EAAE,EAAE;aACvE;YACD;gBACE,KAAK,EAAE,qCAAqC;gBAC5C,IAAI,EAAE,WAAW;gBACjB,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,uBAAc,CAAC,KAAK,IAAI,WAAW,EAAE,EAAE;aACxE;YACD;gBACE,KAAK,EAAE,uCAAuC;gBAC9C,IAAI,EAAE,YAAY;gBAClB,MAAM,EAAE;oBACN,IAAI,EAAE,MAAM;oBACZ,GAAG,EAAE,GAAG,uBAAc,CAAC,OAAO,IAAI,WAAW,EAAE;iBAChD;aACF;SACF;KACF;IACD,MAAM,EAAE,EAAE,IAAI,EAAE,mCAAmC,EAAE;IACrD,WAAW,EAAE;QACX,QAAQ,EAAE;YACR,KAAK,EAAE,yCAAyC;YAChD,WAAW,EAAE,+CAA+C;YAC5D,IAAI,EAAE,YAAY;SACnB;QAGD,QAAQ,EAAE;YACR,KAAK,EAAE,6CAA6C;YACpD,WAAW,EAAE,mDAAmD;YAChE,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE;gBACP;oBACE,KAAK,EAAE,2CAA2C;oBAClD,EAAE,EAAE,uBAAc,CAAC,OAAO;oBAC1B,IAAI,EAAE,QAAQ;iBACf;aACF;SACF;KACF;CACF,CAAC,CAAC,IAAI,CAAC;IACN,IAAI,EAAE,+BAA+B;IACrC,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,8CAA8C;CAC5D,CAAC,CAAC;AAEH,IAAA,gCAAgB,EAAC,MAAM,CAAC,CAAC;AAGlB,IAAM,mBAAmB,GAAzB,MAAM,mBAAoB,SAAQ,IAAA,qBAAc,EACrD,SAAS,EACT;IACE,WAAW,EAAE,6BAA6B;IAC1C,WAAW,EAAE,mCAAmC;IAChD,IAAI,EAAE,YAAY;IAClB,MAAM,EAAE,2BAAkB;IAC1B,QAAQ,EAAE,uBAAc;IACxB,KAAK,EAAE,CAAC;CACT,EACD,IAAA,uBAAa,EAAC;IACZ,aAAa,EAAE;QACb;YACE,EAAE,EAAE,cAAc;YAClB,KAAK,EAAE,6BAA6B;YACpC,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,sBAAa,CAAC,OAAO;YAC9B,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,uBAAc,CAAC,OAAO,EAAE;SACtD;KACF;CACF,CAAC,CACH;IACC,MAAM,CAAC,SAAS,GAAG,IAAA,wBAAe,EAAC,6BAA6B,CAAC,CAAC,IAAI,CAAC;QACrE,IAAI,EAAE,oCAAoC;QAC1C,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,gDAAgD;KAC9D,CAAC,CAAC;IACH,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;;AA5BZ,kDAAmB;8BAAnB,mBAAmB;IAD/B,IAAA,mBAAY,GAAE;GACF,mBAAmB,CA6B/B"}
|
package/dist/routes/tables.d.ts
CHANGED
|
@@ -21,6 +21,7 @@ interface InstancesResult {
|
|
|
21
21
|
declare const DatabaseTablesController_base: import("@antelopejs/interface-api").ControllerClass<object>;
|
|
22
22
|
export declare class DatabaseTablesController extends DatabaseTablesController_base {
|
|
23
23
|
source(user: User, scope: unknown, instance: unknown, q: unknown, has: unknown): Promise<TableSourceResult>;
|
|
24
|
+
sourceRow(user: User, idRaw: unknown): Promise<TableSourceRow>;
|
|
24
25
|
instances(schemaRaw: unknown, search: unknown, limitRaw: unknown): Promise<InstancesResult>;
|
|
25
26
|
}
|
|
26
27
|
export {};
|
package/dist/routes/tables.js
CHANGED
|
@@ -62,22 +62,28 @@ function countRows(schemaId, tableName, instance) {
|
|
|
62
62
|
return (0, introspect_1.getTableElementCount)(schemaId, tableName);
|
|
63
63
|
return (0, introspect_1.getTableElementCount)(schemaId, tableName, instance.id);
|
|
64
64
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
const rows = tables.map(({ schemaId, table }, index) => ({
|
|
72
|
-
id: `${schemaId}::${table.name}`,
|
|
65
|
+
function sourceRowId(schemaId, tableName) {
|
|
66
|
+
return `${schemaId}::${tableName}`;
|
|
67
|
+
}
|
|
68
|
+
function toSourceRow({ schemaId, table }, elementCount, locale) {
|
|
69
|
+
return {
|
|
70
|
+
id: sourceRowId(schemaId, table.name),
|
|
73
71
|
schema: schemaId,
|
|
74
72
|
name: table.name,
|
|
75
|
-
elementCount
|
|
73
|
+
elementCount,
|
|
76
74
|
columnCount: Object.keys(table.fields).length,
|
|
77
75
|
indexCount: Object.keys(table.indexes ?? {}).length,
|
|
78
76
|
relations: relationTargets(schemaId, table),
|
|
79
77
|
modifiers: modifierNames(table, locale),
|
|
80
|
-
}
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
async function listTableSourceRows(locale, filters) {
|
|
81
|
+
const needle = needleOf(filters.q);
|
|
82
|
+
const summaries = await (0, introspect_1.listSchemaSummaries)();
|
|
83
|
+
const registered = summaries.flatMap((summary) => summary.tables.map((table) => ({ schemaId: summary.id, table })));
|
|
84
|
+
const tables = registered.filter((listed) => matchesStructure(listed, filters, needle));
|
|
85
|
+
const counts = await Promise.all(tables.map(({ schemaId, table }) => countRows(schemaId, table.name, filters.instance)));
|
|
86
|
+
const rows = tables.map((listed, index) => toSourceRow(listed, counts[index] ?? 0, locale));
|
|
81
87
|
return {
|
|
82
88
|
rows: filters.has.includes("empty")
|
|
83
89
|
? rows.filter((row) => row.elementCount === 0)
|
|
@@ -97,6 +103,17 @@ let DatabaseTablesController = class DatabaseTablesController extends (0, interf
|
|
|
97
103
|
const { rows, all } = await listTableSourceRows((0, messages_1.localeOf)(user), (0, schemaFilters_1.readSchemaFilters)({ scope, instance, q, has }));
|
|
98
104
|
return { results: rows, total: rows.length, all };
|
|
99
105
|
}
|
|
106
|
+
async sourceRow(user, idRaw) {
|
|
107
|
+
const id = (0, query_1.asNonEmptyString)(idRaw);
|
|
108
|
+
(0, interface_api_util_1.assert)(id, 400, "Missing 'id'");
|
|
109
|
+
const summaries = await (0, introspect_1.listSchemaSummaries)();
|
|
110
|
+
const listed = summaries
|
|
111
|
+
.flatMap((summary) => summary.tables.map((table) => ({ schemaId: summary.id, table })))
|
|
112
|
+
.find(({ schemaId, table }) => sourceRowId(schemaId, table.name) === id);
|
|
113
|
+
(0, interface_api_util_1.assert)(listed, 404, `Unknown table ${id}`);
|
|
114
|
+
const count = await (0, introspect_1.getTableElementCount)(listed.schemaId, listed.table.name);
|
|
115
|
+
return toSourceRow(listed, count, (0, messages_1.localeOf)(user));
|
|
116
|
+
}
|
|
100
117
|
async instances(schemaRaw, search, limitRaw) {
|
|
101
118
|
const schema = (0, query_1.asNonEmptyString)(schemaRaw);
|
|
102
119
|
(0, interface_api_util_1.assert)(schema, 400, "Missing 'schema'");
|
|
@@ -119,6 +136,14 @@ __decorate([
|
|
|
119
136
|
__metadata("design:paramtypes", [Function, Object, Object, Object, Object]),
|
|
120
137
|
__metadata("design:returntype", Promise)
|
|
121
138
|
], DatabaseTablesController.prototype, "source", null);
|
|
139
|
+
__decorate([
|
|
140
|
+
(0, interface_api_1.Get)("/source/row"),
|
|
141
|
+
__param(0, (0, auth_1.AuthRawUser)()),
|
|
142
|
+
__param(1, (0, interface_api_1.Parameter)("id", "query")),
|
|
143
|
+
__metadata("design:type", Function),
|
|
144
|
+
__metadata("design:paramtypes", [Function, Object]),
|
|
145
|
+
__metadata("design:returntype", Promise)
|
|
146
|
+
], DatabaseTablesController.prototype, "sourceRow", null);
|
|
122
147
|
__decorate([
|
|
123
148
|
(0, interface_api_1.Get)("/instances"),
|
|
124
149
|
__param(0, (0, interface_api_1.Parameter)("schema", "query")),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tables.js","sourceRoot":"","sources":["../../src/routes/tables.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,6DAAuE;AACvE,uEAAwD;AACxD,yDAA4E;AAE5E,+CAA+E;AAC/E,sDAK+B;AAC/B,4DAIkC;AAClC,8DAAwD;AAExD,0CAAuE;AA+BvE,MAAM,sBAAsB,GAAG,GAAG,CAAC;AACnC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAC/B,MAAM,gBAAgB,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAEzE,SAAS,eAAe,CAAC,QAAgB,EAAE,KAAmB;IAC5D,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAC/C,QAAQ,CAAC,QAAQ,KAAK,QAAQ;QAC5B,CAAC,CAAC,QAAQ,CAAC,OAAO;QAClB,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,OAAO,EAAE,CAC/C,CAAC;IACF,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,aAAa,CAAC,KAAmB,EAAE,MAAoB;IAC9D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAA,yBAAc,EAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;AAC1D,CAAC;AAID,SAAS,aAAa,CAAC,KAAmB,EAAE,MAAc;IACxD,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3D,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAC9C,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CACrC,CAAC;AACJ,CAAC;AAOD,SAAS,QAAQ,CAAC,IAAwB;IACxC,MAAM,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC1C,OAAO,MAAM,IAAI,SAAS,CAAC;AAC7B,CAAC;AAID,SAAS,gBAAgB,CACvB,EAAE,QAAQ,EAAE,KAAK,EAAe,EAChC,OAAsB,EACtB,MAA0B;IAE1B,IAAI,OAAO,CAAC,KAAK,IAAI,QAAQ,KAAK,OAAO,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IAC9D,IAAI,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1D,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;QACnE,OAAO,KAAK,CAAC;IACf,IACE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC;QAE/D,OAAO,KAAK,CAAC;IACf,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,SAAS,CAChB,QAAgB,EAChB,SAAiB,EACjB,QAAwB;IAExB,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK;QAAE,OAAO,IAAA,+BAAkB,EAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC5E,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS;QAC7B,OAAO,IAAA,iCAAoB,EAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACnD,OAAO,IAAA,iCAAoB,EAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;AAChE,CAAC;AAaD,KAAK,UAAU,mBAAmB,CAChC,MAAoB,EACpB,OAAsB;IAEtB,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,SAAS,GAAG,MAAM,IAAA,gCAAmB,GAAE,CAAC;IAC9C,MAAM,UAAU,GAAkB,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAC9D,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CACjE,CAAC;IACF,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAC1C,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAC1C,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAC9B,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,CACjC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAClD,CACF,CAAC;IACF,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"tables.js","sourceRoot":"","sources":["../../src/routes/tables.ts"],"names":[],"mappings":"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"}
|
|
@@ -58,20 +58,33 @@ function save() {
|
|
|
58
58
|
@update:open="emit('update:open', $event)"
|
|
59
59
|
>
|
|
60
60
|
<template #body>
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
:
|
|
74
|
-
|
|
61
|
+
<!-- A DMS form of one field: the column as its label, the JSON in the
|
|
62
|
+
DMS code input, the parse error in DMS error style, the required legend. -->
|
|
63
|
+
<div class="grid gap-2">
|
|
64
|
+
<DmsFieldRow
|
|
65
|
+
layout="form"
|
|
66
|
+
:inset="false"
|
|
67
|
+
spacing="row"
|
|
68
|
+
:label="column"
|
|
69
|
+
label-for="dms-database-json-cell"
|
|
70
|
+
:description="t('dms_database.data.json.help')"
|
|
71
|
+
required
|
|
72
|
+
>
|
|
73
|
+
<UFormField name="json" :error="(!readOnly && parseError) || false">
|
|
74
|
+
<DmsInputCode
|
|
75
|
+
id="dms-database-json-cell"
|
|
76
|
+
v-model="draft"
|
|
77
|
+
language="json"
|
|
78
|
+
:min-lines="12"
|
|
79
|
+
:max-lines="30"
|
|
80
|
+
:disabled="readOnly"
|
|
81
|
+
/>
|
|
82
|
+
<template #error="{ error }">
|
|
83
|
+
<DmsFormErrorText :error />
|
|
84
|
+
</template>
|
|
85
|
+
</UFormField>
|
|
86
|
+
</DmsFieldRow>
|
|
87
|
+
<DmsFormRequiredLegend v-if="!readOnly" class="pb-2" />
|
|
75
88
|
</div>
|
|
76
89
|
</template>
|
|
77
90
|
<template #footer>
|
|
@@ -31,7 +31,8 @@ import { ALL_INSTANCES_PARAM, tableLink } from '../build/utils/databaseLinks'
|
|
|
31
31
|
// The Schemas page's row drawer (D-07), also opened from the diagram: the
|
|
32
32
|
// facts of one table, its columns, indexes and relations both ways, and a
|
|
33
33
|
// sample row. The table view hands it the row and the means to step to the
|
|
34
|
-
// next one (J / K)
|
|
34
|
+
// next one (J / K), or to show another row in place; a relation opens the
|
|
35
|
+
// table it names in its place.
|
|
35
36
|
|
|
36
37
|
interface TableRow {
|
|
37
38
|
schema: string
|
|
@@ -50,6 +51,7 @@ interface RowNavigation {
|
|
|
50
51
|
const props = defineProps<{
|
|
51
52
|
rowData?: TableRow
|
|
52
53
|
navigation?: RowNavigation
|
|
54
|
+
showRow?: (row: object | string) => Promise<void>
|
|
53
55
|
}>()
|
|
54
56
|
|
|
55
57
|
// A link out closes the drawer.
|
|
@@ -100,7 +102,8 @@ const failed = computed(
|
|
|
100
102
|
() => schemasSettled.value && schemas.value === undefined,
|
|
101
103
|
)
|
|
102
104
|
|
|
103
|
-
// The table a relation was followed to, in place of the row's
|
|
105
|
+
// The table a relation was followed to, in place of the row's, where the
|
|
106
|
+
// container cannot show another row (the diagram's drawer).
|
|
104
107
|
const followed = ref<TableRow | null>(null)
|
|
105
108
|
const shown = computed(() => followed.value ?? props.rowData)
|
|
106
109
|
// J / K step from the row the table view opened: its position is not the
|
|
@@ -199,8 +202,19 @@ const incoming = computed(() =>
|
|
|
199
202
|
),
|
|
200
203
|
)
|
|
201
204
|
|
|
202
|
-
// The
|
|
203
|
-
|
|
205
|
+
// The table view shows the relation's table as its own row: the URL, the
|
|
206
|
+
// position and J / K follow it. Elsewhere, or should it fail to read the
|
|
207
|
+
// row, the inspector shows it itself, and the row's own table again closes
|
|
208
|
+
// the detour.
|
|
209
|
+
async function follow(target: TableRow) {
|
|
210
|
+
if (props.showRow) {
|
|
211
|
+
try {
|
|
212
|
+
await props.showRow(`${target.schema}::${target.name}`)
|
|
213
|
+
return
|
|
214
|
+
} catch {
|
|
215
|
+
// Shown in place below.
|
|
216
|
+
}
|
|
217
|
+
}
|
|
204
218
|
const own =
|
|
205
219
|
target.schema === props.rowData?.schema &&
|
|
206
220
|
target.name === props.rowData?.name
|
|
@@ -247,7 +247,8 @@
|
|
|
247
247
|
"title": "Edit {column}",
|
|
248
248
|
"invalid": "Invalid JSON",
|
|
249
249
|
"not_structured": "The value must be a JSON object, an array or null.",
|
|
250
|
-
"apply": "Apply"
|
|
250
|
+
"apply": "Apply",
|
|
251
|
+
"help": "An object or a list. Type null to empty the cell."
|
|
251
252
|
}
|
|
252
253
|
},
|
|
253
254
|
"diagram": {
|
|
@@ -247,7 +247,8 @@
|
|
|
247
247
|
"title": "Modifier {column}",
|
|
248
248
|
"invalid": "JSON invalide",
|
|
249
249
|
"not_structured": "La valeur doit être un objet JSON, un tableau ou null.",
|
|
250
|
-
"apply": "Appliquer"
|
|
250
|
+
"apply": "Appliquer",
|
|
251
|
+
"help": "Un objet ou une liste. Tapez null pour vider la cellule."
|
|
251
252
|
}
|
|
252
253
|
},
|
|
253
254
|
"diagram": {
|
|
@@ -6,18 +6,6 @@ function source(path: string): string {
|
|
|
6
6
|
return readFileSync(new URL(path, import.meta.url), 'utf8')
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
-
it('uses the DMS client-only wrapper for the Vue Flow schema diagram', () => {
|
|
10
|
-
const diagram = source('../app/components/SchemaDiagram.vue')
|
|
11
|
-
expect(diagram).toContain('<DmsClientOnly')
|
|
12
|
-
expect(diagram).not.toContain('<ClientOnly>')
|
|
13
|
-
})
|
|
14
|
-
|
|
15
|
-
it('does not route relation labels through Vue Flow EdgeText measurement', () => {
|
|
16
|
-
const edge = source('../app/components/DiagramRelationEdge.vue')
|
|
17
|
-
expect(edge).toContain(':label="undefined"')
|
|
18
|
-
expect(edge).toContain('<text')
|
|
19
|
-
})
|
|
20
|
-
|
|
21
9
|
it('registers every component under the module prefix the backend names', async () => {
|
|
22
10
|
const registerComponent = vi.fn()
|
|
23
11
|
const registerPage = vi.fn()
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@antelopejs/dms-database",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -36,11 +36,12 @@
|
|
|
36
36
|
"typecheck": "tsc --noEmit",
|
|
37
37
|
"format": "oxfmt . && pnpm --dir frontend-vue format",
|
|
38
38
|
"frontend:dev": "cd playground && pnpm frontend:dev",
|
|
39
|
-
"test": "pnpm run build && ajs module test .",
|
|
39
|
+
"test": "([ -n \"$DMS_PREBUILT\" ] || pnpm run build) && ajs module test .",
|
|
40
40
|
"release": "pnpm --dir frontend-vue install --frozen-lockfile && release-it",
|
|
41
41
|
"prepack": "pnpm run build",
|
|
42
42
|
"knip": "knip --dependencies",
|
|
43
43
|
"knip:all": "knip",
|
|
44
|
+
"test:layer": "pnpm --dir frontend-vue test",
|
|
44
45
|
"test:frontend": "ajs dms verify-source --layer node_modules/@antelopejs/dms/frontend-vue --module frontend-vue"
|
|
45
46
|
},
|
|
46
47
|
"dependencies": {
|
|
@@ -49,12 +50,12 @@
|
|
|
49
50
|
"@antelopejs/interface-core": ">=0.1.1 <1.0.0",
|
|
50
51
|
"@antelopejs/interface-database": ">=0.1.8 <1.0.0",
|
|
51
52
|
"@antelopejs/interface-database-decorators": ">=0.1.7 <1.0.0",
|
|
52
|
-
"@antelopejs/interface-dms": ">=0.
|
|
53
|
+
"@antelopejs/interface-dms": ">=0.6.0 <1.0.0"
|
|
53
54
|
},
|
|
54
55
|
"devDependencies": {
|
|
55
56
|
"@antelopejs/core": ">=1.13.5 <2",
|
|
56
|
-
"@antelopejs/dms": ">=0.
|
|
57
|
-
"@antelopejs/dms-frontend": ">=0.5.
|
|
57
|
+
"@antelopejs/dms": ">=0.8.0 <0.9.0",
|
|
58
|
+
"@antelopejs/dms-frontend": ">=0.5.6 <0.6.0",
|
|
58
59
|
"@antelopejs/tooling-configs": ">=0.0.7 <1.0.0",
|
|
59
60
|
"@types/chai": "^5.2.3",
|
|
60
61
|
"@types/mocha": "^10.0.10",
|