@jskit-ai/agent-docs 0.1.51 → 0.1.53
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/guide/agent/app-setup/a-more-interesting-shell.md +65 -18
- package/guide/agent/generators/advanced-cruds.md +29 -0
- package/package.json +1 -1
- package/patterns/client-requests.md +9 -3
- package/reference/autogen/packages/http-runtime.md +1 -0
- package/reference/autogen/packages/shell-web.md +5 -0
- package/reference/autogen/packages/users-web.md +28 -8
|
@@ -574,31 +574,78 @@ try {
|
|
|
574
574
|
|
|
575
575
|
Use the narrow `@jskit-ai/shell-web/client/asyncModuleRecovery` subpath for this runtime, especially from modules that are imported by Node-mode Vitest suites. The aggregate `@jskit-ai/shell-web/client` barrel also exports the composable for normal Vite app code, but that barrel includes `.vue` component exports and can require Vue SFC handling in tests.
|
|
576
576
|
|
|
577
|
-
Request connectivity failures use a separate shell recovery path. Generated apps already configure TanStack Query to retry transient failures with capped backoff. `shell-web` then observes the app's `jskit.client.query-client` and, when an active query finishes in a transport failure such as `Network request failed.` or `Failed to fetch`, reports an `app-recoverable` banner with a `Retry` action that refetches that exact query. Normal HTTP validation and application errors stay local to the screen.
|
|
577
|
+
Request connectivity failures use a separate shell recovery path. Generated apps already configure TanStack Query to retry transient failures with capped backoff. `shell-web` then observes the app's `jskit.client.query-client` and, when an active safe-read query finishes in a transport failure such as `Network request failed.` or `Failed to fetch`, reports an `app-recoverable` banner with a `Retry` action that refetches that exact query. Normal HTTP validation and application errors stay local to the screen.
|
|
578
578
|
|
|
579
|
-
|
|
579
|
+
That recovery path is intentionally a safe `GET`/`HEAD` read refetch system, not a general HTTP replay system. User-visible reads should go through Query-backed JSKIT primitives such as `useEndpointResource()`, `useList()`, `useView()`, `useAddEdit()`, or generated CRUD screen composables. Those primitives mark Query entries with `jskit.requestRecoveryMethod`, so the shell only offers Retry for safe reads. Do not catch raw `fetch(...)` failures in each panel just to call the shell recovery runtime manually.
|
|
580
|
+
|
|
581
|
+
For a custom endpoint read, attach the recovery label to the Query-backed resource:
|
|
580
582
|
|
|
581
583
|
```js
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
584
|
+
const projectAccess = useEndpointResource({
|
|
585
|
+
queryKey: ["project-access", projectId],
|
|
586
|
+
path: `/api/projects/${projectId}/access`,
|
|
587
|
+
requestRecoveryLabel: "Project access"
|
|
588
|
+
});
|
|
589
|
+
```
|
|
590
|
+
|
|
591
|
+
If you need lower-level Query options, the same metadata can live on query meta:
|
|
592
|
+
|
|
593
|
+
```js
|
|
594
|
+
const projectAccess = useEndpointResource({
|
|
595
|
+
queryKey: ["project-access", projectId],
|
|
596
|
+
path: `/api/projects/${projectId}/access`,
|
|
597
|
+
queryOptions: {
|
|
598
|
+
meta: {
|
|
599
|
+
jskit: {
|
|
600
|
+
requestRecoveryLabel: "Project access",
|
|
601
|
+
requestRecoveryMethod: "GET"
|
|
602
|
+
}
|
|
603
|
+
}
|
|
595
604
|
}
|
|
596
|
-
}
|
|
605
|
+
});
|
|
606
|
+
```
|
|
607
|
+
|
|
608
|
+
For JSKIT read-composable screens, the default is automatic. Hand-written TanStack Query reads outside those composables must set `meta.jskit.requestRecoveryMethod` to `GET` or `HEAD`; unmarked queries are ignored by the shell recovery observer. Set `meta: { jskit: { requestRecovery: false } }` only when a query deliberately owns its entire connectivity recovery UI.
|
|
609
|
+
|
|
610
|
+
Writes are different. JSKIT does not automatically replay `POST`, `PATCH`, `PUT`, or `DELETE` after a network failure because the server may already have received the request. Save and command screens keep ownership of mutation state, field errors, conflict handling, and user feedback.
|
|
611
|
+
|
|
612
|
+
Some apps need API URLs to be scoped by the active route before the browser request is sent. Configure that once at app startup instead of replacing `fetchImpl` in a local transport wrapper:
|
|
613
|
+
|
|
614
|
+
```js
|
|
615
|
+
import { configureUsersWebHttpClient } from "@jskit-ai/users-web/client/lib/httpClient";
|
|
616
|
+
|
|
617
|
+
configureUsersWebHttpClient({
|
|
618
|
+
csrf: {
|
|
619
|
+
enabled: false
|
|
620
|
+
},
|
|
621
|
+
resolveRequestUrl(url, context) {
|
|
622
|
+
if (!url.startsWith("/api/")) {
|
|
623
|
+
return url;
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
const projectSlug = readProjectSlugFromAppRoute();
|
|
627
|
+
return url.replace(/^\/api\//u, `/api/app/${encodeURIComponent(projectSlug)}/`);
|
|
628
|
+
}
|
|
629
|
+
});
|
|
597
630
|
```
|
|
598
631
|
|
|
599
|
-
`
|
|
632
|
+
Call `configureUsersWebHttpClient()` before Vue mounts or before JSKIT composables are created. The resolver can close over the app router/store when it needs route data, and the `context` argument carries request details such as `originalUrl`, `method`, `requestOptions`, and whether the request is a stream. After configuration, normal `useEndpointResource()`, `useList()`, `useView()`, `useAddEdit()`, and `useCommand()` calls use the configured client. `resolveRequestUrl` runs after JSKIT adds query strings and before the underlying browser `fetch`, so request recovery metadata, JSON:API transport, credentials, CSRF, and command feedback stay on the standard path.
|
|
600
633
|
|
|
601
|
-
For
|
|
634
|
+
For packages that create their own client, use the same lower-level hook directly:
|
|
635
|
+
|
|
636
|
+
```js
|
|
637
|
+
import { createTransientRetryHttpClient } from "@jskit-ai/http-runtime/client";
|
|
638
|
+
|
|
639
|
+
const studioHttpClient = createTransientRetryHttpClient({
|
|
640
|
+
credentials: "include",
|
|
641
|
+
csrf: {
|
|
642
|
+
enabled: false
|
|
643
|
+
},
|
|
644
|
+
resolveRequestUrl(url) {
|
|
645
|
+
return scopedStudioApiUrl(url);
|
|
646
|
+
}
|
|
647
|
+
});
|
|
648
|
+
```
|
|
602
649
|
|
|
603
650
|
### The home page talks to the backend
|
|
604
651
|
|
|
@@ -682,6 +682,35 @@ Why this is the standard JSKIT shape:
|
|
|
682
682
|
- The higher-level list, view, add/edit, and command runtimes send requests through the standard HTTP runtime instead of ad hoc request code.
|
|
683
683
|
- The default client runtime uses `usersWebHttpClient`, which already handles credentials and CSRF token behavior.
|
|
684
684
|
- `useEndpointResource()` gives the shared endpoint primitive for loading, saving, and standard load/save error handling. Higher-level runtimes like `useCommand()` and `useAddEdit()` layer UI feedback and field-error behavior on top of that primitive.
|
|
685
|
+
- `shell-web` observes the shared TanStack Query client for recoverable transport failures. Generated CRUD reads and custom reads built with `useEndpointResource()`, `useList()`, `useView()`, or `useAddEdit()` get the shell recovery banner with a Retry action that refetches the failed query.
|
|
686
|
+
- Automatic shell request recovery is only for safe `GET`/`HEAD` read refetches. JSKIT read composables mark Query entries with `jskit.requestRecoveryMethod`, and the shell ignores unmarked or unsafe methods. Do not rely on it to replay `POST`, `PATCH`, `PUT`, or `DELETE`; mutation screens own save state, field errors, and user feedback.
|
|
687
|
+
|
|
688
|
+
When an app needs all JSKIT reads and commands to rewrite API URLs before fetch, configure the users-web HTTP client once instead of passing custom paths or replacing `fetchImpl` in each local helper:
|
|
689
|
+
|
|
690
|
+
```js
|
|
691
|
+
import { configureUsersWebHttpClient } from "@jskit-ai/users-web/client/lib/httpClient";
|
|
692
|
+
|
|
693
|
+
configureUsersWebHttpClient({
|
|
694
|
+
csrf: {
|
|
695
|
+
enabled: false
|
|
696
|
+
},
|
|
697
|
+
resolveRequestUrl(url) {
|
|
698
|
+
return scopedApiUrlForCurrentRoute(url);
|
|
699
|
+
}
|
|
700
|
+
});
|
|
701
|
+
```
|
|
702
|
+
|
|
703
|
+
After that, `useEndpointResource()`, `useList()`, `useView()`, `useAddEdit()`, and `useCommand()` keep their normal call shape. JSKIT still owns Query metadata, request recovery, JSON:API transport, command feedback, credentials, and CSRF behavior. Use `createTransientRetryHttpClient({ resolveRequestUrl })` directly only when a package needs its own separate client instance.
|
|
704
|
+
|
|
705
|
+
When a custom read needs a better recovery banner label, pass it through the read primitive rather than reporting the failure manually:
|
|
706
|
+
|
|
707
|
+
```js
|
|
708
|
+
const resource = useEndpointResource({
|
|
709
|
+
queryKey: ["project-access", projectId],
|
|
710
|
+
path: `/api/projects/${projectId}/access`,
|
|
711
|
+
requestRecoveryLabel: "Project access"
|
|
712
|
+
});
|
|
713
|
+
```
|
|
685
714
|
|
|
686
715
|
If you need a custom scoped endpoint path outside the higher-level runtimes, prefer `usePaths().api(...)` rather than hand-building scoped URLs:
|
|
687
716
|
|
package/package.json
CHANGED
|
@@ -63,14 +63,18 @@ Why this is the standard JSKIT shape:
|
|
|
63
63
|
- `useEndpointResource()` is the shared endpoint primitive for loading, saving, and standard load/save error handling. Higher-level runtimes add UI feedback and field-error handling on top.
|
|
64
64
|
- Use `requestQueryParams` for endpoint query strings on list, view, and add/edit runtimes.
|
|
65
65
|
- Keep `apiUrlTemplate` path-only. Do not put `?include=...` or other query strings in URL templates.
|
|
66
|
+
- If an app needs route-aware API URL rewriting, configure the users-web client once with `configureUsersWebHttpClient({ resolveRequestUrl })` before mounting the app. Do not replace `fetchImpl` just to rewrite paths.
|
|
67
|
+
- `resolveRequestUrl` belongs at the HTTP client boundary. It runs after JSKIT encodes query params and before browser `fetch`, so reads, commands, request recovery metadata, JSON:API transport, credentials, and CSRF behavior stay on the standard path.
|
|
66
68
|
|
|
67
69
|
Error presentation rules:
|
|
68
70
|
|
|
69
71
|
- Resource load failures should stay local to the screen with the runtime's `loadError` state and a retry action.
|
|
70
72
|
- Do not force global banners for ordinary list/view/add-edit load failures; the shell error policy treats `resource-load` as `silent` by default.
|
|
71
|
-
- Transport/connectivity failures are different from ordinary resource-load errors. `shell-web` observes the app QueryClient and reports active query failures such as `Network request failed.` or `Failed to fetch` through request recovery with a `Retry` action.
|
|
72
|
-
-
|
|
73
|
-
-
|
|
73
|
+
- Transport/connectivity failures are different from ordinary resource-load errors. `shell-web` observes the app QueryClient and reports active safe-read query failures such as `Network request failed.` or `Failed to fetch` through request recovery with a `Retry` action that calls `query.refetch()`.
|
|
74
|
+
- User-visible reads should be TanStack Query-backed through `useEndpointResource()`, `useList()`, `useView()`, `useAddEdit()`, or CRUD screen composables. Do not load panel data with raw `fetch(...)` plus manual request recovery reporting.
|
|
75
|
+
- Automatic shell request recovery is for `GET` and `HEAD` read refetches. Do not use it to replay `POST`, `PATCH`, `PUT`, or `DELETE`; saving and command screens own their mutation state and feedback.
|
|
76
|
+
- JSKIT read composables mark their Query entries with `jskit.requestRecoveryMethod`. For hand-written TanStack Query reads outside those composables, set `meta.jskit.requestRecoveryMethod` to `GET` or `HEAD`.
|
|
77
|
+
- Use `requestRecoveryLabel` on JSKIT read composables, or query meta `jskit.requestRecoveryLabel`, when the recovery banner needs a better label. Use `jskit.requestRecovery = false` only when a query owns its full connectivity recovery UI.
|
|
74
78
|
- Use `useUiFeedback()` or `useCommand()` for user-triggered action feedback. Those flows report `action-feedback`, and the app-owned shell error policy decides the channel.
|
|
75
79
|
- Use explicit shell error intents only for exceptional app-level cases: `app-recoverable` for recoverable shell/runtime failures and `blocking` for failures that require user attention.
|
|
76
80
|
|
|
@@ -78,7 +82,9 @@ Avoid:
|
|
|
78
82
|
|
|
79
83
|
- raw `fetch(...)` for standard page or component work
|
|
80
84
|
- page-local HTTP helpers that duplicate JSKIT runtime seams
|
|
85
|
+
- custom `fetchImpl` wrappers whose only job is to rewrite `/api/...` URLs
|
|
81
86
|
- manually concatenating scoped route params into API URLs
|
|
82
87
|
- using a lower-level seam when a higher-level routed CRUD or command runtime already fits
|
|
83
88
|
- smuggling query params into `apiUrlTemplate`
|
|
84
89
|
- reporting routine resource load errors through hand-written global snackbar/banner calls
|
|
90
|
+
- calling `useShellRequestRecoveryRuntime().report(...)` from normal panels just to recover an HTTP read
|
|
@@ -68,6 +68,7 @@ Local functions
|
|
|
68
68
|
- `normalizeMethod(method)`
|
|
69
69
|
- `resolveUnsafeMethods(value)`
|
|
70
70
|
- `resolveFetch()`
|
|
71
|
+
- `normalizeResolvedRequestUrl(value, fallback = "")`
|
|
71
72
|
- `isObjectBody(value)`
|
|
72
73
|
- `isQueryValuePresent(value)`
|
|
73
74
|
- `appendRequestQueryToUrl(url, query = null, transport = null)`
|
|
@@ -374,6 +374,11 @@ Local functions
|
|
|
374
374
|
- `resolveQueryMeta(query = null)`
|
|
375
375
|
- `isRequestRecoveryDisabled(query = null)`
|
|
376
376
|
- `resolveQueryRecoveryLabel(query = null)`
|
|
377
|
+
- `resolveQueryRecoverySource(query = null)`
|
|
378
|
+
- `resolveQueryRecoveryDedupeKey(query = null, fallback = "")`
|
|
379
|
+
- `resolveQueryRecoveryDedupeWindowMs(query = null)`
|
|
380
|
+
- `resolveQueryRecoveryMethod(query = null)`
|
|
381
|
+
- `isSafeQueryRecoveryMethod(query = null)`
|
|
377
382
|
- `isActiveQuery(query = null)`
|
|
378
383
|
- `recoverableQueryError(query = null)`
|
|
379
384
|
- `createQueryRetry(queryClient, query = null)`
|
|
@@ -212,7 +212,7 @@ Local functions
|
|
|
212
212
|
|
|
213
213
|
### `src/client/composables/records/useAddEdit.js`
|
|
214
214
|
Exports
|
|
215
|
-
- `useAddEdit({ ownershipFilter = ROUTE_VISIBILITY_WORKSPACE, surfaceId = "", access = "auto", resource = null, apiSuffix = "", queryKeyFactory = null, viewPermissions = [], savePermissions = [], readMethod = "GET", readEnabled = true, writeMethod = "PATCH", transport = null, placementSource = "users-web.add-edit", fallbackLoadError = "Unable to load resource.", fallbackSaveError = "Unable to save resource.", fieldErrorKeys = [], clearOnRouteChange = true, model, input, mapLoadedToModel, buildRawPayload, buildSavePayload, onSaveSuccess, requestQueryParams = null, recordIdParam = "recordId", routeParams = null, routeRecordId = null, apiUrlTemplate = "", viewUrlTemplate = "", listUrlTemplate = "", saveRecordIdSelector = null, messages = {}, realtime = null, adapter = null } = {})`
|
|
215
|
+
- `useAddEdit({ ownershipFilter = ROUTE_VISIBILITY_WORKSPACE, surfaceId = "", access = "auto", resource = null, apiSuffix = "", queryKeyFactory = null, viewPermissions = [], savePermissions = [], readMethod = "GET", readEnabled = true, writeMethod = "PATCH", client = null, transport = null, requestRecovery = null, requestRecoveryLabel = "Resource", placementSource = "users-web.add-edit", fallbackLoadError = "Unable to load resource.", fallbackSaveError = "Unable to save resource.", fieldErrorKeys = [], clearOnRouteChange = true, model, input, mapLoadedToModel, buildRawPayload, buildSavePayload, onSaveSuccess, requestQueryParams = null, recordIdParam = "recordId", routeParams = null, routeRecordId = null, apiUrlTemplate = "", viewUrlTemplate = "", listUrlTemplate = "", saveRecordIdSelector = null, messages = {}, realtime = null, adapter = null } = {})`
|
|
216
216
|
|
|
217
217
|
### `src/client/composables/records/useCrudAddEdit.js`
|
|
218
218
|
Exports
|
|
@@ -234,11 +234,11 @@ Exports
|
|
|
234
234
|
|
|
235
235
|
### `src/client/composables/records/useList.js`
|
|
236
236
|
Exports
|
|
237
|
-
- `useList({ ownershipFilter = ROUTE_VISIBILITY_WORKSPACE, surfaceId = "", access = "auto", apiSuffix = "", queryKeyFactory = null, viewPermissions = [], readEnabled = true, placementSource = "users-web.list", fallbackLoadError = "Unable to load list.", initialPageParam = null, getNextPageParam, selectItems, transport = null, requestOptions, queryOptions, realtime = null, adapter = null, recordIdParam = "recordId", recordIdSelector = null, viewUrlTemplate = "", editUrlTemplate = "", search = null, queryParams = null, requestQueryParams = null, syncToRoute = false } = {})`
|
|
237
|
+
- `useList({ ownershipFilter = ROUTE_VISIBILITY_WORKSPACE, surfaceId = "", access = "auto", apiSuffix = "", queryKeyFactory = null, viewPermissions = [], readEnabled = true, placementSource = "users-web.list", fallbackLoadError = "Unable to load list.", initialPageParam = null, getNextPageParam, selectItems, client = null, transport = null, requestOptions, queryOptions, requestRecovery, requestRecoveryLabel = "List", realtime = null, adapter = null, recordIdParam = "recordId", recordIdSelector = null, viewUrlTemplate = "", editUrlTemplate = "", search = null, queryParams = null, requestQueryParams = null, syncToRoute = false } = {})`
|
|
238
238
|
|
|
239
239
|
### `src/client/composables/records/useView.js`
|
|
240
240
|
Exports
|
|
241
|
-
- `useView({ resource = null, ownershipFilter = ROUTE_VISIBILITY_WORKSPACE, surfaceId = "", access = "auto", apiSuffix = "", queryKeyFactory = null, viewPermissions = [], readMethod = "GET", readEnabled = true, transport = null, placementSource = "users-web.view", fallbackLoadError = "Unable to load resource.", notFoundStatuses = [404], notFoundMessage = "Record not found.", model, mapLoadedToModel, requestQueryParams = null, recordIdParam = "recordId", routeParams = null, routeRecordId = null, apiUrlTemplate = "", listUrlTemplate = "", editUrlTemplate = "", includeRecordIdInQueryKey = false, realtime = undefined, adapter = null } = {})`
|
|
241
|
+
- `useView({ resource = null, ownershipFilter = ROUTE_VISIBILITY_WORKSPACE, surfaceId = "", access = "auto", apiSuffix = "", queryKeyFactory = null, viewPermissions = [], readMethod = "GET", readEnabled = true, client = null, transport = null, requestRecovery = null, requestRecoveryLabel = "Resource", placementSource = "users-web.view", fallbackLoadError = "Unable to load resource.", notFoundStatuses = [404], notFoundMessage = "Record not found.", model, mapLoadedToModel, requestQueryParams = null, recordIdParam = "recordId", routeParams = null, routeRecordId = null, apiUrlTemplate = "", listUrlTemplate = "", editUrlTemplate = "", includeRecordIdInQueryKey = false, realtime = undefined, adapter = null } = {})`
|
|
242
242
|
|
|
243
243
|
### `src/client/composables/runtime/addEditUiRuntime.js`
|
|
244
244
|
Exports
|
|
@@ -290,7 +290,7 @@ Exports
|
|
|
290
290
|
Exports
|
|
291
291
|
- `buildEndpointReadRequestOptions({ method = "GET", query = null, transport = null } = {})`
|
|
292
292
|
- `buildEndpointWriteRequestOptions({ method = "PATCH", body = undefined, options = null, transport = null } = {})`
|
|
293
|
-
- `useEndpointResource({ queryKey, path = "", enabled = true, client =
|
|
293
|
+
- `useEndpointResource({ queryKey, path = "", enabled = true, client = null, readMethod = "GET", writeMethod = "PATCH", readQuery = null, transport = null, refreshOnPull = false, realtime = null, queryOptions = null, mutationOptions = null, requestRecovery = null, requestRecoveryLabel = "Request", fallbackLoadError = "Unable to load resource.", fallbackSaveError = "Unable to save resource." } = {})`
|
|
294
294
|
Local functions
|
|
295
295
|
- `resolveRequestQuery(value = null)`
|
|
296
296
|
|
|
@@ -303,9 +303,10 @@ Local functions
|
|
|
303
303
|
### `src/client/composables/runtime/useListCore.js`
|
|
304
304
|
Exports
|
|
305
305
|
- `buildListRequestOptions({ requestOptions = null, transport = null, pageParam = null } = {})`
|
|
306
|
-
- `useListCore({ queryKey, path = "", enabled = true, client =
|
|
306
|
+
- `useListCore({ queryKey, path = "", enabled = true, client = null, transport = null, initialPageParam = null, getNextPageParam, selectItems, requestOptions = null, queryOptions = null, requestRecovery = null, requestRecoveryLabel = "List", fallbackLoadError = "Unable to load list." } = {})`
|
|
307
307
|
Local functions
|
|
308
308
|
- `resolveRequestOptionsObject(value = null)`
|
|
309
|
+
- `resolveListRequestMethod(requestOptions = null)`
|
|
309
310
|
|
|
310
311
|
### `src/client/composables/runtime/useUiFeedback.js`
|
|
311
312
|
Exports
|
|
@@ -380,8 +381,21 @@ Exports
|
|
|
380
381
|
|
|
381
382
|
### `src/client/composables/support/resourceLoadStateHelpers.js`
|
|
382
383
|
Exports
|
|
384
|
+
- `buildRequestRecoveryMeta(requestRecovery = null, defaults = {})`
|
|
383
385
|
- `hasResolvedQueryData({ query = null, data = null } = {})`
|
|
384
386
|
- `mergeQueryMeta(queryOptions = null, meta = {})`
|
|
387
|
+
- `mergeRequestRecoveryQueryMeta(queryOptions = null, requestRecovery = null, defaults = {})`
|
|
388
|
+
Local functions
|
|
389
|
+
- `normalizeText(value = "")`
|
|
390
|
+
- `firstNormalizedText(...values)`
|
|
391
|
+
- `firstNonNegativeFiniteNumber(...values)`
|
|
392
|
+
- `normalizePlainObject(value = null)`
|
|
393
|
+
- `normalizeRequestRecoveryInput(requestRecovery = null)`
|
|
394
|
+
- `normalizeRequestRecoveryMethod(value = "")`
|
|
395
|
+
- `isRequestRecoveryMetaDisabled(sourceJskitMeta = {}, sourceMeta = {})`
|
|
396
|
+
- `hasUsableMetaValue(source = {}, key = "")`
|
|
397
|
+
- `hasRequestRecoveryMetaValue(sourceJskitMeta = {}, sourceMeta = {}, key = "")`
|
|
398
|
+
- `resolveRequestRecoveryDefaults(queryOptions = null, defaults = {})`
|
|
385
399
|
|
|
386
400
|
### `src/client/composables/support/routeTemplateHelpers.js`
|
|
387
401
|
Exports
|
|
@@ -431,7 +445,7 @@ Exports
|
|
|
431
445
|
|
|
432
446
|
### `src/client/composables/useCommand.js`
|
|
433
447
|
Exports
|
|
434
|
-
- `useCommand({ ownershipFilter = ROUTE_VISIBILITY_WORKSPACE, surfaceId = "", access = "auto", apiSuffix = "", runPermissions = [], writeMethod = "POST", transport = null, placementSource = "users-web.command", fallbackRunError = "Unable to complete action.", fieldErrorKeys = [], clearOnRouteChange = true, model, input, buildRawPayload, buildCommandPayload, buildCommandOptions, onRunSuccess, onRunError, suppressSuccessMessage = false, messages = {}, realtime = null } = {})`
|
|
448
|
+
- `useCommand({ ownershipFilter = ROUTE_VISIBILITY_WORKSPACE, surfaceId = "", access = "auto", apiSuffix = "", runPermissions = [], writeMethod = "POST", client = null, transport = null, placementSource = "users-web.command", fallbackRunError = "Unable to complete action.", fieldErrorKeys = [], clearOnRouteChange = true, model, input, buildRawPayload, buildCommandPayload, buildCommandOptions, onRunSuccess, onRunError, suppressSuccessMessage = false, messages = {}, realtime = null } = {})`
|
|
435
449
|
|
|
436
450
|
### `src/client/composables/useCrudAddEditScreen.js`
|
|
437
451
|
Exports
|
|
@@ -472,13 +486,13 @@ Local functions
|
|
|
472
486
|
|
|
473
487
|
### `src/client/composables/useCrudListScreen.js`
|
|
474
488
|
Exports
|
|
475
|
-
- `useCrudListScreen({ adapter = null, resource = null, resourceNamespace = "resource", apiSuffix = "", recordIdParam = "recordId", recordIdSelector = null, titleFallbackFieldKey = "", viewUrlTemplate = "", editUrlTemplate = "", newUrlTemplate = "", recordChangedEvents = [], listFilters = {}, listBulkActions = [], routeQueryBlacklist = Object.freeze(["include", "cursor", "limit"]), fallbackLoadError = "Unable to load records." } = {})`
|
|
489
|
+
- `useCrudListScreen({ adapter = null, resource = null, resourceNamespace = "resource", apiSuffix = "", recordIdParam = "recordId", recordIdSelector = null, titleFallbackFieldKey = "", viewUrlTemplate = "", editUrlTemplate = "", newUrlTemplate = "", recordChangedEvents = [], listFilters = {}, listBulkActions = [], routeQueryBlacklist = Object.freeze(["include", "cursor", "limit"]), requestRecoveryLabel = "Records", fallbackLoadError = "Unable to load records." } = {})`
|
|
476
490
|
Local functions
|
|
477
491
|
- `formatCrudListCardValue(value)`
|
|
478
492
|
|
|
479
493
|
### `src/client/composables/useCrudViewScreen.js`
|
|
480
494
|
Exports
|
|
481
|
-
- `useCrudViewScreen({ adapter = null, resource = null, resourceNamespace = "resource", apiUrlTemplate = "", recordIdParam = "recordId", titleFallbackFieldKey = "", listUrlTemplate = "", editUrlTemplate = "", recordChangedEvent = "", fallbackLoadError = "Unable to load record.", notFoundMessage = "Record not found." } = {})`
|
|
495
|
+
- `useCrudViewScreen({ adapter = null, resource = null, resourceNamespace = "resource", apiUrlTemplate = "", recordIdParam = "recordId", titleFallbackFieldKey = "", listUrlTemplate = "", editUrlTemplate = "", recordChangedEvent = "", requestRecoveryLabel = "Record", fallbackLoadError = "Unable to load record.", notFoundMessage = "Record not found." } = {})`
|
|
482
496
|
|
|
483
497
|
### `src/client/composables/usePagedCollection.js`
|
|
484
498
|
Exports
|
|
@@ -553,7 +567,13 @@ Exports
|
|
|
553
567
|
|
|
554
568
|
### `src/client/lib/httpClient.js`
|
|
555
569
|
Exports
|
|
570
|
+
- `configureUsersWebHttpClient(optionsOrClient = {})`
|
|
571
|
+
- `createUsersWebHttpClient(options = {})`
|
|
572
|
+
- `getUsersWebHttpClient()`
|
|
573
|
+
- `resetUsersWebHttpClientForTests()`
|
|
556
574
|
- `usersWebHttpClient`
|
|
575
|
+
Local functions
|
|
576
|
+
- `normalizeOptions(value = null)`
|
|
557
577
|
|
|
558
578
|
### `src/client/lib/permissions.js`
|
|
559
579
|
Exports
|