@package-broker/ui 0.19.8 → 2.0.0-rc.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/LICENSE +661 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/api-types.d.ts +9987 -0
- package/dist/api-types.d.ts.map +1 -0
- package/dist/api-types.js +6 -0
- package/dist/api-types.js.map +1 -0
- package/dist/api.d.ts +88 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +185 -0
- package/dist/api.js.map +1 -0
- package/dist/app.d.ts +76 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +239 -0
- package/dist/app.js.map +1 -0
- package/dist/assets/app.b2abf3c46f6e.js +15 -0
- package/dist/assets/app.e8cea8b32d3a.css +2 -0
- package/dist/assets/index.html +13 -0
- package/dist/assets/manifest.json +26 -0
- package/dist/assets/setup.98343039898f.js +1 -0
- package/dist/assets/setup.html +14 -0
- package/dist/auth.d.ts +170 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +551 -0
- package/dist/auth.js.map +1 -0
- package/dist/components/ui/alert.d.ts +10 -0
- package/dist/components/ui/alert.d.ts.map +1 -0
- package/dist/components/ui/alert.js +22 -0
- package/dist/components/ui/alert.js.map +1 -0
- package/dist/components/ui/badge.d.ts +8 -0
- package/dist/components/ui/badge.d.ts.map +1 -0
- package/dist/components/ui/badge.js +18 -0
- package/dist/components/ui/badge.js.map +1 -0
- package/dist/components/ui/button.d.ts +13 -0
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/button.js +27 -0
- package/dist/components/ui/button.js.map +1 -0
- package/dist/components/ui/card.d.ts +10 -0
- package/dist/components/ui/card.d.ts.map +1 -0
- package/dist/components/ui/card.js +21 -0
- package/dist/components/ui/card.js.map +1 -0
- package/dist/components/ui/confirm-action.d.ts +12 -0
- package/dist/components/ui/confirm-action.d.ts.map +1 -0
- package/dist/components/ui/confirm-action.js +19 -0
- package/dist/components/ui/confirm-action.js.map +1 -0
- package/dist/components/ui/dialog.d.ts +17 -0
- package/dist/components/ui/dialog.d.ts.map +1 -0
- package/dist/components/ui/dialog.js +180 -0
- package/dist/components/ui/dialog.js.map +1 -0
- package/dist/components/ui/dropdown-menu.d.ts +8 -0
- package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
- package/dist/components/ui/dropdown-menu.js +71 -0
- package/dist/components/ui/dropdown-menu.js.map +1 -0
- package/dist/components/ui/id-text.d.ts +11 -0
- package/dist/components/ui/id-text.d.ts.map +1 -0
- package/dist/components/ui/id-text.js +23 -0
- package/dist/components/ui/id-text.js.map +1 -0
- package/dist/components/ui/input.d.ts +5 -0
- package/dist/components/ui/input.d.ts.map +1 -0
- package/dist/components/ui/input.js +6 -0
- package/dist/components/ui/input.js.map +1 -0
- package/dist/components/ui/label.d.ts +4 -0
- package/dist/components/ui/label.d.ts.map +1 -0
- package/dist/components/ui/label.js +7 -0
- package/dist/components/ui/label.js.map +1 -0
- package/dist/components/ui/list-state.d.ts +7 -0
- package/dist/components/ui/list-state.d.ts.map +1 -0
- package/dist/components/ui/list-state.js +5 -0
- package/dist/components/ui/list-state.js.map +1 -0
- package/dist/components/ui/overlay-host.d.ts +6 -0
- package/dist/components/ui/overlay-host.d.ts.map +1 -0
- package/dist/components/ui/overlay-host.js +36 -0
- package/dist/components/ui/overlay-host.js.map +1 -0
- package/dist/components/ui/row-actions.d.ts +17 -0
- package/dist/components/ui/row-actions.d.ts.map +1 -0
- package/dist/components/ui/row-actions.js +21 -0
- package/dist/components/ui/row-actions.js.map +1 -0
- package/dist/components/ui/select.d.ts +3 -0
- package/dist/components/ui/select.d.ts.map +1 -0
- package/dist/components/ui/select.js +6 -0
- package/dist/components/ui/select.js.map +1 -0
- package/dist/components/ui/status-badge.d.ts +28 -0
- package/dist/components/ui/status-badge.d.ts.map +1 -0
- package/dist/components/ui/status-badge.js +50 -0
- package/dist/components/ui/status-badge.js.map +1 -0
- package/dist/components/ui/table.d.ts +27 -0
- package/dist/components/ui/table.d.ts.map +1 -0
- package/dist/components/ui/table.js +81 -0
- package/dist/components/ui/table.js.map +1 -0
- package/dist/components/ui/tabs.d.ts +7 -0
- package/dist/components/ui/tabs.d.ts.map +1 -0
- package/dist/components/ui/tabs.js +14 -0
- package/dist/components/ui/tabs.js.map +1 -0
- package/dist/components/ui/textarea.d.ts +3 -0
- package/dist/components/ui/textarea.d.ts.map +1 -0
- package/dist/components/ui/textarea.js +14 -0
- package/dist/components/ui/textarea.js.map +1 -0
- package/dist/components/ui/time.d.ts +5 -0
- package/dist/components/ui/time.d.ts.map +1 -0
- package/dist/components/ui/time.js +14 -0
- package/dist/components/ui/time.js.map +1 -0
- package/dist/components/ui/toolbar.d.ts +20 -0
- package/dist/components/ui/toolbar.d.ts.map +1 -0
- package/dist/components/ui/toolbar.js +42 -0
- package/dist/components/ui/toolbar.js.map +1 -0
- package/dist/components/vulnerability-status.d.ts +8 -0
- package/dist/components/vulnerability-status.d.ts.map +1 -0
- package/dist/components/vulnerability-status.js +49 -0
- package/dist/components/vulnerability-status.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/use-merged-refs.d.ts +3 -0
- package/dist/lib/use-merged-refs.d.ts.map +1 -0
- package/dist/lib/use-merged-refs.js +22 -0
- package/dist/lib/use-merged-refs.js.map +1 -0
- package/dist/lib/utils.d.ts +4 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +11 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +9 -0
- package/dist/main.js.map +1 -0
- package/dist/manifest.d.ts +8 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +21 -0
- package/dist/manifest.js.map +1 -0
- package/dist/page-hash.d.ts +23 -0
- package/dist/page-hash.d.ts.map +1 -0
- package/dist/page-hash.js +45 -0
- package/dist/page-hash.js.map +1 -0
- package/dist/pages/access.d.ts +69 -0
- package/dist/pages/access.d.ts.map +1 -0
- package/dist/pages/access.js +391 -0
- package/dist/pages/access.js.map +1 -0
- package/dist/pages/audit.d.ts +63 -0
- package/dist/pages/audit.d.ts.map +1 -0
- package/dist/pages/audit.js +182 -0
- package/dist/pages/audit.js.map +1 -0
- package/dist/pages/import.d.ts +41 -0
- package/dist/pages/import.d.ts.map +1 -0
- package/dist/pages/import.js +274 -0
- package/dist/pages/import.js.map +1 -0
- package/dist/pages/management.d.ts +47 -0
- package/dist/pages/management.d.ts.map +1 -0
- package/dist/pages/management.js +141 -0
- package/dist/pages/management.js.map +1 -0
- package/dist/pages/packages.d.ts +74 -0
- package/dist/pages/packages.d.ts.map +1 -0
- package/dist/pages/packages.js +505 -0
- package/dist/pages/packages.js.map +1 -0
- package/dist/pages/projects.d.ts +58 -0
- package/dist/pages/projects.d.ts.map +1 -0
- package/dist/pages/projects.js +357 -0
- package/dist/pages/projects.js.map +1 -0
- package/dist/pages/sources/add-package-dialog.d.ts +10 -0
- package/dist/pages/sources/add-package-dialog.d.ts.map +1 -0
- package/dist/pages/sources/add-package-dialog.js +19 -0
- package/dist/pages/sources/add-package-dialog.js.map +1 -0
- package/dist/pages/sources/proxy-message.d.ts +2 -0
- package/dist/pages/sources/proxy-message.d.ts.map +1 -0
- package/dist/pages/sources/proxy-message.js +2 -0
- package/dist/pages/sources/proxy-message.js.map +1 -0
- package/dist/pages/sources/source-form.d.ts +29 -0
- package/dist/pages/sources/source-form.d.ts.map +1 -0
- package/dist/pages/sources/source-form.js +463 -0
- package/dist/pages/sources/source-form.js.map +1 -0
- package/dist/pages/sources/sync-poll.d.ts +20 -0
- package/dist/pages/sources/sync-poll.d.ts.map +1 -0
- package/dist/pages/sources/sync-poll.js +71 -0
- package/dist/pages/sources/sync-poll.js.map +1 -0
- package/dist/pages/sources.d.ts +325 -0
- package/dist/pages/sources.d.ts.map +1 -0
- package/dist/pages/sources.js +1137 -0
- package/dist/pages/sources.js.map +1 -0
- package/dist/pages/tokens/client-config.d.ts +5 -0
- package/dist/pages/tokens/client-config.d.ts.map +1 -0
- package/dist/pages/tokens/client-config.js +9 -0
- package/dist/pages/tokens/client-config.js.map +1 -0
- package/dist/pages/tokens.d.ts +127 -0
- package/dist/pages/tokens.d.ts.map +1 -0
- package/dist/pages/tokens.js +744 -0
- package/dist/pages/tokens.js.map +1 -0
- package/dist/pending.d.ts +33 -0
- package/dist/pending.d.ts.map +1 -0
- package/dist/pending.js +156 -0
- package/dist/pending.js.map +1 -0
- package/dist/qr.d.ts +14 -0
- package/dist/qr.d.ts.map +1 -0
- package/dist/qr.js +322 -0
- package/dist/qr.js.map +1 -0
- package/dist/setup.d.ts +49 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +390 -0
- package/dist/setup.js.map +1 -0
- package/dist/test-fixtures/api-types.d.ts +228 -0
- package/dist/test-fixtures/api-types.d.ts.map +1 -0
- package/dist/test-fixtures/api-types.js +6 -0
- package/dist/test-fixtures/api-types.js.map +1 -0
- package/package.json +37 -40
- package/public/index.html +11 -0
- package/README.md +0 -11
- package/dist/assets/main-3NLwl1eV.js +0 -111
- package/dist/assets/main-CsTEYyDl.css +0 -1
- package/dist/config.js +0 -3
- package/dist/index.html +0 -22
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useState } from 'react';
|
|
3
|
+
import { useServices } from '../auth.js';
|
|
4
|
+
import { Badge } from '../components/ui/badge.js';
|
|
5
|
+
import { Button } from '../components/ui/button.js';
|
|
6
|
+
import { Input } from '../components/ui/input.js';
|
|
7
|
+
import { Label } from '../components/ui/label.js';
|
|
8
|
+
import { DataTable } from '../components/ui/table.js';
|
|
9
|
+
import { Time } from '../components/ui/time.js';
|
|
10
|
+
import { IdText } from '../components/ui/id-text.js';
|
|
11
|
+
import { FilterToolbar } from '../components/ui/toolbar.js';
|
|
12
|
+
import { ListState } from '../components/ui/list-state.js';
|
|
13
|
+
export function readAuditHash(hash) {
|
|
14
|
+
const query = new URLSearchParams(hash.split('?')[1] ?? '');
|
|
15
|
+
const project = query.get('project');
|
|
16
|
+
return {
|
|
17
|
+
scope: project !== null && /^[A-Za-z0-9._-]{1,64}$/.test(project) ? project : null,
|
|
18
|
+
filters: {
|
|
19
|
+
actor: query.get('actor') ?? '',
|
|
20
|
+
action: query.get('action') ?? '',
|
|
21
|
+
project: query.get('filterProject') ?? '',
|
|
22
|
+
limit: query.get('limit') ?? '50',
|
|
23
|
+
after: query.get('after') ?? '',
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export function auditHash(filters, scope) {
|
|
28
|
+
const query = new URLSearchParams();
|
|
29
|
+
if (scope !== null)
|
|
30
|
+
query.set('project', scope);
|
|
31
|
+
for (const key of ['actor', 'action', 'project', 'limit', 'after']) {
|
|
32
|
+
if (key === 'project' && scope !== null)
|
|
33
|
+
continue;
|
|
34
|
+
if (filters[key] !== '')
|
|
35
|
+
query.set(key === 'project' ? 'filterProject' : key, filters[key]);
|
|
36
|
+
}
|
|
37
|
+
return `#/audit${query.size ? `?${query}` : ''}`;
|
|
38
|
+
}
|
|
39
|
+
export async function loadAudit(client, filters, scope) {
|
|
40
|
+
const query = {
|
|
41
|
+
actor: filters.actor || undefined,
|
|
42
|
+
action: filters.action || undefined,
|
|
43
|
+
limit: filters.limit || undefined,
|
|
44
|
+
after: filters.after || undefined,
|
|
45
|
+
};
|
|
46
|
+
const [list, head] = await Promise.all([
|
|
47
|
+
scope === null
|
|
48
|
+
? client.request('get', '/_pb/audit', {
|
|
49
|
+
query: {
|
|
50
|
+
actor: query.actor,
|
|
51
|
+
action: query.action,
|
|
52
|
+
project: filters.project || undefined,
|
|
53
|
+
limit: query.limit,
|
|
54
|
+
after: query.after,
|
|
55
|
+
},
|
|
56
|
+
})
|
|
57
|
+
: client.request('get', '/_pb/projects/{project}/audit', {
|
|
58
|
+
params: { project: scope },
|
|
59
|
+
query,
|
|
60
|
+
}),
|
|
61
|
+
client.request('get', '/_pb/audit/head'),
|
|
62
|
+
]);
|
|
63
|
+
return {
|
|
64
|
+
data: list.ok ? list.data : null,
|
|
65
|
+
head: head.ok ? head.data : null,
|
|
66
|
+
error: !list.ok
|
|
67
|
+
? 'Unable to load audit events.'
|
|
68
|
+
: !head.ok
|
|
69
|
+
? 'Unable to load the chain head.'
|
|
70
|
+
: null,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
export function AuditView(props) {
|
|
74
|
+
return (_jsxs("section", { "aria-labelledby": "page-heading", className: "space-y-4", children: [_jsx("h1", { tabIndex: -1, id: "page-heading", className: "text-2xl font-semibold", children: "Audit" }), props.head === null ? null : (_jsxs("div", { className: "flex flex-wrap gap-2", "aria-label": "Audit chain head", children: [_jsx(Badge, { variant: "outline", children: `Head ${props.head.seq}` }), _jsx(Badge, { variant: "secondary", children: props.head.lastVerifiedAt === null ? ('never verified') : (_jsxs(_Fragment, { children: ["Last verified ", _jsx(Time, { value: props.head.lastVerifiedAt })] })) }), props.head.pendingCount > 0 ? (_jsx(Badge, { variant: "secondary", children: `${props.head.pendingCount} pending` })) : null] })), _jsx(FilterToolbar, { chips: ['actor', 'action', 'project'].flatMap((key) => props.filters[key] && (key !== 'project' || props.scope === null)
|
|
75
|
+
? [
|
|
76
|
+
{
|
|
77
|
+
label: { actor: 'Actor', action: 'Action', project: 'Project' }[key],
|
|
78
|
+
value: props.filters[key],
|
|
79
|
+
onRemove: () => props.onNavigate({ ...props.filters, [key]: '', after: '' }),
|
|
80
|
+
},
|
|
81
|
+
]
|
|
82
|
+
: []), children: _jsxs("form", { className: "flex flex-wrap items-end gap-3", onSubmit: (event) => {
|
|
83
|
+
event.preventDefault();
|
|
84
|
+
const form = new FormData(event.currentTarget);
|
|
85
|
+
const value = (key) => String(form.get(key) ?? '');
|
|
86
|
+
props.onNavigate({
|
|
87
|
+
actor: value('actor'),
|
|
88
|
+
action: value('action'),
|
|
89
|
+
project: value('filterProject'),
|
|
90
|
+
limit: value('limit'),
|
|
91
|
+
after: '',
|
|
92
|
+
});
|
|
93
|
+
}, children: [_jsxs("div", { children: [_jsx(Label, { htmlFor: "audit-actor", children: "Actor" }), _jsx(Input, { id: "audit-actor", name: "actor", maxLength: 200, defaultValue: props.filters.actor })] }), _jsxs("div", { children: [_jsx(Label, { htmlFor: "audit-action", children: "Action" }), _jsx(Input, { id: "audit-action", name: "action", maxLength: 200, defaultValue: props.filters.action })] }), props.scope === null ? (_jsxs("div", { children: [_jsx(Label, { htmlFor: "audit-project", children: "Project" }), _jsx(Input, { id: "audit-project", name: "filterProject", maxLength: 200, defaultValue: props.filters.project })] })) : null, _jsxs("div", { children: [_jsx(Label, { htmlFor: "audit-limit", children: "Limit" }), _jsx(Input, { id: "audit-limit", name: "limit", type: "number", min: "1", max: "200", required: true, defaultValue: props.filters.limit })] }), _jsx(Button, { type: "submit", children: "Filter" }), _jsx(Button, { type: "button", variant: "outline", onClick: () => props.onNavigate({ actor: '', action: '', project: '', limit: '50', after: '' }), children: "Clear filters" })] }, auditHash(props.filters, props.scope)) }), props.error === null ? null : (_jsx(ListState, { kind: "error", title: props.error, children: _jsx(Button, { type: "button", variant: "outline", onClick: () => props.onNavigate({ ...props.filters }), children: "Retry" }) })), props.loading ? _jsx(ListState, { kind: "loading", title: "Loading audit events\u2026" }) : null, props.data === null ? null : (_jsxs(_Fragment, { children: [props.data.items.length ? (_jsx(DataTable, { label: "Audit events", items: props.data.items, columns: [
|
|
94
|
+
{ key: 'seq', label: 'Sequence', value: (item) => item.seq },
|
|
95
|
+
{
|
|
96
|
+
key: 'time',
|
|
97
|
+
label: 'Time',
|
|
98
|
+
value: (item) => item.createdAt,
|
|
99
|
+
render: (item) => _jsx(Time, { value: item.createdAt }),
|
|
100
|
+
},
|
|
101
|
+
{ key: 'action', label: 'Action', value: (item) => item.action },
|
|
102
|
+
{
|
|
103
|
+
key: 'actor',
|
|
104
|
+
label: 'Actor',
|
|
105
|
+
value: (item) => item.actor.id ?? '',
|
|
106
|
+
render: (item) => (_jsxs(_Fragment, { children: [_jsx("span", { className: "block text-xs text-neutral-600", children: item.actor.type }), _jsx(IdText, { value: item.actor.id, label: "actor ID" })] })),
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
key: 'project',
|
|
110
|
+
label: 'Project',
|
|
111
|
+
priority: 2,
|
|
112
|
+
value: (item) => item.projectId ?? '',
|
|
113
|
+
render: (item) => _jsx(IdText, { value: item.projectId, label: "project ID" }),
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
key: 'targetType',
|
|
117
|
+
label: 'Target type',
|
|
118
|
+
priority: 2,
|
|
119
|
+
value: (item) => item.targetType,
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
key: 'targetId',
|
|
123
|
+
label: 'Target ID',
|
|
124
|
+
priority: 3,
|
|
125
|
+
value: (item) => item.targetId ?? '',
|
|
126
|
+
render: (item) => _jsx(IdText, { value: item.targetId, label: "target ID" }),
|
|
127
|
+
},
|
|
128
|
+
] })) : !props.loading && !props.error ? (_jsx(ListState, { kind: props.filters.actor ||
|
|
129
|
+
props.filters.action ||
|
|
130
|
+
props.filters.project ||
|
|
131
|
+
props.filters.after
|
|
132
|
+
? 'filtered-empty'
|
|
133
|
+
: 'empty', title: props.filters.actor ||
|
|
134
|
+
props.filters.action ||
|
|
135
|
+
props.filters.project ||
|
|
136
|
+
props.filters.after
|
|
137
|
+
? 'No audit events match these filters'
|
|
138
|
+
: 'No audit events.' })) : null, _jsxs("div", { className: "flex gap-2", children: [props.filters.after ? (_jsx(Button, { type: "button", variant: "outline", onClick: () => props.onNavigate({ ...props.filters, after: '' }), children: "First page" })) : null, _jsx(Button, { type: "button", disabled: props.data.next === null || props.loading, onClick: () => {
|
|
139
|
+
if (props.data?.next)
|
|
140
|
+
props.onNavigate({ ...props.filters, after: props.data.next });
|
|
141
|
+
}, children: "Next page" })] })] }))] }));
|
|
142
|
+
}
|
|
143
|
+
export function AuditPage() {
|
|
144
|
+
const { client } = useServices();
|
|
145
|
+
const [hash, setHash] = useState(() => window.location.hash);
|
|
146
|
+
const [result, setResult] = useState({
|
|
147
|
+
data: null,
|
|
148
|
+
head: null,
|
|
149
|
+
error: null,
|
|
150
|
+
});
|
|
151
|
+
const [loading, setLoading] = useState(true);
|
|
152
|
+
const [reload, setReload] = useState(0);
|
|
153
|
+
useEffect(() => {
|
|
154
|
+
const update = () => setHash(window.location.hash);
|
|
155
|
+
window.addEventListener('hashchange', update);
|
|
156
|
+
return () => window.removeEventListener('hashchange', update);
|
|
157
|
+
}, []);
|
|
158
|
+
useEffect(() => {
|
|
159
|
+
let live = true;
|
|
160
|
+
setLoading(true);
|
|
161
|
+
setResult({ data: null, head: null, error: null });
|
|
162
|
+
const { filters, scope } = readAuditHash(hash);
|
|
163
|
+
void loadAudit(client, filters, scope).then((next) => {
|
|
164
|
+
if (live) {
|
|
165
|
+
setResult(next);
|
|
166
|
+
setLoading(false);
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
return () => {
|
|
170
|
+
live = false;
|
|
171
|
+
};
|
|
172
|
+
}, [client, hash, reload]);
|
|
173
|
+
const { filters, scope } = readAuditHash(hash);
|
|
174
|
+
return (_jsx(AuditView, { ...result, filters: filters, scope: scope, loading: loading, onNavigate: (next) => {
|
|
175
|
+
const target = auditHash(next, scope);
|
|
176
|
+
if (window.location.hash === target)
|
|
177
|
+
setReload((value) => value + 1);
|
|
178
|
+
else
|
|
179
|
+
window.location.hash = target;
|
|
180
|
+
} }));
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/pages/audit.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { operations } from '../api-types.js';
|
|
2
|
+
import { type ShellServices } from '../auth.js';
|
|
3
|
+
export type ImportRun = operations['getImportRun']['responses'][200]['content']['application/json'];
|
|
4
|
+
type Action = 'approve' | 'apply' | 'cancel' | 'rollback';
|
|
5
|
+
interface ImportState {
|
|
6
|
+
runs: ImportRun[];
|
|
7
|
+
next: string | null;
|
|
8
|
+
run: ImportRun | null;
|
|
9
|
+
selectedId: string | null;
|
|
10
|
+
loading: boolean;
|
|
11
|
+
detailLoading: boolean;
|
|
12
|
+
cursor?: string | undefined;
|
|
13
|
+
busy: boolean;
|
|
14
|
+
dialog: boolean;
|
|
15
|
+
confirmed: boolean;
|
|
16
|
+
error: string | null;
|
|
17
|
+
notice: string | null;
|
|
18
|
+
}
|
|
19
|
+
export declare function importActionAllowed(run: ImportRun, action: Action, now?: number): boolean;
|
|
20
|
+
export declare function createImportController(services: ShellServices): {
|
|
21
|
+
back(): void;
|
|
22
|
+
snapshot: () => ImportState;
|
|
23
|
+
subscribe(listener: () => void): () => void;
|
|
24
|
+
load(cursor?: string): Promise<void>;
|
|
25
|
+
select(id: string): Promise<void>;
|
|
26
|
+
openApproval(): void;
|
|
27
|
+
closeApproval(): void;
|
|
28
|
+
confirmApproval(confirmed: boolean): void;
|
|
29
|
+
action(action: Action): Promise<void>;
|
|
30
|
+
};
|
|
31
|
+
type Controller = ReturnType<typeof createImportController>;
|
|
32
|
+
export declare function ImportView({ state, controller, onSelect, onBack, onPage, }: {
|
|
33
|
+
state: ImportState;
|
|
34
|
+
controller: Controller;
|
|
35
|
+
onSelect?: (id: string) => void;
|
|
36
|
+
onBack?: () => void;
|
|
37
|
+
onPage?: (cursor?: string) => void;
|
|
38
|
+
}): import("react").JSX.Element;
|
|
39
|
+
export declare function ImportPage(): import("react").JSX.Element;
|
|
40
|
+
export {};
|
|
41
|
+
//# sourceMappingURL=import.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../src/pages/import.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAe,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAkB7D,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;AACpG,KAAK,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;AAC1D,UAAU,WAAW;IACnB,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,GAAG,EAAE,SAAS,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAcD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,OAAO,CAY7F;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,aAAa;;;wBAmCtC,MAAM,IAAI;kBAMV,MAAM;eAaT,MAAM;;;+BAmCI,OAAO;mBAGb,MAAM;EA0C9B;AAED,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAE5D,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,UAAU,EACV,QAAQ,EACR,MAAM,EACN,MAAM,GACP,EAAE;IACD,KAAK,EAAE,WAAW,CAAC;IACnB,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC,+BA2TA;AAED,wBAAgB,UAAU,gCAqCzB"}
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useMemo, useState, useSyncExternalStore } from 'react';
|
|
3
|
+
import { useServices } from '../auth.js';
|
|
4
|
+
import { StatusBadge } from '../components/ui/status-badge.js';
|
|
5
|
+
import { Time } from '../components/ui/time.js';
|
|
6
|
+
import { IdText } from '../components/ui/id-text.js';
|
|
7
|
+
import { ListState } from '../components/ui/list-state.js';
|
|
8
|
+
import { Button } from '../components/ui/button.js';
|
|
9
|
+
import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '../components/ui/dialog.js';
|
|
10
|
+
import { Input } from '../components/ui/input.js';
|
|
11
|
+
import { Label } from '../components/ui/label.js';
|
|
12
|
+
import { DataTable } from '../components/ui/table.js';
|
|
13
|
+
function publicRun(run) {
|
|
14
|
+
return {
|
|
15
|
+
id: run.id,
|
|
16
|
+
state: run.state,
|
|
17
|
+
planHash: run.planHash,
|
|
18
|
+
approvedAt: run.approvedAt,
|
|
19
|
+
approvedByUserId: run.approvedByUserId,
|
|
20
|
+
acceptedAt: run.acceptedAt,
|
|
21
|
+
beforeImageExpiresAt: run.beforeImageExpiresAt,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export function importActionAllowed(run, action, now = Date.now()) {
|
|
25
|
+
if (action === 'approve')
|
|
26
|
+
return run.state === 'planned' && !!run.planHash && run.approvedAt === null;
|
|
27
|
+
if (action === 'apply') {
|
|
28
|
+
const approved = run.approvedAt === null ? NaN : Date.parse(run.approvedAt);
|
|
29
|
+
return run.state === 'planned' && Number.isFinite(approved) && approved <= now + 60_000;
|
|
30
|
+
}
|
|
31
|
+
if (action === 'cancel')
|
|
32
|
+
return run.state === 'planned';
|
|
33
|
+
return (['failed', 'applied', 'verifying', 'verified'].includes(run.state) &&
|
|
34
|
+
(run.beforeImageExpiresAt === null || Date.parse(run.beforeImageExpiresAt) > now));
|
|
35
|
+
}
|
|
36
|
+
export function createImportController(services) {
|
|
37
|
+
let state = {
|
|
38
|
+
runs: [],
|
|
39
|
+
next: null,
|
|
40
|
+
run: null,
|
|
41
|
+
selectedId: null,
|
|
42
|
+
loading: false,
|
|
43
|
+
detailLoading: false,
|
|
44
|
+
busy: false,
|
|
45
|
+
dialog: false,
|
|
46
|
+
confirmed: false,
|
|
47
|
+
error: null,
|
|
48
|
+
notice: null,
|
|
49
|
+
};
|
|
50
|
+
let selection = 0;
|
|
51
|
+
let listing = 0;
|
|
52
|
+
const listeners = new Set();
|
|
53
|
+
const set = (next) => {
|
|
54
|
+
state = { ...state, ...next };
|
|
55
|
+
for (const listener of listeners)
|
|
56
|
+
listener();
|
|
57
|
+
};
|
|
58
|
+
const controller = {
|
|
59
|
+
back() {
|
|
60
|
+
++selection;
|
|
61
|
+
set({
|
|
62
|
+
run: null,
|
|
63
|
+
selectedId: null,
|
|
64
|
+
detailLoading: false,
|
|
65
|
+
dialog: false,
|
|
66
|
+
confirmed: false,
|
|
67
|
+
error: null,
|
|
68
|
+
notice: null,
|
|
69
|
+
});
|
|
70
|
+
},
|
|
71
|
+
snapshot: () => state,
|
|
72
|
+
subscribe(listener) {
|
|
73
|
+
listeners.add(listener);
|
|
74
|
+
return () => {
|
|
75
|
+
listeners.delete(listener);
|
|
76
|
+
};
|
|
77
|
+
},
|
|
78
|
+
async load(cursor) {
|
|
79
|
+
const version = ++listing;
|
|
80
|
+
set({ loading: true, error: null, cursor });
|
|
81
|
+
const result = await services.client.request('get', '/_pb/import-runs', {
|
|
82
|
+
query: { cursor },
|
|
83
|
+
});
|
|
84
|
+
if (version !== listing)
|
|
85
|
+
return;
|
|
86
|
+
set(result.ok
|
|
87
|
+
? { runs: result.data.items.map(publicRun), next: result.data.next, loading: false }
|
|
88
|
+
: { runs: [], next: null, loading: false, error: 'Unable to load import runs.' });
|
|
89
|
+
},
|
|
90
|
+
async select(id) {
|
|
91
|
+
if (state.busy)
|
|
92
|
+
return;
|
|
93
|
+
const version = ++selection;
|
|
94
|
+
set({
|
|
95
|
+
run: null,
|
|
96
|
+
selectedId: id,
|
|
97
|
+
detailLoading: true,
|
|
98
|
+
dialog: false,
|
|
99
|
+
confirmed: false,
|
|
100
|
+
error: null,
|
|
101
|
+
notice: null,
|
|
102
|
+
});
|
|
103
|
+
const result = await services.client.request('get', '/_pb/import-runs/{id}', {
|
|
104
|
+
params: { id },
|
|
105
|
+
});
|
|
106
|
+
if (version !== selection)
|
|
107
|
+
return;
|
|
108
|
+
set(result.ok
|
|
109
|
+
? { run: publicRun(result.data), detailLoading: false }
|
|
110
|
+
: { detailLoading: false, error: 'Unable to load the import run.' });
|
|
111
|
+
},
|
|
112
|
+
openApproval() {
|
|
113
|
+
if (!state.busy &&
|
|
114
|
+
state.run?.state === 'planned' &&
|
|
115
|
+
state.run.planHash &&
|
|
116
|
+
state.run.approvedAt === null)
|
|
117
|
+
set({ dialog: true, confirmed: false });
|
|
118
|
+
},
|
|
119
|
+
closeApproval() {
|
|
120
|
+
if (state.busy)
|
|
121
|
+
return;
|
|
122
|
+
set({ dialog: false, confirmed: false });
|
|
123
|
+
},
|
|
124
|
+
confirmApproval(confirmed) {
|
|
125
|
+
if (state.dialog && !state.busy)
|
|
126
|
+
set({ confirmed });
|
|
127
|
+
},
|
|
128
|
+
async action(action) {
|
|
129
|
+
const run = state.run;
|
|
130
|
+
if (run === null || state.busy || !importActionAllowed(run, action))
|
|
131
|
+
return;
|
|
132
|
+
if (action === 'approve' &&
|
|
133
|
+
(!state.dialog ||
|
|
134
|
+
!state.confirmed ||
|
|
135
|
+
!run.planHash ||
|
|
136
|
+
run.state !== 'planned' ||
|
|
137
|
+
run.approvedAt !== null))
|
|
138
|
+
return;
|
|
139
|
+
set({ busy: true, error: null, notice: null });
|
|
140
|
+
const result = action === 'approve'
|
|
141
|
+
? await services.client.request('post', '/_pb/import-runs/{id}/approve', {
|
|
142
|
+
params: { id: run.id },
|
|
143
|
+
body: { planHash: run.planHash },
|
|
144
|
+
})
|
|
145
|
+
: await services.client.request('post', `/_pb/import-runs/{id}/${action}`, {
|
|
146
|
+
params: { id: run.id },
|
|
147
|
+
});
|
|
148
|
+
set({ busy: false, dialog: false, confirmed: false });
|
|
149
|
+
if (!result.ok) {
|
|
150
|
+
if (result.code === 'reauth_required') {
|
|
151
|
+
services.requireReauth(result.request, { credential: false, secretFields: [] });
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
set({
|
|
155
|
+
error: result.code === 'conflict'
|
|
156
|
+
? 'The run changed. Reload it and try again.'
|
|
157
|
+
: 'Unable to update the import run.',
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
await controller.select(run.id);
|
|
163
|
+
await controller.load(state.cursor);
|
|
164
|
+
set({ notice: 'Action accepted. Reload to check job progress.' });
|
|
165
|
+
},
|
|
166
|
+
};
|
|
167
|
+
return controller;
|
|
168
|
+
}
|
|
169
|
+
export function ImportView({ state, controller, onSelect, onBack, onPage, }) {
|
|
170
|
+
const run = state.run;
|
|
171
|
+
const [now, setNow] = useState(Date.now);
|
|
172
|
+
useEffect(() => {
|
|
173
|
+
const timer = window.setInterval(() => setNow(Date.now()), 1000);
|
|
174
|
+
return () => window.clearInterval(timer);
|
|
175
|
+
}, []);
|
|
176
|
+
return (_jsxs("section", { "aria-labelledby": "page-heading", className: "space-y-4", children: [_jsx("h1", { tabIndex: -1, id: "page-heading", className: "text-2xl font-semibold", children: "Import" }), _jsx("p", { children: "Upload credentials with the CLI. Import manifests are managed with the CLI." }), state.selectedId && run === null ? (_jsx(Button, { type: "button", variant: "link", className: "px-0", disabled: state.busy, onClick: () => (onBack ? onBack() : controller.back()), children: "\u2190 Back to import runs" })) : null, state.error === null ? null : (_jsx(ListState, { kind: "error", title: state.error, children: _jsx(Button, { type: "button", variant: "outline", disabled: state.busy || state.loading, onClick: () => {
|
|
177
|
+
if (state.selectedId)
|
|
178
|
+
void controller.select(state.selectedId);
|
|
179
|
+
else
|
|
180
|
+
void controller.load(state.cursor);
|
|
181
|
+
}, children: "Retry" }) })), state.notice === null ? null : _jsx("p", { role: "status", children: state.notice }), _jsx(Button, { type: "button", variant: "outline", disabled: state.loading || state.busy, onClick: () => void controller.load(state.cursor), children: "Reload runs" }), state.loading ? _jsx(ListState, { kind: "loading", title: "Loading import runs\u2026" }) : null, state.detailLoading ? _jsx(ListState, { kind: "loading", title: "Loading import run\u2026" }) : null, run === null && !state.detailLoading && !state.loading ? (state.runs.length ? (_jsxs(_Fragment, { children: [_jsx(DataTable, { label: "Import runs", items: state.runs, columns: [
|
|
182
|
+
{
|
|
183
|
+
key: 'id',
|
|
184
|
+
label: 'Run',
|
|
185
|
+
value: (item) => item.id,
|
|
186
|
+
render: (item) => (_jsxs("div", { className: "flex flex-wrap items-center gap-1", children: [_jsxs(Button, { type: "button", variant: "link", className: "h-auto p-0 font-mono", disabled: state.busy, onClick: () => onSelect ? onSelect(item.id) : void controller.select(item.id), children: ["Run ", item.id.slice(0, 6), "\u2026", item.id.slice(-4)] }), _jsx(IdText, { value: item.id, label: "run ID" })] })),
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
key: 'state',
|
|
190
|
+
label: 'State',
|
|
191
|
+
value: (item) => item.state,
|
|
192
|
+
render: (item) => _jsx(StatusBadge, { status: item.state }),
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
key: 'hash',
|
|
196
|
+
label: 'Plan hash',
|
|
197
|
+
value: (item) => item.planHash ?? '',
|
|
198
|
+
render: (item) => item.planHash ? (_jsx(IdText, { value: item.planHash, label: "plan hash" })) : ('No plan hash'),
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
key: 'approved',
|
|
202
|
+
label: 'Approved',
|
|
203
|
+
priority: 2,
|
|
204
|
+
value: (item) => item.approvedAt ?? '',
|
|
205
|
+
render: (item) => _jsx(Time, { value: item.approvedAt, fallback: "Not approved" }),
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
key: 'accepted',
|
|
209
|
+
label: 'Accepted',
|
|
210
|
+
priority: 3,
|
|
211
|
+
value: (item) => item.acceptedAt ?? '',
|
|
212
|
+
render: (item) => _jsx(Time, { value: item.acceptedAt, fallback: "Not accepted" }),
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
key: 'expires',
|
|
216
|
+
label: 'Before-image expires',
|
|
217
|
+
priority: 3,
|
|
218
|
+
value: (item) => item.beforeImageExpiresAt ?? '',
|
|
219
|
+
render: (item) => (_jsx(Time, { value: item.beforeImageExpiresAt, fallback: "Not scheduled" })),
|
|
220
|
+
},
|
|
221
|
+
] }), _jsxs("div", { className: "flex gap-2", children: [_jsx(Button, { type: "button", variant: "outline", disabled: !state.cursor || state.busy, onClick: () => (onPage ? onPage() : void controller.load()), children: "First page" }), _jsx(Button, { type: "button", variant: "outline", disabled: !state.next || state.busy, onClick: () => {
|
|
222
|
+
if (state.next) {
|
|
223
|
+
if (onPage)
|
|
224
|
+
onPage(state.next);
|
|
225
|
+
else
|
|
226
|
+
void controller.load(state.next);
|
|
227
|
+
}
|
|
228
|
+
}, children: "Next page" })] })] })) : !state.error ? (_jsx(ListState, { kind: state.cursor ? 'filtered-empty' : 'empty', title: state.cursor ? 'No import runs on this page' : 'No import runs.', children: "Create an import plan with the CLI to get started." })) : null) : null, run === null ? null : (_jsxs("section", { "aria-labelledby": "run-heading", className: "space-y-3", children: [_jsx(Button, { type: "button", variant: "link", className: "px-0", disabled: state.busy, onClick: () => (onBack ? onBack() : controller.back()), children: "\u2190 Back to import runs" }), _jsxs("div", { className: "flex flex-wrap items-center gap-3", children: [_jsxs("h2", { id: "run-heading", className: "text-lg font-semibold", children: ["Run ", _jsx(IdText, { value: run.id, label: "run ID" })] }), _jsx(StatusBadge, { status: run.state })] }), _jsxs("div", { className: "detail-grid", children: [_jsxs("div", { className: "detail-group", children: [_jsx("h3", { children: "Plan" }), _jsxs("dl", { className: "detail-list", children: [_jsx("dt", { children: "Plan hash" }), _jsx("dd", { children: run.planHash ? (_jsx(IdText, { value: run.planHash, label: "full plan hash", full: true })) : ('No plan hash') }), _jsx("dt", { children: "Run ID" }), _jsx("dd", { children: _jsx(IdText, { value: run.id, label: "run ID" }) })] })] }), _jsxs("div", { className: "detail-group", children: [_jsx("h3", { children: "Approval" }), _jsxs("dl", { className: "detail-list", children: [_jsx("dt", { children: "Approved at" }), _jsx("dd", { children: _jsx(Time, { value: run.approvedAt, fallback: "Not approved" }) }), _jsx("dt", { children: "Approved by" }), _jsx("dd", { children: _jsx(IdText, { value: run.approvedByUserId, label: "approving user ID" }) })] })] }), _jsxs("div", { className: "detail-group", children: [_jsx("h3", { children: "Execution and retention" }), _jsxs("dl", { className: "detail-list", children: [_jsx("dt", { children: "Accepted at" }), _jsx("dd", { children: _jsx(Time, { value: run.acceptedAt, fallback: "Not accepted" }) }), _jsx("dt", { children: "Before-image expires" }), _jsx("dd", { children: _jsx(Time, { value: run.beforeImageExpiresAt, fallback: "Not scheduled" }) })] })] })] }), _jsx("h3", { className: "font-semibold", children: "Actions" }), _jsx("p", { className: "text-sm text-neutral-600", children: "Apply requires an approved plan. Cancel is available for planned runs. Rollback is available after execution while before-images are retained." }), _jsxs("div", { className: "flex flex-wrap gap-2", children: [_jsx(Button, { type: "button", variant: "outline", disabled: state.busy, onClick: () => void controller.select(run.id), children: "Reload run" }), _jsx(Button, { type: "button", disabled: state.busy || !importActionAllowed(run, 'approve', now), onClick: () => controller.openApproval(), children: "Review approval" }), ['apply', 'cancel', 'rollback'].map((action) => (_jsx(Button, { type: "button", variant: action === 'apply' ? 'outline' : 'ghost', className: action === 'apply' ? undefined : 'text-red-700', disabled: state.busy || !importActionAllowed(run, action, now), title: !importActionAllowed(run, action, now)
|
|
229
|
+
? 'Unavailable in the current state or retention window.'
|
|
230
|
+
: undefined, onClick: () => void controller.action(action), children: action === 'apply' ? 'Apply' : action === 'cancel' ? 'Cancel run' : 'Rollback' }, action)))] })] })), state.dialog && run !== null ? (_jsx(Dialog, { open: true, onOpenChange: (open) => {
|
|
231
|
+
if (!open)
|
|
232
|
+
controller.closeApproval();
|
|
233
|
+
}, children: _jsx(DialogContent, { onCancel: (event) => {
|
|
234
|
+
if (state.busy)
|
|
235
|
+
event.preventDefault();
|
|
236
|
+
}, children: _jsxs("form", { className: "grid gap-4", onSubmit: (event) => {
|
|
237
|
+
event.preventDefault();
|
|
238
|
+
if (state.busy || !state.confirmed)
|
|
239
|
+
return;
|
|
240
|
+
void controller.action('approve');
|
|
241
|
+
}, children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Approve import run" }), _jsx(DialogDescription, { children: "Confirm the full plan hash for the plan you reviewed with the CLI." })] }), _jsx("p", { className: "break-all", children: _jsx("code", { children: run.planHash }) }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Input, { id: "confirm-plan", type: "checkbox", className: "h-4 w-4", checked: state.confirmed, disabled: state.busy, onChange: (event) => controller.confirmApproval(event.currentTarget.checked) }), _jsx(Label, { htmlFor: "confirm-plan", children: "I confirm this plan hash." })] }), _jsxs(DialogFooter, { children: [_jsx(Button, { type: "button", variant: "outline", disabled: state.busy, onClick: () => controller.closeApproval(), children: "Back" }), _jsx(Button, { type: "submit", disabled: !state.confirmed || state.busy, children: "Approve run" })] })] }) }) })) : null] }));
|
|
242
|
+
}
|
|
243
|
+
export function ImportPage() {
|
|
244
|
+
const services = useServices();
|
|
245
|
+
const controller = useMemo(() => createImportController(services), [services]);
|
|
246
|
+
const state = useSyncExternalStore(controller.subscribe, controller.snapshot, controller.snapshot);
|
|
247
|
+
const [hash, setHash] = useState(() => window.location.hash);
|
|
248
|
+
useEffect(() => {
|
|
249
|
+
const change = () => setHash(window.location.hash);
|
|
250
|
+
window.addEventListener('hashchange', change);
|
|
251
|
+
return () => window.removeEventListener('hashchange', change);
|
|
252
|
+
}, []);
|
|
253
|
+
useEffect(() => {
|
|
254
|
+
const query = new URLSearchParams(hash.split('?')[1]);
|
|
255
|
+
void controller.load(query.get('cursor') ?? undefined);
|
|
256
|
+
const id = query.get('run');
|
|
257
|
+
if (id)
|
|
258
|
+
void controller.select(id);
|
|
259
|
+
else
|
|
260
|
+
controller.back();
|
|
261
|
+
}, [controller, hash]);
|
|
262
|
+
const navigate = (key, value) => {
|
|
263
|
+
const query = new URLSearchParams(hash.split('?')[1]);
|
|
264
|
+
if (value)
|
|
265
|
+
query.set(key, value);
|
|
266
|
+
else
|
|
267
|
+
query.delete(key);
|
|
268
|
+
if (key === 'cursor')
|
|
269
|
+
query.delete('run');
|
|
270
|
+
window.location.hash = `#/import${query.size ? `?${query}` : ''}`;
|
|
271
|
+
};
|
|
272
|
+
return (_jsx(ImportView, { state: state, controller: controller, onSelect: (id) => navigate('run', id), onBack: () => navigate('run'), onPage: (cursor) => navigate('cursor', cursor) }));
|
|
273
|
+
}
|
|
274
|
+
//# sourceMappingURL=import.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import.js","sourceRoot":"","sources":["../../src/pages/import.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { type FormEvent, type ReactNode } from 'react';
|
|
2
|
+
import type { ApiResult } from '../api.js';
|
|
3
|
+
import { type ShellServices, type ReplayResult } from '../auth.js';
|
|
4
|
+
export interface ManagementQuery {
|
|
5
|
+
project: string | null;
|
|
6
|
+
status?: string;
|
|
7
|
+
q?: string;
|
|
8
|
+
after?: string | undefined;
|
|
9
|
+
}
|
|
10
|
+
export declare function parseManagementHash(hash: string, statuses: readonly string[]): ManagementQuery;
|
|
11
|
+
export declare function createManagementStore<S>(initial: S): {
|
|
12
|
+
snapshot: () => S;
|
|
13
|
+
set(patch: Partial<S>): void;
|
|
14
|
+
subscribe(listener: () => void): () => void;
|
|
15
|
+
};
|
|
16
|
+
export declare function failureNotice(result: {
|
|
17
|
+
status: number;
|
|
18
|
+
code?: string;
|
|
19
|
+
}): string;
|
|
20
|
+
export declare function requireReauth(services: ShellServices, result: ApiResult<unknown>): boolean;
|
|
21
|
+
export declare function revisionTag(revision: number): string | null;
|
|
22
|
+
export declare function formValues(event: FormEvent<HTMLFormElement>): Record<string, string>;
|
|
23
|
+
export declare function Field(props: {
|
|
24
|
+
name: string;
|
|
25
|
+
label: string;
|
|
26
|
+
value?: string;
|
|
27
|
+
required?: boolean;
|
|
28
|
+
}): import("react").JSX.Element;
|
|
29
|
+
export declare function ManagementNotice(props: {
|
|
30
|
+
notice: string | null;
|
|
31
|
+
loading: boolean;
|
|
32
|
+
busy: boolean;
|
|
33
|
+
reload: () => void;
|
|
34
|
+
listError?: boolean;
|
|
35
|
+
}): import("react").JSX.Element;
|
|
36
|
+
export declare function ManagementFilters(props: {
|
|
37
|
+
route: 'projects' | 'access';
|
|
38
|
+
query: ManagementQuery;
|
|
39
|
+
statuses: readonly string[];
|
|
40
|
+
children?: ReactNode;
|
|
41
|
+
}): import("react").JSX.Element;
|
|
42
|
+
export declare function useManagementHash<Q>(services: ShellServices, controller: {
|
|
43
|
+
load: (query: Q) => Promise<void>;
|
|
44
|
+
replayed: (result: ReplayResult) => Promise<void>;
|
|
45
|
+
dispose: () => void;
|
|
46
|
+
}, parse: (hash: string) => Q, route: 'projects' | 'access'): string;
|
|
47
|
+
//# sourceMappingURL=management.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"management.d.ts","sourceRoot":"","sources":["../../src/pages/management.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC5E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAgB,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAUjF,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAID,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,eAAe,CAU9F;AACD,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;;eAKpC,OAAO,CAAC,CAAC,CAAC;wBAID,MAAM,IAAI;EAOjC;AACD,wBAAgB,aAAa,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAkB/E;AACD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,OAAO,CAI1F;AACD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE3D;AACD,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,eAAe,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAKpF;AACD,wBAAgB,KAAK,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,+BAO/F;AACD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IACtC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,+BAsBA;AACD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,KAAK,EAAE,UAAU,GAAG,QAAQ,CAAC;IAC7B,KAAK,EAAE,eAAe,CAAC;IACvB,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,+BAmFA;AACD,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,QAAQ,EAAE,aAAa,EACvB,UAAU,EAAE;IACV,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,QAAQ,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,EACD,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,CAAC,EAC1B,KAAK,EAAE,UAAU,GAAG,QAAQ,UAsB7B"}
|