admin-ui-starter-kit 0.4.4 → 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/.agents/skills/admin-ui-consumer-migration/references/actions-service.md +141 -0
- package/CHANGELOG.md +14 -3
- package/INTEGRATION.md +48 -2
- package/README.md +68 -7
- package/dist/services/actions/action-adapters.d.ts +97 -0
- package/dist/services/actions/action-adapters.d.ts.map +1 -0
- package/dist/services/actions/action-provider.d.ts +1 -1
- package/dist/services/actions/action-provider.d.ts.map +1 -1
- package/dist/services/actions/action-store.d.ts +13 -1
- package/dist/services/actions/action-store.d.ts.map +1 -1
- package/dist/services/actions/actions.types.d.ts +61 -0
- package/dist/services/actions/actions.types.d.ts.map +1 -1
- package/dist/services/actions/hooks.d.ts +2 -1
- package/dist/services/actions/hooks.d.ts.map +1 -1
- package/dist/services/actions/index.cjs +1 -1
- package/dist/services/actions/index.cjs.map +1 -1
- package/dist/services/actions/index.d.ts +4 -3
- package/dist/services/actions/index.d.ts.map +1 -1
- package/dist/services/actions/index.js +394 -112
- package/dist/services/actions/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -55,6 +55,60 @@ export function AppRoot() {
|
|
|
55
55
|
Do not put router, query, toast, telemetry, or i18n packages inside a package
|
|
56
56
|
wrapper. They stay in the consuming app and enter through callbacks.
|
|
57
57
|
|
|
58
|
+
For serious migrations, prefer the package adapters over app-local action
|
|
59
|
+
wrappers:
|
|
60
|
+
|
|
61
|
+
```tsx
|
|
62
|
+
import {
|
|
63
|
+
ActionOverlayOutlet,
|
|
64
|
+
ActionProvider,
|
|
65
|
+
createInertiaActionRunner,
|
|
66
|
+
createReactQueryActionFeedback,
|
|
67
|
+
} from 'admin-ui-starter-kit/services/actions';
|
|
68
|
+
|
|
69
|
+
<ActionProvider
|
|
70
|
+
requestRunner={createInertiaActionRunner({
|
|
71
|
+
router,
|
|
72
|
+
route,
|
|
73
|
+
defaults: { preserveScroll: true },
|
|
74
|
+
})}
|
|
75
|
+
feedback={createReactQueryActionFeedback({
|
|
76
|
+
queryClient,
|
|
77
|
+
invalidate: (event) => ({ queryKey: [event.actionId] }),
|
|
78
|
+
feedback: {
|
|
79
|
+
onError: (event) => event.message && toast.error(event.message),
|
|
80
|
+
},
|
|
81
|
+
})}
|
|
82
|
+
guards={{
|
|
83
|
+
can: (permission) => auth.can(permission),
|
|
84
|
+
hasAnyRole: (roles) => auth.hasAnyRole(roles),
|
|
85
|
+
}}
|
|
86
|
+
parseErrors={(error) => parseLaravelErrors(error)}
|
|
87
|
+
onOverlayOpenChange={(open) => polling.setPaused(open)}
|
|
88
|
+
onRunningChange={(running) => activity.setBusy(running)}
|
|
89
|
+
>
|
|
90
|
+
<App />
|
|
91
|
+
<ActionOverlayOutlet />
|
|
92
|
+
</ActionProvider>
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
These helpers are dependency-free. They accept router-like and query-client-like
|
|
96
|
+
objects, so the package stays framework-neutral.
|
|
97
|
+
|
|
98
|
+
Provider contract:
|
|
99
|
+
|
|
100
|
+
| Prop | Consumer responsibility |
|
|
101
|
+
| --- | --- |
|
|
102
|
+
| `feedback` | Toasts, telemetry, global success/error handling. |
|
|
103
|
+
| `requestRunner` | Execute normalized `request` definitions through the app transport. |
|
|
104
|
+
| `guards` | Permission and role checks for `permission` and `roles`. |
|
|
105
|
+
| `parseErrors` | Normalize backend validation/errors into `{ fieldErrors, message }`. |
|
|
106
|
+
| `onOverlayOpenChange` | Pause polling or background refresh while action overlays are open. |
|
|
107
|
+
| `onRunningChange` | Track whether any action is running. |
|
|
108
|
+
|
|
109
|
+
Per-action `run`, `requestRunner`, and `parseErrors` override provider-level
|
|
110
|
+
defaults when a workflow needs special handling.
|
|
111
|
+
|
|
58
112
|
## Page Scope
|
|
59
113
|
|
|
60
114
|
Register definitions once per scope. Do not register one action array per row.
|
|
@@ -116,6 +170,93 @@ For row menus, call `useActionSurface({ surface: 'table-row', payload: row })`
|
|
|
116
170
|
from the row component and map the returned actions into the existing menu
|
|
117
171
|
component.
|
|
118
172
|
|
|
173
|
+
Use `toPageAction`, `toMenuAction`, `toTableAction`, and `toCommandAction` to
|
|
174
|
+
map resolved package actions into package-owned surfaces without rebuilding the
|
|
175
|
+
same glue in every app.
|
|
176
|
+
|
|
177
|
+
## Local Actions
|
|
178
|
+
|
|
179
|
+
Use `useLocalAction(definition, options)` when migrating an existing page-owned
|
|
180
|
+
action hook. It keeps the definition local to the component but still uses the
|
|
181
|
+
package lifecycle, guards, overlays, provider feedback, and request runner.
|
|
182
|
+
|
|
183
|
+
```tsx
|
|
184
|
+
const action = useLocalAction<Booking, { note: string }, Booking>({
|
|
185
|
+
id: 'booking.confirm',
|
|
186
|
+
label: 'Confirm booking',
|
|
187
|
+
modality: {
|
|
188
|
+
type: 'dialog',
|
|
189
|
+
title: ({ payload }) => `Confirm ${payload?.reference}`,
|
|
190
|
+
formId: 'confirm-booking-form',
|
|
191
|
+
render: ({ getFormProps, isRunning }) => (
|
|
192
|
+
<form {...getFormProps()} id="confirm-booking-form">
|
|
193
|
+
<textarea name="note" disabled={isRunning} />
|
|
194
|
+
</form>
|
|
195
|
+
),
|
|
196
|
+
},
|
|
197
|
+
request: {
|
|
198
|
+
method: 'post',
|
|
199
|
+
route: 'bookings.confirm',
|
|
200
|
+
params: ({ payload }) => payload?.id,
|
|
201
|
+
data: ({ values }) => values,
|
|
202
|
+
},
|
|
203
|
+
}, { payload: booking });
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
Prefer `ActionScope` + `useActionSurface` once multiple surfaces need the same
|
|
207
|
+
definition.
|
|
208
|
+
|
|
209
|
+
## Requests, Guards, And Errors
|
|
210
|
+
|
|
211
|
+
Use `run` for bespoke behavior. Use `request` when actions repeat the same
|
|
212
|
+
route/request boilerplate and a provider adapter can execute it.
|
|
213
|
+
|
|
214
|
+
```tsx
|
|
215
|
+
const archiveBooking: ActionDefinition<Booking, undefined, Booking> = {
|
|
216
|
+
id: 'booking.archive',
|
|
217
|
+
label: 'Archive booking',
|
|
218
|
+
permission: ['bookings.archive', 'bookings.manage'],
|
|
219
|
+
roles: ['admin', 'ops'],
|
|
220
|
+
request: {
|
|
221
|
+
method: 'post',
|
|
222
|
+
route: 'bookings.archive',
|
|
223
|
+
params: ({ payload }) => payload?.id,
|
|
224
|
+
options: { preserveScroll: true },
|
|
225
|
+
},
|
|
226
|
+
successMessage: ({ payload }) => `${payload?.reference} archived`,
|
|
227
|
+
};
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
`permission` arrays require every permission through `guards.can`. `roles`
|
|
231
|
+
passes the full role list to `guards.hasAnyRole`. If a definition declares a
|
|
232
|
+
permission or role and the matching guard is missing, the action is hidden.
|
|
233
|
+
|
|
234
|
+
Normalize backend errors once at the provider for Laravel/Inertia-style
|
|
235
|
+
validation:
|
|
236
|
+
|
|
237
|
+
```tsx
|
|
238
|
+
<ActionProvider
|
|
239
|
+
parseErrors={(error) => {
|
|
240
|
+
const response = error as {
|
|
241
|
+
errors?: Record<string, string | string[]>;
|
|
242
|
+
message?: string;
|
|
243
|
+
};
|
|
244
|
+
|
|
245
|
+
return {
|
|
246
|
+
fieldErrors: response.errors,
|
|
247
|
+
message: response.message ?? 'Action failed.',
|
|
248
|
+
};
|
|
249
|
+
}}
|
|
250
|
+
>
|
|
251
|
+
<App />
|
|
252
|
+
<ActionOverlayOutlet />
|
|
253
|
+
</ActionProvider>
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
Parsed `fieldErrors` land on `action.errors` and overlay render contexts.
|
|
257
|
+
Parsed messages are used by failed lifecycle feedback unless the action defines
|
|
258
|
+
an explicit `errorMessage`.
|
|
259
|
+
|
|
119
260
|
## Modality And Overlay Parity
|
|
120
261
|
|
|
121
262
|
Use action modality for reusable modal workflows. A delete confirmation opened
|
package/CHANGELOG.md
CHANGED
|
@@ -6,7 +6,7 @@ this project adheres to [Semantic Versioning](https://semver.org/).
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
-
## [0.4.
|
|
9
|
+
## [0.4.5] — 2026-06-20
|
|
10
10
|
|
|
11
11
|
### Added
|
|
12
12
|
|
|
@@ -16,6 +16,13 @@ this project adheres to [Semantic Versioning](https://semver.org/).
|
|
|
16
16
|
now supports alert messages, custom footer composition, hidden headers,
|
|
17
17
|
focus refs, escape/backdrop behavior, content classes, confirm style, icon /
|
|
18
18
|
emphasis controls, and drawer footer visibility.
|
|
19
|
+
- **Action migration APIs** — added `useLocalAction` for incremental
|
|
20
|
+
page-owned action migration, provider-level guards, provider/action error
|
|
21
|
+
parsing, request runner support, overlay/running state callbacks, typed action
|
|
22
|
+
factories, and surface mapping helpers.
|
|
23
|
+
- **Dependency-free action adapters** — added HTTP, Inertia-like, and React
|
|
24
|
+
Query-like helpers that accept router/query-client objects without importing
|
|
25
|
+
framework packages into the library.
|
|
19
26
|
|
|
20
27
|
### Fixed
|
|
21
28
|
|
|
@@ -29,6 +36,10 @@ this project adheres to [Semantic Versioning](https://semver.org/).
|
|
|
29
36
|
- Documented the recommended modality pattern: use
|
|
30
37
|
`services/actions` + `ActionOverlayOutlet` for reusable modal workflows, and
|
|
31
38
|
reserve `features/overlays` for one-off local state.
|
|
39
|
+
- Expanded package-facing action docs across `README.md`, `INTEGRATION.md`,
|
|
40
|
+
the service README, and the consumer migration skill with provider contracts,
|
|
41
|
+
request runners, guards, error parsing, local actions, and migration choice
|
|
42
|
+
points.
|
|
32
43
|
|
|
33
44
|
## [0.1.3] — 2026-05-22
|
|
34
45
|
|
|
@@ -122,7 +133,7 @@ Initial public release.
|
|
|
122
133
|
- **What this is not:** a marketing-site UI kit. Built for admin panels
|
|
123
134
|
and SaaS dashboards.
|
|
124
135
|
|
|
125
|
-
[Unreleased]: https://github.com/nicolasvlachos/admin-ui-starter-kit/compare/v0.4.
|
|
126
|
-
[0.4.
|
|
136
|
+
[Unreleased]: https://github.com/nicolasvlachos/admin-ui-starter-kit/compare/v0.4.5...HEAD
|
|
137
|
+
[0.4.5]: https://github.com/nicolasvlachos/admin-ui-starter-kit/compare/v0.1.3...v0.4.5
|
|
127
138
|
[0.1.3]: https://github.com/nicolasvlachos/admin-ui-starter-kit/compare/v0.1.0...v0.1.3
|
|
128
139
|
[0.1.0]: https://github.com/nicolasvlachos/admin-ui-starter-kit/releases/tag/v0.1.0
|
package/INTEGRATION.md
CHANGED
|
@@ -157,13 +157,15 @@ components from a client component file (`'use client'`). The package is
|
|
|
157
157
|
framework-neutral, but interactive UI still runs on the client.
|
|
158
158
|
|
|
159
159
|
For shared actions, keep the registry framework-neutral and put framework
|
|
160
|
-
calls inside callbacks:
|
|
160
|
+
calls inside callbacks or provider adapters:
|
|
161
161
|
|
|
162
162
|
```tsx
|
|
163
163
|
import {
|
|
164
164
|
ActionOverlayOutlet,
|
|
165
165
|
ActionProvider,
|
|
166
166
|
ActionScope,
|
|
167
|
+
createInertiaActionRunner,
|
|
168
|
+
createReactQueryActionFeedback,
|
|
167
169
|
type ActionDefinition,
|
|
168
170
|
} from 'admin-ui-starter-kit/services/actions';
|
|
169
171
|
|
|
@@ -180,9 +182,45 @@ const customerActions: ActionDefinition<Customer>[] = [
|
|
|
180
182
|
run: ({ payload }) => router.delete(`/customers/${payload?.id}`),
|
|
181
183
|
successMessage: ({ payload }) => `${payload?.name} deleted`,
|
|
182
184
|
},
|
|
185
|
+
{
|
|
186
|
+
id: 'customer.archive',
|
|
187
|
+
label: 'Archive customer',
|
|
188
|
+
permission: 'customers.archive',
|
|
189
|
+
roles: ['admin', 'ops'],
|
|
190
|
+
modality: {
|
|
191
|
+
type: 'alert',
|
|
192
|
+
tone: 'warning',
|
|
193
|
+
title: ({ payload }) => `Archive ${payload?.name}?`,
|
|
194
|
+
confirmLabel: 'Archive',
|
|
195
|
+
},
|
|
196
|
+
request: {
|
|
197
|
+
method: 'post',
|
|
198
|
+
route: 'customers.archive',
|
|
199
|
+
params: ({ payload }) => payload?.id,
|
|
200
|
+
options: { preserveScroll: true },
|
|
201
|
+
},
|
|
202
|
+
successMessage: ({ payload }) => `${payload?.name} archived`,
|
|
203
|
+
},
|
|
183
204
|
];
|
|
184
205
|
|
|
185
|
-
<ActionProvider
|
|
206
|
+
<ActionProvider
|
|
207
|
+
requestRunner={createInertiaActionRunner({ router, route })}
|
|
208
|
+
feedback={createReactQueryActionFeedback({
|
|
209
|
+
queryClient,
|
|
210
|
+
invalidate: (event) => ({ queryKey: [event.actionId] }),
|
|
211
|
+
feedback: {
|
|
212
|
+
onSuccess: (event) => event.message && toast.success(event.message),
|
|
213
|
+
onError: (event) => event.message && toast.error(event.message),
|
|
214
|
+
},
|
|
215
|
+
})}
|
|
216
|
+
guards={{
|
|
217
|
+
can: (permission) => auth.can(permission),
|
|
218
|
+
hasAnyRole: (roles) => auth.hasAnyRole(roles),
|
|
219
|
+
}}
|
|
220
|
+
parseErrors={(error) => parseLaravelActionError(error)}
|
|
221
|
+
onOverlayOpenChange={(open) => polling.setPaused(open)}
|
|
222
|
+
onRunningChange={(running) => activity.setBusy(running)}
|
|
223
|
+
>
|
|
186
224
|
<ActionScope scope={`customer:${customer.id}`} actions={customerActions}>
|
|
187
225
|
<CustomerPage />
|
|
188
226
|
</ActionScope>
|
|
@@ -190,6 +228,14 @@ const customerActions: ActionDefinition<Customer>[] = [
|
|
|
190
228
|
</ActionProvider>;
|
|
191
229
|
```
|
|
192
230
|
|
|
231
|
+
Use `useLocalAction(definition, options)` for one page-owned action during an
|
|
232
|
+
incremental migration. Use `<ActionScope>` and `useActionSurface(...)` once the
|
|
233
|
+
same definition needs to appear in page actions, table row menus, command
|
|
234
|
+
palette entries, cards, or action-owned overlays. `ActionOverlayOutlet` renders
|
|
235
|
+
action modality through the package `features/overlays`, so reusable modal
|
|
236
|
+
workflows keep the same focus, backdrop, loading, submit, and error behavior as
|
|
237
|
+
direct overlay usage.
|
|
238
|
+
|
|
193
239
|
For form actions, set `modality.formId` and render a form through the modality
|
|
194
240
|
render prop. The context exposes `getFormProps(...)`, `submit(values)`,
|
|
195
241
|
`errors`, and loading/status flags. Keep `react-hook-form`, validation schemas,
|
package/README.md
CHANGED
|
@@ -186,25 +186,86 @@ loading/error/overlay lifecycle. Keep one-off dialogs local with
|
|
|
186
186
|
import {
|
|
187
187
|
ActionOverlayOutlet,
|
|
188
188
|
ActionProvider,
|
|
189
|
+
createInertiaActionRunner,
|
|
190
|
+
createReactQueryActionFeedback,
|
|
191
|
+
useLocalAction,
|
|
189
192
|
} from 'admin-ui-starter-kit/services/actions';
|
|
190
193
|
|
|
191
194
|
<ActionProvider
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
+
requestRunner={createInertiaActionRunner({
|
|
196
|
+
router,
|
|
197
|
+
route,
|
|
198
|
+
defaults: { preserveScroll: true },
|
|
199
|
+
})}
|
|
200
|
+
feedback={createReactQueryActionFeedback({
|
|
201
|
+
queryClient,
|
|
202
|
+
invalidate: (event) => ({ queryKey: [event.actionId] }),
|
|
203
|
+
feedback: {
|
|
204
|
+
onSuccess: (event) => event.message && toast.success(event.message),
|
|
205
|
+
onError: (event) => event.message && toast.error(event.message),
|
|
206
|
+
},
|
|
207
|
+
})}
|
|
208
|
+
guards={{
|
|
209
|
+
can: (permission) => auth.can(permission),
|
|
210
|
+
hasAnyRole: (roles) => auth.hasAnyRole(roles),
|
|
195
211
|
}}
|
|
212
|
+
parseErrors={(error) => {
|
|
213
|
+
const response = error as {
|
|
214
|
+
errors?: Record<string, string | string[]>;
|
|
215
|
+
message?: string;
|
|
216
|
+
};
|
|
217
|
+
|
|
218
|
+
return {
|
|
219
|
+
fieldErrors: response.errors,
|
|
220
|
+
message: response.message ?? 'Action failed.',
|
|
221
|
+
};
|
|
222
|
+
}}
|
|
223
|
+
onOverlayOpenChange={(open) => polling.setPaused(open)}
|
|
224
|
+
onRunningChange={(running) => activity.setBusy(running)}
|
|
196
225
|
>
|
|
197
226
|
<App />
|
|
198
227
|
<ActionOverlayOutlet />
|
|
199
228
|
</ActionProvider>
|
|
200
229
|
```
|
|
201
230
|
|
|
231
|
+
Actions can be callback-driven with `run`, or data-driven through `request`
|
|
232
|
+
plus a provider/action `requestRunner`. Provider `guards` keep permission and
|
|
233
|
+
role checks app-owned, while `parseErrors` normalizes backend validation
|
|
234
|
+
payloads into `action.errors` and failed lifecycle messages. Use
|
|
235
|
+
`useLocalAction` for incremental page-owned migrations, and use
|
|
236
|
+
`<ActionScope>` + `useActionSurface` when one definition needs to power page,
|
|
237
|
+
table, card, command, or overlay surfaces.
|
|
238
|
+
|
|
239
|
+
```tsx
|
|
240
|
+
const confirmBooking = useLocalAction<Booking, { note: string }, Booking>({
|
|
241
|
+
id: 'booking.confirm',
|
|
242
|
+
label: 'Confirm booking',
|
|
243
|
+
permission: 'bookings.confirm',
|
|
244
|
+
modality: {
|
|
245
|
+
type: 'dialog',
|
|
246
|
+
title: ({ payload }) => `Confirm ${payload?.reference}`,
|
|
247
|
+
formId: 'confirm-booking-form',
|
|
248
|
+
render: ({ getFormProps, isRunning }) => (
|
|
249
|
+
<form {...getFormProps()} id="confirm-booking-form">
|
|
250
|
+
<textarea name="note" disabled={isRunning} />
|
|
251
|
+
</form>
|
|
252
|
+
),
|
|
253
|
+
},
|
|
254
|
+
request: {
|
|
255
|
+
method: 'post',
|
|
256
|
+
route: 'bookings.confirm',
|
|
257
|
+
params: ({ payload }) => payload?.id,
|
|
258
|
+
data: ({ values }) => values,
|
|
259
|
+
}}
|
|
260
|
+
}, { payload: booking });
|
|
261
|
+
```
|
|
262
|
+
|
|
202
263
|
Pages register contextual actions with `useRegisterActions` or
|
|
203
264
|
`<ActionScope>`. Routing, permissions, translations, cache invalidation, and
|
|
204
|
-
toasts stay in the consuming app through callbacks
|
|
205
|
-
`status`, `isRunning`, `isSuccess`,
|
|
206
|
-
timestamps; overlay form actions
|
|
207
|
-
`getFormProps(...)` in the render context.
|
|
265
|
+
toasts stay in the consuming app through callbacks, provider adapters, and
|
|
266
|
+
lifecycle hooks. Resolved actions expose `status`, `isRunning`, `isSuccess`,
|
|
267
|
+
`isError`, `errors`, `message`, `result`, and timestamps; overlay form actions
|
|
268
|
+
can use `modality.formId` with `getFormProps(...)` in the render context.
|
|
208
269
|
|
|
209
270
|
### 7. Install the AI agent skills (optional)
|
|
210
271
|
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { ActionDefinition, ActionFeedbackHandlers, ActionLifecycleEvent, ActionMetadata, ActionModalityConfig, ActionRequestRunner, ResolvedAction } from './actions.types';
|
|
2
|
+
type MaybePromise<T> = T | Promise<T>;
|
|
3
|
+
export interface ActionHttpErrorOptions {
|
|
4
|
+
status: number;
|
|
5
|
+
statusText: string;
|
|
6
|
+
body: unknown;
|
|
7
|
+
response: Response;
|
|
8
|
+
}
|
|
9
|
+
export declare class ActionHttpError extends Error {
|
|
10
|
+
status: number;
|
|
11
|
+
statusText: string;
|
|
12
|
+
body: unknown;
|
|
13
|
+
response: Response;
|
|
14
|
+
errors?: unknown;
|
|
15
|
+
constructor({ status, statusText, body, response }: ActionHttpErrorOptions);
|
|
16
|
+
}
|
|
17
|
+
export interface CreateHttpActionRunnerOptions {
|
|
18
|
+
baseUrl?: string;
|
|
19
|
+
fetcher?: typeof fetch;
|
|
20
|
+
parseResponse?: (response: Response) => Promise<unknown>;
|
|
21
|
+
}
|
|
22
|
+
export declare function createHttpActionRunner<TResult = unknown>({ baseUrl, fetcher, parseResponse, }?: CreateHttpActionRunnerOptions): ActionRequestRunner<TResult>;
|
|
23
|
+
export interface InertiaRouterLike {
|
|
24
|
+
visit: (url: string, options?: Record<string, unknown>) => unknown;
|
|
25
|
+
}
|
|
26
|
+
export interface CreateInertiaActionRunnerOptions {
|
|
27
|
+
router: InertiaRouterLike;
|
|
28
|
+
route?: (name: string, params?: unknown) => string;
|
|
29
|
+
defaults?: Record<string, unknown>;
|
|
30
|
+
}
|
|
31
|
+
export declare function createInertiaActionRunner<TResult = unknown>({ router, route, defaults, }: CreateInertiaActionRunnerOptions): ActionRequestRunner<TResult>;
|
|
32
|
+
export interface QueryClientLike {
|
|
33
|
+
invalidateQueries?: (...args: unknown[]) => MaybePromise<unknown>;
|
|
34
|
+
}
|
|
35
|
+
export type QueryInvalidation = unknown | readonly unknown[] | ((event: ActionLifecycleEvent) => unknown | readonly unknown[] | undefined);
|
|
36
|
+
export interface CreateReactQueryActionFeedbackOptions {
|
|
37
|
+
queryClient: QueryClientLike;
|
|
38
|
+
invalidate?: QueryInvalidation;
|
|
39
|
+
feedback?: ActionFeedbackHandlers;
|
|
40
|
+
}
|
|
41
|
+
export declare function createReactQueryActionFeedback({ queryClient, invalidate, feedback, }: CreateReactQueryActionFeedbackOptions): ActionFeedbackHandlers;
|
|
42
|
+
export declare function defineAction<TPayload = unknown, TValues = unknown, TResult = unknown>(definition: ActionDefinition<TPayload, TValues, TResult>): ActionDefinition<TPayload, TValues, TResult>;
|
|
43
|
+
export declare function defineDeleteAction<TPayload = unknown, TResult = unknown>(definition: Omit<ActionDefinition<TPayload, undefined, TResult>, 'modality'> & {
|
|
44
|
+
modality: Omit<ActionModalityConfig<TPayload, undefined, TResult>, 'type' | 'tone'> & Partial<Pick<ActionModalityConfig<TPayload, undefined, TResult>, 'type' | 'tone'>>;
|
|
45
|
+
}): ActionDefinition<TPayload, undefined, TResult>;
|
|
46
|
+
export declare function defineFormAction<TPayload = unknown, TValues = unknown, TResult = unknown>(definition: Omit<ActionDefinition<TPayload, TValues, TResult>, 'modality'> & {
|
|
47
|
+
modality: Omit<ActionModalityConfig<TPayload, TValues, TResult>, 'type'> & Partial<Pick<ActionModalityConfig<TPayload, TValues, TResult>, 'type'>>;
|
|
48
|
+
}): ActionDefinition<TPayload, TValues, TResult>;
|
|
49
|
+
export declare function defineSilentAction<TPayload = unknown, TValues = unknown, TResult = unknown>(definition: Omit<ActionDefinition<TPayload, TValues, TResult>, 'modality'>): ActionDefinition<TPayload, TValues, TResult>;
|
|
50
|
+
type ActionVariant = 'primary' | 'secondary' | 'destructive' | 'success' | 'warning';
|
|
51
|
+
export declare function toPageAction<TPayload = unknown, TValues = unknown, TResult = unknown>(action: ResolvedAction<TPayload, TValues, TResult>): {
|
|
52
|
+
id: string;
|
|
53
|
+
label: import('react').ReactNode;
|
|
54
|
+
onClick: () => void;
|
|
55
|
+
disabled: boolean;
|
|
56
|
+
loading: boolean;
|
|
57
|
+
icon: import('react').ComponentType<{
|
|
58
|
+
className?: string;
|
|
59
|
+
}> | undefined;
|
|
60
|
+
variant: ActionVariant | undefined;
|
|
61
|
+
visible: boolean;
|
|
62
|
+
group: string | undefined;
|
|
63
|
+
placement: import('./actions.types').ActionPlacement;
|
|
64
|
+
};
|
|
65
|
+
export declare function toMenuAction<TPayload = unknown, TValues = unknown, TResult = unknown>(action: ResolvedAction<TPayload, TValues, TResult>): {
|
|
66
|
+
label: string;
|
|
67
|
+
onClick: () => void;
|
|
68
|
+
disabled: boolean;
|
|
69
|
+
icon: import('react').ComponentType<{
|
|
70
|
+
className?: string;
|
|
71
|
+
}> | undefined;
|
|
72
|
+
variant: string;
|
|
73
|
+
};
|
|
74
|
+
export declare function toTableAction<TData = unknown>(action: ResolvedAction<TData>): {
|
|
75
|
+
id: string;
|
|
76
|
+
label: string;
|
|
77
|
+
onClick: (row: TData) => void;
|
|
78
|
+
disabled: boolean;
|
|
79
|
+
isDisabled: () => boolean;
|
|
80
|
+
isVisible: () => boolean;
|
|
81
|
+
icon: import('react').ReactElement<{
|
|
82
|
+
className?: string;
|
|
83
|
+
}, string | import('react').JSXElementConstructor<any>> | undefined;
|
|
84
|
+
variant: string;
|
|
85
|
+
};
|
|
86
|
+
export declare function toCommandAction<TPayload = unknown, TValues = unknown, TResult = unknown>(action: ResolvedAction<TPayload, TValues, TResult>, metadata?: ActionMetadata): {
|
|
87
|
+
id: string;
|
|
88
|
+
label: string;
|
|
89
|
+
group: string | undefined;
|
|
90
|
+
disabled: boolean;
|
|
91
|
+
icon: import('react').ComponentType<{
|
|
92
|
+
className?: string;
|
|
93
|
+
}> | undefined;
|
|
94
|
+
onSelect: () => void;
|
|
95
|
+
};
|
|
96
|
+
export {};
|
|
97
|
+
//# sourceMappingURL=action-adapters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-adapters.d.ts","sourceRoot":"","sources":["../../../src/services/actions/action-adapters.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,6 @@ import { ActionStore } from './action-store';
|
|
|
3
3
|
import { ActionProviderProps } from './actions.types';
|
|
4
4
|
export declare const ActionStoreContext: import('react').Context<ActionStore | null>;
|
|
5
5
|
export declare const ActionScopeContext: import('react').Context<string | null>;
|
|
6
|
-
export declare function ActionProvider<TPayload = unknown, TValues = unknown, TResult = unknown>({ actions, feedback, children, }: ActionProviderProps<TPayload, TValues, TResult>): ReactNode;
|
|
6
|
+
export declare function ActionProvider<TPayload = unknown, TValues = unknown, TResult = unknown>({ actions, feedback, guards, parseErrors, requestRunner, onOverlayOpenChange, onRunningChange, children, }: ActionProviderProps<TPayload, TValues, TResult>): ReactNode;
|
|
7
7
|
export declare function useActionStore(): ActionStore;
|
|
8
8
|
//# sourceMappingURL=action-provider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-provider.d.ts","sourceRoot":"","sources":["../../../src/services/actions/action-provider.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"action-provider.d.ts","sourceRoot":"","sources":["../../../src/services/actions/action-provider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAMN,KAAK,SAAS,EACd,MAAM,OAAO,CAAC;AAEf,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAEN,KAAK,mBAAmB,EAExB,MAAM,iBAAiB,CAAC;AAEzB,eAAO,MAAM,kBAAkB,6CAA0C,CAAC;AAC1E,eAAO,MAAM,kBAAkB,wCAAqC,CAAC;AAErE,wBAAgB,cAAc,CAC7B,QAAQ,GAAG,OAAO,EAClB,OAAO,GAAG,OAAO,EACjB,OAAO,GAAG,OAAO,EAChB,EACD,OAAO,EACP,QAAQ,EACR,MAAM,EACN,WAAW,EACX,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,QAAQ,GACR,EAAE,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,SAAS,CAiC7D;AAsDD,wBAAgB,cAAc,IAAI,WAAW,CAM5C"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import { ActionDefinition, ActionFeedbackHandlers, ActionFieldErrors, ActionMessage, ActionMessageContext, ActionMetadata, ActionRegistrationOptions, ActionStoreSnapshot, ActionSurfaceOptions, ResolvedAction, UseActionOptions } from './actions.types';
|
|
1
|
+
import { ActionDefinition, ActionErrorParseContext, ActionErrorParser, ActionFeedbackHandlers, ActionFieldErrors, ActionGuards, ActionMessage, ActionMessageContext, ActionMetadata, ActionRegistrationOptions, ActionRequestConfig, ActionRequestRunner, ActionRunContext, ParsedActionError, ResolvedActionRequest, ActionStoreSnapshot, ActionSurfaceOptions, ResolvedAction, UseActionOptions } from './actions.types';
|
|
2
2
|
export declare function extractActionFieldErrors(error: unknown): ActionFieldErrors;
|
|
3
3
|
export declare function resolveActionMessage<TPayload = unknown, TValues = unknown, TResult = unknown>(message: ActionMessage<TPayload, TValues, TResult> | undefined, context: ActionMessageContext<TPayload, TValues, TResult>): string | undefined;
|
|
4
|
+
export declare function resolveActionRequest<TPayload = unknown, TValues = unknown>(request: ActionRequestConfig<TPayload, TValues>, context: ActionRunContext<TPayload, TValues>): ResolvedActionRequest;
|
|
5
|
+
export declare function parseActionError<TPayload = unknown, TValues = unknown>(error: unknown, context: ActionErrorParseContext<TPayload, TValues>, parser?: ActionErrorParser): ParsedActionError;
|
|
4
6
|
export declare class ActionStore {
|
|
5
7
|
private registrations;
|
|
6
8
|
private runStates;
|
|
@@ -9,11 +11,20 @@ export declare class ActionStore {
|
|
|
9
11
|
private snapshot;
|
|
10
12
|
private readonly listeners;
|
|
11
13
|
private feedback;
|
|
14
|
+
private guards;
|
|
15
|
+
private errorParser;
|
|
16
|
+
private requestRunner;
|
|
12
17
|
private readonly abortControllers;
|
|
13
18
|
private readonly runTokens;
|
|
14
19
|
subscribe: (listener: () => void) => (() => void);
|
|
15
20
|
getSnapshot: () => ActionStoreSnapshot;
|
|
16
21
|
setFeedback(feedback?: ActionFeedbackHandlers): void;
|
|
22
|
+
setOptions(options: {
|
|
23
|
+
feedback?: ActionFeedbackHandlers;
|
|
24
|
+
guards?: ActionGuards;
|
|
25
|
+
parseErrors?: ActionErrorParser;
|
|
26
|
+
requestRunner?: ActionRequestRunner;
|
|
27
|
+
}): void;
|
|
17
28
|
registerActions<TPayload = unknown, TValues = unknown, TResult = unknown>(actions: readonly ActionDefinition<TPayload, TValues, TResult>[], options?: ActionRegistrationOptions): () => void;
|
|
18
29
|
selectSurfaceActions<TPayload = unknown, TValues = unknown, TResult = unknown>(options: ActionSurfaceOptions<TPayload>): ResolvedAction<TPayload, TValues, TResult>[];
|
|
19
30
|
selectAction<TPayload = unknown, TValues = unknown, TResult = unknown>(actionId: string, options?: UseActionOptions<TPayload>): ResolvedAction<TPayload, TValues, TResult> | null;
|
|
@@ -32,6 +43,7 @@ export declare class ActionStore {
|
|
|
32
43
|
private resolveEntry;
|
|
33
44
|
private createRunContext;
|
|
34
45
|
private isEntryDisabled;
|
|
46
|
+
private isEntryVisible;
|
|
35
47
|
private emitLifecycle;
|
|
36
48
|
private findEntry;
|
|
37
49
|
private getRunState;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-store.d.ts","sourceRoot":"","sources":["../../../src/services/actions/action-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,KAAK,gBAAgB,EAErB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,
|
|
1
|
+
{"version":3,"file":"action-store.d.ts","sourceRoot":"","sources":["../../../src/services/actions/action-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,KAAK,gBAAgB,EAErB,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,YAAY,EAGjB,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EAEnB,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EAGrB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,MAAM,iBAAiB,CAAC;AA2HzB,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,CAkB1E;AAED,wBAAgB,oBAAoB,CACnC,QAAQ,GAAG,OAAO,EAClB,OAAO,GAAG,OAAO,EACjB,OAAO,GAAG,OAAO,EAEjB,OAAO,EAAE,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,SAAS,EAC9D,OAAO,EAAE,oBAAoB,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,GACvD,MAAM,GAAG,SAAS,CAOpB;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EACzE,OAAO,EAAE,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,EAC/C,OAAO,EAAE,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,GAC1C,qBAAqB,CAUvB;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EACrE,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,uBAAuB,CAAC,QAAQ,EAAE,OAAO,CAAC,EACnD,MAAM,CAAC,EAAE,iBAAiB,GACxB,iBAAiB,CAGnB;AAED,qBAAa,WAAW;IACvB,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,SAAS,CAAsC;IACvD,OAAO,CAAC,MAAM,CAAuC;IACrD,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,QAAQ,CAAwD;IACxE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IACnD,OAAO,CAAC,QAAQ,CAAqC;IACrD,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,WAAW,CAAgC;IACnD,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAsC;IACvE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;IAEvD,SAAS,GAAI,UAAU,MAAM,IAAI,KAAG,CAAC,MAAM,IAAI,CAAC,CAG9C;IAEF,WAAW,QAAO,mBAAmB,CAAkB;IAEvD,WAAW,CAAC,QAAQ,CAAC,EAAE,sBAAsB,GAAG,IAAI;IAIpD,UAAU,CAAC,OAAO,EAAE;QACnB,QAAQ,CAAC,EAAE,sBAAsB,CAAC;QAClC,MAAM,CAAC,EAAE,YAAY,CAAC;QACtB,WAAW,CAAC,EAAE,iBAAiB,CAAC;QAChC,aAAa,CAAC,EAAE,mBAAmB,CAAC;KACpC,GAAG,IAAI;IAaR,eAAe,CAAC,QAAQ,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EACvE,OAAO,EAAE,SAAS,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,EAChE,OAAO,GAAE,yBAA8B,GACrC,MAAM,IAAI;IA6Bb,oBAAoB,CAAC,QAAQ,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EAC5E,OAAO,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GACrC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE;IAmB/C,YAAY,CAAC,QAAQ,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EACpE,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,gBAAgB,CAAC,QAAQ,CAAM,GACtC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,IAAI;IAcpD,eAAe,CAAC,QAAQ,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,KACrE,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,GAC1C,IAAI;IAWP,UAAU,CAAC,QAAQ,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,cAAc,GAAG,IAAI;IA4BhG,WAAW,CAAC,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,IAAI;IAU9C,YAAY,CAAC,OAAO,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EACtD,MAAM,CAAC,EAAE,OAAO,GACd,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAuBzB,aAAa,CAAC,QAAQ,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EAC3E,GAAG,EAAE,MAAM,EACX,IAAI,GAAE;QACL,OAAO,CAAC,EAAE,QAAQ,CAAC;QACnB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,cAAc,CAAC;KACrB,GACJ,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAqG/B,OAAO,CAAC,kBAAkB;IAqB1B,OAAO,CAAC,YAAY;IAuEpB,OAAO,CAAC,gBAAgB;IAoBxB,OAAO,CAAC,eAAe;IAmBvB,OAAO,CAAC,cAAc;IAkCtB,OAAO,CAAC,aAAa;IA2CrB,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,WAAW;IAenB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,OAAO;CAUf;AAED,wBAAgB,iBAAiB,IAAI,WAAW,CAE/C"}
|