@dxos/plugin-automation 0.8.4-main.3a94e84 → 0.8.4-main.406dc2a
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-3PHA5FTJ.mjs +11 -0
- package/dist/lib/browser/AutomationSettings-3EYSPFKB.mjs +69 -0
- package/dist/lib/browser/AutomationSettings-3EYSPFKB.mjs.map +7 -0
- package/dist/lib/browser/{FunctionsContainer-IOB333TX.mjs → FunctionsContainer-HHBMPUOD.mjs} +9 -12
- package/dist/lib/browser/FunctionsContainer-HHBMPUOD.mjs.map +7 -0
- package/dist/lib/browser/{FunctionsPanel-56ZKRVM5.mjs → FunctionsPanel-NRIKAPQV.mjs} +3 -3
- package/dist/lib/browser/{app-graph-builder-ZTAUTFI4.mjs → app-graph-builder-DV5HMFX4.mjs} +11 -10
- package/dist/lib/browser/app-graph-builder-DV5HMFX4.mjs.map +7 -0
- package/dist/lib/browser/chunk-5ARH77PV.mjs +15 -0
- package/dist/lib/browser/chunk-5ARH77PV.mjs.map +7 -0
- package/dist/lib/browser/chunk-6TUZQIEN.mjs +14 -0
- package/dist/lib/browser/chunk-6TUZQIEN.mjs.map +7 -0
- package/dist/lib/browser/chunk-DK7BLEKU.mjs +14 -0
- package/dist/lib/browser/chunk-DK7BLEKU.mjs.map +7 -0
- package/dist/lib/browser/{chunk-LYJVTIVD.mjs → chunk-DLLE4FKP.mjs} +6 -6
- package/dist/lib/browser/chunk-DLLE4FKP.mjs.map +7 -0
- package/dist/lib/browser/chunk-MVPRI3DB.mjs +53 -0
- package/dist/lib/browser/chunk-MVPRI3DB.mjs.map +7 -0
- package/dist/lib/browser/{chunk-FSJZXTS2.mjs → chunk-SUKAEYF3.mjs} +69 -32
- package/dist/lib/browser/chunk-SUKAEYF3.mjs.map +7 -0
- package/dist/lib/browser/{chunk-HN7OHFCB.mjs → chunk-VGBZKM3O.mjs} +3 -3
- package/dist/lib/browser/chunk-VGBZKM3O.mjs.map +7 -0
- package/dist/lib/browser/{chunk-ERTIGJYE.mjs → chunk-VL3KSDVL.mjs} +65 -29
- package/dist/lib/browser/chunk-VL3KSDVL.mjs.map +7 -0
- package/dist/lib/browser/{chunk-GW5U2DGT.mjs → chunk-WWURMV25.mjs} +2 -4
- package/dist/lib/browser/chunk-WWURMV25.mjs.map +7 -0
- package/dist/lib/browser/compute-runtime-YJREH6WP.mjs +160 -0
- package/dist/lib/browser/compute-runtime-YJREH6WP.mjs.map +7 -0
- package/dist/lib/browser/hooks/index.mjs +12 -0
- package/dist/lib/browser/index.mjs +36 -16
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/{intent-resolver-U3ZAQEFW.mjs → intent-resolver-D2OHKQRR.mjs} +11 -10
- package/dist/lib/browser/intent-resolver-D2OHKQRR.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-4DFSM7OX.mjs → react-surface-G7CG7BML.mjs} +18 -19
- package/dist/lib/browser/react-surface-G7CG7BML.mjs.map +7 -0
- package/dist/lib/browser/types/index.mjs +2 -2
- package/dist/lib/node-esm/{AutomationPanel-YYUMSK2W.mjs → AutomationPanel-EETYIR35.mjs} +4 -4
- package/dist/lib/node-esm/AutomationSettings-WKSMWITV.mjs +70 -0
- package/dist/lib/node-esm/AutomationSettings-WKSMWITV.mjs.map +7 -0
- package/dist/lib/node-esm/{FunctionsContainer-DJWB6WFH.mjs → FunctionsContainer-ZKVOBUHV.mjs} +9 -12
- package/dist/lib/node-esm/FunctionsContainer-ZKVOBUHV.mjs.map +7 -0
- package/dist/lib/node-esm/{FunctionsPanel-KGIOZSPZ.mjs → FunctionsPanel-SAMRTELO.mjs} +3 -3
- package/dist/lib/node-esm/FunctionsPanel-SAMRTELO.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-builder-3FP63ZSG.mjs → app-graph-builder-TR2WXPX2.mjs} +11 -10
- package/dist/lib/node-esm/app-graph-builder-TR2WXPX2.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-2EWXIFEK.mjs +16 -0
- package/dist/lib/node-esm/chunk-2EWXIFEK.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-NK5N3QKD.mjs → chunk-5MQJPJR2.mjs} +2 -4
- package/dist/lib/node-esm/chunk-5MQJPJR2.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-HIMYPGHF.mjs → chunk-AKHETVIQ.mjs} +65 -29
- package/dist/lib/node-esm/chunk-AKHETVIQ.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-B7N3H45O.mjs +16 -0
- package/dist/lib/node-esm/chunk-B7N3H45O.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-OEZNHUL2.mjs → chunk-CJUI6AKX.mjs} +3 -3
- package/dist/lib/node-esm/chunk-CJUI6AKX.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-AZH66CED.mjs → chunk-J3XEBEIE.mjs} +69 -32
- package/dist/lib/node-esm/chunk-J3XEBEIE.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-QCA543ZR.mjs +54 -0
- package/dist/lib/node-esm/chunk-QCA543ZR.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-WHCSOUNN.mjs +16 -0
- package/dist/lib/node-esm/chunk-WHCSOUNN.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-ZGPUV5VS.mjs → chunk-YQXW3JXD.mjs} +6 -6
- package/dist/lib/node-esm/chunk-YQXW3JXD.mjs.map +7 -0
- package/dist/lib/node-esm/compute-runtime-CMEPAYND.mjs +161 -0
- package/dist/lib/node-esm/compute-runtime-CMEPAYND.mjs.map +7 -0
- package/dist/lib/node-esm/hooks/index.mjs +13 -0
- package/dist/lib/node-esm/hooks/index.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +36 -16
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/{intent-resolver-3QWXEBPX.mjs → intent-resolver-2LGBVXT5.mjs} +11 -10
- package/dist/lib/node-esm/intent-resolver-2LGBVXT5.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-surface-3PNW7NDW.mjs → react-surface-OMZSBDHS.mjs} +18 -19
- package/dist/lib/node-esm/react-surface-OMZSBDHS.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 +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/capabilities.d.ts +19 -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 +5 -3
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts +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 +45 -4
- 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/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 +6 -4
- package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts.map +1 -1
- package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts +47 -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 +8 -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 +2 -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/translations.d.ts +2 -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 +60 -37
- package/src/AutomationPlugin.tsx +37 -31
- package/src/capabilities/app-graph-builder.ts +10 -9
- package/src/capabilities/capabilities.ts +48 -0
- package/src/capabilities/compute-runtime.ts +138 -0
- package/src/capabilities/index.ts +3 -0
- package/src/capabilities/intent-resolver.ts +7 -7
- package/src/capabilities/react-surface.tsx +13 -14
- package/src/components/AutomationPanel/AutomationPanel.stories.tsx +13 -13
- package/src/components/AutomationPanel/AutomationPanel.tsx +91 -40
- package/src/components/AutomationSettings.tsx +30 -0
- package/src/components/FunctionsContainer.tsx +11 -13
- package/src/components/FunctionsPanel/FunctionsPanel.tsx +5 -5
- package/src/components/TriggerEditor/FunctionInputEditor.tsx +8 -2
- package/src/components/TriggerEditor/SpecSelector.tsx +22 -16
- package/src/components/TriggerEditor/TriggerEditor.stories.tsx +66 -24
- package/src/components/TriggerEditor/TriggerEditor.tsx +40 -20
- 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 +30 -0
- package/src/hooks/useTriggerRuntimeControls.ts +52 -0
- package/src/index.ts +2 -0
- package/src/meta.ts +1 -3
- package/src/testing/test-functions.ts +1 -1
- package/src/translations.ts +4 -0
- package/src/types/schema.ts +1 -1
- package/dist/lib/browser/AutomationContainer-VZNV2ZQF.mjs +0 -38
- package/dist/lib/browser/AutomationContainer-VZNV2ZQF.mjs.map +0 -7
- package/dist/lib/browser/AutomationPanel-ZWA6GOFY.mjs +0 -11
- package/dist/lib/browser/FunctionsContainer-IOB333TX.mjs.map +0 -7
- package/dist/lib/browser/app-graph-builder-ZTAUTFI4.mjs.map +0 -7
- package/dist/lib/browser/chunk-ECSTS2UI.mjs +0 -14
- package/dist/lib/browser/chunk-ECSTS2UI.mjs.map +0 -7
- package/dist/lib/browser/chunk-ERTIGJYE.mjs.map +0 -7
- package/dist/lib/browser/chunk-FSJZXTS2.mjs.map +0 -7
- 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-LYJVTIVD.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-U3ZAQEFW.mjs.map +0 -7
- package/dist/lib/browser/react-surface-4DFSM7OX.mjs.map +0 -7
- package/dist/lib/node-esm/AutomationContainer-WMIH3F4V.mjs +0 -39
- package/dist/lib/node-esm/AutomationContainer-WMIH3F4V.mjs.map +0 -7
- package/dist/lib/node-esm/FunctionsContainer-DJWB6WFH.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-3FP63ZSG.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-AZH66CED.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-HIMYPGHF.mjs.map +0 -7
- 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-SGZPTJ47.mjs +0 -16
- package/dist/lib/node-esm/chunk-SGZPTJ47.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-ZGPUV5VS.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-3QWXEBPX.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-3PNW7NDW.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/src/components/AutomationContainer.tsx +0 -30
- /package/dist/lib/browser/{AutomationPanel-ZWA6GOFY.mjs.map → AutomationPanel-3PHA5FTJ.mjs.map} +0 -0
- /package/dist/lib/browser/{FunctionsPanel-56ZKRVM5.mjs.map → FunctionsPanel-NRIKAPQV.mjs.map} +0 -0
- /package/dist/lib/{node-esm/AutomationPanel-YYUMSK2W.mjs.map → browser/hooks/index.mjs.map} +0 -0
- /package/dist/lib/node-esm/{FunctionsPanel-KGIOZSPZ.mjs.map → AutomationPanel-EETYIR35.mjs.map} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/capabilities/index.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\nexport const AppGraphBuilder = lazy(() => import('./app-graph-builder'));\nexport const ComputeRuntime = lazy(() => import('./compute-runtime'));\nexport const IntentResolver = lazy(() => import('./intent-resolver'));\nexport const ReactSurface = lazy(() => import('./react-surface'));\n\nexport * from './capabilities';\n"],
|
|
5
|
+
"mappings": ";;;AAIA,SAASA,YAAY;AAEd,IAAMC,kBAAkBC,KAAK,MAAM,OAAO,kCAAA,CAAA;AAC1C,IAAMC,iBAAiBD,KAAK,MAAM,OAAO,gCAAA,CAAA;AACzC,IAAME,iBAAiBF,KAAK,MAAM,OAAO,gCAAA,CAAA;AACzC,IAAMG,eAAeH,KAAK,MAAM,OAAO,8BAAA,CAAA;",
|
|
6
|
+
"names": ["lazy", "AppGraphBuilder", "lazy", "ComputeRuntime", "IntentResolver", "ReactSurface"]
|
|
7
|
+
}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
2
|
|
|
3
3
|
// src/meta.ts
|
|
4
|
-
var AUTOMATION_PLUGIN = "dxos.org/plugin/automation";
|
|
5
4
|
var meta = {
|
|
6
|
-
id:
|
|
5
|
+
id: "dxos.org/plugin/automation",
|
|
7
6
|
name: "Automation",
|
|
8
7
|
description: "The Automation tab allows you to trigger pre-defined workflows related to the element you are interacting with inside of Composer.",
|
|
9
8
|
icon: "ph--robot--regular",
|
|
@@ -11,7 +10,6 @@ var meta = {
|
|
|
11
10
|
};
|
|
12
11
|
|
|
13
12
|
export {
|
|
14
|
-
AUTOMATION_PLUGIN,
|
|
15
13
|
meta
|
|
16
14
|
};
|
|
17
|
-
//# sourceMappingURL=chunk-
|
|
15
|
+
//# sourceMappingURL=chunk-5MQJPJR2.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';\n\nexport const meta: PluginMeta = {\n id: 'dxos.org/plugin/automation',\n name: 'Automation',\n description:\n 'The Automation tab allows you to trigger pre-defined workflows related to the element you are interacting with inside of Composer.',\n icon: 'ph--robot--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-automation',\n};\n"],
|
|
5
|
+
"mappings": ";;;AAMO,IAAMA,OAAmB;EAC9BC,IAAI;EACJC,MAAM;EACNC,aACE;EACFC,MAAM;EACNC,QAAQ;AACV;",
|
|
6
|
+
"names": ["meta", "id", "name", "description", "icon", "source"]
|
|
7
|
+
}
|
|
@@ -1,41 +1,59 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
TriggerEditor
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-J3XEBEIE.mjs";
|
|
5
5
|
import {
|
|
6
|
-
|
|
7
|
-
} from "./chunk-
|
|
6
|
+
meta
|
|
7
|
+
} from "./chunk-5MQJPJR2.mjs";
|
|
8
8
|
|
|
9
9
|
// src/components/AutomationPanel/AutomationPanel.tsx
|
|
10
10
|
import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
import
|
|
11
|
+
import * as Array from "effect/Array";
|
|
12
|
+
import * as Function from "effect/Function";
|
|
13
|
+
import * as Match from "effect/Match";
|
|
14
|
+
import * as Schema from "effect/Schema";
|
|
15
|
+
import React, { useMemo, useState } from "react";
|
|
16
|
+
import { Filter, Obj, Tag } from "@dxos/echo";
|
|
17
|
+
import { FunctionTrigger, FunctionType, ScriptType } from "@dxos/functions";
|
|
18
|
+
import { useTypeOptions } from "@dxos/plugin-space";
|
|
15
19
|
import { useClient } from "@dxos/react-client";
|
|
16
|
-
import {
|
|
20
|
+
import { getSpace, useQuery } from "@dxos/react-client/echo";
|
|
17
21
|
import { Clipboard, IconButton, Input, Separator, useTranslation } from "@dxos/react-ui";
|
|
18
22
|
import { ControlItem, controlItemClasses } from "@dxos/react-ui-form";
|
|
19
23
|
import { List } from "@dxos/react-ui-list";
|
|
20
24
|
import { ghostHover, mx } from "@dxos/react-ui-theme";
|
|
25
|
+
import { DataType } from "@dxos/schema";
|
|
21
26
|
var grid = "grid grid-cols-[40px_1fr_32px] min-bs-[2.5rem]";
|
|
22
|
-
var AutomationPanel = ({ space, object, initialTrigger, onDone }) => {
|
|
27
|
+
var AutomationPanel = ({ classNames, space, object, initialTrigger, onDone }) => {
|
|
23
28
|
var _effect = _useSignals();
|
|
24
29
|
try {
|
|
25
|
-
const { t } = useTranslation(
|
|
30
|
+
const { t } = useTranslation(meta.id);
|
|
26
31
|
const client = useClient();
|
|
27
|
-
const triggers = useQuery(space, Filter.type(FunctionTrigger));
|
|
28
32
|
const functions = useQuery(space, Filter.type(FunctionType));
|
|
29
|
-
const
|
|
33
|
+
const triggers = useQuery(space, Filter.type(FunctionTrigger));
|
|
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
|
+
"dynamic",
|
|
45
|
+
"limited-static",
|
|
46
|
+
"object-form"
|
|
47
|
+
]
|
|
48
|
+
});
|
|
30
49
|
const [trigger, setTrigger] = useState(initialTrigger);
|
|
31
50
|
const [selected, setSelected] = useState();
|
|
32
51
|
const handleSelect = (trigger2) => {
|
|
33
|
-
|
|
34
|
-
setTrigger(values);
|
|
52
|
+
setTrigger(trigger2);
|
|
35
53
|
setSelected(trigger2);
|
|
36
54
|
};
|
|
37
55
|
const handleAdd = () => {
|
|
38
|
-
setTrigger(Obj.make(
|
|
56
|
+
setTrigger(Obj.make(FunctionTrigger, {}));
|
|
39
57
|
setSelected(void 0);
|
|
40
58
|
};
|
|
41
59
|
const handleDelete = (trigger2) => {
|
|
@@ -63,20 +81,23 @@ var AutomationPanel = ({ space, object, initialTrigger, onDone }) => {
|
|
|
63
81
|
}, /* @__PURE__ */ React.createElement(TriggerEditor, {
|
|
64
82
|
space,
|
|
65
83
|
trigger,
|
|
84
|
+
readonlySpec: Boolean(object),
|
|
85
|
+
tags,
|
|
86
|
+
types,
|
|
66
87
|
onSave: handleSave,
|
|
67
88
|
onCancel: handleCancel
|
|
68
89
|
}));
|
|
69
90
|
}
|
|
70
91
|
return /* @__PURE__ */ React.createElement("div", {
|
|
71
|
-
className: controlItemClasses
|
|
72
|
-
},
|
|
73
|
-
items:
|
|
92
|
+
className: mx(controlItemClasses, classNames)
|
|
93
|
+
}, filteredTriggers.length > 0 && /* @__PURE__ */ React.createElement(List.Root, {
|
|
94
|
+
items: filteredTriggers,
|
|
74
95
|
isItem: Schema.is(FunctionTrigger),
|
|
75
96
|
getId: (field) => field.id
|
|
76
|
-
}, ({ items:
|
|
97
|
+
}, ({ items: filteredTriggers2 }) => /* @__PURE__ */ React.createElement("div", {
|
|
77
98
|
role: "list",
|
|
78
99
|
className: "flex flex-col w-full"
|
|
79
|
-
},
|
|
100
|
+
}, filteredTriggers2?.map((trigger2) => {
|
|
80
101
|
const copyAction = getCopyAction(client, trigger2);
|
|
81
102
|
return /* @__PURE__ */ React.createElement(List.Item, {
|
|
82
103
|
key: trigger2.id,
|
|
@@ -90,13 +111,13 @@ var AutomationPanel = ({ space, object, initialTrigger, onDone }) => {
|
|
|
90
111
|
}, /* @__PURE__ */ React.createElement(List.ItemTitle, {
|
|
91
112
|
classNames: "px-1 cursor-pointer w-0 shrink truncate",
|
|
92
113
|
onClick: () => handleSelect(trigger2)
|
|
93
|
-
}, getFunctionName(
|
|
114
|
+
}, getFunctionName(functions, trigger2) ?? "\u2205"), copyAction && /* @__PURE__ */ React.createElement(Clipboard.IconButton, {
|
|
94
115
|
label: t(copyAction.translationKey),
|
|
95
116
|
value: copyAction.contentProvider()
|
|
96
117
|
})), /* @__PURE__ */ React.createElement(List.ItemDeleteButton, {
|
|
97
118
|
onClick: () => handleDelete(trigger2)
|
|
98
119
|
}));
|
|
99
|
-
}))),
|
|
120
|
+
}))), filteredTriggers.length > 0 && /* @__PURE__ */ React.createElement(Separator, {
|
|
100
121
|
classNames: "mlb-4"
|
|
101
122
|
}), /* @__PURE__ */ React.createElement(IconButton, {
|
|
102
123
|
icon: "ph--plus--regular",
|
|
@@ -108,13 +129,13 @@ var AutomationPanel = ({ space, object, initialTrigger, onDone }) => {
|
|
|
108
129
|
}
|
|
109
130
|
};
|
|
110
131
|
var getCopyAction = (client, trigger) => {
|
|
111
|
-
if (trigger?.spec?.kind ===
|
|
132
|
+
if (trigger?.spec?.kind === "email") {
|
|
112
133
|
return {
|
|
113
134
|
translationKey: "trigger copy email",
|
|
114
135
|
contentProvider: () => `${getSpace(trigger).id}@dxos.network`
|
|
115
136
|
};
|
|
116
137
|
}
|
|
117
|
-
if (trigger?.spec?.kind ===
|
|
138
|
+
if (trigger?.spec?.kind === "webhook") {
|
|
118
139
|
return {
|
|
119
140
|
translationKey: "trigger copy url",
|
|
120
141
|
contentProvider: () => getWebhookUrl(client, trigger)
|
|
@@ -129,14 +150,29 @@ var getWebhookUrl = (client, trigger) => {
|
|
|
129
150
|
edgeUrl.protocol = isSecure ? "https" : "http";
|
|
130
151
|
return new URL(`/webhook/${spaceId}:${trigger.id}`, edgeUrl).toString();
|
|
131
152
|
};
|
|
132
|
-
var getFunctionName = (
|
|
153
|
+
var getFunctionName = (functions, trigger) => {
|
|
133
154
|
const shortId = trigger.function && `${trigger.function.dxn.toString().slice(0, 16)}\u2026`;
|
|
134
155
|
const functionObject = functions.find((fn) => fn === trigger.function?.target);
|
|
135
|
-
|
|
136
|
-
|
|
156
|
+
return functionObject?.name ?? shortId;
|
|
157
|
+
};
|
|
158
|
+
var scriptMatch = (script) => (trigger) => {
|
|
159
|
+
const fn = trigger.function?.target;
|
|
160
|
+
if (!Obj.instanceOf(FunctionType, fn)) {
|
|
161
|
+
return false;
|
|
137
162
|
}
|
|
138
|
-
return
|
|
163
|
+
return fn.source?.target === script;
|
|
164
|
+
};
|
|
165
|
+
var projectMatch = (project) => {
|
|
166
|
+
const viewQueries = Function.pipe(project.collections, Array.map((collection) => collection.target), Array.filter(Schema.is(DataType.View)), Array.map((view) => Obj.getSnapshot(view).query.ast), Array.map((ast) => JSON.stringify(ast)));
|
|
167
|
+
return (trigger) => {
|
|
168
|
+
const spec = Obj.getSnapshot(trigger).spec;
|
|
169
|
+
if (spec?.kind !== "subscription") {
|
|
170
|
+
return false;
|
|
171
|
+
}
|
|
172
|
+
return viewQueries.some((query) => JSON.stringify(spec.query) === query);
|
|
173
|
+
};
|
|
139
174
|
};
|
|
175
|
+
var triggerMatch = Match.type().pipe(Match.withReturnType(), Match.when((obj) => Obj.instanceOf(ScriptType, obj), (obj) => scriptMatch(obj)), Match.when((obj) => Obj.instanceOf(DataType.Project, obj), (obj) => projectMatch(obj)), Match.orElse((_obj) => () => true));
|
|
140
176
|
|
|
141
177
|
// src/components/AutomationPanel/index.ts
|
|
142
178
|
var AutomationPanel_default = AutomationPanel;
|
|
@@ -145,4 +181,4 @@ export {
|
|
|
145
181
|
AutomationPanel,
|
|
146
182
|
AutomationPanel_default
|
|
147
183
|
};
|
|
148
|
-
//# sourceMappingURL=chunk-
|
|
184
|
+
//# sourceMappingURL=chunk-AKHETVIQ.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 Function 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 { FunctionTrigger, FunctionType, ScriptType } 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 { DataType } from '@dxos/schema';\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?: FunctionTrigger;\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(FunctionType));\n const triggers = useQuery(space, Filter.type(FunctionTrigger));\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({ space, annotation: ['dynamic', 'limited-static', 'object-form'] });\n\n const [trigger, setTrigger] = useState<FunctionTrigger | undefined>(initialTrigger);\n const [selected, setSelected] = useState<FunctionTrigger>();\n\n const handleSelect = (trigger: FunctionTrigger) => {\n setTrigger(trigger);\n setSelected(trigger);\n };\n\n const handleAdd = () => {\n setTrigger(Obj.make(FunctionTrigger, {}));\n setSelected(undefined);\n };\n\n const handleDelete = (trigger: FunctionTrigger) => {\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(Obj.make(FunctionTrigger, 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<FunctionTrigger>\n items={filteredTriggers}\n isItem={Schema.is(FunctionTrigger)}\n getId={(field) => field.id}\n >\n {({ items: filteredTriggers }) => (\n <div role='list' className='flex flex-col w-full'>\n {filteredTriggers?.map((trigger) => {\n const copyAction = getCopyAction(client, trigger);\n return (\n <List.Item<FunctionTrigger>\n key={trigger.id}\n item={trigger}\n classNames={mx(grid, ghostHover, 'items-center', 'px-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='px-1 cursor-pointer w-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: FunctionTrigger | 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: FunctionTrigger) => {\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: FunctionType[], trigger: FunctionTrigger) => {\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: ScriptType) => (trigger: FunctionTrigger) => {\n const fn = trigger.function?.target;\n if (!Obj.instanceOf(FunctionType, fn)) {\n return false;\n }\n\n return fn.source?.target === script;\n};\n\nconst projectMatch = (project: DataType.Project) => {\n const viewQueries = Function.pipe(\n project.collections,\n Array.map((collection) => collection.target),\n Array.filter(Schema.is(DataType.View)),\n Array.map((view) => Obj.getSnapshot(view).query.ast),\n Array.map((ast) => JSON.stringify(ast)),\n );\n\n return (trigger: FunctionTrigger) => {\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: FunctionTrigger) => boolean>(),\n Match.when(\n (obj) => Obj.instanceOf(ScriptType, obj),\n (obj) => scriptMatch(obj),\n ),\n Match.when(\n (obj) => Obj.instanceOf(DataType.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", "Function", "Match", "Schema", "React", "useMemo", "useState", "Filter", "Obj", "Tag", "FunctionTrigger", "FunctionType", "ScriptType", "useTypeOptions", "useClient", "getSpace", "useQuery", "Clipboard", "IconButton", "Input", "Separator", "useTranslation", "ControlItem", "controlItemClasses", "List", "ghostHover", "mx", "DataType", "grid", "AutomationPanel", "classNames", "space", "object", "initialTrigger", "onDone", "t", "useTranslation", "meta", "id", "client", "useClient", "functions", "useQuery", "Filter", "type", "FunctionType", "triggers", "FunctionTrigger", "filteredTriggers", "useMemo", "filter", "triggerMatch", "tags", "Tag", "types", "useTypeOptions", "annotation", "trigger", "setTrigger", "useState", "selected", "setSelected", "handleSelect", "handleAdd", "Obj", "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", "kind", "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", "instanceOf", "source", "projectMatch", "project", "viewQueries", "pipe", "collections", "collection", "DataType", "View", "view", "getSnapshot", "query", "ast", "JSON", "stringify", "some", "withReturnType", "when", "obj", "ScriptType", "Project", "orElse", "_obj", "AutomationPanel"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
|
+
|
|
3
|
+
// src/components/index.ts
|
|
4
|
+
import { lazy } from "react";
|
|
5
|
+
var AutomationPanel = lazy(() => import("./AutomationPanel-EETYIR35.mjs"));
|
|
6
|
+
var AutomationSettings = lazy(() => import("./AutomationSettings-WKSMWITV.mjs"));
|
|
7
|
+
var FunctionsContainer = lazy(() => import("./FunctionsContainer-ZKVOBUHV.mjs"));
|
|
8
|
+
var FunctionsPanel = lazy(() => import("./FunctionsPanel-SAMRTELO.mjs"));
|
|
9
|
+
|
|
10
|
+
export {
|
|
11
|
+
AutomationPanel,
|
|
12
|
+
AutomationSettings,
|
|
13
|
+
FunctionsContainer,
|
|
14
|
+
FunctionsPanel
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=chunk-B7N3H45O.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
|
+
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
meta
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-5MQJPJR2.mjs";
|
|
5
5
|
|
|
6
6
|
// src/types/schema.ts
|
|
7
|
-
import
|
|
7
|
+
import * as Schema from "effect/Schema";
|
|
8
8
|
import { SpaceSchema } from "@dxos/react-client/echo";
|
|
9
9
|
var TriggerTemplate = Schema.Union(Schema.Struct({
|
|
10
10
|
type: Schema.Literal("timer"),
|
|
@@ -36,4 +36,4 @@ var AutomationAction;
|
|
|
36
36
|
export {
|
|
37
37
|
AutomationAction
|
|
38
38
|
};
|
|
39
|
-
//# sourceMappingURL=chunk-
|
|
39
|
+
//# sourceMappingURL=chunk-CJUI6AKX.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/types/schema.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { SpaceSchema } from '@dxos/react-client/echo';\n\nimport { meta } from '../meta';\n\nconst TriggerTemplate = Schema.Union(\n Schema.Struct({ type: Schema.Literal('timer'), cron: Schema.String }),\n Schema.Struct({ type: Schema.Literal('queue'), queueDXN: Schema.Any }),\n);\n\nexport namespace AutomationAction {\n export class CreateTriggerFromTemplate extends Schema.TaggedClass<CreateTriggerFromTemplate>()(\n `${meta.id}/action/create-trigger-from-template`,\n {\n input: Schema.Struct({\n space: SpaceSchema,\n template: TriggerTemplate,\n enabled: Schema.optional(Schema.Boolean),\n // TODO(wittjosiah): Improve how this lookup is done.\n scriptName: Schema.optional(Schema.String),\n input: Schema.optional(Schema.Record({ key: Schema.String, value: Schema.Any })),\n }),\n output: Schema.Void,\n },\n ) {}\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,mBAAmB;AAI5B,IAAMC,kBAAyBC,aACtBC,cAAO;EAAEC,MAAaC,eAAQ,OAAA;EAAUC,MAAaC;AAAO,CAAA,GAC5DJ,cAAO;EAAEC,MAAaC,eAAQ,OAAA;EAAUG,UAAiBC;AAAI,CAAA,CAAA;UAGrDC,mBAAAA;EACR,MAAMC,kCAAyCC,mBAAW,EAC/D,GAAGC,KAAKC,EAAE,wCACV;IACEC,OAAcZ,cAAO;MACnBa,OAAOC;MACPC,UAAUjB;MACVkB,SAAgBC,gBAAgBC,cAAO;;MAEvCC,YAAmBF,gBAAgBb,aAAM;MACzCQ,OAAcK,gBAAgBG,cAAO;QAAEC,KAAYjB;QAAQkB,OAAchB;MAAI,CAAA,CAAA;IAC/E,CAAA;IACAiB,QAAeC;EACjB,CAAA,EAAA;EACC;oBAbUhB,4BAAAA;AAcf,GAfiBD,qBAAAA,mBAAAA,CAAAA,EAAAA;;",
|
|
6
|
+
"names": ["Schema", "SpaceSchema", "TriggerTemplate", "Union", "Struct", "type", "Literal", "cron", "String", "queueDXN", "Any", "AutomationAction", "CreateTriggerFromTemplate", "TaggedClass", "meta", "id", "input", "space", "SpaceSchema", "template", "enabled", "optional", "Boolean", "scriptName", "Record", "key", "value", "output", "Void"]
|
|
7
|
+
}
|
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
|
-
|
|
4
|
-
} from "./chunk-
|
|
3
|
+
meta
|
|
4
|
+
} from "./chunk-5MQJPJR2.mjs";
|
|
5
5
|
|
|
6
6
|
// src/components/TriggerEditor/TriggerEditor.tsx
|
|
7
7
|
import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
|
|
8
8
|
import React3, { useCallback as useCallback3, useMemo as useMemo3 } from "react";
|
|
9
9
|
import { ComputeGraph } from "@dxos/conductor";
|
|
10
10
|
import { Type as Type2 } from "@dxos/echo";
|
|
11
|
-
import {
|
|
12
|
-
import { Filter, Ref as Ref2, useQuery } from "@dxos/react-client/echo";
|
|
13
|
-
import {
|
|
11
|
+
import { FunctionTrigger, FunctionType, ScriptType } from "@dxos/functions";
|
|
12
|
+
import { Filter as Filter2, Ref as Ref2, useQuery } from "@dxos/react-client/echo";
|
|
13
|
+
import { Input } from "@dxos/react-ui";
|
|
14
|
+
import { QueryForm } from "@dxos/react-ui-components";
|
|
15
|
+
import { Form as Form2, InputHeader, SelectInput as SelectInput2, useRefQueryLookupHandler } from "@dxos/react-ui-form";
|
|
14
16
|
|
|
15
17
|
// src/components/TriggerEditor/FunctionInputEditor.tsx
|
|
16
18
|
import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
|
|
@@ -38,7 +40,12 @@ var FunctionInputEditor = ({ functions, getValue, onValueChange, onQueryRefOptio
|
|
|
38
40
|
useOnTransition(
|
|
39
41
|
// Clear function parameter input when the function changes.
|
|
40
42
|
selectedFunctionValue,
|
|
41
|
-
(prevValue) =>
|
|
43
|
+
(prevValue) => {
|
|
44
|
+
if (!Ref.isRef(prevValue) || !Ref.isRef(selectedFunctionValue)) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
return prevValue.dxn.toString() !== selectedFunctionValue.dxn.toString();
|
|
48
|
+
},
|
|
42
49
|
(currValue) => currValue !== void 0,
|
|
43
50
|
() => onValueChange("object", {})
|
|
44
51
|
);
|
|
@@ -77,41 +84,44 @@ var FunctionInputEditor = ({ functions, getValue, onValueChange, onQueryRefOptio
|
|
|
77
84
|
// src/components/TriggerEditor/SpecSelector.tsx
|
|
78
85
|
import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
|
|
79
86
|
import React2, { useCallback as useCallback2, useMemo as useMemo2 } from "react";
|
|
80
|
-
import {
|
|
87
|
+
import { Filter, Query } from "@dxos/echo";
|
|
88
|
+
import { TriggerKinds } from "@dxos/functions";
|
|
81
89
|
import { useTranslation } from "@dxos/react-ui";
|
|
82
90
|
import { SelectInput, useInputProps } from "@dxos/react-ui-form";
|
|
83
91
|
var SpecSelector = (props) => {
|
|
84
92
|
var _effect = _useSignals2();
|
|
85
93
|
try {
|
|
86
|
-
const { t } = useTranslation(
|
|
94
|
+
const { t } = useTranslation(meta.id);
|
|
87
95
|
const specProps = useInputProps([
|
|
88
96
|
"spec"
|
|
89
97
|
]);
|
|
90
98
|
const handleTypeChange = useCallback2((_type, value) => {
|
|
91
99
|
const getDefaultTriggerSpec = (kind) => {
|
|
92
100
|
switch (kind) {
|
|
93
|
-
case
|
|
101
|
+
case "timer":
|
|
94
102
|
return {
|
|
95
|
-
kind:
|
|
103
|
+
kind: "timer",
|
|
96
104
|
cron: ""
|
|
97
105
|
};
|
|
98
|
-
case
|
|
106
|
+
case "subscription":
|
|
99
107
|
return {
|
|
100
|
-
kind:
|
|
101
|
-
|
|
108
|
+
kind: "subscription",
|
|
109
|
+
query: {
|
|
110
|
+
ast: Query.select(Filter.nothing()).ast
|
|
111
|
+
}
|
|
102
112
|
};
|
|
103
|
-
case
|
|
113
|
+
case "queue":
|
|
104
114
|
return {
|
|
105
|
-
kind:
|
|
106
|
-
queue: ""
|
|
115
|
+
kind: "queue",
|
|
116
|
+
queue: "dxn:"
|
|
107
117
|
};
|
|
108
|
-
case
|
|
118
|
+
case "email":
|
|
109
119
|
return {
|
|
110
|
-
kind:
|
|
120
|
+
kind: "email"
|
|
111
121
|
};
|
|
112
|
-
case
|
|
122
|
+
case "webhook":
|
|
113
123
|
return {
|
|
114
|
-
kind:
|
|
124
|
+
kind: "webhook"
|
|
115
125
|
};
|
|
116
126
|
default:
|
|
117
127
|
return void 0;
|
|
@@ -125,7 +135,7 @@ var SpecSelector = (props) => {
|
|
|
125
135
|
}, [
|
|
126
136
|
specProps
|
|
127
137
|
]);
|
|
128
|
-
const options = useMemo2(() =>
|
|
138
|
+
const options = useMemo2(() => TriggerKinds.map((kind) => ({
|
|
129
139
|
value: kind,
|
|
130
140
|
label: t(`trigger type ${kind}`)
|
|
131
141
|
})), [
|
|
@@ -142,20 +152,26 @@ var SpecSelector = (props) => {
|
|
|
142
152
|
};
|
|
143
153
|
|
|
144
154
|
// src/components/TriggerEditor/TriggerEditor.tsx
|
|
145
|
-
var TriggerEditor = ({ space, trigger, onSave, onCancel }) => {
|
|
155
|
+
var TriggerEditor = ({ space, trigger, readonlySpec, types, tags, onSave, onCancel }) => {
|
|
146
156
|
var _effect = _useSignals3();
|
|
147
157
|
try {
|
|
148
|
-
const handleSave = (values) => {
|
|
158
|
+
const handleSave = ({ id: _, ...values }) => {
|
|
149
159
|
onSave?.(values);
|
|
150
160
|
};
|
|
151
161
|
const handleRefQueryLookup = useRefQueryLookupHandler({
|
|
152
162
|
space
|
|
153
163
|
});
|
|
154
|
-
const Custom = useCustomInputs(
|
|
164
|
+
const Custom = useCustomInputs({
|
|
165
|
+
space,
|
|
166
|
+
readonlySpec,
|
|
167
|
+
types,
|
|
168
|
+
tags,
|
|
169
|
+
onQueryRefOptions: handleRefQueryLookup
|
|
170
|
+
});
|
|
155
171
|
return /* @__PURE__ */ React3.createElement(Form2, {
|
|
156
172
|
outerSpacing: false,
|
|
157
173
|
Custom,
|
|
158
|
-
schema:
|
|
174
|
+
schema: FunctionTrigger,
|
|
159
175
|
values: trigger,
|
|
160
176
|
onSave: handleSave,
|
|
161
177
|
onCancel,
|
|
@@ -165,10 +181,10 @@ var TriggerEditor = ({ space, trigger, onSave, onCancel }) => {
|
|
|
165
181
|
_effect.f();
|
|
166
182
|
}
|
|
167
183
|
};
|
|
168
|
-
var useCustomInputs = (space, onQueryRefOptions) => {
|
|
169
|
-
const functions = useQuery(space,
|
|
170
|
-
const workflows = useQuery(space,
|
|
171
|
-
const scripts = useQuery(space,
|
|
184
|
+
var useCustomInputs = ({ space, readonlySpec, types, tags, onQueryRefOptions }) => {
|
|
185
|
+
const functions = useQuery(space, Filter2.type(FunctionType));
|
|
186
|
+
const workflows = useQuery(space, Filter2.type(ComputeGraph));
|
|
187
|
+
const scripts = useQuery(space, Filter2.type(ScriptType));
|
|
172
188
|
return useMemo3(() => ({
|
|
173
189
|
// Function selector.
|
|
174
190
|
["function"]: (props) => {
|
|
@@ -198,7 +214,27 @@ var useCustomInputs = (space, onQueryRefOptions) => {
|
|
|
198
214
|
});
|
|
199
215
|
},
|
|
200
216
|
// Spec selector.
|
|
201
|
-
["spec.kind"]: SpecSelector,
|
|
217
|
+
["spec.kind"]: (props) => /* @__PURE__ */ React3.createElement(SpecSelector, {
|
|
218
|
+
...props,
|
|
219
|
+
readonly: readonlySpec ? "disabled-input" : false
|
|
220
|
+
}),
|
|
221
|
+
// TODO(wittjosiah): Copied from ViewEditor.
|
|
222
|
+
// Query input editor.
|
|
223
|
+
["spec.query"]: (props) => {
|
|
224
|
+
const handleChange = useCallback3((query) => props.onValueChange("object", {
|
|
225
|
+
ast: query.ast
|
|
226
|
+
}), [
|
|
227
|
+
props.onValueChange
|
|
228
|
+
]);
|
|
229
|
+
return /* @__PURE__ */ React3.createElement(Input.Root, null, /* @__PURE__ */ React3.createElement(InputHeader, {
|
|
230
|
+
label: props.label
|
|
231
|
+
}), /* @__PURE__ */ React3.createElement(QueryForm, {
|
|
232
|
+
initialQuery: props.getValue().ast,
|
|
233
|
+
types,
|
|
234
|
+
tags,
|
|
235
|
+
onChange: handleChange
|
|
236
|
+
}));
|
|
237
|
+
},
|
|
202
238
|
// Function input editor.
|
|
203
239
|
["input"]: (props) => /* @__PURE__ */ React3.createElement(FunctionInputEditor, {
|
|
204
240
|
...props,
|
|
@@ -208,7 +244,8 @@ var useCustomInputs = (space, onQueryRefOptions) => {
|
|
|
208
244
|
}), [
|
|
209
245
|
workflows,
|
|
210
246
|
scripts,
|
|
211
|
-
functions
|
|
247
|
+
functions,
|
|
248
|
+
readonlySpec
|
|
212
249
|
]);
|
|
213
250
|
};
|
|
214
251
|
var getWorkflowOptions = (graphs) => {
|
|
@@ -228,4 +265,4 @@ var getFunctionOptions = (scripts, functions) => {
|
|
|
228
265
|
export {
|
|
229
266
|
TriggerEditor
|
|
230
267
|
};
|
|
231
|
-
//# sourceMappingURL=chunk-
|
|
268
|
+
//# sourceMappingURL=chunk-J3XEBEIE.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 { type Query, Type } from '@dxos/echo';\nimport { FunctionTrigger, FunctionType, ScriptType } 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: FunctionTrigger;\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<FunctionTrigger, '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 }: FunctionTrigger) => {\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={FunctionTrigger}\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(FunctionType));\n const workflows = useQuery(space, Filter.type(ComputeGraph));\n const scripts = useQuery(space, Filter.type(ScriptType));\n\n return useMemo(\n (): CustomInputMap => ({\n // Function selector.\n ['function' satisfies keyof FunctionTrigger]: (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 = Type.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: ScriptType[], functions: FunctionType[]) => {\n const getLabel = (fn: FunctionType) => 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 FunctionType } 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: FunctionType[];\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 { type FunctionTrigger, TriggerKinds, type TriggerType } 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 FunctionTrigger]);\n\n const handleTypeChange = useCallback(\n (_type: any, value: string): TriggerType | 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 TriggerKinds.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", "Type", "FunctionTrigger", "FunctionType", "ScriptType", "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", "TriggerKinds", "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", "TriggerKinds", "map", "label", "React", "SelectInput", "TriggerEditor", "space", "trigger", "readonlySpec", "types", "tags", "onSave", "onCancel", "handleSave", "id", "_", "values", "handleRefQueryLookup", "useRefQueryLookupHandler", "Custom", "useCustomInputs", "onQueryRefOptions", "React", "Form", "outerSpacing", "schema", "FunctionTrigger", "functions", "useQuery", "Filter", "type", "FunctionType", "workflows", "ComputeGraph", "scripts", "ScriptType", "useMemo", "props", "getValue", "useCallback", "formValue", "Ref", "isRef", "dxn", "toString", "undefined", "handleOnValueChange", "_type", "dxnString", "Type", "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,54 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
AutomationCapabilities
|
|
4
|
+
} from "./chunk-WHCSOUNN.mjs";
|
|
5
|
+
|
|
6
|
+
// src/hooks/useComputeRuntimeCallback.ts
|
|
7
|
+
import { useCallback } from "react";
|
|
8
|
+
import { useCapability } from "@dxos/app-framework";
|
|
9
|
+
var useComputeRuntimeCallback = (space, fn, deps) => {
|
|
10
|
+
const computeRuntime = useCapability(AutomationCapabilities.ComputeRuntime);
|
|
11
|
+
const runtime = space !== void 0 ? computeRuntime.getRuntime(space.id) : void 0;
|
|
12
|
+
return useCallback(() => {
|
|
13
|
+
if (!runtime) {
|
|
14
|
+
throw new TypeError("Space not provided to useComputeRuntimeCallback");
|
|
15
|
+
}
|
|
16
|
+
return runtime.runPromise(fn());
|
|
17
|
+
}, [
|
|
18
|
+
runtime,
|
|
19
|
+
...deps ?? []
|
|
20
|
+
]);
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
// src/hooks/useTriggerRuntimeControls.ts
|
|
24
|
+
import * as Effect from "effect/Effect";
|
|
25
|
+
import { Filter } from "@dxos/echo";
|
|
26
|
+
import { FunctionTrigger, TriggerDispatcher } from "@dxos/functions";
|
|
27
|
+
import { useQuery } from "@dxos/react-client/echo";
|
|
28
|
+
import { useAsyncState } from "@dxos/react-ui";
|
|
29
|
+
var useTriggerRuntimeControls = (space) => {
|
|
30
|
+
const triggers = useQuery(space, Filter.type(FunctionTrigger));
|
|
31
|
+
const [isRunningState, setIsRunningState] = useAsyncState(useComputeRuntimeCallback(space, () => TriggerDispatcher.pipe(Effect.map((t) => t.running))));
|
|
32
|
+
const start = useComputeRuntimeCallback(space, Effect.fnUntraced(function* () {
|
|
33
|
+
const dispatcher = yield* TriggerDispatcher;
|
|
34
|
+
yield* dispatcher.start();
|
|
35
|
+
setIsRunningState(true);
|
|
36
|
+
}));
|
|
37
|
+
const stop = useComputeRuntimeCallback(space, Effect.fnUntraced(function* () {
|
|
38
|
+
const dispatcher = yield* TriggerDispatcher;
|
|
39
|
+
yield* dispatcher.stop();
|
|
40
|
+
setIsRunningState(false);
|
|
41
|
+
}));
|
|
42
|
+
return {
|
|
43
|
+
triggers,
|
|
44
|
+
isRunning: isRunningState ?? false,
|
|
45
|
+
start: () => void start(),
|
|
46
|
+
stop: () => void stop()
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
export {
|
|
51
|
+
useComputeRuntimeCallback,
|
|
52
|
+
useTriggerRuntimeControls
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=chunk-QCA543ZR.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/hooks/useComputeRuntimeCallback.ts", "../../../src/hooks/useTriggerRuntimeControls.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Effect from 'effect/Effect';\nimport { useCallback } from 'react';\n\nimport { useCapability } from '@dxos/app-framework';\nimport type { Space } from '@dxos/react-client/echo';\n\nimport { AutomationCapabilities } from '../capabilities';\n\n/**\n * Create an effectful function that has access to compute services\n */\nexport const useComputeRuntimeCallback = <T>(\n space: Space | undefined,\n fn: () => Effect.Effect<T, any, AutomationCapabilities.ComputeServices>,\n deps?: React.DependencyList,\n): (() => Promise<T>) => {\n const computeRuntime = useCapability(AutomationCapabilities.ComputeRuntime);\n const runtime = space !== undefined ? computeRuntime.getRuntime(space.id) : undefined;\n\n return useCallback(() => {\n if (!runtime) {\n throw new TypeError('Space not provided to useComputeRuntimeCallback');\n }\n return runtime.runPromise(fn());\n }, [runtime, ...(deps ?? [])]);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Filter } from '@dxos/echo';\nimport { FunctionTrigger, TriggerDispatcher } from '@dxos/functions';\nimport { type Space, useQuery } from '@dxos/react-client/echo';\nimport { useAsyncState } from '@dxos/react-ui';\n\nimport { useComputeRuntimeCallback } from './useComputeRuntimeCallback';\n\ninterface TriggerRuntimeControls {\n triggers: FunctionTrigger[];\n isRunning: boolean;\n start: () => void;\n stop: () => void;\n}\n\nexport const useTriggerRuntimeControls = (space: Space | undefined): TriggerRuntimeControls => {\n const triggers = useQuery(space, Filter.type(FunctionTrigger));\n\n const [isRunningState, setIsRunningState] = useAsyncState(\n useComputeRuntimeCallback(space, () => TriggerDispatcher.pipe(Effect.map((t) => t.running))),\n );\n\n const start = useComputeRuntimeCallback(\n space,\n Effect.fnUntraced(function* () {\n const dispatcher = yield* TriggerDispatcher;\n yield* dispatcher.start();\n setIsRunningState(true);\n }),\n );\n\n const stop = useComputeRuntimeCallback(\n space,\n Effect.fnUntraced(function* () {\n const dispatcher = yield* TriggerDispatcher;\n yield* dispatcher.stop();\n setIsRunningState(false);\n }),\n );\n\n return {\n triggers,\n isRunning: isRunningState ?? false,\n start: () => void start(),\n stop: () => void stop(),\n };\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;AAKA,SAASA,mBAAmB;AAE5B,SAASC,qBAAqB;AAQvB,IAAMC,4BAA4B,CACvCC,OACAC,IACAC,SAAAA;AAEA,QAAMC,iBAAiBC,cAAcC,uBAAuBC,cAAc;AAC1E,QAAMC,UAAUP,UAAUQ,SAAYL,eAAeM,WAAWT,MAAMU,EAAE,IAAIF;AAE5E,SAAOG,YAAY,MAAA;AACjB,QAAI,CAACJ,SAAS;AACZ,YAAM,IAAIK,UAAU,iDAAA;IACtB;AACA,WAAOL,QAAQM,WAAWZ,GAAAA,CAAAA;EAC5B,GAAG;IAACM;OAAaL,QAAQ,CAAA;GAAI;AAC/B;;;ACzBA,YAAYY,YAAY;AAExB,SAASC,cAAc;AACvB,SAASC,iBAAiBC,yBAAyB;AACnD,SAAqBC,gBAAgB;AACrC,SAASC,qBAAqB;AAWvB,IAAMC,4BAA4B,CAACC,UAAAA;AACxC,QAAMC,WAAWC,SAASF,OAAOG,OAAOC,KAAKC,eAAAA,CAAAA;AAE7C,QAAM,CAACC,gBAAgBC,iBAAAA,IAAqBC,cAC1CC,0BAA0BT,OAAO,MAAMU,kBAAkBC,KAAYC,WAAI,CAACC,MAAMA,EAAEC,OAAO,CAAA,CAAA,CAAA;AAG3F,QAAMC,QAAQN,0BACZT,OACOgB,kBAAW,aAAA;AAChB,UAAMC,aAAa,OAAOP;AAC1B,WAAOO,WAAWF,MAAK;AACvBR,sBAAkB,IAAA;EACpB,CAAA,CAAA;AAGF,QAAMW,OAAOT,0BACXT,OACOgB,kBAAW,aAAA;AAChB,UAAMC,aAAa,OAAOP;AAC1B,WAAOO,WAAWC,KAAI;AACtBX,sBAAkB,KAAA;EACpB,CAAA,CAAA;AAGF,SAAO;IACLN;IACAkB,WAAWb,kBAAkB;IAC7BS,OAAO,MAAM,KAAKA,MAAAA;IAClBG,MAAM,MAAM,KAAKA,KAAAA;EACnB;AACF;",
|
|
6
|
+
"names": ["useCallback", "useCapability", "useComputeRuntimeCallback", "space", "fn", "deps", "computeRuntime", "useCapability", "AutomationCapabilities", "ComputeRuntime", "runtime", "undefined", "getRuntime", "id", "useCallback", "TypeError", "runPromise", "Effect", "Filter", "FunctionTrigger", "TriggerDispatcher", "useQuery", "useAsyncState", "useTriggerRuntimeControls", "space", "triggers", "useQuery", "Filter", "type", "FunctionTrigger", "isRunningState", "setIsRunningState", "useAsyncState", "useComputeRuntimeCallback", "TriggerDispatcher", "pipe", "map", "t", "running", "start", "fnUntraced", "dispatcher", "stop", "isRunning"]
|
|
7
|
+
}
|