@uipath/apollo-react 7.2.2 → 7.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/canvas/components/Guardrails/__fixtures__/classifier-questions.fixtures.d.ts +3 -0
- package/dist/canvas/components/Guardrails/__fixtures__/classifier-questions.fixtures.d.ts.map +1 -0
- package/dist/canvas/components/Guardrails/__fixtures__/definitions-wire.fixtures.d.ts +2 -0
- package/dist/canvas/components/Guardrails/__fixtures__/definitions-wire.fixtures.d.ts.map +1 -1
- package/dist/canvas/components/Guardrails/__fixtures__/host-copy-baselines.d.ts.map +1 -1
- package/dist/canvas/components/Guardrails/classifier-custom-questions-editor.cjs +220 -0
- package/dist/canvas/components/Guardrails/classifier-custom-questions-editor.d.ts +13 -0
- package/dist/canvas/components/Guardrails/classifier-custom-questions-editor.d.ts.map +1 -0
- package/dist/canvas/components/Guardrails/classifier-custom-questions-editor.js +186 -0
- package/dist/canvas/components/Guardrails/classifier-question-picker.cjs +316 -0
- package/dist/canvas/components/Guardrails/classifier-question-picker.d.ts +15 -0
- package/dist/canvas/components/Guardrails/classifier-question-picker.d.ts.map +1 -0
- package/dist/canvas/components/Guardrails/classifier-question-picker.js +282 -0
- package/dist/canvas/components/Guardrails/classifier-utils.cjs +139 -0
- package/dist/canvas/components/Guardrails/classifier-utils.d.ts +25 -0
- package/dist/canvas/components/Guardrails/classifier-utils.d.ts.map +1 -0
- package/dist/canvas/components/Guardrails/classifier-utils.js +87 -0
- package/dist/canvas/components/Guardrails/components/classifier-threshold-slider.cjs +98 -0
- package/dist/canvas/components/Guardrails/components/classifier-threshold-slider.d.ts +9 -0
- package/dist/canvas/components/Guardrails/components/classifier-threshold-slider.d.ts.map +1 -0
- package/dist/canvas/components/Guardrails/components/classifier-threshold-slider.js +64 -0
- package/dist/canvas/components/Guardrails/components/parameter-label.d.ts +1 -1
- package/dist/canvas/components/Guardrails/components/parameter-label.d.ts.map +1 -1
- package/dist/canvas/components/Guardrails/definitions-copy.cjs +66 -1
- package/dist/canvas/components/Guardrails/definitions-copy.d.ts +1 -0
- package/dist/canvas/components/Guardrails/definitions-copy.d.ts.map +1 -1
- package/dist/canvas/components/Guardrails/definitions-copy.js +66 -1
- package/dist/canvas/components/Guardrails/definitions-parse.cjs +66 -1
- package/dist/canvas/components/Guardrails/definitions-parse.d.ts +11 -1
- package/dist/canvas/components/Guardrails/definitions-parse.d.ts.map +1 -1
- package/dist/canvas/components/Guardrails/definitions-parse.js +63 -1
- package/dist/canvas/components/Guardrails/definitions-wire.d.ts +11 -0
- package/dist/canvas/components/Guardrails/definitions-wire.d.ts.map +1 -1
- package/dist/canvas/components/Guardrails/guardrail-builder.cjs +12 -4
- package/dist/canvas/components/Guardrails/guardrail-builder.d.ts.map +1 -1
- package/dist/canvas/components/Guardrails/guardrail-builder.js +12 -4
- package/dist/canvas/components/Guardrails/guardrail-validator-form.cjs +4 -1
- package/dist/canvas/components/Guardrails/guardrail-validator-form.d.ts.map +1 -1
- package/dist/canvas/components/Guardrails/guardrail-validator-form.js +4 -1
- package/dist/canvas/components/Guardrails/i18n.cjs +181 -3
- package/dist/canvas/components/Guardrails/i18n.d.ts +39 -0
- package/dist/canvas/components/Guardrails/i18n.d.ts.map +1 -1
- package/dist/canvas/components/Guardrails/i18n.js +168 -2
- package/dist/canvas/components/Guardrails/index.cjs +54 -4
- package/dist/canvas/components/Guardrails/index.d.ts +14 -3
- package/dist/canvas/components/Guardrails/index.d.ts.map +1 -1
- package/dist/canvas/components/Guardrails/index.js +7 -2
- package/dist/canvas/components/Guardrails/use-classifier-guardrail-parameters.cjs +136 -0
- package/dist/canvas/components/Guardrails/use-classifier-guardrail-parameters.d.ts +18 -0
- package/dist/canvas/components/Guardrails/use-classifier-guardrail-parameters.d.ts.map +1 -0
- package/dist/canvas/components/Guardrails/use-classifier-guardrail-parameters.js +102 -0
- package/dist/canvas/components/Guardrails/use-classifier-questions.cjs +97 -0
- package/dist/canvas/components/Guardrails/use-classifier-questions.d.ts +34 -0
- package/dist/canvas/components/Guardrails/use-classifier-questions.d.ts.map +1 -0
- package/dist/canvas/components/Guardrails/use-classifier-questions.js +60 -0
- package/dist/canvas/components/Guardrails/use-guardrail-definitions.cjs +8 -81
- package/dist/canvas/components/Guardrails/use-guardrail-definitions.d.ts +2 -8
- package/dist/canvas/components/Guardrails/use-guardrail-definitions.d.ts.map +1 -1
- package/dist/canvas/components/Guardrails/use-guardrail-definitions.js +9 -82
- package/dist/canvas/components/Guardrails/use-guardrails-request.cjs +133 -0
- package/dist/canvas/components/Guardrails/use-guardrails-request.d.ts +23 -0
- package/dist/canvas/components/Guardrails/use-guardrails-request.d.ts.map +1 -0
- package/dist/canvas/components/Guardrails/use-guardrails-request.js +99 -0
- package/dist/canvas/components/Guardrails/utils.cjs +4 -2
- package/dist/canvas/components/Guardrails/utils.d.ts +4 -1
- package/dist/canvas/components/Guardrails/utils.d.ts.map +1 -1
- package/dist/canvas/components/Guardrails/utils.js +4 -2
- package/dist/canvas/components/Toolbox/ListView.cjs +3 -3
- package/dist/canvas/components/Toolbox/ListView.d.ts +1 -0
- package/dist/canvas/components/Toolbox/ListView.d.ts.map +1 -1
- package/dist/canvas/components/Toolbox/ListView.js +3 -3
- package/dist/canvas/components/Toolbox/SearchBox.cjs +6 -2
- package/dist/canvas/components/Toolbox/SearchBox.d.ts +2 -0
- package/dist/canvas/components/Toolbox/SearchBox.d.ts.map +1 -1
- package/dist/canvas/components/Toolbox/SearchBox.js +7 -3
- package/dist/canvas/components/Toolbox/Toolbox.cjs +9 -2
- package/dist/canvas/components/Toolbox/Toolbox.d.ts.map +1 -1
- package/dist/canvas/components/Toolbox/Toolbox.js +9 -2
- package/dist/canvas/constants.cjs +1 -1
- package/dist/canvas/constants.d.ts +1 -1
- package/dist/canvas/constants.js +1 -1
- package/dist/canvas/locales/en.cjs +1 -1
- package/dist/canvas/locales/en.d.ts.map +1 -1
- package/dist/canvas/locales/en.js +1 -1
- package/dist/canvas/styles/tailwind.canvas.css +1 -1
- package/dist/chat/styles/tailwind.chat.css +1 -1
- package/package.json +1 -1
|
@@ -1,97 +1,24 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useMemo } from "react";
|
|
2
2
|
import { useGuardrailDefinitionCopy } from "./definitions-copy.js";
|
|
3
3
|
import { enrichGuardrailDefinitions } from "./definitions-enrich.js";
|
|
4
4
|
import { parseGuardrailDefinitions } from "./definitions-parse.js";
|
|
5
|
+
import { useGuardrailsRequest } from "./use-guardrails-request.js";
|
|
5
6
|
const GUARDRAIL_DEFINITIONS_PATH = '/api/execution/guardrails/definitions';
|
|
6
7
|
const EMPTY_RESULT = {
|
|
7
8
|
definitions: [],
|
|
8
9
|
invalid: []
|
|
9
10
|
};
|
|
10
|
-
const NOTHING_SETTLED = {
|
|
11
|
-
key: 'none',
|
|
12
|
-
result: EMPTY_RESULT,
|
|
13
|
-
error: null
|
|
14
|
-
};
|
|
15
11
|
function useGuardrailDefinitions(ctx, options = {}) {
|
|
16
12
|
const { definitions: provided, hiddenValidators, copy: copyOverride, enabled: enabledOption = true } = options;
|
|
17
13
|
const linguiCopy = useGuardrailDefinitionCopy();
|
|
18
14
|
const copy = copyOverride ?? linguiCopy;
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
15
|
+
const { data: fetched, loading, error, refetch } = useGuardrailsRequest(ctx, {
|
|
16
|
+
path: GUARDRAIL_DEFINITIONS_PATH,
|
|
17
|
+
endpointName: 'Guardrail definitions',
|
|
18
|
+
parse: parseGuardrailDefinitions,
|
|
19
|
+
empty: EMPTY_RESULT,
|
|
20
|
+
enabled: enabledOption && void 0 === provided
|
|
25
21
|
});
|
|
26
|
-
const request = useMemo(()=>'' === requestKey ? null : JSON.parse(requestKey), [
|
|
27
|
-
requestKey
|
|
28
|
-
]);
|
|
29
|
-
const fetchRef = useRef(ctx?.fetch);
|
|
30
|
-
fetchRef.current = ctx?.fetch;
|
|
31
|
-
const enabled = enabledOption && void 0 === provided && null !== request;
|
|
32
|
-
const [settled, setSettled] = useState(NOTHING_SETTLED);
|
|
33
|
-
const [inFlight, setInFlight] = useState(false);
|
|
34
|
-
const abortRef = useRef(null);
|
|
35
|
-
const isCurrent = enabled && settled.key === requestKey;
|
|
36
|
-
const fetched = isCurrent ? settled.result : EMPTY_RESULT;
|
|
37
|
-
const error = isCurrent ? settled.error : null;
|
|
38
|
-
const loading = enabled && (inFlight || !isCurrent);
|
|
39
|
-
const load = useCallback(async ()=>{
|
|
40
|
-
if (!enabled || null === request) return;
|
|
41
|
-
abortRef.current?.abort();
|
|
42
|
-
const controller = new AbortController();
|
|
43
|
-
abortRef.current = controller;
|
|
44
|
-
const key = requestKey;
|
|
45
|
-
setInFlight(true);
|
|
46
|
-
const base = (request.baseUrl ?? '').replace(/\/$/, '');
|
|
47
|
-
const headers = {
|
|
48
|
-
Accept: 'application/json',
|
|
49
|
-
'X-UiPath-Internal-TenantId': request.tenantId
|
|
50
|
-
};
|
|
51
|
-
if (request.token) headers.Authorization = `Bearer ${request.token}`;
|
|
52
|
-
if (request.accountId) headers['X-UiPath-Internal-AccountId'] = request.accountId;
|
|
53
|
-
Object.assign(headers, request.headers);
|
|
54
|
-
const doFetch = fetchRef.current ?? ((input, init)=>globalThis.fetch(input, init));
|
|
55
|
-
try {
|
|
56
|
-
const response = await doFetch(`${base}${GUARDRAIL_DEFINITIONS_PATH}`, {
|
|
57
|
-
headers,
|
|
58
|
-
signal: controller.signal
|
|
59
|
-
});
|
|
60
|
-
if (!response.ok) throw new Error(`Guardrail definitions API ${response.status} ${response.statusText}`);
|
|
61
|
-
const payload = await response.json();
|
|
62
|
-
if (!controller.signal.aborted) setSettled({
|
|
63
|
-
key,
|
|
64
|
-
result: parseGuardrailDefinitions(payload),
|
|
65
|
-
error: null
|
|
66
|
-
});
|
|
67
|
-
} catch (err) {
|
|
68
|
-
if (err?.name === 'AbortError') return;
|
|
69
|
-
if (!controller.signal.aborted) setSettled((prev)=>({
|
|
70
|
-
key,
|
|
71
|
-
result: prev.key === key ? prev.result : EMPTY_RESULT,
|
|
72
|
-
error: err instanceof Error ? err : new Error(String(err))
|
|
73
|
-
}));
|
|
74
|
-
} finally{
|
|
75
|
-
if (!controller.signal.aborted) setInFlight(false);
|
|
76
|
-
}
|
|
77
|
-
}, [
|
|
78
|
-
enabled,
|
|
79
|
-
request,
|
|
80
|
-
requestKey
|
|
81
|
-
]);
|
|
82
|
-
useEffect(()=>{
|
|
83
|
-
if (!enabled) {
|
|
84
|
-
abortRef.current?.abort();
|
|
85
|
-
setInFlight(false);
|
|
86
|
-
setSettled((prev)=>prev === NOTHING_SETTLED ? prev : NOTHING_SETTLED);
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
load();
|
|
90
|
-
return ()=>abortRef.current?.abort();
|
|
91
|
-
}, [
|
|
92
|
-
enabled,
|
|
93
|
-
load
|
|
94
|
-
]);
|
|
95
22
|
const parsed = useMemo(()=>void 0 === provided ? fetched : parseGuardrailDefinitions(provided), [
|
|
96
23
|
provided,
|
|
97
24
|
fetched
|
|
@@ -115,7 +42,7 @@ function useGuardrailDefinitions(ctx, options = {}) {
|
|
|
115
42
|
inputError: parsed.inputError,
|
|
116
43
|
loading,
|
|
117
44
|
error,
|
|
118
|
-
refetch
|
|
45
|
+
refetch
|
|
119
46
|
};
|
|
120
47
|
}
|
|
121
48
|
export { GUARDRAIL_DEFINITIONS_PATH, useGuardrailDefinitions };
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
5
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: definition[key]
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
})();
|
|
11
|
+
(()=>{
|
|
12
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
13
|
+
})();
|
|
14
|
+
(()=>{
|
|
15
|
+
__webpack_require__.r = (exports1)=>{
|
|
16
|
+
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
17
|
+
value: 'Module'
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
20
|
+
value: true
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
var __webpack_exports__ = {};
|
|
25
|
+
__webpack_require__.r(__webpack_exports__);
|
|
26
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
+
useGuardrailsRequest: ()=>useGuardrailsRequest
|
|
28
|
+
});
|
|
29
|
+
const external_react_namespaceObject = require("react");
|
|
30
|
+
const NOTHING_SETTLED_KEY = 'none';
|
|
31
|
+
function useGuardrailsRequest(ctx, { path, endpointName, parse, empty, enabled: enabledOption }) {
|
|
32
|
+
const requestKey = null === ctx ? '' : JSON.stringify({
|
|
33
|
+
baseUrl: ctx.baseUrl,
|
|
34
|
+
token: ctx.token,
|
|
35
|
+
tenantId: ctx.tenantId,
|
|
36
|
+
accountId: ctx.accountId,
|
|
37
|
+
headers: ctx.headers
|
|
38
|
+
});
|
|
39
|
+
const request = (0, external_react_namespaceObject.useMemo)(()=>'' === requestKey ? null : JSON.parse(requestKey), [
|
|
40
|
+
requestKey
|
|
41
|
+
]);
|
|
42
|
+
const fetchRef = (0, external_react_namespaceObject.useRef)(ctx?.fetch);
|
|
43
|
+
fetchRef.current = ctx?.fetch;
|
|
44
|
+
const enabled = enabledOption && null !== request;
|
|
45
|
+
const nothingSettled = (0, external_react_namespaceObject.useMemo)(()=>({
|
|
46
|
+
key: NOTHING_SETTLED_KEY,
|
|
47
|
+
data: empty,
|
|
48
|
+
error: null
|
|
49
|
+
}), [
|
|
50
|
+
empty
|
|
51
|
+
]);
|
|
52
|
+
const [settled, setSettled] = (0, external_react_namespaceObject.useState)(nothingSettled);
|
|
53
|
+
const [inFlight, setInFlight] = (0, external_react_namespaceObject.useState)(false);
|
|
54
|
+
const abortRef = (0, external_react_namespaceObject.useRef)(null);
|
|
55
|
+
const isCurrent = enabled && settled.key === requestKey;
|
|
56
|
+
const data = isCurrent ? settled.data : empty;
|
|
57
|
+
const error = isCurrent ? settled.error : null;
|
|
58
|
+
const loading = enabled && (inFlight || !isCurrent);
|
|
59
|
+
const load = (0, external_react_namespaceObject.useCallback)(async ()=>{
|
|
60
|
+
if (!enabled || null === request) return;
|
|
61
|
+
abortRef.current?.abort();
|
|
62
|
+
const controller = new AbortController();
|
|
63
|
+
abortRef.current = controller;
|
|
64
|
+
const key = requestKey;
|
|
65
|
+
setInFlight(true);
|
|
66
|
+
const base = (request.baseUrl ?? '').replace(/\/$/, '');
|
|
67
|
+
const headers = {
|
|
68
|
+
Accept: 'application/json',
|
|
69
|
+
'X-UiPath-Internal-TenantId': request.tenantId
|
|
70
|
+
};
|
|
71
|
+
if (request.token) headers.Authorization = `Bearer ${request.token}`;
|
|
72
|
+
if (request.accountId) headers['X-UiPath-Internal-AccountId'] = request.accountId;
|
|
73
|
+
Object.assign(headers, request.headers);
|
|
74
|
+
const doFetch = fetchRef.current ?? ((input, init)=>globalThis.fetch(input, init));
|
|
75
|
+
try {
|
|
76
|
+
const response = await doFetch(`${base}${path}`, {
|
|
77
|
+
headers,
|
|
78
|
+
signal: controller.signal
|
|
79
|
+
});
|
|
80
|
+
if (!response.ok) throw new Error(`${endpointName} API ${response.status} ${response.statusText}`);
|
|
81
|
+
const payload = await response.json();
|
|
82
|
+
if (!controller.signal.aborted) setSettled({
|
|
83
|
+
key,
|
|
84
|
+
data: parse(payload),
|
|
85
|
+
error: null
|
|
86
|
+
});
|
|
87
|
+
} catch (err) {
|
|
88
|
+
if (err?.name === 'AbortError') return;
|
|
89
|
+
if (!controller.signal.aborted) setSettled((prev)=>({
|
|
90
|
+
key,
|
|
91
|
+
data: prev.key === key ? prev.data : empty,
|
|
92
|
+
error: err instanceof Error ? err : new Error(String(err))
|
|
93
|
+
}));
|
|
94
|
+
} finally{
|
|
95
|
+
if (!controller.signal.aborted) setInFlight(false);
|
|
96
|
+
}
|
|
97
|
+
}, [
|
|
98
|
+
enabled,
|
|
99
|
+
request,
|
|
100
|
+
requestKey,
|
|
101
|
+
path,
|
|
102
|
+
endpointName,
|
|
103
|
+
parse,
|
|
104
|
+
empty
|
|
105
|
+
]);
|
|
106
|
+
(0, external_react_namespaceObject.useEffect)(()=>{
|
|
107
|
+
if (!enabled) {
|
|
108
|
+
abortRef.current?.abort();
|
|
109
|
+
setInFlight(false);
|
|
110
|
+
setSettled((prev)=>prev === nothingSettled ? prev : nothingSettled);
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
load();
|
|
114
|
+
return ()=>abortRef.current?.abort();
|
|
115
|
+
}, [
|
|
116
|
+
enabled,
|
|
117
|
+
load,
|
|
118
|
+
nothingSettled
|
|
119
|
+
]);
|
|
120
|
+
return {
|
|
121
|
+
data,
|
|
122
|
+
loading,
|
|
123
|
+
error,
|
|
124
|
+
refetch: load
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
exports.useGuardrailsRequest = __webpack_exports__.useGuardrailsRequest;
|
|
128
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
129
|
+
"useGuardrailsRequest"
|
|
130
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
131
|
+
Object.defineProperty(exports, '__esModule', {
|
|
132
|
+
value: true
|
|
133
|
+
});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface GuardrailDefinitionsRequestContext {
|
|
2
|
+
baseUrl?: string;
|
|
3
|
+
token?: string;
|
|
4
|
+
tenantId: string;
|
|
5
|
+
accountId?: string;
|
|
6
|
+
headers?: Record<string, string>;
|
|
7
|
+
fetch?: typeof fetch;
|
|
8
|
+
}
|
|
9
|
+
interface GuardrailsRequestOptions<T> {
|
|
10
|
+
path: string;
|
|
11
|
+
endpointName: string;
|
|
12
|
+
parse: (payload: unknown) => T;
|
|
13
|
+
empty: T;
|
|
14
|
+
enabled: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare function useGuardrailsRequest<T>(ctx: GuardrailDefinitionsRequestContext | null, { path, endpointName, parse, empty, enabled: enabledOption }: GuardrailsRequestOptions<T>): {
|
|
17
|
+
data: T;
|
|
18
|
+
loading: boolean;
|
|
19
|
+
error: Error | null;
|
|
20
|
+
refetch: () => void;
|
|
21
|
+
};
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=use-guardrails-request.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-guardrails-request.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/Guardrails/use-guardrails-request.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,kCAAkC;IAEjD,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,QAAQ,EAAE,MAAM,CAAC;IAEjB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAED,UAAU,wBAAwB,CAAC,CAAC;IAClC,IAAI,EAAE,MAAM,CAAC;IAEb,YAAY,EAAE,MAAM,CAAC;IAErB,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,CAAC,CAAC;IAC/B,KAAK,EAAE,CAAC,CAAC;IACT,OAAO,EAAE,OAAO,CAAC;CAClB;AAoBD,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,GAAG,EAAE,kCAAkC,GAAG,IAAI,EAC9C,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,wBAAwB,CAAC,CAAC,CAAC,GACxF;IAAE,IAAI,EAAE,CAAC,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,CA0HzE"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
2
|
+
const NOTHING_SETTLED_KEY = 'none';
|
|
3
|
+
function useGuardrailsRequest(ctx, { path, endpointName, parse, empty, enabled: enabledOption }) {
|
|
4
|
+
const requestKey = null === ctx ? '' : JSON.stringify({
|
|
5
|
+
baseUrl: ctx.baseUrl,
|
|
6
|
+
token: ctx.token,
|
|
7
|
+
tenantId: ctx.tenantId,
|
|
8
|
+
accountId: ctx.accountId,
|
|
9
|
+
headers: ctx.headers
|
|
10
|
+
});
|
|
11
|
+
const request = useMemo(()=>'' === requestKey ? null : JSON.parse(requestKey), [
|
|
12
|
+
requestKey
|
|
13
|
+
]);
|
|
14
|
+
const fetchRef = useRef(ctx?.fetch);
|
|
15
|
+
fetchRef.current = ctx?.fetch;
|
|
16
|
+
const enabled = enabledOption && null !== request;
|
|
17
|
+
const nothingSettled = useMemo(()=>({
|
|
18
|
+
key: NOTHING_SETTLED_KEY,
|
|
19
|
+
data: empty,
|
|
20
|
+
error: null
|
|
21
|
+
}), [
|
|
22
|
+
empty
|
|
23
|
+
]);
|
|
24
|
+
const [settled, setSettled] = useState(nothingSettled);
|
|
25
|
+
const [inFlight, setInFlight] = useState(false);
|
|
26
|
+
const abortRef = useRef(null);
|
|
27
|
+
const isCurrent = enabled && settled.key === requestKey;
|
|
28
|
+
const data = isCurrent ? settled.data : empty;
|
|
29
|
+
const error = isCurrent ? settled.error : null;
|
|
30
|
+
const loading = enabled && (inFlight || !isCurrent);
|
|
31
|
+
const load = useCallback(async ()=>{
|
|
32
|
+
if (!enabled || null === request) return;
|
|
33
|
+
abortRef.current?.abort();
|
|
34
|
+
const controller = new AbortController();
|
|
35
|
+
abortRef.current = controller;
|
|
36
|
+
const key = requestKey;
|
|
37
|
+
setInFlight(true);
|
|
38
|
+
const base = (request.baseUrl ?? '').replace(/\/$/, '');
|
|
39
|
+
const headers = {
|
|
40
|
+
Accept: 'application/json',
|
|
41
|
+
'X-UiPath-Internal-TenantId': request.tenantId
|
|
42
|
+
};
|
|
43
|
+
if (request.token) headers.Authorization = `Bearer ${request.token}`;
|
|
44
|
+
if (request.accountId) headers['X-UiPath-Internal-AccountId'] = request.accountId;
|
|
45
|
+
Object.assign(headers, request.headers);
|
|
46
|
+
const doFetch = fetchRef.current ?? ((input, init)=>globalThis.fetch(input, init));
|
|
47
|
+
try {
|
|
48
|
+
const response = await doFetch(`${base}${path}`, {
|
|
49
|
+
headers,
|
|
50
|
+
signal: controller.signal
|
|
51
|
+
});
|
|
52
|
+
if (!response.ok) throw new Error(`${endpointName} API ${response.status} ${response.statusText}`);
|
|
53
|
+
const payload = await response.json();
|
|
54
|
+
if (!controller.signal.aborted) setSettled({
|
|
55
|
+
key,
|
|
56
|
+
data: parse(payload),
|
|
57
|
+
error: null
|
|
58
|
+
});
|
|
59
|
+
} catch (err) {
|
|
60
|
+
if (err?.name === 'AbortError') return;
|
|
61
|
+
if (!controller.signal.aborted) setSettled((prev)=>({
|
|
62
|
+
key,
|
|
63
|
+
data: prev.key === key ? prev.data : empty,
|
|
64
|
+
error: err instanceof Error ? err : new Error(String(err))
|
|
65
|
+
}));
|
|
66
|
+
} finally{
|
|
67
|
+
if (!controller.signal.aborted) setInFlight(false);
|
|
68
|
+
}
|
|
69
|
+
}, [
|
|
70
|
+
enabled,
|
|
71
|
+
request,
|
|
72
|
+
requestKey,
|
|
73
|
+
path,
|
|
74
|
+
endpointName,
|
|
75
|
+
parse,
|
|
76
|
+
empty
|
|
77
|
+
]);
|
|
78
|
+
useEffect(()=>{
|
|
79
|
+
if (!enabled) {
|
|
80
|
+
abortRef.current?.abort();
|
|
81
|
+
setInFlight(false);
|
|
82
|
+
setSettled((prev)=>prev === nothingSettled ? prev : nothingSettled);
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
load();
|
|
86
|
+
return ()=>abortRef.current?.abort();
|
|
87
|
+
}, [
|
|
88
|
+
enabled,
|
|
89
|
+
load,
|
|
90
|
+
nothingSettled
|
|
91
|
+
]);
|
|
92
|
+
return {
|
|
93
|
+
data,
|
|
94
|
+
loading,
|
|
95
|
+
error,
|
|
96
|
+
refetch: load
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
export { useGuardrailsRequest };
|
|
@@ -81,7 +81,8 @@ function normalizeGuardrailParameters(parameters, definitions) {
|
|
|
81
81
|
});
|
|
82
82
|
return changed ? next : parameters;
|
|
83
83
|
}
|
|
84
|
-
function syncMapEnumParameters(parameters, definitions) {
|
|
84
|
+
function syncMapEnumParameters(parameters, definitions, options) {
|
|
85
|
+
const leaveUnset = new Set(options?.leaveUnsetIds);
|
|
85
86
|
const selectionBySourceId = new Map();
|
|
86
87
|
for (const param of parameters)if ('enum-list' === param.$parameterType && Array.isArray(param.value)) selectionBySourceId.set(param.id, param.value);
|
|
87
88
|
const defById = new Map(definitions.map((d)=>[
|
|
@@ -102,7 +103,8 @@ function syncMapEnumParameters(parameters, definitions) {
|
|
|
102
103
|
const synced = {};
|
|
103
104
|
for (const key of allowedKeys){
|
|
104
105
|
const persisted = currentMap[key];
|
|
105
|
-
|
|
106
|
+
if ('number' == typeof persisted && Number.isFinite(persisted)) synced[key] = persisted;
|
|
107
|
+
else if (!leaveUnset.has(param.id)) synced[key] = defaults[key] ?? fallback;
|
|
106
108
|
}
|
|
107
109
|
return {
|
|
108
110
|
...param,
|
|
@@ -2,7 +2,10 @@ import type { GuardrailDetectionScope, GuardrailParameterDefinition, GuardrailVa
|
|
|
2
2
|
export declare function coerceParameterValueToType(value: unknown, paramDef: Pick<GuardrailParameterDefinition, 'type' | 'min'>): GuardrailValidatorParameter['value'];
|
|
3
3
|
export declare function seedGuardrailParameters(definitions: GuardrailParameterDefinition[], existing?: GuardrailValidatorParameter[]): GuardrailValidatorParameter[];
|
|
4
4
|
export declare function normalizeGuardrailParameters(parameters: readonly GuardrailValidatorParameter[], definitions: readonly GuardrailParameterDefinition[]): GuardrailValidatorParameter[];
|
|
5
|
-
export declare function syncMapEnumParameters(parameters: GuardrailValidatorParameter[], definitions: GuardrailParameterDefinition[]): GuardrailValidatorParameter[];
|
|
5
|
+
export declare function syncMapEnumParameters(parameters: GuardrailValidatorParameter[], definitions: GuardrailParameterDefinition[], options?: SyncMapEnumParametersOptions): GuardrailValidatorParameter[];
|
|
6
|
+
export interface SyncMapEnumParametersOptions {
|
|
7
|
+
leaveUnsetIds?: readonly string[];
|
|
8
|
+
}
|
|
6
9
|
export declare function dropEmptyOptionalParameters(parameters: readonly GuardrailValidatorParameter[], definitions: readonly GuardrailParameterDefinition[]): GuardrailValidatorParameter[];
|
|
7
10
|
export declare function getOutOfRangeParameterIds(definitions: readonly GuardrailParameterDefinition[], parameters: readonly GuardrailValidatorParameter[]): string[];
|
|
8
11
|
export declare function getRequiredEmptyParameterIds(definitions: readonly GuardrailParameterDefinition[], parameters: readonly GuardrailValidatorParameter[]): string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/Guardrails/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EACvB,4BAA4B,EAC5B,2BAA2B,EAC5B,MAAM,SAAS,CAAC;AAcjB,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,IAAI,CAAC,4BAA4B,EAAE,MAAM,GAAG,KAAK,CAAC,GAC3D,2BAA2B,CAAC,OAAO,CAAC,CAmBtC;AAQD,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,4BAA4B,EAAE,EAC3C,QAAQ,CAAC,EAAE,2BAA2B,EAAE,GACvC,2BAA2B,EAAE,CAU/B;AAWD,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,SAAS,2BAA2B,EAAE,EAClD,WAAW,EAAE,SAAS,4BAA4B,EAAE,GACnD,2BAA2B,EAAE,CAoB/B;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/Guardrails/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EACvB,4BAA4B,EAC5B,2BAA2B,EAC5B,MAAM,SAAS,CAAC;AAcjB,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,IAAI,CAAC,4BAA4B,EAAE,MAAM,GAAG,KAAK,CAAC,GAC3D,2BAA2B,CAAC,OAAO,CAAC,CAmBtC;AAQD,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,4BAA4B,EAAE,EAC3C,QAAQ,CAAC,EAAE,2BAA2B,EAAE,GACvC,2BAA2B,EAAE,CAU/B;AAWD,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,SAAS,2BAA2B,EAAE,EAClD,WAAW,EAAE,SAAS,4BAA4B,EAAE,GACnD,2BAA2B,EAAE,CAoB/B;AAeD,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,2BAA2B,EAAE,EACzC,WAAW,EAAE,4BAA4B,EAAE,EAC3C,OAAO,CAAC,EAAE,4BAA4B,GACrC,2BAA2B,EAAE,CA6C/B;AAED,MAAM,WAAW,4BAA4B;IAK3C,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAQD,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,SAAS,2BAA2B,EAAE,EAClD,WAAW,EAAE,SAAS,4BAA4B,EAAE,GACnD,2BAA2B,EAAE,CAW/B;AAeD,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,SAAS,4BAA4B,EAAE,EACpD,UAAU,EAAE,SAAS,2BAA2B,EAAE,GACjD,MAAM,EAAE,CA6BV;AAUD,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,SAAS,4BAA4B,EAAE,EACpD,UAAU,EAAE,SAAS,2BAA2B,EAAE,GACjD,MAAM,EAAE,CA+BV;AAED,eAAO,MAAM,sCAAsC,mBAAmB,CAAC;AAQvE,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,SAAS,4BAA4B,EAAE,EACpD,UAAU,EAAE,SAAS,2BAA2B,EAAE,GACjD,uBAAuB,GAAG,SAAS,CAarC"}
|
|
@@ -45,7 +45,8 @@ function normalizeGuardrailParameters(parameters, definitions) {
|
|
|
45
45
|
});
|
|
46
46
|
return changed ? next : parameters;
|
|
47
47
|
}
|
|
48
|
-
function syncMapEnumParameters(parameters, definitions) {
|
|
48
|
+
function syncMapEnumParameters(parameters, definitions, options) {
|
|
49
|
+
const leaveUnset = new Set(options?.leaveUnsetIds);
|
|
49
50
|
const selectionBySourceId = new Map();
|
|
50
51
|
for (const param of parameters)if ('enum-list' === param.$parameterType && Array.isArray(param.value)) selectionBySourceId.set(param.id, param.value);
|
|
51
52
|
const defById = new Map(definitions.map((d)=>[
|
|
@@ -66,7 +67,8 @@ function syncMapEnumParameters(parameters, definitions) {
|
|
|
66
67
|
const synced = {};
|
|
67
68
|
for (const key of allowedKeys){
|
|
68
69
|
const persisted = currentMap[key];
|
|
69
|
-
|
|
70
|
+
if ('number' == typeof persisted && Number.isFinite(persisted)) synced[key] = persisted;
|
|
71
|
+
else if (!leaveUnset.has(param.id)) synced[key] = defaults[key] ?? fallback;
|
|
70
72
|
}
|
|
71
73
|
return {
|
|
72
74
|
...param,
|
|
@@ -290,9 +290,9 @@ const ListItemSkeleton = ()=>/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)
|
|
|
290
290
|
})
|
|
291
291
|
]
|
|
292
292
|
});
|
|
293
|
-
const ListViewInner = /*#__PURE__*/ (0, external_react_namespaceObject.forwardRef)(function({ items, activeIndex = -1, listRef, onItemClick, onItemHover, onScroll, emptyStateMessage = 'No items found', emptyStateIcon = 'search-x', renderEmptyState, isLoading = false, enableSections = true, loadingSkeleton }, ref) {
|
|
293
|
+
const ListViewInner = /*#__PURE__*/ (0, external_react_namespaceObject.forwardRef)(function({ items, activeIndex = -1, listRef, onItemClick, onItemHover, onScroll, emptyStateMessage = 'No items found', emptyStateIcon = 'search-x', renderEmptyState, isLoading = false, searchPending = false, enableSections = true, loadingSkeleton }, ref) {
|
|
294
294
|
const { isDarkMode } = (0, CanvasThemeContext_cjs_namespaceObject.useCanvasTheme)();
|
|
295
|
-
const activeSkeleton = loadingSkeleton ?? (isLoading && 0 === items.length ? true : void 0);
|
|
295
|
+
const activeSkeleton = loadingSkeleton ?? ((isLoading || searchPending) && 0 === items.length ? true : void 0);
|
|
296
296
|
const renderedItems = (0, external_react_namespaceObject.useMemo)(()=>buildRenderedItems(items, enableSections, activeSkeleton), [
|
|
297
297
|
items,
|
|
298
298
|
enableSections,
|
|
@@ -348,7 +348,7 @@ const ListViewInner = /*#__PURE__*/ (0, external_react_namespaceObject.forwardRe
|
|
|
348
348
|
id: "toolbox-listbox",
|
|
349
349
|
className: LIST_SCROLLBAR_CLASS,
|
|
350
350
|
role: "listbox",
|
|
351
|
-
"aria-busy": activeSkeleton ? true : void 0,
|
|
351
|
+
"aria-busy": activeSkeleton || searchPending ? true : void 0,
|
|
352
352
|
listRef: listRef,
|
|
353
353
|
rowProps: rowProps,
|
|
354
354
|
rowComponent: ListViewRow,
|
|
@@ -72,6 +72,7 @@ interface ListViewProps<T extends ListItem> {
|
|
|
72
72
|
emptyStateIcon?: string;
|
|
73
73
|
renderEmptyState?: () => React.ReactElement | null;
|
|
74
74
|
isLoading?: boolean;
|
|
75
|
+
searchPending?: boolean;
|
|
75
76
|
enableSections?: boolean;
|
|
76
77
|
loadingSkeleton?: boolean | ChildrenLoadingSpec;
|
|
77
78
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListView.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/Toolbox/ListView.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAQ,KAAK,iBAAiB,EAA0B,MAAM,cAAc,CAAC;AAMpF,MAAM,WAAW,YAAY;IAI3B,IAAI,CAAC,EAAE,MAAM,CAAC;IAId,GAAG,CAAC,EAAE,MAAM,CAAC;IAIb,SAAS,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CACjC;AAUD,MAAM,MAAM,mBAAmB,GAAG;IAKhC,KAAK,CAAC,EAAE,MAAM,CAAC;IAOf,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,QAAQ,CAAC,CAAC,GAAG,GAAG,IAAI;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,CAAC,CAAC;IACR,OAAO,CAAC,EAAE,MAAM,CAAC;IAKjB,WAAW,CAAC,EAAE,MAAM,CAAC;IAMrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAMhB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,aAAa,CAAC,EAAE,OAAO,CAAC;IAMxB,YAAY,CAAC,EAAE,MAAM,CAAC;IAMtB,YAAY,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAQlF,eAAe,CAAC,EAAE,OAAO,GAAG,mBAAmB,CAAC;CACjD,CAAC;AAEF,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,QAAQ,IACrC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GACxD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GACzB;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAOxB,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAG3C,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAC3C,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,QAAQ,EACpD,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,GACpC,MAAM,CAYR;AAED,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,QAAQ,EACnD,KAAK,EAAE,CAAC,EAAE,EACV,cAAc,EAAE,OAAO,EACvB,eAAe,CAAC,EAAE,OAAO,GAAG,mBAAmB,GAC9C,UAAU,CAAC,CAAC,CAAC,EAAE,CAsEjB;AA4BD,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,QAAQ;IAClD,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;CACjC;AAuKD,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ;IAC3D,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;CAChC;AAED,UAAU,aAAa,CAAC,CAAC,SAAS,QAAQ;IACxC,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IACpD,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;IAChC,QAAQ,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IAChD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IAQxB,gBAAgB,CAAC,EAAE,MAAM,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;IACnD,SAAS,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ListView.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/Toolbox/ListView.tsx"],"names":[],"mappings":"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"}
|
|
@@ -255,9 +255,9 @@ const ListItemSkeleton = ()=>/*#__PURE__*/ jsxs("div", {
|
|
|
255
255
|
})
|
|
256
256
|
]
|
|
257
257
|
});
|
|
258
|
-
const ListViewInner = /*#__PURE__*/ forwardRef(function({ items, activeIndex = -1, listRef, onItemClick, onItemHover, onScroll, emptyStateMessage = 'No items found', emptyStateIcon = 'search-x', renderEmptyState, isLoading = false, enableSections = true, loadingSkeleton }, ref) {
|
|
258
|
+
const ListViewInner = /*#__PURE__*/ forwardRef(function({ items, activeIndex = -1, listRef, onItemClick, onItemHover, onScroll, emptyStateMessage = 'No items found', emptyStateIcon = 'search-x', renderEmptyState, isLoading = false, searchPending = false, enableSections = true, loadingSkeleton }, ref) {
|
|
259
259
|
const { isDarkMode } = useCanvasTheme();
|
|
260
|
-
const activeSkeleton = loadingSkeleton ?? (isLoading && 0 === items.length ? true : void 0);
|
|
260
|
+
const activeSkeleton = loadingSkeleton ?? ((isLoading || searchPending) && 0 === items.length ? true : void 0);
|
|
261
261
|
const renderedItems = useMemo(()=>buildRenderedItems(items, enableSections, activeSkeleton), [
|
|
262
262
|
items,
|
|
263
263
|
enableSections,
|
|
@@ -313,7 +313,7 @@ const ListViewInner = /*#__PURE__*/ forwardRef(function({ items, activeIndex = -
|
|
|
313
313
|
id: "toolbox-listbox",
|
|
314
314
|
className: LIST_SCROLLBAR_CLASS,
|
|
315
315
|
role: "listbox",
|
|
316
|
-
"aria-busy": activeSkeleton ? true : void 0,
|
|
316
|
+
"aria-busy": activeSkeleton || searchPending ? true : void 0,
|
|
317
317
|
listRef: listRef,
|
|
318
318
|
rowProps: rowProps,
|
|
319
319
|
rowComponent: ListViewRow,
|
|
@@ -30,7 +30,7 @@ const jsx_runtime_namespaceObject = require("react/jsx-runtime");
|
|
|
30
30
|
const apollo_wind_namespaceObject = require("@uipath/apollo-wind");
|
|
31
31
|
const external_react_namespaceObject = require("react");
|
|
32
32
|
const icon_registry_cjs_namespaceObject = require("../../utils/icon-registry.cjs");
|
|
33
|
-
const SearchBox_SearchBox = /*#__PURE__*/ (0, external_react_namespaceObject.memo)(function({ value, onChange, clear, placeholder = 'Search...', clearButtonAriaLabel = 'Clear search', inputRef: externalInputRef, clearButtonRef, onNavigationKeyDown, navigateToFirstItem, activeDescendantId }) {
|
|
33
|
+
const SearchBox_SearchBox = /*#__PURE__*/ (0, external_react_namespaceObject.memo)(function({ value, onChange, clear, placeholder = 'Search...', clearButtonAriaLabel = 'Clear search', inputRef: externalInputRef, clearButtonRef, onNavigationKeyDown, navigateToFirstItem, activeDescendantId, pending = false, pendingLabel = 'Searching' }) {
|
|
34
34
|
const internalRef = (0, external_react_namespaceObject.useRef)(null);
|
|
35
35
|
const inputRef = externalInputRef ?? internalRef;
|
|
36
36
|
(0, external_react_namespaceObject.useEffect)(()=>{
|
|
@@ -55,7 +55,11 @@ const SearchBox_SearchBox = /*#__PURE__*/ (0, external_react_namespaceObject.mem
|
|
|
55
55
|
children: [
|
|
56
56
|
/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(apollo_wind_namespaceObject.InputGroupAddon, {
|
|
57
57
|
align: "inline-start",
|
|
58
|
-
children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(
|
|
58
|
+
children: pending ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(apollo_wind_namespaceObject.Spinner, {
|
|
59
|
+
size: "sm",
|
|
60
|
+
label: pendingLabel,
|
|
61
|
+
"data-testid": "toolbox-search-pending"
|
|
62
|
+
}) : /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(icon_registry_cjs_namespaceObject.CanvasIcon, {
|
|
59
63
|
icon: "search",
|
|
60
64
|
size: 16
|
|
61
65
|
})
|
|
@@ -9,6 +9,8 @@ interface SearchBoxProps {
|
|
|
9
9
|
onNavigationKeyDown?: (e: React.KeyboardEvent) => void;
|
|
10
10
|
navigateToFirstItem?: () => void;
|
|
11
11
|
activeDescendantId?: string;
|
|
12
|
+
pending?: boolean;
|
|
13
|
+
pendingLabel?: string;
|
|
12
14
|
}
|
|
13
15
|
export declare const SearchBox: import("react").NamedExoticComponent<SearchBoxProps>;
|
|
14
16
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchBox.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/Toolbox/SearchBox.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SearchBox.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/Toolbox/SearchBox.tsx"],"names":[],"mappings":"AAWA,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IACpD,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IAC3D,mBAAmB,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,KAAK,IAAI,CAAC;IACvD,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;IACjC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAK5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,SAAS,sDAoFpB,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput } from "@uipath/apollo-wind";
|
|
2
|
+
import { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, Spinner } from "@uipath/apollo-wind";
|
|
3
3
|
import { memo, useEffect, useRef } from "react";
|
|
4
4
|
import { CanvasIcon } from "../../utils/icon-registry.js";
|
|
5
|
-
const SearchBox_SearchBox = /*#__PURE__*/ memo(function({ value, onChange, clear, placeholder = 'Search...', clearButtonAriaLabel = 'Clear search', inputRef: externalInputRef, clearButtonRef, onNavigationKeyDown, navigateToFirstItem, activeDescendantId }) {
|
|
5
|
+
const SearchBox_SearchBox = /*#__PURE__*/ memo(function({ value, onChange, clear, placeholder = 'Search...', clearButtonAriaLabel = 'Clear search', inputRef: externalInputRef, clearButtonRef, onNavigationKeyDown, navigateToFirstItem, activeDescendantId, pending = false, pendingLabel = 'Searching' }) {
|
|
6
6
|
const internalRef = useRef(null);
|
|
7
7
|
const inputRef = externalInputRef ?? internalRef;
|
|
8
8
|
useEffect(()=>{
|
|
@@ -27,7 +27,11 @@ const SearchBox_SearchBox = /*#__PURE__*/ memo(function({ value, onChange, clear
|
|
|
27
27
|
children: [
|
|
28
28
|
/*#__PURE__*/ jsx(InputGroupAddon, {
|
|
29
29
|
align: "inline-start",
|
|
30
|
-
children: /*#__PURE__*/ jsx(
|
|
30
|
+
children: pending ? /*#__PURE__*/ jsx(Spinner, {
|
|
31
|
+
size: "sm",
|
|
32
|
+
label: pendingLabel,
|
|
33
|
+
"data-testid": "toolbox-search-pending"
|
|
34
|
+
}) : /*#__PURE__*/ jsx(CanvasIcon, {
|
|
31
35
|
icon: "search",
|
|
32
36
|
size: 16
|
|
33
37
|
})
|
|
@@ -96,6 +96,10 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
|
|
|
96
96
|
id: 'toolbox.search.clear',
|
|
97
97
|
message: 'Clear search'
|
|
98
98
|
});
|
|
99
|
+
const searchPendingLabel = _({
|
|
100
|
+
id: 'toolbox.search.pending',
|
|
101
|
+
message: 'Searching'
|
|
102
|
+
});
|
|
99
103
|
const [items, setItems] = (0, external_react_namespaceObject.useState)(initialItems);
|
|
100
104
|
const [search, setSearch] = (0, external_react_namespaceObject.useState)('');
|
|
101
105
|
const [searchLoading, setSearchLoading] = (0, external_react_namespaceObject.useState)(false);
|
|
@@ -504,7 +508,9 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
|
|
|
504
508
|
clearButtonRef: clearButtonRef,
|
|
505
509
|
onNavigationKeyDown: handleNavigationKeyDown,
|
|
506
510
|
navigateToFirstItem: navigateToFirstItem,
|
|
507
|
-
activeDescendantId: activeDescendantId
|
|
511
|
+
activeDescendantId: activeDescendantId,
|
|
512
|
+
pending: searchLoading,
|
|
513
|
+
pendingLabel: searchPendingLabel
|
|
508
514
|
}),
|
|
509
515
|
/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
|
|
510
516
|
className: "relative flex min-h-[50px] flex-1 flex-col overflow-hidden",
|
|
@@ -512,7 +518,8 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
|
|
|
512
518
|
className: (0, external_utils_index_cjs_namespaceObject.cx)('flex min-h-[50px] flex-1 flex-col', isTransitioning && ENTER_ANIMATION_CLASS[animationDirection]),
|
|
513
519
|
children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_ListView_cjs_namespaceObject.ListView, {
|
|
514
520
|
ref: listViewRef,
|
|
515
|
-
isLoading: awaitingChildren ||
|
|
521
|
+
isLoading: awaitingChildren || loading,
|
|
522
|
+
searchPending: searchLoading,
|
|
516
523
|
items: displayedItems,
|
|
517
524
|
activeIndex: activeIndex,
|
|
518
525
|
listRef: listRef,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Toolbox.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/Toolbox/Toolbox.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAE,KAAK,QAAQ,EAAkD,MAAM,YAAY,CAAC;AAC3F,OAAO,EAAmB,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AA+D7E,MAAM,MAAM,yBAAyB,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IACrD,eAAe,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;CAC/B,KAAK,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;AAEhC,MAAM,MAAM,oBAAoB,CAAC,CAAC,GAAG,GAAG,IAAI,CAC1C,KAAK,EAAE,MAAM,EACb,gBAAgB,EAAE,OAAO,EACzB,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE;IAAE,YAAY,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,KAC5E,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAE5B,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IAQd,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1D,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAC1C,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC;IAKnC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAO3B,YAAY,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAOpC,gBAAgB,CAAC,EAAE,yBAAyB,CAAC,CAAC,CAAC,CAAC;IAOhD,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAgDD,wBAAgB,OAAO,CAAC,CAAC,EAAE,EACzB,OAAO,EACP,MAAM,EACN,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,KAAK,EACL,YAAY,EACZ,OAAO,EACP,SAAiB,EACjB,UAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EAAE,qBAAqB,EACxC,iBAAiB,GAClB,EAAE,YAAY,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"Toolbox.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/Toolbox/Toolbox.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAE,KAAK,QAAQ,EAAkD,MAAM,YAAY,CAAC;AAC3F,OAAO,EAAmB,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AA+D7E,MAAM,MAAM,yBAAyB,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IACrD,eAAe,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;CAC/B,KAAK,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;AAEhC,MAAM,MAAM,oBAAoB,CAAC,CAAC,GAAG,GAAG,IAAI,CAC1C,KAAK,EAAE,MAAM,EACb,gBAAgB,EAAE,OAAO,EACzB,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE;IAAE,YAAY,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,KAC5E,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAE5B,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IAQd,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1D,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAC1C,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC;IAKnC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAO3B,YAAY,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAOpC,gBAAgB,CAAC,EAAE,yBAAyB,CAAC,CAAC,CAAC,CAAC;IAOhD,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAgDD,wBAAgB,OAAO,CAAC,CAAC,EAAE,EACzB,OAAO,EACP,MAAM,EACN,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,KAAK,EACL,YAAY,EACZ,OAAO,EACP,SAAiB,EACjB,UAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EAAE,qBAAqB,EACxC,iBAAiB,GAClB,EAAE,YAAY,CAAC,CAAC,CAAC,2CAukBjB"}
|