@dxos/plugin-automation 0.8.4-main.a4bbb77 → 0.8.4-main.ae835ea
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-LBXJDM6Z.mjs +11 -0
- package/dist/lib/browser/{AutomationSettings-6XLG2PCK.mjs → AutomationSettings-IIEI5D2K.mjs} +6 -7
- package/dist/lib/{node-esm/AutomationSettings-4IW7RGMN.mjs.map → browser/AutomationSettings-IIEI5D2K.mjs.map} +1 -1
- package/dist/lib/browser/{FunctionsContainer-BQ6VBDIG.mjs → FunctionsContainer-IZTCGNJZ.mjs} +3 -3
- package/dist/lib/browser/{FunctionsPanel-QBTOFFNU.mjs → FunctionsPanel-HFCK3JRB.mjs} +3 -3
- package/dist/lib/browser/{app-graph-builder-6TP6ZNYG.mjs → app-graph-builder-7VKA2GS3.mjs} +8 -7
- package/dist/lib/browser/app-graph-builder-7VKA2GS3.mjs.map +7 -0
- package/dist/lib/browser/{chunk-M2WQCY2T.mjs → chunk-CVYJM6OO.mjs} +19 -6
- package/dist/lib/browser/chunk-CVYJM6OO.mjs.map +7 -0
- package/dist/lib/browser/{chunk-EAQL33PI.mjs → chunk-FHSN7G4H.mjs} +22 -9
- package/dist/lib/browser/chunk-FHSN7G4H.mjs.map +7 -0
- package/dist/lib/browser/{chunk-ZTXBAXUT.mjs → chunk-GCGHLQM2.mjs} +2 -2
- package/dist/lib/browser/chunk-GCGHLQM2.mjs.map +7 -0
- package/dist/lib/browser/{chunk-IN2YC7NY.mjs → chunk-JW7XSPYW.mjs} +57 -20
- package/dist/lib/browser/chunk-JW7XSPYW.mjs.map +7 -0
- package/dist/lib/browser/{chunk-LNMCGQC2.mjs → chunk-K5YNWESC.mjs} +60 -20
- package/dist/lib/browser/chunk-K5YNWESC.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-U66KBK53.mjs → chunk-XXZNGORC.mjs} +5 -5
- package/dist/lib/browser/{chunk-F4K5EMWL.mjs → chunk-YBPJCY3F.mjs} +3 -3
- package/dist/lib/browser/chunk-YBPJCY3F.mjs.map +7 -0
- package/dist/lib/browser/{compute-runtime-OFQPXD5I.mjs → compute-runtime-PFYRMGN2.mjs} +27 -71
- package/dist/lib/browser/compute-runtime-PFYRMGN2.mjs.map +7 -0
- package/dist/lib/browser/hooks/index.mjs +3 -4
- package/dist/lib/browser/index.mjs +26 -10
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/{intent-resolver-JXVWRAAH.mjs → intent-resolver-5HR7M7T6.mjs} +8 -8
- 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-NG3MJCDH.mjs → react-surface-WPMY3EX2.mjs} +5 -6
- package/dist/lib/browser/react-surface-WPMY3EX2.mjs.map +7 -0
- package/dist/lib/browser/types/index.mjs +2 -2
- package/dist/lib/node-esm/{AutomationPanel-WMVR3IST.mjs → AutomationPanel-NVEIUIZP.mjs} +4 -4
- package/dist/lib/node-esm/{AutomationSettings-4IW7RGMN.mjs → AutomationSettings-VIIEPI2P.mjs} +6 -7
- package/dist/lib/node-esm/{FunctionsContainer-LHUUOLA5.mjs → FunctionsContainer-KKRCIXGB.mjs} +3 -3
- package/dist/lib/node-esm/{FunctionsPanel-SHTQIMDV.mjs → FunctionsPanel-74ELGR7P.mjs} +3 -3
- package/dist/lib/node-esm/{app-graph-builder-3A2NIPR5.mjs → app-graph-builder-RTOFJNFV.mjs} +8 -7
- package/dist/lib/node-esm/app-graph-builder-RTOFJNFV.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-DSEZPWSO.mjs → chunk-3BJ6BR3E.mjs} +19 -6
- package/dist/lib/node-esm/chunk-3BJ6BR3E.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-5MQJPJR2.mjs → chunk-CEVIVRTY.mjs} +6 -2
- package/dist/lib/node-esm/chunk-CEVIVRTY.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-CEWZ2CDM.mjs → chunk-ECJKIUBO.mjs} +3 -3
- package/dist/lib/node-esm/chunk-ECJKIUBO.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-PBULJE4B.mjs → chunk-JOCKHLFT.mjs} +22 -9
- package/dist/lib/node-esm/chunk-JOCKHLFT.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-B6O6UBS7.mjs → chunk-MRYKW5TM.mjs} +2 -2
- package/dist/lib/node-esm/chunk-MRYKW5TM.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-2L2X4JMP.mjs → chunk-U5Q2NI7H.mjs} +5 -5
- package/dist/lib/node-esm/{chunk-N7NES6SZ.mjs → chunk-W76WUTZY.mjs} +57 -20
- package/dist/lib/node-esm/chunk-W76WUTZY.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-MN5S5J4O.mjs → chunk-Y7PJXFCJ.mjs} +60 -20
- package/dist/lib/node-esm/chunk-Y7PJXFCJ.mjs.map +7 -0
- package/dist/lib/node-esm/{compute-runtime-W5UJNSQY.mjs → compute-runtime-IXCSD3W7.mjs} +27 -71
- package/dist/lib/node-esm/compute-runtime-IXCSD3W7.mjs.map +7 -0
- package/dist/lib/node-esm/hooks/index.mjs +3 -4
- package/dist/lib/node-esm/index.mjs +26 -10
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/{intent-resolver-ROEBZXSS.mjs → intent-resolver-KDRYB5BC.mjs} +8 -8
- 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-A4KTYX6Z.mjs → react-surface-Y2BBJV2I.mjs} +5 -6
- package/dist/lib/node-esm/react-surface-Y2BBJV2I.mjs.map +7 -0
- package/dist/lib/node-esm/types/index.mjs +2 -2
- 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 +3 -2
- package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
- package/dist/types/src/capabilities/compute-runtime.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 +2 -2
- package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts.map +1 -1
- package/dist/types/src/components/AutomationPanel/AutomationPanel.stories.d.ts +1 -0
- package/dist/types/src/components/AutomationPanel/AutomationPanel.stories.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 +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 +4 -2
- package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.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/useComputeRuntimeCallback.d.ts +1 -1
- package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts.map +1 -1
- package/dist/types/src/hooks/useTriggerRuntimeControls.d.ts +2 -2
- package/dist/types/src/hooks/useTriggerRuntimeControls.d.ts.map +1 -1
- 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.map +1 -1
- package/dist/types/src/translations.d.ts +1 -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 +33 -31
- package/src/AutomationPlugin.tsx +4 -2
- package/src/capabilities/app-graph-builder.ts +7 -6
- package/src/capabilities/capabilities.ts +3 -2
- package/src/capabilities/compute-runtime.ts +7 -5
- package/src/capabilities/intent-resolver.ts +5 -5
- package/src/capabilities/react-surface.tsx +2 -3
- package/src/components/AutomationPanel/AutomationPanel.stories.tsx +3 -4
- package/src/components/AutomationPanel/AutomationPanel.tsx +91 -28
- package/src/components/FunctionsPanel/FunctionsPanel.tsx +22 -10
- package/src/components/TriggerEditor/FunctionInputEditor.tsx +10 -4
- package/src/components/TriggerEditor/SpecSelector.tsx +12 -6
- package/src/components/TriggerEditor/TriggerEditor.stories.tsx +58 -17
- package/src/components/TriggerEditor/TriggerEditor.tsx +44 -18
- package/src/events.ts +11 -0
- package/src/hooks/useComputeRuntimeCallback.ts +3 -1
- package/src/hooks/useTriggerRuntimeControls.ts +4 -4
- package/src/index.ts +2 -0
- package/src/meta.ts +5 -2
- package/src/testing/test-functions.ts +1 -1
- package/src/translations.ts +1 -0
- package/src/types/schema.ts +1 -1
- package/dist/lib/browser/AutomationPanel-4QA5G3ZY.mjs +0 -11
- package/dist/lib/browser/app-graph-builder-6TP6ZNYG.mjs.map +0 -7
- package/dist/lib/browser/chunk-BDJPBZGC.mjs +0 -14
- package/dist/lib/browser/chunk-BDJPBZGC.mjs.map +0 -7
- package/dist/lib/browser/chunk-EAQL33PI.mjs.map +0 -7
- package/dist/lib/browser/chunk-F4K5EMWL.mjs.map +0 -7
- package/dist/lib/browser/chunk-IN2YC7NY.mjs.map +0 -7
- package/dist/lib/browser/chunk-LNMCGQC2.mjs.map +0 -7
- package/dist/lib/browser/chunk-M2WQCY2T.mjs.map +0 -7
- package/dist/lib/browser/chunk-WWURMV25.mjs +0 -13
- package/dist/lib/browser/chunk-WWURMV25.mjs.map +0 -7
- package/dist/lib/browser/chunk-ZTXBAXUT.mjs.map +0 -7
- package/dist/lib/browser/compute-runtime-OFQPXD5I.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-JXVWRAAH.mjs.map +0 -7
- package/dist/lib/browser/react-surface-NG3MJCDH.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-3A2NIPR5.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-5MQJPJR2.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-B6O6UBS7.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-CEWZ2CDM.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-DSEZPWSO.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-MN5S5J4O.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-N7NES6SZ.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-PBULJE4B.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-UTZIMYCX.mjs +0 -16
- package/dist/lib/node-esm/chunk-UTZIMYCX.mjs.map +0 -7
- package/dist/lib/node-esm/compute-runtime-W5UJNSQY.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-ROEBZXSS.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-A4KTYX6Z.mjs.map +0 -7
- /package/dist/lib/browser/{AutomationPanel-4QA5G3ZY.mjs.map → AutomationPanel-LBXJDM6Z.mjs.map} +0 -0
- /package/dist/lib/browser/{FunctionsContainer-BQ6VBDIG.mjs.map → FunctionsContainer-IZTCGNJZ.mjs.map} +0 -0
- /package/dist/lib/browser/{FunctionsPanel-QBTOFFNU.mjs.map → FunctionsPanel-HFCK3JRB.mjs.map} +0 -0
- /package/dist/lib/browser/{chunk-U66KBK53.mjs.map → chunk-XXZNGORC.mjs.map} +0 -0
- /package/dist/lib/node-esm/{AutomationPanel-WMVR3IST.mjs.map → AutomationPanel-NVEIUIZP.mjs.map} +0 -0
- /package/dist/lib/{browser/AutomationSettings-6XLG2PCK.mjs.map → node-esm/AutomationSettings-VIIEPI2P.mjs.map} +0 -0
- /package/dist/lib/node-esm/{FunctionsContainer-LHUUOLA5.mjs.map → FunctionsContainer-KKRCIXGB.mjs.map} +0 -0
- /package/dist/lib/node-esm/{FunctionsPanel-SHTQIMDV.mjs.map → FunctionsPanel-74ELGR7P.mjs.map} +0 -0
- /package/dist/lib/node-esm/{chunk-2L2X4JMP.mjs.map → chunk-U5Q2NI7H.mjs.map} +0 -0
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
2
|
|
|
3
3
|
// src/meta.ts
|
|
4
|
+
import { trim } from "@dxos/util";
|
|
4
5
|
var meta = {
|
|
5
6
|
id: "dxos.org/plugin/automation",
|
|
6
7
|
name: "Automation",
|
|
7
|
-
description:
|
|
8
|
+
description: trim`
|
|
9
|
+
Workflow automation engine that triggers custom actions based on object events and conditions.
|
|
10
|
+
Create automated pipelines that respond to changes and streamline repetitive tasks.
|
|
11
|
+
`,
|
|
8
12
|
icon: "ph--robot--regular",
|
|
9
13
|
source: "https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-automation"
|
|
10
14
|
};
|
|
@@ -12,4 +16,4 @@ var meta = {
|
|
|
12
16
|
export {
|
|
13
17
|
meta
|
|
14
18
|
};
|
|
15
|
-
//# sourceMappingURL=chunk-
|
|
19
|
+
//# sourceMappingURL=chunk-CEVIVRTY.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,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-CEVIVRTY.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-ECJKIUBO.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,17 @@
|
|
|
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-CEVIVRTY.mjs";
|
|
5
5
|
|
|
6
6
|
// src/components/FunctionsPanel/FunctionsPanel.tsx
|
|
7
7
|
import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
|
|
8
|
-
import
|
|
8
|
+
import * as Schema from "effect/Schema";
|
|
9
9
|
import React, { useCallback, useMemo } from "react";
|
|
10
10
|
import { LayoutAction, createIntent, useIntentDispatcher } from "@dxos/app-framework";
|
|
11
|
-
import {
|
|
11
|
+
import { Function, Script } from "@dxos/functions";
|
|
12
|
+
import { SpaceAction } from "@dxos/plugin-space/types";
|
|
12
13
|
import { Filter, fullyQualifiedId, useQuery } from "@dxos/react-client/echo";
|
|
13
|
-
import { Button, useTranslation } from "@dxos/react-ui";
|
|
14
|
+
import { Button, IconButton, useTranslation } from "@dxos/react-ui";
|
|
14
15
|
import { controlItemClasses } from "@dxos/react-ui-form";
|
|
15
16
|
import { List } from "@dxos/react-ui-list";
|
|
16
17
|
import { ghostHover, mx } from "@dxos/react-ui-theme";
|
|
@@ -19,8 +20,8 @@ var FunctionsPanel = ({ space }) => {
|
|
|
19
20
|
var _effect = _useSignals();
|
|
20
21
|
try {
|
|
21
22
|
const { t } = useTranslation(meta.id);
|
|
22
|
-
const functions = useQuery(space, Filter.type(
|
|
23
|
-
const scripts = useQuery(space, Filter.type(
|
|
23
|
+
const functions = useQuery(space, Filter.type(Function.Function));
|
|
24
|
+
const scripts = useQuery(space, Filter.type(Script.Script));
|
|
24
25
|
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
25
26
|
const functionToScriptMap = useMemo(() => functions.reduce((map, func) => {
|
|
26
27
|
const scriptId = func.source?.target?.id;
|
|
@@ -55,12 +56,19 @@ var FunctionsPanel = ({ space }) => {
|
|
|
55
56
|
functionToScriptMap,
|
|
56
57
|
dispatch
|
|
57
58
|
]);
|
|
59
|
+
const handleDelete = useCallback((func) => dispatch(createIntent(SpaceAction.RemoveObjects, {
|
|
60
|
+
objects: [
|
|
61
|
+
func
|
|
62
|
+
]
|
|
63
|
+
})), [
|
|
64
|
+
dispatch
|
|
65
|
+
]);
|
|
58
66
|
return /* @__PURE__ */ React.createElement("div", {
|
|
59
67
|
role: "none",
|
|
60
68
|
className: mx(controlItemClasses)
|
|
61
69
|
}, functions.length > 0 && /* @__PURE__ */ React.createElement(List.Root, {
|
|
62
70
|
items: functions,
|
|
63
|
-
isItem: Schema.is(
|
|
71
|
+
isItem: Schema.is(Function.Function),
|
|
64
72
|
getId: (func) => func.id
|
|
65
73
|
}, ({ items }) => /* @__PURE__ */ React.createElement("div", {
|
|
66
74
|
role: "list",
|
|
@@ -77,7 +85,12 @@ var FunctionsPanel = ({ space }) => {
|
|
|
77
85
|
className: "text-xs text-description truncate"
|
|
78
86
|
}, getScriptName(func))), functionToScriptMap[func.id] && /* @__PURE__ */ React.createElement(Button, {
|
|
79
87
|
onClick: () => handleGoToScript(func)
|
|
80
|
-
}, t("go to function source button label"))
|
|
88
|
+
}, t("go to function source button label")), /* @__PURE__ */ React.createElement(IconButton, {
|
|
89
|
+
iconOnly: true,
|
|
90
|
+
icon: "ph--trash--regular",
|
|
91
|
+
label: t("delete function button label"),
|
|
92
|
+
onClick: () => handleDelete(func)
|
|
93
|
+
}))))), functions.length === 0 && /* @__PURE__ */ React.createElement("div", {
|
|
81
94
|
className: "text-center plb-4 text-gray-500"
|
|
82
95
|
}, t("no functions found")));
|
|
83
96
|
} finally {
|
|
@@ -92,4 +105,4 @@ export {
|
|
|
92
105
|
FunctionsPanel,
|
|
93
106
|
FunctionsPanel_default
|
|
94
107
|
};
|
|
95
|
-
//# sourceMappingURL=chunk-
|
|
108
|
+
//# sourceMappingURL=chunk-JOCKHLFT.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, useIntentDispatcher } from '@dxos/app-framework';\nimport { Function, Script } from '@dxos/functions';\nimport { SpaceAction } from '@dxos/plugin-space/types';\nimport { Filter, type Space, fullyQualifiedId, 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(createIntent(LayoutAction.Open, { part: 'main', subject: [fullyQualifiedId(script)] }));\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 w-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", "Function", "Script", "SpaceAction", "Filter", "fullyQualifiedId", "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", "fullyQualifiedId", "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
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
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-CEVIVRTY.mjs";
|
|
5
5
|
|
|
6
6
|
// src/capabilities/capabilities.ts
|
|
7
7
|
import { defineCapability } from "@dxos/app-framework";
|
|
@@ -13,4 +13,4 @@ var AutomationCapabilities;
|
|
|
13
13
|
export {
|
|
14
14
|
AutomationCapabilities
|
|
15
15
|
};
|
|
16
|
-
//# sourceMappingURL=chunk-
|
|
16
|
+
//# sourceMappingURL=chunk-MRYKW5TM.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/capabilities/capabilities.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as ManagedRuntime from 'effect/ManagedRuntime';\n\nimport { type AiService, type ToolExecutionService, type ToolResolverService } from '@dxos/ai';\nimport { defineCapability } from '@dxos/app-framework';\nimport type {\n CredentialsService,\n DatabaseService,\n FunctionInvocationService,\n InvocationTracer,\n QueueService,\n TriggerDispatcher,\n TriggerStateStore,\n} from '@dxos/functions';\nimport type { SpaceId } from '@dxos/keys';\n\nimport { meta } from '../meta';\n\nexport namespace AutomationCapabilities {\n /**\n * Service stack for executing agents, functions, and triggers.\n */\n export type ComputeServices =\n | TriggerDispatcher\n | AiService.AiService\n | DatabaseService\n | QueueService\n | CredentialsService\n | FunctionInvocationService\n | InvocationTracer\n | TriggerStateStore\n // TODO(dmaretskyi): Those should be provided at AI-chat call site.\n | ToolResolverService\n | ToolExecutionService;\n\n export type ComputeRuntime = ManagedRuntime.ManagedRuntime<AutomationCapabilities.ComputeServices, never>;\n export interface ComputeRuntimeProvider {\n getRuntime(spaceId: SpaceId): ComputeRuntime;\n }\n\n /**\n * Runtime for executing agents, functions, and triggers.\n */\n export const ComputeRuntime = defineCapability<ComputeRuntimeProvider>(`${meta.id}/capability/compute-runtime`);\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;AAOA,SAASA,wBAAwB;UAchBC,yBAAAA;0BAyBFC,iBAAiBC,iBAAyC,GAAGC,KAAKC,EAAE,6BAA6B;AAChH,GA1BiBJ,2BAAAA,yBAAAA,CAAAA,EAAAA;;",
|
|
6
|
+
"names": ["defineCapability", "AutomationCapabilities", "ComputeRuntime", "defineCapability", "meta", "id"]
|
|
7
|
+
}
|
|
@@ -2,10 +2,10 @@ import { createRequire } from 'node:module';const require = createRequire(import
|
|
|
2
2
|
|
|
3
3
|
// src/components/index.ts
|
|
4
4
|
import { lazy } from "react";
|
|
5
|
-
var AutomationPanel = lazy(() => import("./AutomationPanel-
|
|
6
|
-
var AutomationSettings = lazy(() => import("./AutomationSettings-
|
|
7
|
-
var FunctionsContainer = lazy(() => import("./FunctionsContainer-
|
|
8
|
-
var FunctionsPanel = lazy(() => import("./FunctionsPanel-
|
|
5
|
+
var AutomationPanel = lazy(() => import("./AutomationPanel-NVEIUIZP.mjs"));
|
|
6
|
+
var AutomationSettings = lazy(() => import("./AutomationSettings-VIIEPI2P.mjs"));
|
|
7
|
+
var FunctionsContainer = lazy(() => import("./FunctionsContainer-KKRCIXGB.mjs"));
|
|
8
|
+
var FunctionsPanel = lazy(() => import("./FunctionsPanel-74ELGR7P.mjs"));
|
|
9
9
|
|
|
10
10
|
export {
|
|
11
11
|
AutomationPanel,
|
|
@@ -13,4 +13,4 @@ export {
|
|
|
13
13
|
FunctionsContainer,
|
|
14
14
|
FunctionsPanel
|
|
15
15
|
};
|
|
16
|
-
//# sourceMappingURL=chunk-
|
|
16
|
+
//# sourceMappingURL=chunk-U5Q2NI7H.mjs.map
|
|
@@ -1,16 +1,18 @@
|
|
|
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-CEVIVRTY.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 { Function, Script, Trigger as Trigger2 } 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,7 +84,8 @@ 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 { Trigger } 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) => {
|
|
@@ -98,12 +106,14 @@ var SpecSelector = (props) => {
|
|
|
98
106
|
case "subscription":
|
|
99
107
|
return {
|
|
100
108
|
kind: "subscription",
|
|
101
|
-
|
|
109
|
+
query: {
|
|
110
|
+
ast: Query.select(Filter.nothing()).ast
|
|
111
|
+
}
|
|
102
112
|
};
|
|
103
113
|
case "queue":
|
|
104
114
|
return {
|
|
105
115
|
kind: "queue",
|
|
106
|
-
queue: ""
|
|
116
|
+
queue: "dxn:"
|
|
107
117
|
};
|
|
108
118
|
case "email":
|
|
109
119
|
return {
|
|
@@ -125,7 +135,7 @@ var SpecSelector = (props) => {
|
|
|
125
135
|
}, [
|
|
126
136
|
specProps
|
|
127
137
|
]);
|
|
128
|
-
const options = useMemo2(() =>
|
|
138
|
+
const options = useMemo2(() => Trigger.Kinds.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: Trigger2.Trigger,
|
|
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(Function.Function));
|
|
186
|
+
const workflows = useQuery(space, Filter2.type(ComputeGraph));
|
|
187
|
+
const scripts = useQuery(space, Filter2.type(Script.Script));
|
|
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-W76WUTZY.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 { 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 = 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: 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", "Type", "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", "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
|
+
}
|
|
@@ -1,32 +1,51 @@
|
|
|
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-W76WUTZY.mjs";
|
|
5
5
|
import {
|
|
6
6
|
meta
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-CEVIVRTY.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 EFn 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 { Function, Script, Trigger } from "@dxos/functions";
|
|
18
|
+
import { useTypeOptions } from "@dxos/plugin-space";
|
|
15
19
|
import { useClient } from "@dxos/react-client";
|
|
16
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
27
|
var AutomationPanel = ({ classNames, space, object, initialTrigger, onDone }) => {
|
|
23
28
|
var _effect = _useSignals();
|
|
24
29
|
try {
|
|
25
30
|
const { t } = useTranslation(meta.id);
|
|
26
31
|
const client = useClient();
|
|
27
|
-
const
|
|
28
|
-
const
|
|
29
|
-
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
|
+
"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) => {
|
|
@@ -34,7 +53,7 @@ var AutomationPanel = ({ classNames, space, object, initialTrigger, onDone }) =>
|
|
|
34
53
|
setSelected(trigger2);
|
|
35
54
|
};
|
|
36
55
|
const handleAdd = () => {
|
|
37
|
-
setTrigger(
|
|
56
|
+
setTrigger(Trigger.make({}));
|
|
38
57
|
setSelected(void 0);
|
|
39
58
|
};
|
|
40
59
|
const handleDelete = (trigger2) => {
|
|
@@ -46,7 +65,7 @@ var AutomationPanel = ({ classNames, space, object, initialTrigger, onDone }) =>
|
|
|
46
65
|
if (selected) {
|
|
47
66
|
Object.assign(selected, trigger2);
|
|
48
67
|
} else {
|
|
49
|
-
space.db.add(
|
|
68
|
+
space.db.add(Trigger.make(trigger2));
|
|
50
69
|
}
|
|
51
70
|
setTrigger(void 0);
|
|
52
71
|
setSelected(void 0);
|
|
@@ -62,20 +81,23 @@ var AutomationPanel = ({ classNames, space, object, initialTrigger, onDone }) =>
|
|
|
62
81
|
}, /* @__PURE__ */ React.createElement(TriggerEditor, {
|
|
63
82
|
space,
|
|
64
83
|
trigger,
|
|
84
|
+
readonlySpec: Boolean(object),
|
|
85
|
+
tags,
|
|
86
|
+
types,
|
|
65
87
|
onSave: handleSave,
|
|
66
88
|
onCancel: handleCancel
|
|
67
89
|
}));
|
|
68
90
|
}
|
|
69
91
|
return /* @__PURE__ */ React.createElement("div", {
|
|
70
92
|
className: mx(controlItemClasses, classNames)
|
|
71
|
-
},
|
|
72
|
-
items:
|
|
73
|
-
isItem: Schema.is(
|
|
93
|
+
}, filteredTriggers.length > 0 && /* @__PURE__ */ React.createElement(List.Root, {
|
|
94
|
+
items: filteredTriggers,
|
|
95
|
+
isItem: Schema.is(Trigger.Trigger),
|
|
74
96
|
getId: (field) => field.id
|
|
75
|
-
}, ({ items:
|
|
97
|
+
}, ({ items: filteredTriggers2 }) => /* @__PURE__ */ React.createElement("div", {
|
|
76
98
|
role: "list",
|
|
77
99
|
className: "flex flex-col w-full"
|
|
78
|
-
},
|
|
100
|
+
}, filteredTriggers2?.map((trigger2) => {
|
|
79
101
|
const copyAction = getCopyAction(client, trigger2);
|
|
80
102
|
return /* @__PURE__ */ React.createElement(List.Item, {
|
|
81
103
|
key: trigger2.id,
|
|
@@ -89,13 +111,13 @@ var AutomationPanel = ({ classNames, space, object, initialTrigger, onDone }) =>
|
|
|
89
111
|
}, /* @__PURE__ */ React.createElement(List.ItemTitle, {
|
|
90
112
|
classNames: "px-1 cursor-pointer w-0 shrink truncate",
|
|
91
113
|
onClick: () => handleSelect(trigger2)
|
|
92
|
-
}, getFunctionName(
|
|
114
|
+
}, getFunctionName(functions, trigger2) ?? "\u2205"), copyAction && /* @__PURE__ */ React.createElement(Clipboard.IconButton, {
|
|
93
115
|
label: t(copyAction.translationKey),
|
|
94
116
|
value: copyAction.contentProvider()
|
|
95
117
|
})), /* @__PURE__ */ React.createElement(List.ItemDeleteButton, {
|
|
96
118
|
onClick: () => handleDelete(trigger2)
|
|
97
119
|
}));
|
|
98
|
-
}))),
|
|
120
|
+
}))), filteredTriggers.length > 0 && /* @__PURE__ */ React.createElement(Separator, {
|
|
99
121
|
classNames: "mlb-4"
|
|
100
122
|
}), /* @__PURE__ */ React.createElement(IconButton, {
|
|
101
123
|
icon: "ph--plus--regular",
|
|
@@ -128,11 +150,29 @@ var getWebhookUrl = (client, trigger) => {
|
|
|
128
150
|
edgeUrl.protocol = isSecure ? "https" : "http";
|
|
129
151
|
return new URL(`/webhook/${spaceId}:${trigger.id}`, edgeUrl).toString();
|
|
130
152
|
};
|
|
131
|
-
var getFunctionName = (
|
|
153
|
+
var getFunctionName = (functions, trigger) => {
|
|
132
154
|
const shortId = trigger.function && `${trigger.function.dxn.toString().slice(0, 16)}\u2026`;
|
|
133
155
|
const functionObject = functions.find((fn) => fn === trigger.function?.target);
|
|
134
156
|
return functionObject?.name ?? shortId;
|
|
135
157
|
};
|
|
158
|
+
var scriptMatch = (script) => (trigger) => {
|
|
159
|
+
const fn = trigger.function?.target;
|
|
160
|
+
if (!Obj.instanceOf(Function.Function, fn)) {
|
|
161
|
+
return false;
|
|
162
|
+
}
|
|
163
|
+
return fn.source?.target === script;
|
|
164
|
+
};
|
|
165
|
+
var projectMatch = (project) => {
|
|
166
|
+
const viewQueries = EFn.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
|
+
};
|
|
174
|
+
};
|
|
175
|
+
var triggerMatch = Match.type().pipe(Match.withReturnType(), Match.when((obj) => Obj.instanceOf(Script.Script, obj), (obj) => scriptMatch(obj)), Match.when((obj) => Obj.instanceOf(DataType.Project, obj), (obj) => projectMatch(obj)), Match.orElse((_obj) => () => true));
|
|
136
176
|
|
|
137
177
|
// src/components/AutomationPanel/index.ts
|
|
138
178
|
var AutomationPanel_default = AutomationPanel;
|
|
@@ -141,4 +181,4 @@ export {
|
|
|
141
181
|
AutomationPanel,
|
|
142
182
|
AutomationPanel_default
|
|
143
183
|
};
|
|
144
|
-
//# sourceMappingURL=chunk-
|
|
184
|
+
//# sourceMappingURL=chunk-Y7PJXFCJ.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 { 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?: 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({ space, annotation: ['dynamic', 'limited-static', 'object-form'] });\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 w-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', '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: 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: DataType.Project) => {\n const viewQueries = EFn.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: 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(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", "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", "DataType", "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", "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", "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", "Obj", "instanceOf", "source", "projectMatch", "project", "viewQueries", "pipe", "collections", "collection", "DataType", "View", "view", "getSnapshot", "query", "ast", "JSON", "stringify", "some", "withReturnType", "when", "obj", "Script", "Project", "orElse", "_obj", "AutomationPanel"]
|
|
7
|
+
}
|