@antelopejs/dms-database 0.2.0 → 0.2.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/README.md +75 -49
- package/dist/db/models/diagram_layouts.model.d.ts +1 -0
- package/dist/db/models/diagram_notes.model.d.ts +1 -0
- package/dist/db/models/query_history.model.d.ts +1 -0
- package/dist/db/models/saved_queries.model.d.ts +1 -0
- package/dist/module.js +0 -1
- package/dist/module.js.map +1 -1
- package/dist/routes/data.d.ts +1 -3
- package/dist/routes/data.js +6 -1
- package/dist/routes/data.js.map +1 -1
- package/frontend-vue/app/build/data/stagedWrites.ts +46 -6
- package/frontend-vue/app/build/data/useStagedSave.ts +42 -12
- package/frontend-vue/app/components/DataGrid.vue +30 -2
- package/frontend-vue/package.json +3 -3
- package/frontend-vue/pnpm-lock.yaml +532 -243
- package/frontend-vue/tests/dataBrowser.test.ts +59 -1
- package/package.json +31 -14
- package/skills/dms-database/SKILL.md +35 -0
- package/frontend-vue/pnpm-workspace.yaml +0 -2
package/README.md
CHANGED
|
@@ -1,78 +1,104 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
1
3
|
# @antelopejs/dms-database
|
|
2
4
|
|
|
3
|
-
<
|
|
4
|
-
<a href="./LICENSE"><img alt="License" src="https://img.shields.io/
|
|
5
|
-
<a href="https://discord.gg/sjK28QHrA7"><img src="https://img.shields.io/badge/Discord-18181B?logo=discord&style=for-the-badge&color=000000"
|
|
6
|
-
<a href="https://antelopejs.com"><img src="https://img.shields.io/badge/Docs-18181B?style=for-the-badge&color=000000"
|
|
5
|
+
<a href="https://www.npmjs.com/package/@antelopejs/dms-database"><img alt="npm" src="https://img.shields.io/npm/v/@antelopejs/dms-database?style=for-the-badge&labelColor=000000&color=000000"></a>
|
|
6
|
+
<a href="./LICENSE"><img alt="License" src="https://img.shields.io/npm/l/@antelopejs/dms-database?style=for-the-badge&labelColor=000000&color=000000"></a>
|
|
7
|
+
<a href="https://discord.gg/sjK28QHrA7"><img alt="Discord" src="https://img.shields.io/badge/Discord-18181B?logo=discord&style=for-the-badge&color=000000"></a>
|
|
8
|
+
<a href="https://dms.antelopejs.com/docs/modules/database"><img alt="Documentation" src="https://img.shields.io/badge/Docs-18181B?style=for-the-badge&color=000000"></a>
|
|
9
|
+
|
|
10
|
+
The database console of the AntelopeJS DMS: schemas, diagrams, rows and queries.
|
|
11
|
+
|
|
7
12
|
</div>
|
|
8
13
|
|
|
9
|
-
Database
|
|
10
|
-
|
|
14
|
+

