@wrenautomation/aerie 0.4.3 → 0.4.5
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/bin.js +39 -7
- package/dist/bin.js.map +2 -2
- package/dist/core/address.d.ts +1 -1
- package/dist/core/address.js +10 -8
- package/dist/core/address.js.map +1 -1
- package/dist/core/fields.d.ts +15 -0
- package/dist/core/fields.js +49 -3
- package/dist/core/fields.js.map +1 -1
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.js +1 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/rows.d.ts +17 -0
- package/dist/core/rows.js +34 -0
- package/dist/core/rows.js.map +1 -0
- package/dist/peers-coord.js +48 -8
- package/dist/peers-coord.js.map +3 -3
- package/package.json +1 -1
package/dist/core/address.d.ts
CHANGED
|
@@ -16,6 +16,6 @@ interface Query {
|
|
|
16
16
|
getAll(k: string): string[];
|
|
17
17
|
}
|
|
18
18
|
export declare function viewOfAddress(q: Query): AddressView;
|
|
19
|
-
/** the view as address pairs, in `VIEW_KEYS` order; defaults (list layout, subtree on) leave no key */
|
|
19
|
+
/** the view as address pairs, in `VIEW_KEYS` order; defaults (list layout, subtree on) leave no key; the first sort only */
|
|
20
20
|
export declare function addressOfView(v: AddressView): [string, string][];
|
|
21
21
|
export {};
|
package/dist/core/address.js
CHANGED
|
@@ -44,11 +44,12 @@ export function viewOfAddress(q) {
|
|
|
44
44
|
}
|
|
45
45
|
if (q.get("open") === "1")
|
|
46
46
|
f.openChecks = true;
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
47
|
+
// one field, `-` = desc: wren's router keeps `sort` only as `^-?[\w.]+$`
|
|
48
|
+
const raw = q.get("sort") ?? "";
|
|
49
|
+
const field = raw.replace(/^-/, "");
|
|
50
|
+
const sort = SORT_FIELDS.includes(field)
|
|
51
|
+
? [{ field: field, dir: raw.startsWith("-") ? "desc" : "asc" }]
|
|
52
|
+
: [];
|
|
52
53
|
const group = q.get("group");
|
|
53
54
|
const layout = q.get("layout");
|
|
54
55
|
const text = q.get("q")?.trim();
|
|
@@ -60,7 +61,7 @@ export function viewOfAddress(q) {
|
|
|
60
61
|
...(text ? { text } : {}),
|
|
61
62
|
};
|
|
62
63
|
}
|
|
63
|
-
/** the view as address pairs, in `VIEW_KEYS` order; defaults (list layout, subtree on) leave no key */
|
|
64
|
+
/** the view as address pairs, in `VIEW_KEYS` order; defaults (list layout, subtree on) leave no key; the first sort only */
|
|
64
65
|
export function addressOfView(v) {
|
|
65
66
|
const f = v.filter;
|
|
66
67
|
const out = [];
|
|
@@ -90,8 +91,9 @@ export function addressOfView(v) {
|
|
|
90
91
|
out.push(["open", "1"]);
|
|
91
92
|
if (v.text)
|
|
92
93
|
out.push(["q", v.text]);
|
|
93
|
-
|
|
94
|
-
|
|
94
|
+
const first = v.sort[0];
|
|
95
|
+
if (first)
|
|
96
|
+
out.push(["sort", `${first.dir === "desc" ? "-" : ""}${first.field}`]);
|
|
95
97
|
if (v.group)
|
|
96
98
|
out.push(["group", v.group]);
|
|
97
99
|
if (v.layout !== "list")
|
package/dist/core/address.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"address.js","sourceRoot":"","sources":["../../src/core/address.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAe,WAAW,EAA6B,MAAM,aAAa,CAAC;AAElF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAU,CAAC;AAElE,MAAM,KAAK,GAAwB,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;AAW3E,8EAA8E;AAC9E,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,MAAM;IACN,KAAK;IACL,QAAQ;IACR,UAAU;IACV,MAAM;IACN,WAAW;IACX,OAAO;IACP,UAAU;IACV,QAAQ;IACR,KAAK;IACL,MAAM;IACN,QAAQ;IACR,MAAM;IACN,GAAG;IACH,MAAM;IACN,OAAO;IACP,QAAQ;CACA,CAAC;AAOX,MAAM,IAAI,GAAG,CAAC,CAAQ,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAElE,MAAM,UAAU,aAAa,CAAC,CAAQ;IACpC,MAAM,CAAC,GAAW,EAAE,CAAC;IACrB,KAAK,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,CAAU,EAAE,CAAC;QACtF,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,CAAC,MAAM;YAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IACD,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG;QAAE,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC;IACtD,KAAK,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAU,EAAE,CAAC;QAC1D,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,CAAC;YAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACzB,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAiB,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAa,CAAC,CAAC,CAAC;QAC1F,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IACjE,CAAC;IACD,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG;QAAE,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC;IAC/C,MAAM,
|
|
1
|
+
{"version":3,"file":"address.js","sourceRoot":"","sources":["../../src/core/address.ts"],"names":[],"mappings":"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"}
|
package/dist/core/fields.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Edit } from "./edit.js";
|
|
1
2
|
import { type SortField, type TaskRecord, type TaskView } from "./filter.js";
|
|
2
3
|
/** how a portal draws the value */
|
|
3
4
|
export type FieldKind = "id" | "text" | "status" | "priority" | "area" | "people" | "labels" | "date" | "number" | "progress";
|
|
@@ -13,9 +14,23 @@ export interface Field {
|
|
|
13
14
|
group?: boolean;
|
|
14
15
|
/** known values in group order; others follow, by name */
|
|
15
16
|
order?: readonly string[];
|
|
17
|
+
/**
|
|
18
|
+
* The write that moves `t` from group `from` to group `to` (null: the empty group), the inverse of `values`
|
|
19
|
+
* (D17). None: a Board cannot move cards on this field.
|
|
20
|
+
*/
|
|
21
|
+
move?(t: TaskView, from: string | null, to: string | null): MoveEdit | null;
|
|
16
22
|
}
|
|
23
|
+
/** a move's write: task fields, and `area` (a placement) */
|
|
24
|
+
export type MoveEdit = Edit & {
|
|
25
|
+
area?: string;
|
|
26
|
+
};
|
|
17
27
|
export declare const FIELDS: readonly Field[];
|
|
18
28
|
export declare const fieldOf: (key: string) => Field | undefined;
|
|
29
|
+
/**
|
|
30
|
+
* The write that moves `t` from group `from` to `to` on field `key`; null: nothing to write (the same group, a
|
|
31
|
+
* `from` the task is not in, a field with no move).
|
|
32
|
+
*/
|
|
33
|
+
export declare function moveEdit(key: string, t: TaskView, from: string | null, to: string | null): MoveEdit | null;
|
|
19
34
|
export declare const GROUP_KEYS: string[];
|
|
20
35
|
export interface Group<T extends TaskView = TaskRecord> {
|
|
21
36
|
/** null: the task has no value for this field */
|
package/dist/core/fields.js
CHANGED
|
@@ -6,6 +6,8 @@ import { lineage } from "./area.js";
|
|
|
6
6
|
import { holdersOf, MARK } from "./filter.js";
|
|
7
7
|
import { PRIORITIES, STATUSES } from "./task.js";
|
|
8
8
|
const one = (v) => (v ? [v] : []);
|
|
9
|
+
/** one value: `to` sets it, null clears it */
|
|
10
|
+
const setTo = (k) => (_t, _from, to) => ({ [k]: to });
|
|
9
11
|
const checks = (t) => {
|
|
10
12
|
const all = [...t.ac, ...t.dod];
|
|
11
13
|
return all.length ? [`${all.filter((c) => c.done).length}/${all.length}`] : [];
|
|
@@ -21,6 +23,7 @@ export const FIELDS = [
|
|
|
21
23
|
sort: "status",
|
|
22
24
|
group: true,
|
|
23
25
|
order: STATUSES,
|
|
26
|
+
move: (_t, _from, to) => (to ? { status: to } : null),
|
|
24
27
|
},
|
|
25
28
|
{
|
|
26
29
|
key: "priority",
|
|
@@ -30,26 +33,56 @@ export const FIELDS = [
|
|
|
30
33
|
sort: "priority",
|
|
31
34
|
group: true,
|
|
32
35
|
order: PRIORITIES,
|
|
36
|
+
move: setTo("priority"),
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
key: "area",
|
|
40
|
+
label: "Area",
|
|
41
|
+
kind: "area",
|
|
42
|
+
values: (t) => [t.area],
|
|
43
|
+
sort: "area",
|
|
44
|
+
group: true,
|
|
45
|
+
move: (_t, _from, to) => (to ? { area: to } : null),
|
|
33
46
|
},
|
|
34
|
-
{ key: "area", label: "Area", kind: "area", values: (t) => [t.area], sort: "area", group: true },
|
|
35
47
|
{
|
|
36
48
|
key: "assignee",
|
|
37
49
|
label: "Assignee",
|
|
38
50
|
kind: "people",
|
|
39
51
|
values: (t) => t.assignees.filter((a) => !a.startsWith(MARK)),
|
|
40
52
|
group: true,
|
|
53
|
+
// the empty group has no people: `to` null drops them all; `@peers:` marks stay
|
|
54
|
+
move: (t, from, to) => {
|
|
55
|
+
const kept = t.assignees.filter((a) => (to ? a !== from : a.startsWith(MARK)));
|
|
56
|
+
return { assignees: to && !kept.includes(to) ? [...kept, to] : kept };
|
|
57
|
+
},
|
|
41
58
|
},
|
|
42
59
|
{ key: "holder", label: "Held by", kind: "people", values: (t) => holdersOf(t), group: true },
|
|
43
|
-
{
|
|
60
|
+
{
|
|
61
|
+
key: "labels",
|
|
62
|
+
label: "Labels",
|
|
63
|
+
kind: "labels",
|
|
64
|
+
values: (t) => t.labels,
|
|
65
|
+
group: true,
|
|
66
|
+
// the empty group has no labels: `to` null drops them all
|
|
67
|
+
move: (_t, from, to) => to ? { ...(from ? { removeLabels: [from] } : {}), addLabels: [to] } : { labels: [] },
|
|
68
|
+
},
|
|
44
69
|
{
|
|
45
70
|
key: "milestone",
|
|
46
71
|
label: "Milestone",
|
|
47
72
|
kind: "text",
|
|
48
73
|
values: (t) => one(t.milestone),
|
|
49
74
|
group: true,
|
|
75
|
+
move: setTo("milestone"),
|
|
50
76
|
},
|
|
51
77
|
{ key: "parent", label: "Parent", kind: "id", values: (t) => one(t.parentId), group: true },
|
|
52
|
-
{
|
|
78
|
+
{
|
|
79
|
+
key: "type",
|
|
80
|
+
label: "Type",
|
|
81
|
+
kind: "text",
|
|
82
|
+
values: (t) => one(t.type),
|
|
83
|
+
group: true,
|
|
84
|
+
move: setTo("type"),
|
|
85
|
+
},
|
|
53
86
|
{ key: "checks", label: "Checks", kind: "progress", values: checks },
|
|
54
87
|
{
|
|
55
88
|
key: "createdAt",
|
|
@@ -74,6 +107,19 @@ export const FIELDS = [
|
|
|
74
107
|
},
|
|
75
108
|
];
|
|
76
109
|
export const fieldOf = (key) => FIELDS.find((f) => f.key === key);
|
|
110
|
+
/**
|
|
111
|
+
* The write that moves `t` from group `from` to `to` on field `key`; null: nothing to write (the same group, a
|
|
112
|
+
* `from` the task is not in, a field with no move).
|
|
113
|
+
*/
|
|
114
|
+
export function moveEdit(key, t, from, to) {
|
|
115
|
+
const f = fieldOf(key);
|
|
116
|
+
if (!f?.move || from === to)
|
|
117
|
+
return null;
|
|
118
|
+
const now = f.values(t);
|
|
119
|
+
if (from === null ? now.length > 0 : !now.includes(from))
|
|
120
|
+
return null;
|
|
121
|
+
return f.move(t, from, to);
|
|
122
|
+
}
|
|
77
123
|
export const GROUP_KEYS = FIELDS.filter((f) => f.group).map((f) => f.key);
|
|
78
124
|
/**
|
|
79
125
|
* Tasks into groups, in the field's order (known values first, then by name, empty last). `all`: also the
|
package/dist/core/fields.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fields.js","sourceRoot":"","sources":["../../src/core/fields.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"fields.js","sourceRoot":"","sources":["../../src/core/fields.ts"],"names":[],"mappings":"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"}
|
package/dist/core/index.d.ts
CHANGED
package/dist/core/index.js
CHANGED
package/dist/core/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,sGAAsG;AACtG,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,sGAAsG;AACtG,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Live rows (D16): a host loads every row once and filters in memory (`matches`); a push reads only the rows
|
|
3
|
+
* written since the newest one it holds, then merges them by id. `updatedAt` is the writer's clock (CLI, Lambda),
|
|
4
|
+
* so the read reaches back `SKEW_MS` past it; the merge is idempotent.
|
|
5
|
+
*/
|
|
6
|
+
import type { TaskView } from "./filter.js";
|
|
7
|
+
export declare const SKEW_MS = 60000;
|
|
8
|
+
/** `updatedAfter` for the next read; undefined: read all */
|
|
9
|
+
export declare function changedSince(rows: readonly Pick<TaskView, "updatedAt" | "createdAt">[], skewMs?: number): string | undefined;
|
|
10
|
+
/** `delta` over `before` by id; `changed`: ids new or at a newer version (a row's wash) */
|
|
11
|
+
export declare function mergeRows<T extends {
|
|
12
|
+
id: string;
|
|
13
|
+
version: number;
|
|
14
|
+
}>(before: readonly T[], delta: readonly T[]): {
|
|
15
|
+
rows: T[];
|
|
16
|
+
changed: string[];
|
|
17
|
+
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export const SKEW_MS = 60_000;
|
|
2
|
+
/** `updatedAfter` for the next read; undefined: read all */
|
|
3
|
+
export function changedSince(rows, skewMs = SKEW_MS) {
|
|
4
|
+
let newest = "";
|
|
5
|
+
for (const r of rows) {
|
|
6
|
+
const at = r.updatedAt ?? r.createdAt;
|
|
7
|
+
if (at > newest)
|
|
8
|
+
newest = at;
|
|
9
|
+
}
|
|
10
|
+
if (!newest)
|
|
11
|
+
return undefined;
|
|
12
|
+
const t = Date.parse(newest);
|
|
13
|
+
return Number.isNaN(t) ? undefined : new Date(t - skewMs).toISOString().replace(/\.\d{3}Z$/, "Z");
|
|
14
|
+
}
|
|
15
|
+
/** `delta` over `before` by id; `changed`: ids new or at a newer version (a row's wash) */
|
|
16
|
+
export function mergeRows(before, delta) {
|
|
17
|
+
const at = new Map(before.map((r, i) => [r.id, i]));
|
|
18
|
+
const rows = [...before];
|
|
19
|
+
const changed = [];
|
|
20
|
+
for (const r of delta) {
|
|
21
|
+
const i = at.get(r.id);
|
|
22
|
+
if (i === undefined) {
|
|
23
|
+
at.set(r.id, rows.length);
|
|
24
|
+
rows.push(r);
|
|
25
|
+
changed.push(r.id);
|
|
26
|
+
}
|
|
27
|
+
else if (r.version > rows[i].version) {
|
|
28
|
+
rows[i] = r;
|
|
29
|
+
changed.push(r.id);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return { rows, changed };
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=rows.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rows.js","sourceRoot":"","sources":["../../src/core/rows.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC;AAE9B,4DAA4D;AAC5D,MAAM,UAAU,YAAY,CAC1B,IAA0D,EAC1D,MAAM,GAAG,OAAO;IAEhB,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,EAAE,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC;QACtC,IAAI,EAAE,GAAG,MAAM;YAAE,MAAM,GAAG,EAAE,CAAC;IAC/B,CAAC;IACD,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AACpG,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,SAAS,CACvB,MAAoB,EACpB,KAAmB;IAEnB,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IACzB,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACvB,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YACpB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrB,CAAC;aAAM,IAAI,CAAC,CAAC,OAAO,GAAI,IAAI,CAAC,CAAC,CAAO,CAAC,OAAO,EAAE,CAAC;YAC9C,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC3B,CAAC"}
|
package/dist/peers-coord.js
CHANGED
|
@@ -8891,7 +8891,7 @@ var init_task = __esm({
|
|
|
8891
8891
|
});
|
|
8892
8892
|
|
|
8893
8893
|
// src/core/fields.ts
|
|
8894
|
-
var one, checks, FIELDS, GROUP_KEYS;
|
|
8894
|
+
var one, setTo, checks, FIELDS, GROUP_KEYS;
|
|
8895
8895
|
var init_fields = __esm({
|
|
8896
8896
|
"src/core/fields.ts"() {
|
|
8897
8897
|
"use strict";
|
|
@@ -8899,6 +8899,7 @@ var init_fields = __esm({
|
|
|
8899
8899
|
init_filter();
|
|
8900
8900
|
init_task();
|
|
8901
8901
|
one = (v) => v ? [v] : [];
|
|
8902
|
+
setTo = (k) => (_t, _from, to) => ({ [k]: to });
|
|
8902
8903
|
checks = (t) => {
|
|
8903
8904
|
const all = [...t.ac, ...t.dod];
|
|
8904
8905
|
return all.length ? [`${all.filter((c) => c.done).length}/${all.length}`] : [];
|
|
@@ -8913,7 +8914,8 @@ var init_fields = __esm({
|
|
|
8913
8914
|
values: (t) => [t.status],
|
|
8914
8915
|
sort: "status",
|
|
8915
8916
|
group: true,
|
|
8916
|
-
order: STATUSES
|
|
8917
|
+
order: STATUSES,
|
|
8918
|
+
move: (_t, _from, to) => to ? { status: to } : null
|
|
8917
8919
|
},
|
|
8918
8920
|
{
|
|
8919
8921
|
key: "priority",
|
|
@@ -8922,27 +8924,57 @@ var init_fields = __esm({
|
|
|
8922
8924
|
values: (t) => one(t.priority),
|
|
8923
8925
|
sort: "priority",
|
|
8924
8926
|
group: true,
|
|
8925
|
-
order: PRIORITIES
|
|
8927
|
+
order: PRIORITIES,
|
|
8928
|
+
move: setTo("priority")
|
|
8929
|
+
},
|
|
8930
|
+
{
|
|
8931
|
+
key: "area",
|
|
8932
|
+
label: "Area",
|
|
8933
|
+
kind: "area",
|
|
8934
|
+
values: (t) => [t.area],
|
|
8935
|
+
sort: "area",
|
|
8936
|
+
group: true,
|
|
8937
|
+
move: (_t, _from, to) => to ? { area: to } : null
|
|
8926
8938
|
},
|
|
8927
|
-
{ key: "area", label: "Area", kind: "area", values: (t) => [t.area], sort: "area", group: true },
|
|
8928
8939
|
{
|
|
8929
8940
|
key: "assignee",
|
|
8930
8941
|
label: "Assignee",
|
|
8931
8942
|
kind: "people",
|
|
8932
8943
|
values: (t) => t.assignees.filter((a) => !a.startsWith(MARK)),
|
|
8933
|
-
group: true
|
|
8944
|
+
group: true,
|
|
8945
|
+
// the empty group has no people: `to` null drops them all; `@peers:` marks stay
|
|
8946
|
+
move: (t, from, to) => {
|
|
8947
|
+
const kept = t.assignees.filter((a) => to ? a !== from : a.startsWith(MARK));
|
|
8948
|
+
return { assignees: to && !kept.includes(to) ? [...kept, to] : kept };
|
|
8949
|
+
}
|
|
8934
8950
|
},
|
|
8935
8951
|
{ key: "holder", label: "Held by", kind: "people", values: (t) => holdersOf(t), group: true },
|
|
8936
|
-
{
|
|
8952
|
+
{
|
|
8953
|
+
key: "labels",
|
|
8954
|
+
label: "Labels",
|
|
8955
|
+
kind: "labels",
|
|
8956
|
+
values: (t) => t.labels,
|
|
8957
|
+
group: true,
|
|
8958
|
+
// the empty group has no labels: `to` null drops them all
|
|
8959
|
+
move: (_t, from, to) => to ? { ...from ? { removeLabels: [from] } : {}, addLabels: [to] } : { labels: [] }
|
|
8960
|
+
},
|
|
8937
8961
|
{
|
|
8938
8962
|
key: "milestone",
|
|
8939
8963
|
label: "Milestone",
|
|
8940
8964
|
kind: "text",
|
|
8941
8965
|
values: (t) => one(t.milestone),
|
|
8942
|
-
group: true
|
|
8966
|
+
group: true,
|
|
8967
|
+
move: setTo("milestone")
|
|
8943
8968
|
},
|
|
8944
8969
|
{ key: "parent", label: "Parent", kind: "id", values: (t) => one(t.parentId), group: true },
|
|
8945
|
-
{
|
|
8970
|
+
{
|
|
8971
|
+
key: "type",
|
|
8972
|
+
label: "Type",
|
|
8973
|
+
kind: "text",
|
|
8974
|
+
values: (t) => one(t.type),
|
|
8975
|
+
group: true,
|
|
8976
|
+
move: setTo("type")
|
|
8977
|
+
},
|
|
8946
8978
|
{ key: "checks", label: "Checks", kind: "progress", values: checks },
|
|
8947
8979
|
{
|
|
8948
8980
|
key: "createdAt",
|
|
@@ -9056,6 +9088,13 @@ var init_edit = __esm({
|
|
|
9056
9088
|
}
|
|
9057
9089
|
});
|
|
9058
9090
|
|
|
9091
|
+
// src/core/rows.ts
|
|
9092
|
+
var init_rows = __esm({
|
|
9093
|
+
"src/core/rows.ts"() {
|
|
9094
|
+
"use strict";
|
|
9095
|
+
}
|
|
9096
|
+
});
|
|
9097
|
+
|
|
9059
9098
|
// src/core/index.ts
|
|
9060
9099
|
var init_core2 = __esm({
|
|
9061
9100
|
"src/core/index.ts"() {
|
|
@@ -9065,6 +9104,7 @@ var init_core2 = __esm({
|
|
|
9065
9104
|
init_edit();
|
|
9066
9105
|
init_fields();
|
|
9067
9106
|
init_filter();
|
|
9107
|
+
init_rows();
|
|
9068
9108
|
init_task();
|
|
9069
9109
|
}
|
|
9070
9110
|
});
|