@dxos/plugin-automation 0.8.4-main.5ea62a8 → 0.8.4-main.66e292d
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/lib/browser/AutomationPanel-M4M77L4V.mjs +11 -0
- package/dist/lib/browser/AutomationSettings-4HCI6KJR.mjs +68 -0
- package/dist/lib/browser/AutomationSettings-4HCI6KJR.mjs.map +7 -0
- package/dist/lib/browser/FunctionsContainer-CDVBRQCT.mjs +144 -0
- package/dist/lib/browser/FunctionsContainer-CDVBRQCT.mjs.map +7 -0
- package/dist/lib/browser/{FunctionsPanel-I443Y6KB.mjs → FunctionsPanel-CRW6SJUN.mjs} +3 -3
- package/dist/lib/browser/{app-graph-builder-4OFKIRAI.mjs → app-graph-builder-W7LLC6XW.mjs} +12 -11
- package/dist/lib/browser/app-graph-builder-W7LLC6XW.mjs.map +7 -0
- package/dist/lib/browser/chunk-4MBM6C6A.mjs +100 -0
- package/dist/lib/browser/chunk-4MBM6C6A.mjs.map +7 -0
- package/dist/lib/browser/{chunk-S4SM663I.mjs → chunk-7W6QMY3L.mjs} +61 -24
- package/dist/lib/browser/chunk-7W6QMY3L.mjs.map +7 -0
- package/dist/lib/browser/chunk-CZVA5NMD.mjs +14 -0
- package/dist/lib/browser/chunk-CZVA5NMD.mjs.map +7 -0
- package/dist/lib/browser/chunk-LZQFZO3B.mjs +17 -0
- package/dist/lib/browser/chunk-LZQFZO3B.mjs.map +7 -0
- package/dist/lib/browser/{chunk-PUUREQ2B.mjs → chunk-T6ZESHDY.mjs} +75 -27
- package/dist/lib/browser/chunk-T6ZESHDY.mjs.map +7 -0
- package/dist/lib/browser/{chunk-Z5DT4MHW.mjs → chunk-TWWFNOIR.mjs} +30 -15
- package/dist/lib/browser/chunk-TWWFNOIR.mjs.map +7 -0
- package/dist/lib/browser/chunk-XAKZ4ANY.mjs +15 -0
- package/dist/lib/browser/chunk-XAKZ4ANY.mjs.map +7 -0
- package/dist/lib/browser/{chunk-HN7OHFCB.mjs → chunk-YBPJCY3F.mjs} +3 -3
- package/dist/lib/browser/chunk-YBPJCY3F.mjs.map +7 -0
- package/dist/lib/browser/compute-runtime-B4XJVY4Y.mjs +113 -0
- package/dist/lib/browser/compute-runtime-B4XJVY4Y.mjs.map +7 -0
- package/dist/lib/browser/hooks/index.mjs +13 -0
- package/dist/lib/browser/index.mjs +47 -18
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/{intent-resolver-4PSYSQQG.mjs → intent-resolver-5HR7M7T6.mjs} +10 -10
- package/dist/lib/browser/intent-resolver-5HR7M7T6.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-N4ZVZH4O.mjs → react-surface-TKU2EQ5A.mjs} +20 -20
- package/dist/lib/browser/react-surface-TKU2EQ5A.mjs.map +7 -0
- package/dist/lib/browser/types/index.mjs +2 -2
- package/dist/lib/node-esm/{AutomationPanel-KUP2555Y.mjs → AutomationPanel-F5CTC6AT.mjs} +4 -4
- package/dist/lib/node-esm/AutomationSettings-BQLJIFRT.mjs +69 -0
- package/dist/lib/node-esm/AutomationSettings-BQLJIFRT.mjs.map +7 -0
- package/dist/lib/node-esm/FunctionsContainer-ZHHJPQAZ.mjs +145 -0
- package/dist/lib/node-esm/FunctionsContainer-ZHHJPQAZ.mjs.map +7 -0
- package/dist/lib/node-esm/{FunctionsPanel-ELINCXPW.mjs → FunctionsPanel-RVVCS6VH.mjs} +3 -3
- package/dist/lib/node-esm/FunctionsPanel-RVVCS6VH.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-builder-555IHYOB.mjs → app-graph-builder-SLQOO7GH.mjs} +12 -11
- package/dist/lib/node-esm/app-graph-builder-SLQOO7GH.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-3IYSC75Z.mjs +16 -0
- package/dist/lib/node-esm/chunk-3IYSC75Z.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-7B6NAAI6.mjs +101 -0
- package/dist/lib/node-esm/chunk-7B6NAAI6.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-CEVIVRTY.mjs +19 -0
- package/dist/lib/node-esm/chunk-CEVIVRTY.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-ZOJVKPCA.mjs → chunk-CF2SWXPW.mjs} +61 -24
- package/dist/lib/node-esm/chunk-CF2SWXPW.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-OEZNHUL2.mjs → chunk-ECJKIUBO.mjs} +3 -3
- package/dist/lib/node-esm/chunk-ECJKIUBO.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-JU7JA5X4.mjs → chunk-F76XVENA.mjs} +75 -27
- package/dist/lib/node-esm/chunk-F76XVENA.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-KB7NFEYY.mjs +16 -0
- package/dist/lib/node-esm/chunk-KB7NFEYY.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-CX2AILIS.mjs → chunk-RVK52XGK.mjs} +30 -15
- package/dist/lib/node-esm/chunk-RVK52XGK.mjs.map +7 -0
- package/dist/lib/node-esm/compute-runtime-JUWTQXOV.mjs +114 -0
- package/dist/lib/node-esm/compute-runtime-JUWTQXOV.mjs.map +7 -0
- package/dist/lib/node-esm/hooks/index.mjs +14 -0
- package/dist/lib/node-esm/hooks/index.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +47 -18
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/{intent-resolver-6ZGBUILG.mjs → intent-resolver-KDRYB5BC.mjs} +10 -10
- package/dist/lib/node-esm/intent-resolver-KDRYB5BC.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-surface-XE7ILYWA.mjs → react-surface-7QROSEGH.mjs} +20 -20
- package/dist/lib/node-esm/react-surface-7QROSEGH.mjs.map +7 -0
- package/dist/lib/node-esm/types/index.mjs +2 -2
- package/dist/types/src/AutomationPlugin.d.ts +1 -1
- package/dist/types/src/AutomationPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/capabilities.d.ts +20 -0
- package/dist/types/src/capabilities/capabilities.d.ts.map +1 -0
- package/dist/types/src/capabilities/compute-runtime.d.ts +5 -0
- package/dist/types/src/capabilities/compute-runtime.d.ts.map +1 -0
- package/dist/types/src/capabilities/index.d.ts +2 -0
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts +6 -5
- package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts.map +1 -1
- package/dist/types/src/components/AutomationPanel/AutomationPanel.stories.d.ts +5 -1
- package/dist/types/src/components/AutomationPanel/AutomationPanel.stories.d.ts.map +1 -1
- package/dist/types/src/components/AutomationSettings.d.ts +5 -0
- package/dist/types/src/components/AutomationSettings.d.ts.map +1 -0
- package/dist/types/src/components/FunctionsContainer.d.ts.map +1 -1
- package/dist/types/src/components/FunctionsPanel/FunctionsPanel.d.ts.map +1 -1
- package/dist/types/src/components/FunctionsRegistry/FunctionsRegistry.d.ts +8 -0
- package/dist/types/src/components/FunctionsRegistry/FunctionsRegistry.d.ts.map +1 -0
- package/dist/types/src/components/FunctionsRegistry/index.d.ts +2 -0
- package/dist/types/src/components/FunctionsRegistry/index.d.ts.map +1 -0
- package/dist/types/src/components/TriggerEditor/FunctionInputEditor.d.ts +2 -2
- package/dist/types/src/components/TriggerEditor/FunctionInputEditor.d.ts.map +1 -1
- package/dist/types/src/components/TriggerEditor/SpecSelector.d.ts.map +1 -1
- package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts +7 -5
- package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts.map +1 -1
- package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts +9 -4
- package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts.map +1 -1
- package/dist/types/src/components/TriggerSettings.d.ts +6 -0
- package/dist/types/src/components/TriggerSettings.d.ts.map +1 -0
- package/dist/types/src/components/index.d.ts +2 -2
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/events.d.ts +4 -0
- package/dist/types/src/events.d.ts.map +1 -0
- package/dist/types/src/hooks/index.d.ts +3 -0
- package/dist/types/src/hooks/index.d.ts.map +1 -0
- package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts +12 -0
- package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts.map +1 -0
- package/dist/types/src/hooks/useTriggerRuntimeControls.d.ts +11 -0
- package/dist/types/src/hooks/useTriggerRuntimeControls.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +3 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +0 -1
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/testing/test-functions.d.ts +2 -3
- package/dist/types/src/testing/test-functions.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +5 -0
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/schema.d.ts +1 -1
- package/dist/types/src/types/schema.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +61 -38
- package/src/AutomationPlugin.tsx +36 -30
- package/src/capabilities/app-graph-builder.ts +14 -13
- package/src/capabilities/capabilities.ts +41 -0
- package/src/capabilities/compute-runtime.ts +129 -0
- package/src/capabilities/index.ts +3 -0
- package/src/capabilities/intent-resolver.ts +5 -5
- package/src/capabilities/react-surface.tsx +15 -15
- package/src/components/AutomationPanel/AutomationPanel.stories.tsx +7 -11
- package/src/components/AutomationPanel/AutomationPanel.tsx +109 -38
- package/src/components/{AutomationContainer.tsx → AutomationSettings.tsx} +8 -6
- package/src/components/FunctionsContainer.tsx +11 -4
- package/src/components/FunctionsPanel/FunctionsPanel.tsx +35 -16
- package/src/components/FunctionsRegistry/FunctionsRegistry.tsx +127 -0
- package/src/components/FunctionsRegistry/index.ts +5 -0
- package/src/components/TriggerEditor/FunctionInputEditor.tsx +10 -4
- package/src/components/TriggerEditor/SpecSelector.tsx +14 -8
- package/src/components/TriggerEditor/TriggerEditor.stories.tsx +63 -23
- package/src/components/TriggerEditor/TriggerEditor.tsx +45 -19
- package/src/components/TriggerSettings.tsx +25 -0
- package/src/components/index.ts +1 -1
- package/src/events.ts +11 -0
- package/src/hooks/index.ts +6 -0
- package/src/hooks/useComputeRuntimeCallback.ts +68 -0
- package/src/hooks/useTriggerRuntimeControls.ts +53 -0
- package/src/index.ts +3 -0
- package/src/meta.ts +6 -5
- package/src/testing/test-functions.ts +3 -3
- package/src/translations.ts +7 -0
- package/src/types/schema.ts +1 -1
- package/dist/lib/browser/AutomationContainer-A46DB774.mjs +0 -35
- package/dist/lib/browser/AutomationContainer-A46DB774.mjs.map +0 -7
- package/dist/lib/browser/AutomationPanel-TQXXZHLR.mjs +0 -11
- package/dist/lib/browser/FunctionsContainer-U4HASI4P.mjs +0 -36
- package/dist/lib/browser/FunctionsContainer-U4HASI4P.mjs.map +0 -7
- package/dist/lib/browser/app-graph-builder-4OFKIRAI.mjs.map +0 -7
- package/dist/lib/browser/chunk-GW5U2DGT.mjs +0 -15
- package/dist/lib/browser/chunk-GW5U2DGT.mjs.map +0 -7
- package/dist/lib/browser/chunk-HN7OHFCB.mjs.map +0 -7
- package/dist/lib/browser/chunk-IAUUJ5RL.mjs +0 -14
- package/dist/lib/browser/chunk-IAUUJ5RL.mjs.map +0 -7
- package/dist/lib/browser/chunk-PUUREQ2B.mjs.map +0 -7
- package/dist/lib/browser/chunk-S4SM663I.mjs.map +0 -7
- package/dist/lib/browser/chunk-Z5DT4MHW.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-4PSYSQQG.mjs.map +0 -7
- package/dist/lib/browser/react-surface-N4ZVZH4O.mjs.map +0 -7
- package/dist/lib/node-esm/AutomationContainer-5S3BBZVY.mjs +0 -36
- package/dist/lib/node-esm/AutomationContainer-5S3BBZVY.mjs.map +0 -7
- package/dist/lib/node-esm/FunctionsContainer-VZIVURH6.mjs +0 -37
- package/dist/lib/node-esm/FunctionsContainer-VZIVURH6.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-555IHYOB.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-7XZGYNT6.mjs +0 -16
- package/dist/lib/node-esm/chunk-7XZGYNT6.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-CX2AILIS.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-JU7JA5X4.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-NK5N3QKD.mjs +0 -17
- package/dist/lib/node-esm/chunk-NK5N3QKD.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-OEZNHUL2.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-ZOJVKPCA.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-6ZGBUILG.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-XE7ILYWA.mjs.map +0 -7
- package/dist/types/src/components/AutomationContainer.d.ts +0 -5
- package/dist/types/src/components/AutomationContainer.d.ts.map +0 -1
- /package/dist/lib/browser/{AutomationPanel-TQXXZHLR.mjs.map → AutomationPanel-M4M77L4V.mjs.map} +0 -0
- /package/dist/lib/browser/{FunctionsPanel-I443Y6KB.mjs.map → FunctionsPanel-CRW6SJUN.mjs.map} +0 -0
- /package/dist/lib/{node-esm/AutomationPanel-KUP2555Y.mjs.map → browser/hooks/index.mjs.map} +0 -0
- /package/dist/lib/node-esm/{FunctionsPanel-ELINCXPW.mjs.map → AutomationPanel-F5CTC6AT.mjs.map} +0 -0
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
} from "./chunk-
|
|
2
|
+
meta
|
|
3
|
+
} from "./chunk-LZQFZO3B.mjs";
|
|
4
4
|
|
|
5
5
|
// src/components/TriggerEditor/TriggerEditor.tsx
|
|
6
6
|
import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
|
|
7
7
|
import React3, { useCallback as useCallback3, useMemo as useMemo3 } from "react";
|
|
8
8
|
import { ComputeGraph } from "@dxos/conductor";
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import { Filter, Ref as Ref2, useQuery } from "@dxos/react-client/echo";
|
|
12
|
-
import {
|
|
9
|
+
import { DXN } from "@dxos/echo";
|
|
10
|
+
import { Function, Script, Trigger as Trigger2 } from "@dxos/functions";
|
|
11
|
+
import { Filter as Filter2, Ref as Ref2, useQuery } from "@dxos/react-client/echo";
|
|
12
|
+
import { Input } from "@dxos/react-ui";
|
|
13
|
+
import { QueryForm } from "@dxos/react-ui-components";
|
|
14
|
+
import { Form as Form2, InputHeader, SelectInput as SelectInput2, useRefQueryLookupHandler } from "@dxos/react-ui-form";
|
|
13
15
|
|
|
14
16
|
// src/components/TriggerEditor/FunctionInputEditor.tsx
|
|
15
17
|
import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
|
|
@@ -37,7 +39,12 @@ var FunctionInputEditor = ({ functions, getValue, onValueChange, onQueryRefOptio
|
|
|
37
39
|
useOnTransition(
|
|
38
40
|
// Clear function parameter input when the function changes.
|
|
39
41
|
selectedFunctionValue,
|
|
40
|
-
(prevValue) =>
|
|
42
|
+
(prevValue) => {
|
|
43
|
+
if (!Ref.isRef(prevValue) || !Ref.isRef(selectedFunctionValue)) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
return prevValue.dxn.toString() !== selectedFunctionValue.dxn.toString();
|
|
47
|
+
},
|
|
41
48
|
(currValue) => currValue !== void 0,
|
|
42
49
|
() => onValueChange("object", {})
|
|
43
50
|
);
|
|
@@ -76,13 +83,14 @@ var FunctionInputEditor = ({ functions, getValue, onValueChange, onQueryRefOptio
|
|
|
76
83
|
// src/components/TriggerEditor/SpecSelector.tsx
|
|
77
84
|
import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
|
|
78
85
|
import React2, { useCallback as useCallback2, useMemo as useMemo2 } from "react";
|
|
79
|
-
import {
|
|
86
|
+
import { Filter, Query } from "@dxos/echo";
|
|
87
|
+
import { Trigger } from "@dxos/functions";
|
|
80
88
|
import { useTranslation } from "@dxos/react-ui";
|
|
81
89
|
import { SelectInput, useInputProps } from "@dxos/react-ui-form";
|
|
82
90
|
var SpecSelector = (props) => {
|
|
83
91
|
var _effect = _useSignals2();
|
|
84
92
|
try {
|
|
85
|
-
const { t } = useTranslation(
|
|
93
|
+
const { t } = useTranslation(meta.id);
|
|
86
94
|
const specProps = useInputProps([
|
|
87
95
|
"spec"
|
|
88
96
|
]);
|
|
@@ -97,12 +105,14 @@ var SpecSelector = (props) => {
|
|
|
97
105
|
case "subscription":
|
|
98
106
|
return {
|
|
99
107
|
kind: "subscription",
|
|
100
|
-
|
|
108
|
+
query: {
|
|
109
|
+
ast: Query.select(Filter.nothing()).ast
|
|
110
|
+
}
|
|
101
111
|
};
|
|
102
112
|
case "queue":
|
|
103
113
|
return {
|
|
104
114
|
kind: "queue",
|
|
105
|
-
queue: ""
|
|
115
|
+
queue: "dxn:"
|
|
106
116
|
};
|
|
107
117
|
case "email":
|
|
108
118
|
return {
|
|
@@ -124,7 +134,7 @@ var SpecSelector = (props) => {
|
|
|
124
134
|
}, [
|
|
125
135
|
specProps
|
|
126
136
|
]);
|
|
127
|
-
const options = useMemo2(() =>
|
|
137
|
+
const options = useMemo2(() => Trigger.Kinds.map((kind) => ({
|
|
128
138
|
value: kind,
|
|
129
139
|
label: t(`trigger type ${kind}`)
|
|
130
140
|
})), [
|
|
@@ -141,20 +151,26 @@ var SpecSelector = (props) => {
|
|
|
141
151
|
};
|
|
142
152
|
|
|
143
153
|
// src/components/TriggerEditor/TriggerEditor.tsx
|
|
144
|
-
var TriggerEditor = ({ space, trigger, onSave, onCancel }) => {
|
|
154
|
+
var TriggerEditor = ({ space, trigger, readonlySpec, types, tags, onSave, onCancel }) => {
|
|
145
155
|
var _effect = _useSignals3();
|
|
146
156
|
try {
|
|
147
|
-
const handleSave = (values) => {
|
|
157
|
+
const handleSave = ({ id: _, ...values }) => {
|
|
148
158
|
onSave?.(values);
|
|
149
159
|
};
|
|
150
160
|
const handleRefQueryLookup = useRefQueryLookupHandler({
|
|
151
161
|
space
|
|
152
162
|
});
|
|
153
|
-
const Custom = useCustomInputs(
|
|
163
|
+
const Custom = useCustomInputs({
|
|
164
|
+
space,
|
|
165
|
+
readonlySpec,
|
|
166
|
+
types,
|
|
167
|
+
tags,
|
|
168
|
+
onQueryRefOptions: handleRefQueryLookup
|
|
169
|
+
});
|
|
154
170
|
return /* @__PURE__ */ React3.createElement(Form2, {
|
|
155
171
|
outerSpacing: false,
|
|
156
172
|
Custom,
|
|
157
|
-
schema:
|
|
173
|
+
schema: Trigger2.Trigger,
|
|
158
174
|
values: trigger,
|
|
159
175
|
onSave: handleSave,
|
|
160
176
|
onCancel,
|
|
@@ -164,10 +180,10 @@ var TriggerEditor = ({ space, trigger, onSave, onCancel }) => {
|
|
|
164
180
|
_effect.f();
|
|
165
181
|
}
|
|
166
182
|
};
|
|
167
|
-
var useCustomInputs = (space, onQueryRefOptions) => {
|
|
168
|
-
const functions = useQuery(space,
|
|
169
|
-
const workflows = useQuery(space,
|
|
170
|
-
const scripts = useQuery(space,
|
|
183
|
+
var useCustomInputs = ({ space, readonlySpec, types, tags, onQueryRefOptions }) => {
|
|
184
|
+
const functions = useQuery(space, Filter2.type(Function.Function));
|
|
185
|
+
const workflows = useQuery(space, Filter2.type(ComputeGraph));
|
|
186
|
+
const scripts = useQuery(space, Filter2.type(Script.Script));
|
|
171
187
|
return useMemo3(() => ({
|
|
172
188
|
// Function selector.
|
|
173
189
|
["function"]: (props) => {
|
|
@@ -181,7 +197,7 @@ var useCustomInputs = (space, onQueryRefOptions) => {
|
|
|
181
197
|
props
|
|
182
198
|
]);
|
|
183
199
|
const handleOnValueChange = useCallback3((_type, dxnString) => {
|
|
184
|
-
const dxn =
|
|
200
|
+
const dxn = DXN.parse(dxnString);
|
|
185
201
|
if (dxn) {
|
|
186
202
|
const ref = Ref2.fromDXN(dxn);
|
|
187
203
|
props.onValueChange("object", ref);
|
|
@@ -197,7 +213,27 @@ var useCustomInputs = (space, onQueryRefOptions) => {
|
|
|
197
213
|
});
|
|
198
214
|
},
|
|
199
215
|
// Spec selector.
|
|
200
|
-
["spec.kind"]: SpecSelector,
|
|
216
|
+
["spec.kind"]: (props) => /* @__PURE__ */ React3.createElement(SpecSelector, {
|
|
217
|
+
...props,
|
|
218
|
+
readonly: readonlySpec ? "disabled-input" : false
|
|
219
|
+
}),
|
|
220
|
+
// TODO(wittjosiah): Copied from ViewEditor.
|
|
221
|
+
// Query input editor.
|
|
222
|
+
["spec.query"]: (props) => {
|
|
223
|
+
const handleChange = useCallback3((query) => props.onValueChange("object", {
|
|
224
|
+
ast: query.ast
|
|
225
|
+
}), [
|
|
226
|
+
props.onValueChange
|
|
227
|
+
]);
|
|
228
|
+
return /* @__PURE__ */ React3.createElement(Input.Root, null, /* @__PURE__ */ React3.createElement(InputHeader, {
|
|
229
|
+
label: props.label
|
|
230
|
+
}), /* @__PURE__ */ React3.createElement(QueryForm, {
|
|
231
|
+
initialQuery: props.getValue().ast,
|
|
232
|
+
types,
|
|
233
|
+
tags,
|
|
234
|
+
onChange: handleChange
|
|
235
|
+
}));
|
|
236
|
+
},
|
|
201
237
|
// Function input editor.
|
|
202
238
|
["input"]: (props) => /* @__PURE__ */ React3.createElement(FunctionInputEditor, {
|
|
203
239
|
...props,
|
|
@@ -207,7 +243,8 @@ var useCustomInputs = (space, onQueryRefOptions) => {
|
|
|
207
243
|
}), [
|
|
208
244
|
workflows,
|
|
209
245
|
scripts,
|
|
210
|
-
functions
|
|
246
|
+
functions,
|
|
247
|
+
readonlySpec
|
|
211
248
|
]);
|
|
212
249
|
};
|
|
213
250
|
var getWorkflowOptions = (graphs) => {
|
|
@@ -227,4 +264,4 @@ var getFunctionOptions = (scripts, functions) => {
|
|
|
227
264
|
export {
|
|
228
265
|
TriggerEditor
|
|
229
266
|
};
|
|
230
|
-
//# sourceMappingURL=chunk-
|
|
267
|
+
//# sourceMappingURL=chunk-7W6QMY3L.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/TriggerEditor/TriggerEditor.tsx", "../../../src/components/TriggerEditor/FunctionInputEditor.tsx", "../../../src/components/TriggerEditor/SpecSelector.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, useMemo } from 'react';\n\nimport { ComputeGraph } from '@dxos/conductor';\nimport { DXN, type Query } from '@dxos/echo';\nimport { Function, Script, Trigger } from '@dxos/functions';\nimport { Filter, Ref, type Space, useQuery } from '@dxos/react-client/echo';\nimport { Input } from '@dxos/react-ui';\nimport { QueryForm, type QueryFormProps } from '@dxos/react-ui-components';\nimport { type CustomInputMap, Form, InputHeader, SelectInput, useRefQueryLookupHandler } from '@dxos/react-ui-form';\n\nimport { FunctionInputEditor, type FunctionInputEditorProps } from './FunctionInputEditor';\nimport { SpecSelector } from './SpecSelector';\n\nexport type TriggerEditorProps = {\n space: Space;\n trigger: Trigger.Trigger;\n // TODO(wittjosiah): This needs to apply to whole spec but currently only applies to spec.kind & spec.query.\n readonlySpec?: boolean;\n onSave?: (trigger: Omit<Trigger.Trigger, 'id'>) => void;\n onCancel?: () => void;\n} & Pick<QueryFormProps, 'types' | 'tags'>;\n\nexport const TriggerEditor = ({ space, trigger, readonlySpec, types, tags, onSave, onCancel }: TriggerEditorProps) => {\n const handleSave = ({ id: _, ...values }: Trigger.Trigger) => {\n onSave?.(values);\n };\n\n const handleRefQueryLookup = useRefQueryLookupHandler({ space });\n const Custom = useCustomInputs({ space, readonlySpec, types, tags, onQueryRefOptions: handleRefQueryLookup });\n\n return (\n <Form\n outerSpacing={false}\n Custom={Custom}\n schema={Trigger.Trigger}\n values={trigger}\n onSave={handleSave}\n onCancel={onCancel}\n onQueryRefOptions={handleRefQueryLookup}\n />\n );\n};\n\ntype UseCustomInputsProps = {\n space: Space;\n readonlySpec?: boolean;\n onQueryRefOptions: FunctionInputEditorProps['onQueryRefOptions'];\n} & Pick<QueryFormProps, 'types' | 'tags'>;\n\nconst useCustomInputs = ({ space, readonlySpec, types, tags, onQueryRefOptions }: UseCustomInputsProps) => {\n const functions = useQuery(space, Filter.type(Function.Function));\n const workflows = useQuery(space, Filter.type(ComputeGraph));\n const scripts = useQuery(space, Filter.type(Script.Script));\n\n return useMemo(\n (): CustomInputMap => ({\n // Function selector.\n ['function' satisfies keyof Trigger.Trigger]: (props) => {\n const getValue = useCallback(() => {\n const formValue = props.getValue();\n if (Ref.isRef(formValue)) {\n return formValue.dxn.toString() as string;\n }\n return undefined;\n }, [props]);\n\n const handleOnValueChange = useCallback(\n (_type: any, dxnString: string) => {\n const dxn = DXN.parse(dxnString);\n if (dxn) {\n const ref = Ref.fromDXN(dxn);\n props.onValueChange('object', ref);\n }\n },\n [props.onValueChange],\n );\n\n return (\n <SelectInput\n {...props}\n getValue={getValue as any}\n onValueChange={handleOnValueChange}\n options={getWorkflowOptions(workflows).concat(getFunctionOptions(scripts, functions))}\n />\n );\n },\n\n // Spec selector.\n ['spec.kind' as const]: (props) => <SpecSelector {...props} readonly={readonlySpec ? 'disabled-input' : false} />,\n\n // TODO(wittjosiah): Copied from ViewEditor.\n // Query input editor.\n ['spec.query' as const]: (props) => {\n const handleChange = useCallback(\n (query: Query.Any) => props.onValueChange('object', { ast: query.ast }),\n [props.onValueChange],\n );\n\n return (\n <Input.Root>\n <InputHeader label={props.label} />\n <QueryForm initialQuery={(props.getValue() as any).ast} types={types} tags={tags} onChange={handleChange} />\n </Input.Root>\n );\n },\n\n // Function input editor.\n ['input' as const]: (props) => (\n <FunctionInputEditor {...props} functions={functions} onQueryRefOptions={onQueryRefOptions} />\n ),\n }),\n [workflows, scripts, functions, readonlySpec],\n );\n};\n\nconst getWorkflowOptions = (graphs: ComputeGraph[]) => {\n return graphs.map((graph) => ({ label: `compute-${graph.id}`, value: `dxn:echo:@:${graph.id}` }));\n};\n\nconst getFunctionOptions = (scripts: Script.Script[], functions: Function.Function[]) => {\n const getLabel = (fn: Function.Function) => scripts.find((s) => fn.source?.target?.id === s.id)?.name ?? fn.name;\n return functions.map((fn) => ({ label: getLabel(fn), value: `dxn:echo:@:${fn.id}` }));\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, useMemo } from 'react';\n\nimport { Ref, Type } from '@dxos/echo';\nimport { type JsonPath } from '@dxos/echo/internal';\nimport { type Function } from '@dxos/functions';\nimport { useOnTransition } from '@dxos/react-ui';\nimport { Form, type FormInputStateProps, type QueryRefOptions, useFormValues } from '@dxos/react-ui-form';\n\nexport type FunctionInputEditorProps = {\n functions: Function.Function[];\n onQueryRefOptions: QueryRefOptions;\n} & FormInputStateProps;\n\n/**\n * Editor component for function input parameters.\n */\nexport const FunctionInputEditor = ({\n functions,\n getValue,\n onValueChange,\n onQueryRefOptions,\n}: FunctionInputEditorProps) => {\n const selectedFunctionValue = useFormValues(['function' as JsonPath]);\n const selectedFunctionId = useMemo(() => {\n if (Ref.isRef(selectedFunctionValue)) {\n return selectedFunctionValue.dxn.toString().split('dxn:echo:@:').at(1);\n }\n }, [selectedFunctionValue]);\n\n const selectedFunction = useMemo(\n () => functions.find((fn) => fn.id === selectedFunctionId),\n [functions, selectedFunctionId],\n );\n\n useOnTransition(\n // Clear function parameter input when the function changes.\n selectedFunctionValue,\n (prevValue) => {\n if (!Ref.isRef(prevValue) || !Ref.isRef(selectedFunctionValue)) {\n return false;\n }\n\n return prevValue.dxn.toString() !== selectedFunctionValue.dxn.toString();\n },\n (currValue) => currValue !== undefined,\n () => onValueChange('object', {}),\n );\n\n const inputSchema = useMemo(() => selectedFunction?.inputSchema, [selectedFunction]);\n const effectSchema = useMemo(() => (inputSchema ? Type.toEffectSchema(inputSchema) : undefined), [inputSchema]);\n const propertyCount = inputSchema?.properties ? Object.keys(inputSchema.properties).length : 0;\n\n const values = useMemo(() => getValue() ?? {}, [getValue]);\n\n const handleValuesChanged = useCallback(\n (values: any) => {\n onValueChange('object', values);\n },\n [onValueChange],\n );\n\n if (selectedFunction === undefined || effectSchema === undefined || propertyCount === 0) {\n return null;\n }\n\n return (\n <>\n <h3 className='text-md'>Function parameters</h3>\n {/* TODO(ZaymonFC): Try using <FormFields /> internal component for this nesting.\n This would allow errors to flow up to the root context. */}\n <Form\n schema={effectSchema}\n values={values}\n onValuesChanged={handleValuesChanged}\n onQueryRefOptions={onQueryRefOptions}\n outerSpacing={false}\n />\n </>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, useMemo } from 'react';\n\nimport { Filter, Query } from '@dxos/echo';\nimport { Trigger } from '@dxos/functions';\nimport { useTranslation } from '@dxos/react-ui';\nimport { type InputProps, SelectInput, useInputProps } from '@dxos/react-ui-form';\n\nimport { meta } from '../../meta';\n\nexport type SpecSelectorProps = InputProps;\n\nexport const SpecSelector = (props: SpecSelectorProps) => {\n const { t } = useTranslation(meta.id);\n const specProps = useInputProps(['spec' satisfies keyof Trigger.Trigger]);\n\n const handleTypeChange = useCallback(\n (_type: any, value: string): Trigger.Spec | undefined => {\n const getDefaultTriggerSpec = (kind: string) => {\n switch (kind) {\n case 'timer':\n return { kind: 'timer', cron: '' };\n case 'subscription':\n return {\n kind: 'subscription',\n query: {\n ast: Query.select(Filter.nothing()).ast,\n },\n };\n case 'queue':\n return { kind: 'queue', queue: 'dxn:' };\n case 'email':\n return { kind: 'email' };\n case 'webhook':\n return { kind: 'webhook' };\n default:\n return undefined;\n }\n };\n\n const defaultSpec = getDefaultTriggerSpec(value);\n if (!defaultSpec) {\n return;\n }\n\n // Update the entire spec object, not just the `spec.kind`.\n specProps.onValueChange('object', defaultSpec);\n },\n [specProps],\n );\n\n const options = useMemo(\n () =>\n Trigger.Kinds.map((kind) => ({\n value: kind,\n label: t(`trigger type ${kind}`),\n })),\n [t],\n );\n\n return <SelectInput {...props} options={options} onValueChange={handleTypeChange} />;\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["React", "useCallback", "useMemo", "ComputeGraph", "DXN", "Function", "Script", "Trigger", "Filter", "Ref", "useQuery", "Input", "QueryForm", "Form", "InputHeader", "SelectInput", "useRefQueryLookupHandler", "React", "useCallback", "useMemo", "Ref", "Type", "useOnTransition", "Form", "useFormValues", "FunctionInputEditor", "functions", "getValue", "onValueChange", "onQueryRefOptions", "selectedFunctionValue", "useFormValues", "selectedFunctionId", "useMemo", "Ref", "isRef", "dxn", "toString", "split", "at", "selectedFunction", "find", "fn", "id", "useOnTransition", "prevValue", "currValue", "undefined", "inputSchema", "effectSchema", "Type", "toEffectSchema", "propertyCount", "properties", "Object", "keys", "length", "values", "handleValuesChanged", "useCallback", "h3", "className", "Form", "schema", "onValuesChanged", "outerSpacing", "React", "useCallback", "useMemo", "Filter", "Query", "Trigger", "useTranslation", "SelectInput", "useInputProps", "SpecSelector", "props", "t", "useTranslation", "meta", "id", "specProps", "useInputProps", "handleTypeChange", "useCallback", "_type", "value", "getDefaultTriggerSpec", "kind", "cron", "query", "ast", "Query", "select", "Filter", "nothing", "queue", "undefined", "defaultSpec", "onValueChange", "options", "useMemo", "Trigger", "Kinds", "map", "label", "React", "SelectInput", "TriggerEditor", "space", "trigger", "readonlySpec", "types", "tags", "onSave", "onCancel", "handleSave", "id", "_", "values", "handleRefQueryLookup", "useRefQueryLookupHandler", "Custom", "useCustomInputs", "onQueryRefOptions", "React", "Form", "outerSpacing", "schema", "Trigger", "functions", "useQuery", "Filter", "type", "Function", "workflows", "ComputeGraph", "scripts", "Script", "useMemo", "props", "getValue", "useCallback", "formValue", "Ref", "isRef", "dxn", "toString", "undefined", "handleOnValueChange", "_type", "dxnString", "DXN", "parse", "ref", "fromDXN", "onValueChange", "SelectInput", "options", "getWorkflowOptions", "concat", "getFunctionOptions", "SpecSelector", "readonly", "handleChange", "query", "ast", "Input", "Root", "InputHeader", "label", "QueryForm", "initialQuery", "onChange", "FunctionInputEditor", "graphs", "map", "graph", "value", "getLabel", "fn", "find", "s", "source", "target", "name"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// src/components/index.ts
|
|
2
|
+
import { lazy } from "react";
|
|
3
|
+
var AutomationPanel = lazy(() => import("./AutomationPanel-M4M77L4V.mjs"));
|
|
4
|
+
var AutomationSettings = lazy(() => import("./AutomationSettings-4HCI6KJR.mjs"));
|
|
5
|
+
var FunctionsContainer = lazy(() => import("./FunctionsContainer-CDVBRQCT.mjs"));
|
|
6
|
+
var FunctionsPanel = lazy(() => import("./FunctionsPanel-CRW6SJUN.mjs"));
|
|
7
|
+
|
|
8
|
+
export {
|
|
9
|
+
AutomationPanel,
|
|
10
|
+
AutomationSettings,
|
|
11
|
+
FunctionsContainer,
|
|
12
|
+
FunctionsPanel
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=chunk-CZVA5NMD.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/index.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { lazy } from 'react';\n\nexport * from './TriggerEditor';\n\nexport const AutomationPanel = lazy(() => import('./AutomationPanel'));\nexport const AutomationSettings = lazy(() => import('./AutomationSettings'));\nexport const FunctionsContainer = lazy(() => import('./FunctionsContainer'));\nexport const FunctionsPanel = lazy(() => import('./FunctionsPanel'));\n"],
|
|
5
|
+
"mappings": ";AAIA,SAASA,YAAY;AAId,IAAMC,kBAAkBC,KAAK,MAAM,OAAO,gCAAA,CAAA;AAC1C,IAAMC,qBAAqBD,KAAK,MAAM,OAAO,mCAAA,CAAA;AAC7C,IAAME,qBAAqBF,KAAK,MAAM,OAAO,mCAAA,CAAA;AAC7C,IAAMG,iBAAiBH,KAAK,MAAM,OAAO,+BAAA,CAAA;",
|
|
6
|
+
"names": ["lazy", "AutomationPanel", "lazy", "AutomationSettings", "FunctionsContainer", "FunctionsPanel"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// src/meta.ts
|
|
2
|
+
import { trim } from "@dxos/util";
|
|
3
|
+
var meta = {
|
|
4
|
+
id: "dxos.org/plugin/automation",
|
|
5
|
+
name: "Automation",
|
|
6
|
+
description: trim`
|
|
7
|
+
Workflow automation engine that triggers custom actions based on object events and conditions.
|
|
8
|
+
Create automated pipelines that respond to changes and streamline repetitive tasks.
|
|
9
|
+
`,
|
|
10
|
+
icon: "ph--robot--regular",
|
|
11
|
+
source: "https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-automation"
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export {
|
|
15
|
+
meta
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=chunk-LZQFZO3B.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/meta.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\nimport { trim } from '@dxos/util';\n\nexport const meta: PluginMeta = {\n id: 'dxos.org/plugin/automation',\n name: 'Automation',\n description: trim`\n Workflow automation engine that triggers custom actions based on object events and conditions.\n Create automated pipelines that respond to changes and streamline repetitive tasks.\n `,\n icon: 'ph--robot--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-automation',\n};\n"],
|
|
5
|
+
"mappings": ";AAKA,SAASA,YAAY;AAEd,IAAMC,OAAmB;EAC9BC,IAAI;EACJC,MAAM;EACNC,aAAaC;;;;EAIbC,MAAM;EACNC,QAAQ;AACV;",
|
|
6
|
+
"names": ["trim", "meta", "id", "name", "description", "trim", "icon", "source"]
|
|
7
|
+
}
|
|
@@ -1,31 +1,58 @@
|
|
|
1
1
|
import {
|
|
2
2
|
TriggerEditor
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-7W6QMY3L.mjs";
|
|
4
4
|
import {
|
|
5
|
-
|
|
6
|
-
} from "./chunk-
|
|
5
|
+
meta
|
|
6
|
+
} from "./chunk-LZQFZO3B.mjs";
|
|
7
7
|
|
|
8
8
|
// src/components/AutomationPanel/AutomationPanel.tsx
|
|
9
9
|
import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import
|
|
10
|
+
import * as Array from "effect/Array";
|
|
11
|
+
import * as EFn from "effect/Function";
|
|
12
|
+
import * as Match from "effect/Match";
|
|
13
|
+
import * as Schema from "effect/Schema";
|
|
14
|
+
import React, { useMemo, useState } from "react";
|
|
15
|
+
import { Filter, Obj, Tag } from "@dxos/echo";
|
|
16
|
+
import { Function, Script, Trigger } from "@dxos/functions";
|
|
17
|
+
import { useTypeOptions } from "@dxos/plugin-space";
|
|
14
18
|
import { useClient } from "@dxos/react-client";
|
|
15
19
|
import { getSpace, useQuery } from "@dxos/react-client/echo";
|
|
16
20
|
import { Clipboard, IconButton, Input, Separator, useTranslation } from "@dxos/react-ui";
|
|
17
21
|
import { ControlItem, controlItemClasses } from "@dxos/react-ui-form";
|
|
18
22
|
import { List } from "@dxos/react-ui-list";
|
|
19
23
|
import { ghostHover, mx } from "@dxos/react-ui-theme";
|
|
24
|
+
import { Project } from "@dxos/types";
|
|
25
|
+
import { isNonNullable } from "@dxos/util";
|
|
20
26
|
var grid = "grid grid-cols-[40px_1fr_32px] min-bs-[2.5rem]";
|
|
21
|
-
var AutomationPanel = ({ space, object, initialTrigger, onDone }) => {
|
|
27
|
+
var AutomationPanel = ({ classNames, space, object, initialTrigger, onDone }) => {
|
|
22
28
|
var _effect = _useSignals();
|
|
23
29
|
try {
|
|
24
|
-
const { t } = useTranslation(
|
|
30
|
+
const { t } = useTranslation(meta.id);
|
|
25
31
|
const client = useClient();
|
|
26
|
-
const
|
|
27
|
-
const
|
|
28
|
-
const
|
|
32
|
+
const functions = useQuery(space, Filter.type(Function.Function));
|
|
33
|
+
const triggers = useQuery(space, Filter.type(Trigger.Trigger));
|
|
34
|
+
const filteredTriggers = useMemo(() => {
|
|
35
|
+
return object ? triggers.filter(triggerMatch(object)) : triggers;
|
|
36
|
+
}, [
|
|
37
|
+
object,
|
|
38
|
+
triggers
|
|
39
|
+
]);
|
|
40
|
+
const tags = useQuery(space, Filter.type(Tag.Tag));
|
|
41
|
+
const types = useTypeOptions({
|
|
42
|
+
space,
|
|
43
|
+
annotation: {
|
|
44
|
+
location: [
|
|
45
|
+
"database",
|
|
46
|
+
"runtime"
|
|
47
|
+
],
|
|
48
|
+
kind: [
|
|
49
|
+
"user"
|
|
50
|
+
],
|
|
51
|
+
registered: [
|
|
52
|
+
"registered"
|
|
53
|
+
]
|
|
54
|
+
}
|
|
55
|
+
});
|
|
29
56
|
const [trigger, setTrigger] = useState(initialTrigger);
|
|
30
57
|
const [selected, setSelected] = useState();
|
|
31
58
|
const handleSelect = (trigger2) => {
|
|
@@ -33,7 +60,7 @@ var AutomationPanel = ({ space, object, initialTrigger, onDone }) => {
|
|
|
33
60
|
setSelected(trigger2);
|
|
34
61
|
};
|
|
35
62
|
const handleAdd = () => {
|
|
36
|
-
setTrigger(
|
|
63
|
+
setTrigger(Trigger.make({}));
|
|
37
64
|
setSelected(void 0);
|
|
38
65
|
};
|
|
39
66
|
const handleDelete = (trigger2) => {
|
|
@@ -45,7 +72,7 @@ var AutomationPanel = ({ space, object, initialTrigger, onDone }) => {
|
|
|
45
72
|
if (selected) {
|
|
46
73
|
Object.assign(selected, trigger2);
|
|
47
74
|
} else {
|
|
48
|
-
space.db.add(
|
|
75
|
+
space.db.add(Trigger.make(trigger2));
|
|
49
76
|
}
|
|
50
77
|
setTrigger(void 0);
|
|
51
78
|
setSelected(void 0);
|
|
@@ -61,40 +88,43 @@ var AutomationPanel = ({ space, object, initialTrigger, onDone }) => {
|
|
|
61
88
|
}, /* @__PURE__ */ React.createElement(TriggerEditor, {
|
|
62
89
|
space,
|
|
63
90
|
trigger,
|
|
91
|
+
readonlySpec: Boolean(object),
|
|
92
|
+
tags,
|
|
93
|
+
types,
|
|
64
94
|
onSave: handleSave,
|
|
65
95
|
onCancel: handleCancel
|
|
66
96
|
}));
|
|
67
97
|
}
|
|
68
98
|
return /* @__PURE__ */ React.createElement("div", {
|
|
69
|
-
className: controlItemClasses
|
|
70
|
-
},
|
|
71
|
-
items:
|
|
72
|
-
isItem: Schema.is(
|
|
99
|
+
className: mx(controlItemClasses, classNames)
|
|
100
|
+
}, filteredTriggers.length > 0 && /* @__PURE__ */ React.createElement(List.Root, {
|
|
101
|
+
items: filteredTriggers,
|
|
102
|
+
isItem: Schema.is(Trigger.Trigger),
|
|
73
103
|
getId: (field) => field.id
|
|
74
|
-
}, ({ items:
|
|
104
|
+
}, ({ items: filteredTriggers2 }) => /* @__PURE__ */ React.createElement("div", {
|
|
75
105
|
role: "list",
|
|
76
|
-
className: "flex flex-col
|
|
77
|
-
},
|
|
106
|
+
className: "flex flex-col is-full"
|
|
107
|
+
}, filteredTriggers2?.map((trigger2) => {
|
|
78
108
|
const copyAction = getCopyAction(client, trigger2);
|
|
79
109
|
return /* @__PURE__ */ React.createElement(List.Item, {
|
|
80
110
|
key: trigger2.id,
|
|
81
111
|
item: trigger2,
|
|
82
|
-
classNames: mx(grid, ghostHover, "items-center", "
|
|
112
|
+
classNames: mx(grid, ghostHover, "items-center", "pli-2")
|
|
83
113
|
}, /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement(Input.Switch, {
|
|
84
114
|
checked: trigger2.enabled,
|
|
85
115
|
onCheckedChange: (checked) => trigger2.enabled = checked
|
|
86
116
|
})), /* @__PURE__ */ React.createElement("div", {
|
|
87
117
|
className: "flex"
|
|
88
118
|
}, /* @__PURE__ */ React.createElement(List.ItemTitle, {
|
|
89
|
-
classNames: "
|
|
119
|
+
classNames: "pli-1 cursor-pointer is-0 shrink truncate",
|
|
90
120
|
onClick: () => handleSelect(trigger2)
|
|
91
|
-
}, getFunctionName(
|
|
121
|
+
}, getFunctionName(functions, trigger2) ?? "\u2205"), copyAction && /* @__PURE__ */ React.createElement(Clipboard.IconButton, {
|
|
92
122
|
label: t(copyAction.translationKey),
|
|
93
123
|
value: copyAction.contentProvider()
|
|
94
124
|
})), /* @__PURE__ */ React.createElement(List.ItemDeleteButton, {
|
|
95
125
|
onClick: () => handleDelete(trigger2)
|
|
96
126
|
}));
|
|
97
|
-
}))),
|
|
127
|
+
}))), filteredTriggers.length > 0 && /* @__PURE__ */ React.createElement(Separator, {
|
|
98
128
|
classNames: "mlb-4"
|
|
99
129
|
}), /* @__PURE__ */ React.createElement(IconButton, {
|
|
100
130
|
icon: "ph--plus--regular",
|
|
@@ -127,11 +157,29 @@ var getWebhookUrl = (client, trigger) => {
|
|
|
127
157
|
edgeUrl.protocol = isSecure ? "https" : "http";
|
|
128
158
|
return new URL(`/webhook/${spaceId}:${trigger.id}`, edgeUrl).toString();
|
|
129
159
|
};
|
|
130
|
-
var getFunctionName = (
|
|
160
|
+
var getFunctionName = (functions, trigger) => {
|
|
131
161
|
const shortId = trigger.function && `${trigger.function.dxn.toString().slice(0, 16)}\u2026`;
|
|
132
162
|
const functionObject = functions.find((fn) => fn === trigger.function?.target);
|
|
133
163
|
return functionObject?.name ?? shortId;
|
|
134
164
|
};
|
|
165
|
+
var scriptMatch = (script) => (trigger) => {
|
|
166
|
+
const fn = trigger.function?.target;
|
|
167
|
+
if (!Obj.instanceOf(Function.Function, fn)) {
|
|
168
|
+
return false;
|
|
169
|
+
}
|
|
170
|
+
return fn.source?.target === script;
|
|
171
|
+
};
|
|
172
|
+
var projectMatch = (project) => {
|
|
173
|
+
const viewQueries = EFn.pipe(project.columns, Array.map((column) => column.view.target), Array.filter(isNonNullable), Array.map((view) => Obj.getSnapshot(view).query.ast), Array.map((ast) => JSON.stringify(ast)));
|
|
174
|
+
return (trigger) => {
|
|
175
|
+
const spec = Obj.getSnapshot(trigger).spec;
|
|
176
|
+
if (spec?.kind !== "subscription") {
|
|
177
|
+
return false;
|
|
178
|
+
}
|
|
179
|
+
return viewQueries.some((query) => JSON.stringify(spec.query) === query);
|
|
180
|
+
};
|
|
181
|
+
};
|
|
182
|
+
var triggerMatch = Match.type().pipe(Match.withReturnType(), Match.when((obj) => Obj.instanceOf(Script.Script, obj), (obj) => scriptMatch(obj)), Match.when((obj) => Obj.instanceOf(Project.Project, obj), (obj) => projectMatch(obj)), Match.orElse((_obj) => () => true));
|
|
135
183
|
|
|
136
184
|
// src/components/AutomationPanel/index.ts
|
|
137
185
|
var AutomationPanel_default = AutomationPanel;
|
|
@@ -140,4 +188,4 @@ export {
|
|
|
140
188
|
AutomationPanel,
|
|
141
189
|
AutomationPanel_default
|
|
142
190
|
};
|
|
143
|
-
//# sourceMappingURL=chunk-
|
|
191
|
+
//# sourceMappingURL=chunk-T6ZESHDY.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/AutomationPanel/AutomationPanel.tsx", "../../../src/components/AutomationPanel/index.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Array from 'effect/Array';\nimport * as EFn from 'effect/Function';\nimport * as Match from 'effect/Match';\nimport * as Schema from 'effect/Schema';\nimport React, { useMemo, useState } from 'react';\n\nimport { Filter, Obj, Tag } from '@dxos/echo';\nimport { Function, Script, Trigger } from '@dxos/functions';\nimport { useTypeOptions } from '@dxos/plugin-space';\nimport { type Client, useClient } from '@dxos/react-client';\nimport { type Space, getSpace, useQuery } from '@dxos/react-client/echo';\nimport { Clipboard, IconButton, Input, Separator, type ThemedClassName, useTranslation } from '@dxos/react-ui';\nimport { ControlItem, controlItemClasses } from '@dxos/react-ui-form';\nimport { List } from '@dxos/react-ui-list';\nimport { ghostHover, mx } from '@dxos/react-ui-theme';\nimport { Project } from '@dxos/types';\nimport { isNonNullable } from '@dxos/util';\n\nimport { meta } from '../../meta';\nimport { TriggerEditor, type TriggerEditorProps } from '../TriggerEditor';\n\nconst grid = 'grid grid-cols-[40px_1fr_32px] min-bs-[2.5rem]';\n\nexport type AutomationPanelProps = ThemedClassName<{\n space: Space;\n object?: Obj.Any;\n initialTrigger?: Trigger.Trigger;\n onDone?: () => void;\n}>;\n\n// TODO(burdon): Factor out common layout with ViewEditor.\nexport const AutomationPanel = ({ classNames, space, object, initialTrigger, onDone }: AutomationPanelProps) => {\n const { t } = useTranslation(meta.id);\n const client = useClient();\n const functions = useQuery(space, Filter.type(Function.Function));\n const triggers = useQuery(space, Filter.type(Trigger.Trigger));\n const filteredTriggers = useMemo(() => {\n return object ? triggers.filter(triggerMatch(object)) : triggers;\n }, [object, triggers]);\n const tags = useQuery(space, Filter.type(Tag.Tag));\n const types = useTypeOptions({\n space,\n annotation: {\n location: ['database', 'runtime'],\n kind: ['user'],\n registered: ['registered'],\n },\n });\n\n const [trigger, setTrigger] = useState<Trigger.Trigger | undefined>(initialTrigger);\n const [selected, setSelected] = useState<Trigger.Trigger>();\n\n const handleSelect = (trigger: Trigger.Trigger) => {\n setTrigger(trigger);\n setSelected(trigger);\n };\n\n const handleAdd = () => {\n setTrigger(Trigger.make({}));\n setSelected(undefined);\n };\n\n const handleDelete = (trigger: Trigger.Trigger) => {\n space.db.remove(trigger);\n setTrigger(undefined);\n setSelected(undefined);\n };\n\n const handleSave: TriggerEditorProps['onSave'] = (trigger) => {\n if (selected) {\n Object.assign(selected, trigger);\n } else {\n space.db.add(Trigger.make(trigger));\n }\n\n setTrigger(undefined);\n setSelected(undefined);\n onDone?.();\n };\n\n const handleCancel: TriggerEditorProps['onCancel'] = () => {\n setTrigger(undefined);\n onDone?.();\n };\n\n if (trigger) {\n return (\n <ControlItem title={t('trigger editor title')}>\n <TriggerEditor\n space={space}\n trigger={trigger}\n readonlySpec={Boolean(object)}\n tags={tags}\n types={types}\n onSave={handleSave}\n onCancel={handleCancel}\n />\n </ControlItem>\n );\n }\n\n return (\n <div className={mx(controlItemClasses, classNames)}>\n {filteredTriggers.length > 0 && (\n <List.Root<Trigger.Trigger>\n items={filteredTriggers}\n isItem={Schema.is(Trigger.Trigger)}\n getId={(field) => field.id}\n >\n {({ items: filteredTriggers }) => (\n <div role='list' className='flex flex-col is-full'>\n {filteredTriggers?.map((trigger) => {\n const copyAction = getCopyAction(client, trigger);\n return (\n <List.Item<Trigger.Trigger>\n key={trigger.id}\n item={trigger}\n classNames={mx(grid, ghostHover, 'items-center', 'pli-2')}\n >\n <Input.Root>\n <Input.Switch\n checked={trigger.enabled}\n onCheckedChange={(checked) => (trigger.enabled = checked)}\n />\n </Input.Root>\n\n <div className={'flex'}>\n <List.ItemTitle\n classNames='pli-1 cursor-pointer is-0 shrink truncate'\n onClick={() => handleSelect(trigger)}\n >\n {getFunctionName(functions, trigger) ?? '∅'}\n </List.ItemTitle>\n\n {/* TODO: a better way to expose copy action */}\n {copyAction && (\n <Clipboard.IconButton\n label={t(copyAction.translationKey)}\n value={copyAction.contentProvider()}\n />\n )}\n </div>\n\n <List.ItemDeleteButton onClick={() => handleDelete(trigger)} />\n </List.Item>\n );\n })}\n </div>\n )}\n </List.Root>\n )}\n {filteredTriggers.length > 0 && <Separator classNames='mlb-4' />}\n <IconButton icon='ph--plus--regular' label={t('new trigger label')} onClick={handleAdd} />\n </div>\n );\n};\n\nconst getCopyAction = (client: Client, trigger: Trigger.Trigger | undefined) => {\n if (trigger?.spec?.kind === 'email') {\n return { translationKey: 'trigger copy email', contentProvider: () => `${getSpace(trigger)!.id}@dxos.network` };\n }\n\n if (trigger?.spec?.kind === 'webhook') {\n return { translationKey: 'trigger copy url', contentProvider: () => getWebhookUrl(client, trigger) };\n }\n\n return undefined;\n};\n\nconst getWebhookUrl = (client: Client, trigger: Trigger.Trigger) => {\n const spaceId = getSpace(trigger)!.id;\n const edgeUrl = new URL(client.config.values.runtime!.services!.edge!.url!);\n const isSecure = edgeUrl.protocol.startsWith('https') || edgeUrl.protocol.startsWith('wss');\n edgeUrl.protocol = isSecure ? 'https' : 'http';\n return new URL(`/webhook/${spaceId}:${trigger.id}`, edgeUrl).toString();\n};\n\nconst getFunctionName = (functions: Function.Function[], trigger: Trigger.Trigger) => {\n // TODO(wittjosiah): Truncation should be done in the UI.\n // Warning that the List component is currently a can of worms.\n const shortId = trigger.function && `${trigger.function.dxn.toString().slice(0, 16)}…`;\n const functionObject = functions.find((fn) => fn === trigger.function?.target);\n return functionObject?.name ?? shortId;\n};\n\nconst scriptMatch = (script: Script.Script) => (trigger: Trigger.Trigger) => {\n const fn = trigger.function?.target;\n if (!Obj.instanceOf(Function.Function, fn)) {\n return false;\n }\n\n return fn.source?.target === script;\n};\n\nconst projectMatch = (project: Project.Project) => {\n const viewQueries = EFn.pipe(\n project.columns,\n Array.map((column) => column.view.target),\n Array.filter(isNonNullable),\n Array.map((view) => Obj.getSnapshot(view).query.ast),\n Array.map((ast) => JSON.stringify(ast)),\n );\n\n return (trigger: Trigger.Trigger) => {\n const spec = Obj.getSnapshot(trigger).spec;\n if (spec?.kind !== 'subscription') {\n return false;\n }\n\n // TODO(wittjosiah): Implement better way of comparing query ASTs.\n return viewQueries.some((query) => JSON.stringify(spec.query) === query);\n };\n};\n\nconst triggerMatch = Match.type<Obj.Any>().pipe(\n Match.withReturnType<(trigger: Trigger.Trigger) => boolean>(),\n Match.when(\n (obj) => Obj.instanceOf(Script.Script, obj),\n (obj) => scriptMatch(obj),\n ),\n Match.when(\n (obj) => Obj.instanceOf(Project.Project, obj),\n (obj) => projectMatch(obj),\n ),\n Match.orElse((_obj) => () => true),\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { AutomationPanel } from './AutomationPanel';\n\nexport * from './AutomationPanel';\n\nexport default AutomationPanel;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Array", "EFn", "Match", "Schema", "React", "useMemo", "useState", "Filter", "Obj", "Tag", "Function", "Script", "Trigger", "useTypeOptions", "useClient", "getSpace", "useQuery", "Clipboard", "IconButton", "Input", "Separator", "useTranslation", "ControlItem", "controlItemClasses", "List", "ghostHover", "mx", "Project", "isNonNullable", "grid", "AutomationPanel", "classNames", "space", "object", "initialTrigger", "onDone", "t", "useTranslation", "meta", "id", "client", "useClient", "functions", "useQuery", "Filter", "type", "Function", "triggers", "Trigger", "filteredTriggers", "useMemo", "filter", "triggerMatch", "tags", "Tag", "types", "useTypeOptions", "annotation", "location", "kind", "registered", "trigger", "setTrigger", "useState", "selected", "setSelected", "handleSelect", "handleAdd", "make", "undefined", "handleDelete", "db", "remove", "handleSave", "Object", "assign", "add", "handleCancel", "ControlItem", "title", "TriggerEditor", "readonlySpec", "Boolean", "onSave", "onCancel", "div", "className", "mx", "controlItemClasses", "length", "List", "Root", "items", "isItem", "is", "getId", "field", "role", "map", "copyAction", "getCopyAction", "Item", "key", "item", "ghostHover", "Input", "Switch", "checked", "enabled", "onCheckedChange", "ItemTitle", "onClick", "getFunctionName", "Clipboard", "IconButton", "label", "translationKey", "value", "contentProvider", "ItemDeleteButton", "Separator", "icon", "spec", "getSpace", "getWebhookUrl", "spaceId", "edgeUrl", "URL", "config", "values", "runtime", "services", "edge", "url", "isSecure", "protocol", "startsWith", "toString", "shortId", "function", "dxn", "slice", "functionObject", "find", "fn", "target", "name", "scriptMatch", "script", "Obj", "instanceOf", "source", "projectMatch", "project", "viewQueries", "pipe", "columns", "column", "view", "isNonNullable", "getSnapshot", "query", "ast", "JSON", "stringify", "some", "withReturnType", "when", "obj", "Script", "Project", "orElse", "_obj", "AutomationPanel"]
|
|
7
|
+
}
|
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
} from "./chunk-
|
|
2
|
+
meta
|
|
3
|
+
} from "./chunk-LZQFZO3B.mjs";
|
|
4
4
|
|
|
5
5
|
// src/components/FunctionsPanel/FunctionsPanel.tsx
|
|
6
6
|
import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
|
|
7
|
-
import
|
|
7
|
+
import * as Schema from "effect/Schema";
|
|
8
8
|
import React, { useCallback, useMemo } from "react";
|
|
9
|
-
import { LayoutAction, createIntent
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
9
|
+
import { LayoutAction, createIntent } from "@dxos/app-framework";
|
|
10
|
+
import { useIntentDispatcher } from "@dxos/app-framework/react";
|
|
11
|
+
import { Obj } from "@dxos/echo";
|
|
12
|
+
import { Function, Script } from "@dxos/functions";
|
|
13
|
+
import { SpaceAction } from "@dxos/plugin-space/types";
|
|
14
|
+
import { Filter, useQuery } from "@dxos/react-client/echo";
|
|
15
|
+
import { Button, IconButton, useTranslation } from "@dxos/react-ui";
|
|
13
16
|
import { controlItemClasses } from "@dxos/react-ui-form";
|
|
14
17
|
import { List } from "@dxos/react-ui-list";
|
|
15
18
|
import { ghostHover, mx } from "@dxos/react-ui-theme";
|
|
@@ -17,9 +20,9 @@ var grid = "grid grid-cols-[1fr_auto] min-bs-[2.5rem]";
|
|
|
17
20
|
var FunctionsPanel = ({ space }) => {
|
|
18
21
|
var _effect = _useSignals();
|
|
19
22
|
try {
|
|
20
|
-
const { t } = useTranslation(
|
|
21
|
-
const functions = useQuery(space, Filter.type(
|
|
22
|
-
const scripts = useQuery(space, Filter.type(
|
|
23
|
+
const { t } = useTranslation(meta.id);
|
|
24
|
+
const functions = useQuery(space, Filter.type(Function.Function));
|
|
25
|
+
const scripts = useQuery(space, Filter.type(Script.Script));
|
|
23
26
|
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
24
27
|
const functionToScriptMap = useMemo(() => functions.reduce((map, func) => {
|
|
25
28
|
const scriptId = func.source?.target?.id;
|
|
@@ -46,7 +49,7 @@ var FunctionsPanel = ({ space }) => {
|
|
|
46
49
|
void dispatch(createIntent(LayoutAction.Open, {
|
|
47
50
|
part: "main",
|
|
48
51
|
subject: [
|
|
49
|
-
|
|
52
|
+
Obj.getDXN(script).toString()
|
|
50
53
|
]
|
|
51
54
|
}));
|
|
52
55
|
}
|
|
@@ -54,16 +57,23 @@ var FunctionsPanel = ({ space }) => {
|
|
|
54
57
|
functionToScriptMap,
|
|
55
58
|
dispatch
|
|
56
59
|
]);
|
|
60
|
+
const handleDelete = useCallback((func) => dispatch(createIntent(SpaceAction.RemoveObjects, {
|
|
61
|
+
objects: [
|
|
62
|
+
func
|
|
63
|
+
]
|
|
64
|
+
})), [
|
|
65
|
+
dispatch
|
|
66
|
+
]);
|
|
57
67
|
return /* @__PURE__ */ React.createElement("div", {
|
|
58
68
|
role: "none",
|
|
59
69
|
className: mx(controlItemClasses)
|
|
60
70
|
}, functions.length > 0 && /* @__PURE__ */ React.createElement(List.Root, {
|
|
61
71
|
items: functions,
|
|
62
|
-
isItem: Schema.is(
|
|
72
|
+
isItem: Schema.is(Function.Function),
|
|
63
73
|
getId: (func) => func.id
|
|
64
74
|
}, ({ items }) => /* @__PURE__ */ React.createElement("div", {
|
|
65
75
|
role: "list",
|
|
66
|
-
className: "flex flex-col
|
|
76
|
+
className: "flex flex-col is-full"
|
|
67
77
|
}, items?.map((func) => /* @__PURE__ */ React.createElement(List.Item, {
|
|
68
78
|
key: func.id,
|
|
69
79
|
item: func,
|
|
@@ -76,7 +86,12 @@ var FunctionsPanel = ({ space }) => {
|
|
|
76
86
|
className: "text-xs text-description truncate"
|
|
77
87
|
}, getScriptName(func))), functionToScriptMap[func.id] && /* @__PURE__ */ React.createElement(Button, {
|
|
78
88
|
onClick: () => handleGoToScript(func)
|
|
79
|
-
}, t("go to function source button label"))
|
|
89
|
+
}, t("go to function source button label")), /* @__PURE__ */ React.createElement(IconButton, {
|
|
90
|
+
iconOnly: true,
|
|
91
|
+
icon: "ph--trash--regular",
|
|
92
|
+
label: t("delete function button label"),
|
|
93
|
+
onClick: () => handleDelete(func)
|
|
94
|
+
}))))), functions.length === 0 && /* @__PURE__ */ React.createElement("div", {
|
|
80
95
|
className: "text-center plb-4 text-gray-500"
|
|
81
96
|
}, t("no functions found")));
|
|
82
97
|
} finally {
|
|
@@ -91,4 +106,4 @@ export {
|
|
|
91
106
|
FunctionsPanel,
|
|
92
107
|
FunctionsPanel_default
|
|
93
108
|
};
|
|
94
|
-
//# sourceMappingURL=chunk-
|
|
109
|
+
//# sourceMappingURL=chunk-TWWFNOIR.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/FunctionsPanel/FunctionsPanel.tsx", "../../../src/components/FunctionsPanel/index.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport React, { useCallback, useMemo } from 'react';\n\nimport { LayoutAction, createIntent } from '@dxos/app-framework';\nimport { useIntentDispatcher } from '@dxos/app-framework/react';\nimport { Obj } from '@dxos/echo';\nimport { Function, Script } from '@dxos/functions';\nimport { SpaceAction } from '@dxos/plugin-space/types';\nimport { Filter, type Space, useQuery } from '@dxos/react-client/echo';\nimport { Button, IconButton, useTranslation } from '@dxos/react-ui';\nimport { controlItemClasses } from '@dxos/react-ui-form';\nimport { List } from '@dxos/react-ui-list';\nimport { ghostHover, mx } from '@dxos/react-ui-theme';\n\nimport { meta } from '../../meta';\n\nconst grid = 'grid grid-cols-[1fr_auto] min-bs-[2.5rem]';\n\nexport type FunctionsPanelProps = {\n space: Space;\n};\n\nexport const FunctionsPanel = ({ space }: FunctionsPanelProps) => {\n const { t } = useTranslation(meta.id);\n const functions = useQuery(space, Filter.type(Function.Function));\n const scripts = useQuery(space, Filter.type(Script.Script));\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n const functionToScriptMap = useMemo(\n () =>\n functions.reduce(\n (map, func) => {\n const scriptId = func.source?.target?.id;\n if (scriptId) {\n const script = scripts.find((s) => s.id === scriptId);\n if (script) {\n map[func.id] = script;\n }\n }\n return map;\n },\n {} as Record<string, Script.Script>,\n ),\n [functions, scripts],\n );\n\n const getScriptName = useCallback(\n (func: Function.Function) => {\n const script = functionToScriptMap[func.id];\n return script?.name;\n },\n [functionToScriptMap],\n );\n\n const handleGoToScript = useCallback(\n (func: Function.Function) => {\n const script = functionToScriptMap[func.id];\n if (script) {\n void dispatch(\n createIntent(LayoutAction.Open, {\n part: 'main',\n subject: [Obj.getDXN(script).toString()],\n }),\n );\n }\n },\n [functionToScriptMap, dispatch],\n );\n\n const handleDelete = useCallback(\n (func: Function.Function) => dispatch(createIntent(SpaceAction.RemoveObjects, { objects: [func] })),\n [dispatch],\n );\n\n return (\n <div role='none' className={mx(controlItemClasses)}>\n {functions.length > 0 && (\n <List.Root<Function.Function> items={functions} isItem={Schema.is(Function.Function)} getId={(func) => func.id}>\n {({ items }) => (\n <div role='list' className='flex flex-col is-full'>\n {items?.map((func) => (\n <List.Item<Function.Function>\n key={func.id}\n item={func}\n classNames={mx(grid, ghostHover, 'items-center', 'pli-2', 'min-bs-[3rem]')}\n >\n <div className='flex flex-col truncate'>\n <List.ItemTitle classNames='truncate'>{func.name}</List.ItemTitle>\n {getScriptName(func) && (\n <div className='text-xs text-description truncate'>{getScriptName(func)}</div>\n )}\n </div>\n {functionToScriptMap[func.id] && (\n <Button onClick={() => handleGoToScript(func)}>{t('go to function source button label')}</Button>\n )}\n <IconButton\n iconOnly\n icon='ph--trash--regular'\n label={t('delete function button label')}\n onClick={() => handleDelete(func)}\n />\n </List.Item>\n ))}\n </div>\n )}\n </List.Root>\n )}\n\n {functions.length === 0 && <div className='text-center plb-4 text-gray-500'>{t('no functions found')}</div>}\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { FunctionsPanel } from './FunctionsPanel';\n\nexport * from './FunctionsPanel';\nexport default FunctionsPanel;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Schema", "React", "useCallback", "useMemo", "LayoutAction", "createIntent", "useIntentDispatcher", "Obj", "Function", "Script", "SpaceAction", "Filter", "useQuery", "Button", "IconButton", "useTranslation", "controlItemClasses", "List", "ghostHover", "mx", "grid", "FunctionsPanel", "space", "t", "useTranslation", "meta", "id", "functions", "useQuery", "Filter", "type", "Function", "scripts", "Script", "dispatchPromise", "dispatch", "useIntentDispatcher", "functionToScriptMap", "useMemo", "reduce", "map", "func", "scriptId", "source", "target", "script", "find", "s", "getScriptName", "useCallback", "name", "handleGoToScript", "createIntent", "LayoutAction", "Open", "part", "subject", "Obj", "getDXN", "toString", "handleDelete", "SpaceAction", "RemoveObjects", "objects", "div", "role", "className", "mx", "controlItemClasses", "length", "List", "Root", "items", "isItem", "is", "getId", "Item", "key", "item", "classNames", "ghostHover", "ItemTitle", "Button", "onClick", "IconButton", "iconOnly", "icon", "label", "FunctionsPanel"]
|
|
7
|
+
}
|