|
|
15
|
+
|
|
16
|
+
## What it does
|
|
11
17
|
|
|
12
|
-
-
|
|
13
|
-
|
|
14
|
-
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
- **Diagram**: the tables and relations of a schema. The layout saves itself and is shared by the
|
|
18
|
-
team; auto layout is previewed before it is kept.
|
|
19
|
-
- **Data browser**: the rows of any table, in any instance or across all of them (read only).
|
|
20
|
-
Edits are staged, reviewed and written only when saved, and a save can be undone for a few
|
|
21
|
-
seconds.
|
|
18
|
+
- Checks the connection and its latency, with one card per registered schema and the largest tables.
|
|
19
|
+
- Lists every table the loaded modules register, with its columns, indexes, relations and a sample row.
|
|
20
|
+
- Draws the tables and relations of a schema, with a layout and notes shared by the whole team.
|
|
21
|
+
- Browses and fixes rows in any instance: edits are staged, reviewed, saved, and can be undone for ten seconds.
|
|
22
|
+
- Runs AQL queries with completion and history, and a dry run before any query that writes.
|
|
22
23
|
|
|
23
|
-
|
|
24
|
-
instance, `all` for every instance, otherwise the instance's name.
|
|
25
|
-
- **Query console**: AQL with completion of the workspace's schemas, a library of past, saved and
|
|
26
|
-
shared queries, and a dry run before any query that changes data.
|
|
24
|
+
A saved row shows in place; the page is read again when a save may move rows (a sorted or filtered field, or a search).
|
|
27
25
|
|
|
28
|
-
The module
|
|
26
|
+
The pages and the module's API answer to the platform owner only.
|
|
29
27
|
|
|
30
|
-
##
|
|
28
|
+
## Install
|
|
31
29
|
|
|
32
|
-
|
|
30
|
+
Run the AntelopeJS CLI from the root of a project that already loads `@antelopejs/dms`:
|
|
33
31
|
|
|
34
32
|
```bash
|
|
35
33
|
ajs project modules add @antelopejs/dms-database
|
|
36
34
|
```
|
|
37
35
|
|
|
38
|
-
##
|
|
36
|
+
## Quick start
|
|
39
37
|
|
|
40
|
-
|
|
41
|
-
the Database interface cannot discover it. `schemaLabels` overrides labels for exact schema IDs or
|
|
42
|
-
glob patterns containing `*`.
|
|
38
|
+
The module works without configuration. To show the database name on the Overview and label your schemas, add a `config` block:
|
|
43
39
|
|
|
44
|
-
```
|
|
45
|
-
config
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
40
|
+
```ts
|
|
41
|
+
// antelope.config.ts
|
|
42
|
+
"dms-database": {
|
|
43
|
+
source: { type: "package", package: "@antelopejs/dms-database", version: ">=0.2.0 <1.0.0" },
|
|
44
|
+
config: {
|
|
45
|
+
driverLabel: "MongoDB 8.0",
|
|
46
|
+
schemaLabels: {
|
|
47
|
+
"app-*": { label: "Application", color: "info" },
|
|
48
|
+
},
|
|
49
49
|
},
|
|
50
|
-
}
|
|
50
|
+
},
|
|
51
51
|
```
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
Restart the backend, then the frontend, sign in as the platform owner and open **Modules → Database** (`/modules/database/overview`).
|
|
54
|
+
|
|
55
|
+
## Compatibility
|
|
56
|
+
|
|
57
|
+
| Package | Version |
|
|
58
|
+
| --- | --- |
|
|
59
|
+
| `@antelopejs/dms` | `>=0.9.0 <1.0.0` |
|
|
60
|
+
| `@antelopejs/interface-dms` | `>=0.7.0 <1.0.0` |
|
|
61
|
+
| `@antelopejs/dms-frontend` (renderer) | `>=0.6.0 <0.7.0` |
|
|
62
|
+
| Database | an `@antelopejs/interface-database` implementation, such as `@antelopejs/mongodb` |
|
|
63
|
+
|
|
64
|
+
On DMS 0.8, use `@antelopejs/dms-database` 0.1.
|
|
65
|
+
|
|
66
|
+
## Documentation
|
|
67
|
+
|
|
68
|
+
- [Introduction](https://dms.antelopejs.com/docs/modules/database/introduction)
|
|
69
|
+
- [Installation](https://dms.antelopejs.com/docs/modules/database/installation)
|
|
70
|
+
- [Configuration](https://dms.antelopejs.com/docs/modules/database/configuration)
|
|
71
|
+
- [Usage](https://dms.antelopejs.com/docs/modules/database/usage/overview)
|
|
72
|
+
- [Extending](https://dms.antelopejs.com/docs/modules/database/extending)
|
|
73
|
+
- [FAQ](https://dms.antelopejs.com/docs/modules/database/faq)
|
|
74
|
+
|
|
75
|
+
The canonical guide lives in [`docs/`](./docs), including the [supported extension boundary](./docs/5.extending.md#supported-extension-boundary). There is no separate DMS Database interface package. The package also ships the `dms-database` Claude Code skill in [`skills/`](./skills), declared under `antelopeJs.skills`.
|
|
76
|
+
|
|
77
|
+
## Contributing
|
|
78
|
+
|
|
79
|
+
Read [CONTRIBUTING.md](./CONTRIBUTING.md) before opening a pull request. The playground registers a `demo` schema and a `shop` schema with `eu` and `us` instances, seeded on first start.
|
|
80
|
+
|
|
81
|
+
One root install includes the backend and shipped Vue module, retaining their separate lockfiles. The playground remains independent: run `pnpm --dir playground install --ignore-workspace --frozen-lockfile` before starting it. Use the root scripts below rather than recursive scripts: frontend `build` and `typecheck` need the playground or a generated Inertia workspace, and root lint already checks the Vue module.
|
|
54
82
|
|
|
55
83
|
```bash
|
|
56
84
|
pnpm install
|
|
57
|
-
pnpm
|
|
85
|
+
pnpm dev # playground backend
|
|
86
|
+
pnpm frontend:dev # dashboard, in a second terminal
|
|
87
|
+
pnpm lint
|
|
88
|
+
pnpm typecheck
|
|
58
89
|
pnpm test
|
|
59
90
|
```
|
|
60
91
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
the backend page names. The pages themselves are declared in `src/pages`, as DMS blocks plus the
|
|
64
|
-
module's own components. Everything under `frontend-vue/app/build` is private to the layer and
|
|
65
|
-
imported by path.
|
|
92
|
+
<details>
|
|
93
|
+
<summary>Repository notes</summary>
|
|
66
94
|
|
|
67
|
-
The
|
|
68
|
-
|
|
95
|
+
- The module registers its Vue 3 frontend through `frontend-vue/dms.frontend.ts`, under the `DmsDatabase` component prefix: `app/components/DataBrowser.vue` is the `DmsDatabaseDataBrowser` the backend page names. The pages are declared in `src/pages`, as DMS blocks plus the module's own components. Everything under `frontend-vue/app/build` is private to the layer and imported by path.
|
|
96
|
+
- Run `pnpm test:layer` for the frontend tests and `pnpm test:frontend` to build and typecheck a generated Inertia app. Set `DMS_FRONTEND_WORKSPACE` to a generated Inertia workspace before running `pnpm --dir frontend-vue typecheck`.
|
|
97
|
+
- `DMS_SOURCE=/absolute/path/to/dms pnpm test` tests against a local DMS runtime with disposable MongoDB and filesystem storage. Only the test harness loads that runtime; the types come from `@antelopejs/interface-dms`.
|
|
98
|
+
- `docs/design/redesign-v2-grill.md` records the decisions behind the v2 redesign.
|
|
69
99
|
|
|
70
|
-
|
|
100
|
+
</details>
|
|
71
101
|
|
|
72
|
-
|
|
73
|
-
`DMS_FRONTEND_WORKSPACE` to a generated Inertia workspace before running
|
|
74
|
-
`pnpm --dir frontend-vue typecheck`.
|
|
102
|
+
## License
|
|
75
103
|
|
|
76
|
-
|
|
77
|
-
and filesystem storage. Only the test harness loads the runtime; the types come from
|
|
78
|
-
`@antelopejs/interface-dms`, so `pnpm typecheck` is unaffected by that path.
|
|
104
|
+
[Apache-2.0](./LICENSE)
|
|
@@ -13,6 +13,7 @@ declare const DiagramLayoutModel_base: {
|
|
|
13
13
|
delete(id: string): Promise<number>;
|
|
14
14
|
};
|
|
15
15
|
readonly schemaName: string;
|
|
16
|
+
readonly tableClass: import("@antelopejs/interface-database-decorators").Constructible<DiagramLayout>;
|
|
16
17
|
fromPlainData(obj: any): DiagramLayout;
|
|
17
18
|
fromDatabase(obj: any): DiagramLayout | undefined;
|
|
18
19
|
toDatabase(obj: any): Record<string, any>;
|
|
@@ -12,6 +12,7 @@ declare const DiagramNoteModel_base: {
|
|
|
12
12
|
delete(id: string): Promise<number>;
|
|
13
13
|
};
|
|
14
14
|
readonly schemaName: string;
|
|
15
|
+
readonly tableClass: import("@antelopejs/interface-database-decorators").Constructible<DiagramNote>;
|
|
15
16
|
fromPlainData(obj: any): DiagramNote;
|
|
16
17
|
fromDatabase(obj: any): DiagramNote | undefined;
|
|
17
18
|
toDatabase(obj: any): Record<string, any>;
|
|
@@ -13,6 +13,7 @@ declare const QueryHistoryModel_base: {
|
|
|
13
13
|
delete(id: string): Promise<number>;
|
|
14
14
|
};
|
|
15
15
|
readonly schemaName: string;
|
|
16
|
+
readonly tableClass: import("@antelopejs/interface-database-decorators").Constructible<QueryHistoryRow>;
|
|
16
17
|
fromPlainData(obj: any): QueryHistoryRow;
|
|
17
18
|
fromDatabase(obj: any): QueryHistoryRow | undefined;
|
|
18
19
|
toDatabase(obj: any): Record<string, any>;
|
|
@@ -12,6 +12,7 @@ declare const SavedQueryModel_base: {
|
|
|
12
12
|
delete(id: string): Promise<number>;
|
|
13
13
|
};
|
|
14
14
|
readonly schemaName: string;
|
|
15
|
+
readonly tableClass: import("@antelopejs/interface-database-decorators").Constructible<SavedQueryRow>;
|
|
15
16
|
fromPlainData(obj: any): SavedQueryRow;
|
|
16
17
|
fromDatabase(obj: any): SavedQueryRow | undefined;
|
|
17
18
|
toDatabase(obj: any): Record<string, any>;
|
package/dist/module.js
CHANGED
|
@@ -26,7 +26,6 @@ exports.databaseModule = (0, page_1.RegisterModule)({
|
|
|
26
26
|
landingPage: "overview",
|
|
27
27
|
version: readVersion(),
|
|
28
28
|
catalogCategory: "$dms_database.catalog_category",
|
|
29
|
-
status: () => "beta",
|
|
30
29
|
readout: (context) => (0, catalog_1.readCatalogReadout)(context.user),
|
|
31
30
|
});
|
|
32
31
|
exports.exploreSection = (0, page_1.Category)("explore", {
|
package/dist/module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.js","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":";;;;;;AAAA,qCAAuC;AACvC,0DAA6B;AAC7B,yDAA0E;AAC1E,+CAAuD;AAE1C,QAAA,kBAAkB,GAAG,UAAU,CAAC;AAO7C,SAAS,WAAW;IAClB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAA,sBAAY,EAC3B,mBAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,EACvC,MAAM,CACP,CAAC;QACF,OAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAqB,CAAC,OAAO,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAGY,QAAA,cAAc,GAAG,IAAA,qBAAc,EAAC;IAC3C,EAAE,EAAE,0BAAkB;IACtB,KAAK,EAAE,qBAAqB;IAC5B,WAAW,EAAE,2BAA2B;IACxC,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,UAAU;IACvB,OAAO,EAAE,WAAW,EAAE;IACtB,eAAe,EAAE,gCAAgC;
|
|
1
|
+
{"version":3,"file":"module.js","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":";;;;;;AAAA,qCAAuC;AACvC,0DAA6B;AAC7B,yDAA0E;AAC1E,+CAAuD;AAE1C,QAAA,kBAAkB,GAAG,UAAU,CAAC;AAO7C,SAAS,WAAW;IAClB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAA,sBAAY,EAC3B,mBAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,EACvC,MAAM,CACP,CAAC;QACF,OAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAqB,CAAC,OAAO,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAGY,QAAA,cAAc,GAAG,IAAA,qBAAc,EAAC;IAC3C,EAAE,EAAE,0BAAkB;IACtB,KAAK,EAAE,qBAAqB;IAC5B,WAAW,EAAE,2BAA2B;IACxC,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,UAAU;IACvB,OAAO,EAAE,WAAW,EAAE;IACtB,eAAe,EAAE,gCAAgC;IACjD,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAA,4BAAkB,EAAC,OAAO,CAAC,IAAI,CAAC;CACvD,CAAC,CAAC;AAIU,QAAA,cAAc,GAAG,IAAA,eAAQ,EAAC,SAAS,EAAE;IAChD,WAAW,EAAE,2BAA2B;IACxC,IAAI,EAAE,cAAc;IACpB,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,sBAAc;IACxB,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,GAAG;CACb,CAAC,CAAC;AAEU,QAAA,WAAW,GAAG,IAAA,eAAQ,EAAC,MAAM,EAAE;IAC1C,WAAW,EAAE,wBAAwB;IACrC,IAAI,EAAE,aAAa;IACnB,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,sBAAc;IACxB,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,GAAG;CACb,CAAC,CAAC;AAGU,QAAA,cAAc,GAAG;IAC5B,QAAQ,EAAE,4BAA4B;IACtC,OAAO,EAAE,2BAA2B;IACpC,OAAO,EAAE,2BAA2B;IACpC,IAAI,EAAE,wBAAwB;IAC9B,KAAK,EAAE,yBAAyB;CACxB,CAAC"}
|
package/dist/routes/data.d.ts
CHANGED
|
@@ -26,8 +26,6 @@ export declare class DatabaseBrowseController extends DatabaseBrowseController_b
|
|
|
26
26
|
tables(_user: User, schemaFilter: unknown, instanceFilter: unknown): Promise<ListResult<BrowseTableEntry>>;
|
|
27
27
|
references(_user: User, schemaFilter: unknown, instanceFilter: unknown, tableFilter: unknown, idRaw: unknown): Promise<ListResult<RowReference>>;
|
|
28
28
|
get(_user: User, schemaFilter: unknown, instanceFilter: unknown, tableFilter: unknown, idRaw: unknown): Promise<any>;
|
|
29
|
-
edit(_user: User, schemaFilter: unknown, instanceFilter: unknown, tableFilter: unknown, idRaw: unknown, body: Record<string, unknown>): Promise<
|
|
30
|
-
[x: string]: unknown;
|
|
31
|
-
}>;
|
|
29
|
+
edit(_user: User, schemaFilter: unknown, instanceFilter: unknown, tableFilter: unknown, idRaw: unknown, body: Record<string, unknown>): Promise<any>;
|
|
32
30
|
}
|
|
33
31
|
export {};
|
package/dist/routes/data.js
CHANGED
|
@@ -296,7 +296,12 @@ let DatabaseBrowseController = class DatabaseBrowseController extends (0, interf
|
|
|
296
296
|
const primaryKey = (0, introspect_1.getTablePrimaryKey)(selection.schema, selection.table);
|
|
297
297
|
const updates = buildEditUpdates(current, body, primaryKey);
|
|
298
298
|
if (Object.keys(updates).length > 0) {
|
|
299
|
-
await target.update(updates).run();
|
|
299
|
+
const changed = await target.update(updates).run();
|
|
300
|
+
if (changed === 0) {
|
|
301
|
+
const persisted = await target;
|
|
302
|
+
(0, interface_api_util_1.assert)(persisted && typeof persisted === "object", 404, "Row not found");
|
|
303
|
+
return persisted;
|
|
304
|
+
}
|
|
300
305
|
}
|
|
301
306
|
return { ...current, ...updates };
|
|
302
307
|
}
|
package/dist/routes/data.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/routes/data.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/routes/data.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,11 +20,11 @@ function statusOf(error: unknown): number | undefined {
|
|
|
20
20
|
return failure?.statusCode ?? failure?.status
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
export async function writeRows(
|
|
23
|
+
export async function writeRows<T = unknown>(
|
|
24
24
|
rows: Iterable<[string, Record<string, unknown>]>,
|
|
25
|
-
write: (rowId: string, body: Record<string, unknown>) => Promise<
|
|
26
|
-
/** Called once a row is settled: written, or gone. */
|
|
27
|
-
onSettled?: (rowId: string) => void,
|
|
25
|
+
write: (rowId: string, body: Record<string, unknown>) => Promise<T>,
|
|
26
|
+
/** Called once a row is settled: written, with the write's answer, or gone. */
|
|
27
|
+
onSettled?: (rowId: string, answer?: T) => void,
|
|
28
28
|
): Promise<RowWriteOutcome> {
|
|
29
29
|
const outcome: RowWriteOutcome = {
|
|
30
30
|
written: [],
|
|
@@ -37,8 +37,9 @@ export async function writeRows(
|
|
|
37
37
|
outcome.left.push(rowId)
|
|
38
38
|
continue
|
|
39
39
|
}
|
|
40
|
+
let answer: T | undefined
|
|
40
41
|
try {
|
|
41
|
-
await write(rowId, body)
|
|
42
|
+
answer = await write(rowId, body)
|
|
42
43
|
outcome.written.push(rowId)
|
|
43
44
|
} catch (error) {
|
|
44
45
|
if (statusOf(error) !== NOT_FOUND) {
|
|
@@ -49,7 +50,7 @@ export async function writeRows(
|
|
|
49
50
|
}
|
|
50
51
|
outcome.gone.push(rowId)
|
|
51
52
|
}
|
|
52
|
-
onSettled?.(rowId)
|
|
53
|
+
onSettled?.(rowId, answer)
|
|
53
54
|
}
|
|
54
55
|
return outcome
|
|
55
56
|
}
|
|
@@ -62,3 +63,42 @@ export function changesOf<T extends { rowId: string }>(
|
|
|
62
63
|
const rows = new Set(rowIds)
|
|
63
64
|
return changes.filter((change) => rows.has(change.rowId))
|
|
64
65
|
}
|
|
66
|
+
|
|
67
|
+
/** How the rows of a grid page are narrowed and ordered. */
|
|
68
|
+
export interface PageRefinement {
|
|
69
|
+
sortKey: string | null
|
|
70
|
+
search: string
|
|
71
|
+
/** The fields a column filter narrows, with a value. */
|
|
72
|
+
filtered: string[]
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Whether writing `fields` may take rows in or out of the page, or move them
|
|
77
|
+
* in it: a field it is sorted or filtered by, or any field while a search
|
|
78
|
+
* runs (it matches every column). The page is then read again; otherwise
|
|
79
|
+
* the rows written stay where they are, as the server answered them.
|
|
80
|
+
*/
|
|
81
|
+
export function mayMoveRows(
|
|
82
|
+
fields: Iterable<string>,
|
|
83
|
+
refinement: PageRefinement,
|
|
84
|
+
): boolean {
|
|
85
|
+
if (refinement.search !== '') return true
|
|
86
|
+
const narrowing = new Set(refinement.filtered)
|
|
87
|
+
if (refinement.sortKey) narrowing.add(refinement.sortKey)
|
|
88
|
+
for (const field of fields) if (narrowing.has(field)) return true
|
|
89
|
+
return false
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* `rows` with the row the server answered a write with in place of the one of
|
|
94
|
+
* the same id: the fields it holds replace theirs, the browse-only ones stay.
|
|
95
|
+
*/
|
|
96
|
+
export function withWrittenRow(
|
|
97
|
+
rows: Record<string, unknown>[],
|
|
98
|
+
written: Record<string, unknown>,
|
|
99
|
+
idOf: (row: Record<string, unknown>) => string | null,
|
|
100
|
+
): Record<string, unknown>[] {
|
|
101
|
+
const id = idOf(written)
|
|
102
|
+
if (id === null) return rows
|
|
103
|
+
return rows.map((row) => (idOf(row) === id ? { ...row, ...written } : row))
|
|
104
|
+
}
|
|
@@ -12,9 +12,10 @@ import { changesOf, type RowWriteOutcome, writeRows } from './stagedWrites'
|
|
|
12
12
|
// Writes the staged edits of a tab after the user reviewed them, then offers
|
|
13
13
|
// to take them back for a few seconds, in the save bar of the current tab
|
|
14
14
|
// (another tab ends the offer). Each row is written with one call of the
|
|
15
|
-
// edit route
|
|
16
|
-
//
|
|
17
|
-
// changes, and a failure stops the
|
|
15
|
+
// edit route, which answers with the row as stored; an undo writes the
|
|
16
|
+
// previous values back the same way. Only the rows written are announced and
|
|
17
|
+
// undone: a row gone meanwhile drops its changes, and a failure stops the
|
|
18
|
+
// save with the rows left still staged.
|
|
18
19
|
|
|
19
20
|
const EDIT_ENDPOINT = '/api/database/browse/edit'
|
|
20
21
|
const UNDO_WINDOW_MS = 10_000
|
|
@@ -27,9 +28,19 @@ interface SaveNotice {
|
|
|
27
28
|
scope: string
|
|
28
29
|
}
|
|
29
30
|
|
|
31
|
+
/** What a save or an undo wrote, once it is settled. */
|
|
32
|
+
export interface SavedChanges {
|
|
33
|
+
/** The fields written. */
|
|
34
|
+
fields: string[]
|
|
35
|
+
/** Rows gone meanwhile, which the page may still show. */
|
|
36
|
+
gone: number
|
|
37
|
+
}
|
|
38
|
+
|
|
30
39
|
interface StagedSaveOptions {
|
|
31
40
|
tab: () => BrowserTab
|
|
32
|
-
|
|
41
|
+
/** A row written, as the server answered: shown at once in place of the one read. */
|
|
42
|
+
onWritten: (tab: BrowserTab, row: Record<string, unknown>) => void
|
|
43
|
+
onSaved: (saved: SavedChanges) => void
|
|
33
44
|
}
|
|
34
45
|
|
|
35
46
|
/** The server's reason when it gave one, else the error's own message. */
|
|
@@ -41,6 +52,10 @@ function messageOf(error: unknown): string {
|
|
|
41
52
|
return error instanceof Error ? error.message : String(error)
|
|
42
53
|
}
|
|
43
54
|
|
|
55
|
+
function fieldsOf(changes: StagedChange[]): string[] {
|
|
56
|
+
return [...new Set(changes.map((change) => change.field))]
|
|
57
|
+
}
|
|
58
|
+
|
|
44
59
|
export function useStagedSave(options: StagedSaveOptions) {
|
|
45
60
|
const { t, n } = useI18n()
|
|
46
61
|
const { $authFetch } = useAuthFetch()
|
|
@@ -85,12 +100,13 @@ export function useStagedSave(options: StagedSaveOptions) {
|
|
|
85
100
|
return `${tab.schema}.${tab.table} ${badge}`
|
|
86
101
|
}
|
|
87
102
|
|
|
88
|
-
|
|
103
|
+
/** Writes a row, and answers with it as the server now stores it. */
|
|
104
|
+
function writeRow(
|
|
89
105
|
tab: BrowserTab,
|
|
90
106
|
rowId: string,
|
|
91
107
|
body: Record<string, unknown>,
|
|
92
|
-
) {
|
|
93
|
-
|
|
108
|
+
): Promise<Record<string, unknown>> {
|
|
109
|
+
return $authFetch<Record<string, unknown>>(EDIT_ENDPOINT, {
|
|
94
110
|
method: 'PUT',
|
|
95
111
|
query: { ...browseSelectionQuery(tab), id: rowId },
|
|
96
112
|
body,
|
|
@@ -135,8 +151,13 @@ export function useStagedSave(options: StagedSaveOptions) {
|
|
|
135
151
|
)
|
|
136
152
|
}
|
|
137
153
|
|
|
138
|
-
|
|
139
|
-
|
|
154
|
+
/** Shows a row written as the server answered it. */
|
|
155
|
+
function showWritten(tab: BrowserTab, row: Record<string, unknown> | undefined) {
|
|
156
|
+
if (row) options.onWritten(tab, row)
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// Each row written (or gone) leaves the staged edits at once, its answer
|
|
160
|
+
// shown in its place: a failure further on keeps only the rows not written.
|
|
140
161
|
function saveAll(tab: BrowserTab): Promise<RowWriteOutcome> {
|
|
141
162
|
const rows = staged
|
|
142
163
|
.rowIds(tab.id)
|
|
@@ -147,7 +168,10 @@ export function useStagedSave(options: StagedSaveOptions) {
|
|
|
147
168
|
return writeRows(
|
|
148
169
|
rows,
|
|
149
170
|
(rowId, body) => writeRow(tab, rowId, body),
|
|
150
|
-
(rowId) =>
|
|
171
|
+
(rowId, row) => {
|
|
172
|
+
showWritten(tab, row)
|
|
173
|
+
staged.discard(tab.id, [rowId])
|
|
174
|
+
},
|
|
151
175
|
)
|
|
152
176
|
}
|
|
153
177
|
|
|
@@ -202,6 +226,7 @@ export function useStagedSave(options: StagedSaveOptions) {
|
|
|
202
226
|
const outcome = await writeRows(
|
|
203
227
|
undoBodies(current.changes),
|
|
204
228
|
(rowId, body) => writeRow(tab, rowId, body),
|
|
229
|
+
(_rowId, row) => showWritten(tab, row),
|
|
205
230
|
)
|
|
206
231
|
const restored = changesOf(current.changes, outcome.written)
|
|
207
232
|
const gone = changesOf(current.changes, outcome.gone)
|
|
@@ -243,7 +268,10 @@ export function useStagedSave(options: StagedSaveOptions) {
|
|
|
243
268
|
),
|
|
244
269
|
color: 'warning',
|
|
245
270
|
})
|
|
246
|
-
options.onSaved(
|
|
271
|
+
options.onSaved({
|
|
272
|
+
fields: fieldsOf(current.changes),
|
|
273
|
+
gone: outcome.gone.length,
|
|
274
|
+
})
|
|
247
275
|
}
|
|
248
276
|
|
|
249
277
|
function announce(tab: BrowserTab, saved: StagedChange[]) {
|
|
@@ -259,6 +287,7 @@ export function useStagedSave(options: StagedSaveOptions) {
|
|
|
259
287
|
// the dialog closed, what was written is announced and undoable.
|
|
260
288
|
const saved: StagedChange[] = []
|
|
261
289
|
let settled = false
|
|
290
|
+
let gone = 0
|
|
262
291
|
try {
|
|
263
292
|
await confirm({
|
|
264
293
|
title: t(
|
|
@@ -281,6 +310,7 @@ export function useStagedSave(options: StagedSaveOptions) {
|
|
|
281
310
|
try {
|
|
282
311
|
const outcome = await saveAll(tab)
|
|
283
312
|
saved.push(...changesOf(changes, outcome.written))
|
|
313
|
+
gone += outcome.gone.length
|
|
284
314
|
if (outcome.written.length + outcome.gone.length > 0) settled = true
|
|
285
315
|
return partialOutcome(outcome, changes, saved.length)
|
|
286
316
|
} finally {
|
|
@@ -289,7 +319,7 @@ export function useStagedSave(options: StagedSaveOptions) {
|
|
|
289
319
|
},
|
|
290
320
|
})
|
|
291
321
|
} finally {
|
|
292
|
-
if (settled) options.onSaved()
|
|
322
|
+
if (settled) options.onSaved({ fields: fieldsOf(saved), gone })
|
|
293
323
|
if (saved.length > 0) announce(tab, saved)
|
|
294
324
|
}
|
|
295
325
|
}
|
|
@@ -14,7 +14,8 @@ import {
|
|
|
14
14
|
import { onKeyStroke, useEventListener } from '@vueuse/core'
|
|
15
15
|
import { parseDraft } from '../build/data/cellValues'
|
|
16
16
|
import { useStagedEdits } from '../build/data/stagedEdits'
|
|
17
|
-
import {
|
|
17
|
+
import { mayMoveRows, withWrittenRow } from '../build/data/stagedWrites'
|
|
18
|
+
import { type SavedChanges, useStagedSave } from '../build/data/useStagedSave'
|
|
18
19
|
import type { TableSummary } from '../build/composables/useDatabaseSchemas'
|
|
19
20
|
import type { BrowserTab } from '../build/composables/useDataBrowserTabs'
|
|
20
21
|
import type {
|
|
@@ -33,6 +34,8 @@ import RowDrawer from './RowDrawer.vue'
|
|
|
33
34
|
// The grid of one open table. Rows are read a page at a time; a committed
|
|
34
35
|
// cell is staged, not written (D-02): the save bar offers a review of every
|
|
35
36
|
// change before it is written, then the save and its undo for a few seconds.
|
|
37
|
+
// A row written shows as the server answered it, in place: the page is read
|
|
38
|
+
// again only when the write may move rows in or out of it.
|
|
36
39
|
|
|
37
40
|
const BROWSE_ENDPOINT = '/api/database/browse'
|
|
38
41
|
// Browse-only columns: the source instance of a cross-instance read.
|
|
@@ -446,6 +449,30 @@ const pendingCount = computed(() => staged.count(props.tab.id))
|
|
|
446
449
|
const changedFields = computed(() => [
|
|
447
450
|
...new Set(staged.list(props.tab.id).map((change) => change.field)),
|
|
448
451
|
])
|
|
452
|
+
// The page on screen, with a row written in place of the one read: the read's
|
|
453
|
+
// data is replaced (it is shallow), so the cell shows the stored value at once.
|
|
454
|
+
function showWritten(tab: BrowserTab, row: Record<string, unknown>) {
|
|
455
|
+
const list = listRead.data.value
|
|
456
|
+
if (tab.id !== props.tab.id || !list) return
|
|
457
|
+
listRead.data.value = {
|
|
458
|
+
...list,
|
|
459
|
+
results: withWrittenRow(list.results ?? [], row, rowIdOf),
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
// A save may change which rows the page holds, or their order, only through
|
|
464
|
+
// the fields it sorts, filters or searches by; a row gone meanwhile leaves.
|
|
465
|
+
function afterSave({ fields, gone }: SavedChanges) {
|
|
466
|
+
const filtered = Object.entries(state.filters)
|
|
467
|
+
.filter(([, filter]) => filter.value)
|
|
468
|
+
.map(([field]) => field)
|
|
469
|
+
if (
|
|
470
|
+
gone > 0 ||
|
|
471
|
+
mayMoveRows(fields, { sortKey: state.sortKey, search: state.search, filtered })
|
|
472
|
+
)
|
|
473
|
+
reload()
|
|
474
|
+
}
|
|
475
|
+
|
|
449
476
|
const {
|
|
450
477
|
saving,
|
|
451
478
|
review,
|
|
@@ -453,7 +480,8 @@ const {
|
|
|
453
480
|
undo,
|
|
454
481
|
} = useStagedSave({
|
|
455
482
|
tab: () => props.tab,
|
|
456
|
-
|
|
483
|
+
onWritten: showWritten,
|
|
484
|
+
onSaved: afterSave,
|
|
457
485
|
})
|
|
458
486
|
|
|
459
487
|
onKeyStroke('s', (event) => {
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"main": "./dms.frontend.ts",
|
|
7
7
|
"packageManager": "pnpm@10.6.5",
|
|
8
8
|
"engines": {
|
|
9
|
-
"@antelopejs/dms-frontend": ">=0.6.
|
|
9
|
+
"@antelopejs/dms-frontend": ">=0.6.3 <0.7.0"
|
|
10
10
|
},
|
|
11
11
|
"scripts": {
|
|
12
12
|
"dev": "pnpm --dir ../playground frontend:dev",
|
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
"test": "vitest run"
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@antelopejs/interface-core": ">=0.
|
|
22
|
-
"@antelopejs/interface-database": ">=0.1.
|
|
21
|
+
"@antelopejs/interface-core": ">=0.2.4 <1.0.0",
|
|
22
|
+
"@antelopejs/interface-database": ">=0.1.10 <1.0.0",
|
|
23
23
|
"@codemirror/autocomplete": "^6.18.6",
|
|
24
24
|
"@codemirror/commands": "^6.8.1",
|
|
25
25
|
"@codemirror/lang-javascript": "^6.2.4",
|