@haiiro/docuflow 0.0.6 → 0.0.8
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/README.md +28 -18
- package/manifest.json +13 -34
- package/package.json +1 -1
- package/src/front-components/docflow-processes.front-component.mjs +27 -27
- package/src/front-components/docflow-processes.front-component.tsx +26 -90
- package/src/front-components/docflow-tasks.front-component.mjs +19 -19
- package/src/front-components/docflow-tasks.front-component.tsx +24 -4
- package/src/front-components/process-steps.front-component.mjs +19 -19
- package/src/front-components/process-steps.front-component.tsx +9 -11
- package/src/logic-functions/hand-out-form-step.logic-function.mjs +6 -1
- package/src/logic-functions/launch-parameters-step.logic-function.mjs +1 -15
- package/src/logic-functions/launch-parameters-step.logic-function.ts +4 -18
- package/src/logic-functions/launch-process.logic-function.mjs +1 -0
- package/src/logic-functions/on-workflow-run-updated.logic-function.mjs +6 -1
- package/src/logic-functions/save-launch-fields.logic-function.mjs +76 -79
- package/src/logic-functions/save-launch-fields.logic-function.ts +9 -9
|
@@ -19,11 +19,11 @@ import {
|
|
|
19
19
|
} from 'src/front/ui/components';
|
|
20
20
|
import { FormFieldsBuilder } from 'src/front/ui/form-fields-builder';
|
|
21
21
|
import { restAnd, restEq } from 'src/shared/api/rest-filter.util';
|
|
22
|
-
import {
|
|
22
|
+
import { LAUNCH_TRIGGER_NAME, TRIGGER_STEP_ID } from 'src/shared/docflow.constants';
|
|
23
23
|
import { type FormField } from 'src/shared/form/form-field.type';
|
|
24
24
|
import { getFillableFormFields, getFormFieldsError, parseFormFields } from 'src/shared/form/form-fields.util';
|
|
25
25
|
import { readStepSettings, type StepSettings } from 'src/shared/form/step-settings.util';
|
|
26
|
-
import {
|
|
26
|
+
import { parseLaunchFields } from 'src/shared/workflow/launch-step.util';
|
|
27
27
|
import { type WorkflowStep } from 'src/shared/workflow/workflow-run.type';
|
|
28
28
|
import { getFormStepFields, isFormStep } from 'src/shared/workflow/workflow-run.util';
|
|
29
29
|
import { logDocflow, logDocflowError } from 'src/shared/log.util';
|
|
@@ -39,12 +39,10 @@ const sectionStyle = { display: 'flex', flexDirection: 'column' as const };
|
|
|
39
39
|
const LaunchParametersEditor = ({
|
|
40
40
|
workflowId,
|
|
41
41
|
initialFields,
|
|
42
|
-
launchStepId,
|
|
43
42
|
onSaved,
|
|
44
43
|
}: {
|
|
45
44
|
workflowId: string;
|
|
46
45
|
initialFields: FormField[];
|
|
47
|
-
launchStepId: string | undefined;
|
|
48
46
|
onSaved: () => void;
|
|
49
47
|
}) => {
|
|
50
48
|
const theme = useTheme();
|
|
@@ -72,7 +70,7 @@ const LaunchParametersEditor = ({
|
|
|
72
70
|
await enqueueSnackbar({
|
|
73
71
|
message:
|
|
74
72
|
fields.length > 0
|
|
75
|
-
? `Параметры
|
|
73
|
+
? `Параметры сохранены: процесс начинается с «${LAUNCH_TRIGGER_NAME}», опубликуйте его`
|
|
76
74
|
: 'Параметры убраны',
|
|
77
75
|
variant: 'success',
|
|
78
76
|
});
|
|
@@ -86,16 +84,17 @@ const LaunchParametersEditor = ({
|
|
|
86
84
|
};
|
|
87
85
|
|
|
88
86
|
return (
|
|
89
|
-
<section style={{ ...sectionStyle, gap: theme.spacing[2] }} aria-label=
|
|
90
|
-
<SectionTitle
|
|
87
|
+
<section style={{ ...sectionStyle, gap: theme.spacing[2] }} aria-label="Параметры запуска">
|
|
88
|
+
<SectionTitle>Параметры запуска</SectionTitle>
|
|
91
89
|
<Message tone="hint">
|
|
92
|
-
Что человек заполняет перед запуском.
|
|
93
|
-
|
|
90
|
+
Что человек заполняет перед запуском. Первым блоком процесса становится «{LAUNCH_TRIGGER_NAME}»:
|
|
91
|
+
в следующих шагах значения выбираются как его переменные, например сотрудник — в поле
|
|
92
|
+
«Исполнитель». Без параметров процесс начинается с обычного «Запуск вручную».
|
|
94
93
|
</Message>
|
|
95
94
|
<FormFieldsBuilder
|
|
96
95
|
fields={fields}
|
|
97
96
|
onChange={setFields}
|
|
98
|
-
variablePrefix={
|
|
97
|
+
variablePrefix={TRIGGER_STEP_ID}
|
|
99
98
|
disabled={isSaving}
|
|
100
99
|
/>
|
|
101
100
|
{errorMessage !== undefined && <Message tone="danger">{errorMessage}</Message>}
|
|
@@ -260,7 +259,6 @@ const ProcessSteps = () => {
|
|
|
260
259
|
key={`${workflowId}:${launchEditorKey}`}
|
|
261
260
|
workflowId={workflowId}
|
|
262
261
|
initialFields={parseLaunchFields(data.process.smbLaunchFields)}
|
|
263
|
-
launchStepId={findLaunchParametersStep(draft?.steps)?.id}
|
|
264
262
|
onSaved={() => {
|
|
265
263
|
void reload().then(() => setLaunchEditorKey((current) => current + 1));
|
|
266
264
|
}}
|
|
@@ -26,6 +26,7 @@ var DOCFLOW_SECTION = "DOCFLOW";
|
|
|
26
26
|
var CRM_SECTION = "CRM";
|
|
27
27
|
var DOCFLOW_LAUNCH_PARAMETERS_KEY = "smbDocflowParameters";
|
|
28
28
|
var LAUNCH_PARAMETERS_STEP_INPUT = `{{trigger.${DOCFLOW_LAUNCH_PARAMETERS_KEY}}}`;
|
|
29
|
+
var LAUNCH_TRIGGER_NAME = "\u0417\u0430\u043F\u0443\u0441\u043A \u0441 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0430\u043C\u0438";
|
|
29
30
|
var TASK_TODO_STATUS = "TODO";
|
|
30
31
|
var FORM_FIELD_ROLE_SETTING = "smbRole";
|
|
31
32
|
var FORM_FIELD_DUE_IN_DAYS_SETTING = "smbDueInDays";
|
|
@@ -73,6 +74,10 @@ var getRunTargetRecord = (state) => {
|
|
|
73
74
|
return targetFieldName !== void 0 && recordId !== void 0 ? { targetFieldName, recordId } : void 0;
|
|
74
75
|
};
|
|
75
76
|
|
|
77
|
+
// src/shared/workflow/launch-step.util.ts
|
|
78
|
+
var isLaunchTrigger = (trigger) => trigger?.type === "WEBHOOK" && trigger.name === LAUNCH_TRIGGER_NAME;
|
|
79
|
+
var isLaunchableTrigger = (trigger) => trigger?.type === "MANUAL" || isLaunchTrigger(trigger);
|
|
80
|
+
|
|
76
81
|
// src/shared/workflow/workflow-run.util.ts
|
|
77
82
|
var DAY_IN_MS = 24 * 60 * 60 * 1e3;
|
|
78
83
|
var UUID_PATTERN2 = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
@@ -135,7 +140,7 @@ var getFormStepTaskRequests = ({
|
|
|
135
140
|
}) => {
|
|
136
141
|
const steps = state?.flow?.steps ?? [];
|
|
137
142
|
const stepInfos = state?.stepInfos ?? {};
|
|
138
|
-
const isStartedByHand = state?.flow?.trigger
|
|
143
|
+
const isStartedByHand = isLaunchableTrigger(state?.flow?.trigger);
|
|
139
144
|
return steps.flatMap((step) => {
|
|
140
145
|
const stepInfo = stepInfos[step.id];
|
|
141
146
|
if (!isFormStep(step) || stepInfo?.status !== "PENDING" || stepInfo.error !== void 0 && stepInfo.error !== null || typeof stepInfo.threadId !== "string" || stepInfo.threadId.length === 0) {
|
|
@@ -24,7 +24,6 @@ var defineLogicFunction = __defineFactoryStub;
|
|
|
24
24
|
// src/shared/docflow.constants.ts
|
|
25
25
|
var DOCFLOW_LAUNCH_PARAMETERS_KEY = "smbDocflowParameters";
|
|
26
26
|
var LAUNCH_PARAMETERS_STEP_INPUT = `{{trigger.${DOCFLOW_LAUNCH_PARAMETERS_KEY}}}`;
|
|
27
|
-
var LAUNCH_PARAMETERS_STEP_NAME = "\u0417\u0430\u043F\u0443\u0441\u043A \u0441 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0430\u043C\u0438";
|
|
28
27
|
|
|
29
28
|
// src/shared/workflow/launch-step.util.ts
|
|
30
29
|
var isPlainRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
@@ -40,20 +39,7 @@ var launch_parameters_step_logic_function_default = defineLogicFunction({
|
|
|
40
39
|
name: "docflow-launch-parameters",
|
|
41
40
|
description: "\u041E\u0442\u0434\u0430\u0451\u0442 \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0438\u043C \u0448\u0430\u0433\u0430\u043C \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B, \u0437\u0430\u043F\u043E\u043B\u043D\u0435\u043D\u043D\u044B\u0435 \u043F\u0435\u0440\u0435\u0434 \u0437\u0430\u043F\u0443\u0441\u043A\u043E\u043C \u043F\u0440\u043E\u0446\u0435\u0441\u0441\u0430",
|
|
42
41
|
timeoutSeconds: 10,
|
|
43
|
-
handler
|
|
44
|
-
workflowActionTriggerSettings: {
|
|
45
|
-
label: LAUNCH_PARAMETERS_STEP_NAME,
|
|
46
|
-
icon: "IconPlayerPlay",
|
|
47
|
-
inputSchema: [
|
|
48
|
-
{
|
|
49
|
-
type: "object",
|
|
50
|
-
properties: {
|
|
51
|
-
parameters: { type: "string", label: "\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u0437\u0430\u043F\u0443\u0441\u043A\u0430 (\u043F\u043E\u0434\u0441\u0442\u0430\u0432\u043B\u044F\u044E\u0442\u0441\u044F \u0441\u0430\u043C\u0438)" }
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
],
|
|
55
|
-
outputSchema: [{ type: "object", properties: {} }]
|
|
56
|
-
}
|
|
42
|
+
handler
|
|
57
43
|
});
|
|
58
44
|
export {
|
|
59
45
|
launch_parameters_step_logic_function_default as default
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { defineLogicFunction } from 'twenty-sdk/define';
|
|
2
2
|
|
|
3
|
-
import { LAUNCH_PARAMETERS_STEP_NAME } from 'src/shared/docflow.constants';
|
|
4
3
|
import { readLaunchParameters } from 'src/shared/workflow/launch-step.util';
|
|
5
4
|
import { LAUNCH_PARAMETERS_STEP_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIER } from 'src/universal-identifiers';
|
|
6
5
|
|
|
7
|
-
// The
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
//
|
|
6
|
+
// The step that returned the launch parameters in processes from 0.0.6 and
|
|
7
|
+
// earlier. Parameters now come with the "Запуск с параметрами" trigger, so the
|
|
8
|
+
// editor no longer offers this step; the function stays for the runs of
|
|
9
|
+
// published versions that still contain it.
|
|
11
10
|
const handler = (payload: { parameters?: unknown }) =>
|
|
12
11
|
readLaunchParameters(payload.parameters);
|
|
13
12
|
|
|
@@ -17,17 +16,4 @@ export default defineLogicFunction({
|
|
|
17
16
|
description: 'Отдаёт следующим шагам параметры, заполненные перед запуском процесса',
|
|
18
17
|
timeoutSeconds: 10,
|
|
19
18
|
handler,
|
|
20
|
-
workflowActionTriggerSettings: {
|
|
21
|
-
label: LAUNCH_PARAMETERS_STEP_NAME,
|
|
22
|
-
icon: 'IconPlayerPlay',
|
|
23
|
-
inputSchema: [
|
|
24
|
-
{
|
|
25
|
-
type: 'object',
|
|
26
|
-
properties: {
|
|
27
|
-
parameters: { type: 'string', label: 'Параметры запуска (подставляются сами)' },
|
|
28
|
-
},
|
|
29
|
-
},
|
|
30
|
-
],
|
|
31
|
-
outputSchema: [{ type: 'object', properties: {} }],
|
|
32
|
-
},
|
|
33
19
|
});
|
|
@@ -119324,6 +119324,7 @@ var isAppEngine = (value) => getDocflowEngine(value) === "APP";
|
|
|
119324
119324
|
// src/shared/docflow.constants.ts
|
|
119325
119325
|
var DOCFLOW_LAUNCH_PARAMETERS_KEY = "smbDocflowParameters";
|
|
119326
119326
|
var LAUNCH_PARAMETERS_STEP_INPUT = `{{trigger.${DOCFLOW_LAUNCH_PARAMETERS_KEY}}}`;
|
|
119327
|
+
var LAUNCH_TRIGGER_NAME = "\u0417\u0430\u043F\u0443\u0441\u043A \u0441 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0430\u043C\u0438";
|
|
119327
119328
|
var TASK_DONE_STATUS = "DONE";
|
|
119328
119329
|
var FORM_FIELD_ROLE_SETTING = "smbRole";
|
|
119329
119330
|
var FORM_FIELD_DUE_IN_DAYS_SETTING = "smbDueInDays";
|
|
@@ -119338,6 +119339,10 @@ var parseFormFields = (value) => Array.isArray(value) ? value.filter(
|
|
|
119338
119339
|
(field) => typeof field === "object" && field !== null && typeof field.name === "string" && typeof field.label === "string" && typeof field.type === "string"
|
|
119339
119340
|
) : [];
|
|
119340
119341
|
|
|
119342
|
+
// src/shared/workflow/launch-step.util.ts
|
|
119343
|
+
var isLaunchTrigger = (trigger) => trigger?.type === "WEBHOOK" && trigger.name === LAUNCH_TRIGGER_NAME;
|
|
119344
|
+
var isLaunchableTrigger = (trigger) => trigger?.type === "MANUAL" || isLaunchTrigger(trigger);
|
|
119345
|
+
|
|
119341
119346
|
// src/shared/workflow/workflow-run.util.ts
|
|
119342
119347
|
var DAY_IN_MS = 24 * 60 * 60 * 1e3;
|
|
119343
119348
|
var UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
@@ -119400,7 +119405,7 @@ var getFormStepTaskRequests = ({
|
|
|
119400
119405
|
}) => {
|
|
119401
119406
|
const steps = state?.flow?.steps ?? [];
|
|
119402
119407
|
const stepInfos = state?.stepInfos ?? {};
|
|
119403
|
-
const isStartedByHand = state?.flow?.trigger
|
|
119408
|
+
const isStartedByHand = isLaunchableTrigger(state?.flow?.trigger);
|
|
119404
119409
|
return steps.flatMap((step) => {
|
|
119405
119410
|
const stepInfo = stepInfos[step.id];
|
|
119406
119411
|
if (!isFormStep(step) || stepInfo?.status !== "PENDING" || stepInfo.error !== void 0 && stepInfo.error !== null || typeof stepInfo.threadId !== "string" || stepInfo.threadId.length === 0) {
|
|
@@ -1724,9 +1724,6 @@ var callCoreGraphql = async ({
|
|
|
1724
1724
|
var UPDATE_WORKFLOW_VERSION_STEP_MUTATION = `mutation UpdateWorkflowVersionStep($input: UpdateWorkflowVersionStepInput!) {
|
|
1725
1725
|
updateWorkflowVersionStep(input: $input) { id }
|
|
1726
1726
|
}`;
|
|
1727
|
-
var CREATE_WORKFLOW_VERSION_STEP_MUTATION = `mutation CreateWorkflowVersionStep($input: CreateWorkflowVersionStepInput!) {
|
|
1728
|
-
createWorkflowVersionStep(input: $input) { __typename }
|
|
1729
|
-
}`;
|
|
1730
1727
|
var DELETE_WORKFLOW_VERSION_STEP_MUTATION = `mutation DeleteWorkflowVersionStep($input: DeleteWorkflowVersionStepInput!) {
|
|
1731
1728
|
deleteWorkflowVersionStep(input: $input) { __typename }
|
|
1732
1729
|
}`;
|
|
@@ -1760,7 +1757,7 @@ var readRestRecord = (response) => {
|
|
|
1760
1757
|
// src/shared/docflow.constants.ts
|
|
1761
1758
|
var DOCFLOW_LAUNCH_PARAMETERS_KEY = "smbDocflowParameters";
|
|
1762
1759
|
var LAUNCH_PARAMETERS_STEP_INPUT = `{{trigger.${DOCFLOW_LAUNCH_PARAMETERS_KEY}}}`;
|
|
1763
|
-
var
|
|
1760
|
+
var LAUNCH_TRIGGER_NAME = "\u0417\u0430\u043F\u0443\u0441\u043A \u0441 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0430\u043C\u0438";
|
|
1764
1761
|
var FORM_FIELD_ROLE_SETTING = "smbRole";
|
|
1765
1762
|
var TRIGGER_STEP_ID = "trigger";
|
|
1766
1763
|
|
|
@@ -1800,12 +1797,10 @@ var isLaunchParametersStep = (step) => {
|
|
|
1800
1797
|
}
|
|
1801
1798
|
return isPlainRecord(input.logicFunctionInput) && input.logicFunctionInput.parameters === LAUNCH_PARAMETERS_STEP_INPUT;
|
|
1802
1799
|
};
|
|
1800
|
+
var isLaunchTrigger = (trigger) => trigger?.type === "WEBHOOK" && trigger.name === LAUNCH_TRIGGER_NAME;
|
|
1803
1801
|
var findLaunchParametersStep = (steps) => (steps ?? []).find(isLaunchParametersStep);
|
|
1804
1802
|
var parseLaunchFields = (value) => getFillableFormFields(parseFormFields(value));
|
|
1805
1803
|
|
|
1806
|
-
// src/server/launch-step.ts
|
|
1807
|
-
import { MetadataApiClient } from "twenty-client-sdk/metadata";
|
|
1808
|
-
|
|
1809
1804
|
// src/shared/form/form-field-builder.util.ts
|
|
1810
1805
|
var OUTPUT_LEAF_TYPES = {
|
|
1811
1806
|
NUMBER: "number",
|
|
@@ -1828,6 +1823,12 @@ var buildFieldsOutputSchema = (fields) => Object.fromEntries(
|
|
|
1828
1823
|
}
|
|
1829
1824
|
])
|
|
1830
1825
|
);
|
|
1826
|
+
var buildFieldsExpectedBody = (fields) => Object.fromEntries(
|
|
1827
|
+
getFillableFormFields(fields).map((field) => [
|
|
1828
|
+
field.name,
|
|
1829
|
+
field.type === "RECORD" ? { id: "" } : field.type === "NUMBER" ? 0 : ""
|
|
1830
|
+
])
|
|
1831
|
+
);
|
|
1831
1832
|
|
|
1832
1833
|
// node_modules/twenty-client-sdk/dist/chunk-Dqa2HsxW.mjs
|
|
1833
1834
|
var e = Object.create;
|
|
@@ -61215,10 +61216,6 @@ var listWorkflowVersions = async (runAs, workflowId) => readRestList(
|
|
|
61215
61216
|
})
|
|
61216
61217
|
).records;
|
|
61217
61218
|
|
|
61218
|
-
// src/universal-identifiers.ts
|
|
61219
|
-
var LAUNCH_PARAMETERS_STEP_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIER = "f7559a62-213e-4b1f-a142-603b463a585a";
|
|
61220
|
-
var SAVE_LAUNCH_FIELDS_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIER = "d2cce9f2-6ba4-415c-aa3d-5d9aba6ae89c";
|
|
61221
|
-
|
|
61222
61219
|
// src/server/launch-step.ts
|
|
61223
61220
|
var MANUAL_TRIGGER = {
|
|
61224
61221
|
name: "\u0417\u0430\u043F\u0443\u0441\u043A \u0432\u0440\u0443\u0447\u043D\u0443\u044E",
|
|
@@ -61232,18 +61229,23 @@ var MANUAL_TRIGGER = {
|
|
|
61232
61229
|
},
|
|
61233
61230
|
nextStepIds: []
|
|
61234
61231
|
};
|
|
61235
|
-
var
|
|
61236
|
-
|
|
61237
|
-
|
|
61238
|
-
}
|
|
61239
|
-
|
|
61240
|
-
|
|
61241
|
-
|
|
61242
|
-
|
|
61243
|
-
|
|
61232
|
+
var buildLaunchTrigger = (base, fields) => ({
|
|
61233
|
+
name: LAUNCH_TRIGGER_NAME,
|
|
61234
|
+
type: "WEBHOOK",
|
|
61235
|
+
position: base.position ?? { x: 0, y: 0 },
|
|
61236
|
+
nextStepIds: base.nextStepIds ?? [],
|
|
61237
|
+
settings: {
|
|
61238
|
+
httpMethod: "POST",
|
|
61239
|
+
authentication: "API_KEY",
|
|
61240
|
+
expectedBody: buildFieldsExpectedBody(fields),
|
|
61241
|
+
outputSchema: buildFieldsOutputSchema(fields)
|
|
61244
61242
|
}
|
|
61245
|
-
|
|
61246
|
-
|
|
61243
|
+
});
|
|
61244
|
+
var buildManualTrigger = (base) => ({
|
|
61245
|
+
...MANUAL_TRIGGER,
|
|
61246
|
+
position: base.position ?? MANUAL_TRIGGER.position,
|
|
61247
|
+
nextStepIds: base.nextStepIds ?? []
|
|
61248
|
+
});
|
|
61247
61249
|
var findOrCreateDraft = async (workflowId) => {
|
|
61248
61250
|
const versions = await listWorkflowVersions("person", workflowId);
|
|
61249
61251
|
const draft = versions.find(({ status }) => status === "DRAFT");
|
|
@@ -61256,75 +61258,67 @@ var findOrCreateDraft = async (workflowId) => {
|
|
|
61256
61258
|
});
|
|
61257
61259
|
return (await listWorkflowVersions("person", workflowId)).find(({ status }) => status === "DRAFT");
|
|
61258
61260
|
};
|
|
61259
|
-
var
|
|
61260
|
-
|
|
61261
|
-
|
|
61262
|
-
|
|
61263
|
-
|
|
61264
|
-
|
|
61265
|
-
|
|
61266
|
-
|
|
61267
|
-
if (
|
|
61268
|
-
|
|
61269
|
-
query: UPDATE_WORKFLOW_VERSION_TRIGGER_MUTATION,
|
|
61270
|
-
variables: { input: { workflowVersionId: draft.id, trigger: MANUAL_TRIGGER } }
|
|
61271
|
-
});
|
|
61272
|
-
draft = { ...draft, trigger: MANUAL_TRIGGER };
|
|
61273
|
-
}
|
|
61274
|
-
if (draft.trigger?.type !== "MANUAL") {
|
|
61275
|
-
return { status: "NOT_MANUAL" };
|
|
61261
|
+
var STEP_ROW_HEIGHT = 150;
|
|
61262
|
+
var retargetStepVariables = (step, launchStepId) => {
|
|
61263
|
+
const settings = JSON.stringify(step.settings ?? {});
|
|
61264
|
+
const retargeted = settings.split(`{{${launchStepId}.`).join(`{{${TRIGGER_STEP_ID}.`);
|
|
61265
|
+
return retargeted === settings ? void 0 : { ...step, settings: JSON.parse(retargeted) };
|
|
61266
|
+
};
|
|
61267
|
+
var removeLegacyLaunchStep = async (draft) => {
|
|
61268
|
+
const launchStep = findLaunchParametersStep(draft.steps);
|
|
61269
|
+
if (launchStep === void 0) {
|
|
61270
|
+
return;
|
|
61276
61271
|
}
|
|
61277
|
-
|
|
61278
|
-
|
|
61279
|
-
|
|
61280
|
-
|
|
61281
|
-
|
|
61282
|
-
|
|
61283
|
-
|
|
61272
|
+
await callCoreGraphql({
|
|
61273
|
+
query: DELETE_WORKFLOW_VERSION_STEP_MUTATION,
|
|
61274
|
+
variables: { input: { workflowVersionId: draft.id, stepId: launchStep.id } }
|
|
61275
|
+
});
|
|
61276
|
+
const removedY = launchStep.position?.y;
|
|
61277
|
+
for (const step of draft.steps ?? []) {
|
|
61278
|
+
if (step.id === launchStep.id) {
|
|
61279
|
+
continue;
|
|
61284
61280
|
}
|
|
61285
|
-
|
|
61286
|
-
|
|
61287
|
-
|
|
61288
|
-
|
|
61289
|
-
|
|
61281
|
+
const retargeted = retargetStepVariables(step, launchStep.id);
|
|
61282
|
+
const movesUp = typeof removedY === "number" && typeof step.position?.y === "number" && step.position.y > removedY;
|
|
61283
|
+
if (retargeted === void 0 && !movesUp) {
|
|
61284
|
+
continue;
|
|
61285
|
+
}
|
|
61286
|
+
const updated = retargeted ?? step;
|
|
61290
61287
|
await callCoreGraphql({
|
|
61291
|
-
query:
|
|
61288
|
+
query: UPDATE_WORKFLOW_VERSION_STEP_MUTATION,
|
|
61292
61289
|
variables: {
|
|
61293
61290
|
input: {
|
|
61294
61291
|
workflowVersionId: draft.id,
|
|
61295
|
-
|
|
61296
|
-
stepType: "LOGIC_FUNCTION",
|
|
61297
|
-
parentStepId: TRIGGER_STEP_ID,
|
|
61298
|
-
nextStepId: draft.trigger.nextStepIds?.[0],
|
|
61299
|
-
defaultSettings: {
|
|
61300
|
-
input: {
|
|
61301
|
-
logicFunctionId: await findLaunchStepLogicFunctionId(),
|
|
61302
|
-
logicFunctionInput: { parameters: LAUNCH_PARAMETERS_STEP_INPUT }
|
|
61303
|
-
}
|
|
61304
|
-
}
|
|
61292
|
+
step: movesUp && step.position ? { ...updated, position: { ...step.position, y: step.position.y - STEP_ROW_HEIGHT } } : updated
|
|
61305
61293
|
}
|
|
61306
61294
|
}
|
|
61307
61295
|
});
|
|
61308
|
-
const versions = await listWorkflowVersions("person", workflowId);
|
|
61309
|
-
step = versions.find(({ id: id3 }) => id3 === draft?.id)?.steps?.find(({ id: id3 }) => id3 === stepId);
|
|
61310
|
-
if (step === void 0) {
|
|
61311
|
-
throw new Error(`The launch step ${stepId} was not created`);
|
|
61312
|
-
}
|
|
61313
61296
|
}
|
|
61297
|
+
};
|
|
61298
|
+
var syncLaunchTrigger = async ({
|
|
61299
|
+
workflowId,
|
|
61300
|
+
fields
|
|
61301
|
+
}) => {
|
|
61302
|
+
const draft = await findOrCreateDraft(workflowId);
|
|
61303
|
+
if (draft === void 0) {
|
|
61304
|
+
return void 0;
|
|
61305
|
+
}
|
|
61306
|
+
const current = draft.trigger ?? MANUAL_TRIGGER;
|
|
61307
|
+
if (current.type !== "MANUAL" && !isLaunchTrigger(current)) {
|
|
61308
|
+
return { status: "NOT_MANUAL" };
|
|
61309
|
+
}
|
|
61310
|
+
await removeLegacyLaunchStep(draft);
|
|
61311
|
+
const trigger = (await listWorkflowVersions("person", workflowId)).find(({ id: id3 }) => id3 === draft.id)?.trigger ?? current;
|
|
61314
61312
|
await callCoreGraphql({
|
|
61315
|
-
query:
|
|
61313
|
+
query: UPDATE_WORKFLOW_VERSION_TRIGGER_MUTATION,
|
|
61316
61314
|
variables: {
|
|
61317
61315
|
input: {
|
|
61318
61316
|
workflowVersionId: draft.id,
|
|
61319
|
-
|
|
61320
|
-
...step,
|
|
61321
|
-
name: LAUNCH_PARAMETERS_STEP_NAME,
|
|
61322
|
-
settings: { ...step.settings, outputSchema: buildFieldsOutputSchema(fields) }
|
|
61323
|
-
}
|
|
61317
|
+
trigger: fields.length > 0 ? buildLaunchTrigger(trigger, fields) : buildManualTrigger(trigger)
|
|
61324
61318
|
}
|
|
61325
61319
|
}
|
|
61326
61320
|
});
|
|
61327
|
-
return { status: "SAVED", workflowVersionId: draft.id
|
|
61321
|
+
return { status: "SAVED", workflowVersionId: draft.id };
|
|
61328
61322
|
};
|
|
61329
61323
|
|
|
61330
61324
|
// node_modules/twenty-sdk/dist/logic-function/isDefined-Dtu5EYqP-CMNeFg4z.mjs
|
|
@@ -119619,6 +119613,9 @@ var describeError = (error) => {
|
|
|
119619
119613
|
var logDocflow = (event, details) => console.info(PREFIX, event, details ?? "");
|
|
119620
119614
|
var logDocflowError = (event, error, details) => console.error(PREFIX, event, describeError(error), details ?? "");
|
|
119621
119615
|
|
|
119616
|
+
// src/universal-identifiers.ts
|
|
119617
|
+
var SAVE_LAUNCH_FIELDS_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIER = "d2cce9f2-6ba4-415c-aa3d-5d9aba6ae89c";
|
|
119618
|
+
|
|
119622
119619
|
// src/logic-functions/save-launch-fields.logic-function.ts
|
|
119623
119620
|
var handler = async (event) => {
|
|
119624
119621
|
const body = readJsonBody(event.body);
|
|
@@ -119640,25 +119637,25 @@ var handler = async (event) => {
|
|
|
119640
119637
|
return jsonResponse(404, { message: "\u041F\u0440\u043E\u0446\u0435\u0441\u0441 \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D" });
|
|
119641
119638
|
}
|
|
119642
119639
|
try {
|
|
119643
|
-
const result = await
|
|
119640
|
+
const result = await syncLaunchTrigger({ workflowId, fields });
|
|
119644
119641
|
logDocflow("launch fields: draft synced", { workflowId, result });
|
|
119645
119642
|
if (result?.status === "NOT_MANUAL") {
|
|
119646
119643
|
return jsonResponse(409, {
|
|
119647
|
-
message: "\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u044B, \u043D\u043E \
|
|
119644
|
+
message: "\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u044B, \u043D\u043E \u0437\u0430\u043F\u0443\u0441\u043A \u043F\u0440\u043E\u0446\u0435\u0441\u0441\u0430 \u043D\u0435 \u0438\u0437\u043C\u0435\u043D\u0451\u043D: \u043E\u043D \u0437\u0430\u043F\u0443\u0441\u043A\u0430\u0435\u0442\u0441\u044F \u043D\u0435 \u0432\u0440\u0443\u0447\u043D\u0443\u044E"
|
|
119648
119645
|
});
|
|
119649
119646
|
}
|
|
119650
|
-
return { status: "SAVED"
|
|
119647
|
+
return { status: "SAVED" };
|
|
119651
119648
|
} catch (error) {
|
|
119652
119649
|
logDocflowError("launch fields: draft not synced", error, { workflowId });
|
|
119653
119650
|
return jsonResponse(502, {
|
|
119654
|
-
message: error instanceof CoreGraphqlError && error.userMessage !== void 0 ? `\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u044B, \
|
|
119651
|
+
message: error instanceof CoreGraphqlError && error.userMessage !== void 0 ? `\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u044B, \u0437\u0430\u043F\u0443\u0441\u043A \u043F\u0440\u043E\u0446\u0435\u0441\u0441\u0430 \u043D\u0435 \u043E\u0431\u043D\u043E\u0432\u043B\u0451\u043D: ${error.userMessage}` : `\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u044B, \u0437\u0430\u043F\u0443\u0441\u043A \u043F\u0440\u043E\u0446\u0435\u0441\u0441\u0430 \u043D\u0435 \u043E\u0431\u043D\u043E\u0432\u043B\u0451\u043D: ${error instanceof Error ? error.message : "\u043E\u0448\u0438\u0431\u043A\u0430 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430 \u043F\u0440\u043E\u0446\u0435\u0441\u0441\u043E\u0432"}`
|
|
119655
119652
|
});
|
|
119656
119653
|
}
|
|
119657
119654
|
};
|
|
119658
119655
|
var save_launch_fields_logic_function_default = defineLogicFunction({
|
|
119659
119656
|
universalIdentifier: SAVE_LAUNCH_FIELDS_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIER,
|
|
119660
119657
|
name: "docflow-save-launch-fields",
|
|
119661
|
-
description: "\u0421\u043E\u0445\u0440\u0430\u043D\u044F\u0435\u0442 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u0437\u0430\u043F\u0443\u0441\u043A\u0430 \
|
|
119658
|
+
description: "\u0421\u043E\u0445\u0440\u0430\u043D\u044F\u0435\u0442 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u0437\u0430\u043F\u0443\u0441\u043A\u0430 \u0438 \u0434\u0435\u043B\u0430\u0435\u0442 \u043F\u0435\u0440\u0432\u044B\u043C \u0431\u043B\u043E\u043A\u043E\u043C \u043F\u0440\u043E\u0446\u0435\u0441\u0441\u0430 \xAB\u0417\u0430\u043F\u0443\u0441\u043A \u0441 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0430\u043C\u0438\xBB",
|
|
119662
119659
|
timeoutSeconds: 30,
|
|
119663
119660
|
handler,
|
|
119664
119661
|
httpRouteTriggerSettings: {
|
|
@@ -5,14 +5,14 @@ import { CoreGraphqlError } from 'src/shared/api/core-graphql.util';
|
|
|
5
5
|
import { readRestRecord } from 'src/shared/api/rest-response.util';
|
|
6
6
|
import { getFormFieldsError } from 'src/shared/form/form-fields.util';
|
|
7
7
|
import { parseLaunchFields } from 'src/shared/workflow/launch-step.util';
|
|
8
|
-
import {
|
|
8
|
+
import { syncLaunchTrigger } from 'src/server/launch-step';
|
|
9
9
|
import { jsonResponse, readJsonBody } from 'src/server/http-response';
|
|
10
10
|
import { restClient } from 'src/server/records';
|
|
11
11
|
import { logDocflow, logDocflowError } from 'src/shared/log.util';
|
|
12
12
|
import { SAVE_LAUNCH_FIELDS_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIER } from 'src/universal-identifiers';
|
|
13
13
|
|
|
14
|
-
// Saves the parameters of a process and
|
|
15
|
-
// "
|
|
14
|
+
// Saves the parameters of a process and puts them into its draft as the
|
|
15
|
+
// "Запуск с параметрами" trigger, whose fields later steps read as variables.
|
|
16
16
|
const handler = async (event: RoutePayload) => {
|
|
17
17
|
const body = readJsonBody(event.body);
|
|
18
18
|
const workflowId = body.workflowId;
|
|
@@ -41,25 +41,25 @@ const handler = async (event: RoutePayload) => {
|
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
try {
|
|
44
|
-
const result = await
|
|
44
|
+
const result = await syncLaunchTrigger({ workflowId, fields });
|
|
45
45
|
|
|
46
46
|
logDocflow('launch fields: draft synced', { workflowId, result });
|
|
47
47
|
|
|
48
48
|
if (result?.status === 'NOT_MANUAL') {
|
|
49
49
|
return jsonResponse(409, {
|
|
50
|
-
message: 'Параметры сохранены, но
|
|
50
|
+
message: 'Параметры сохранены, но запуск процесса не изменён: он запускается не вручную',
|
|
51
51
|
});
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
return { status: 'SAVED'
|
|
54
|
+
return { status: 'SAVED' };
|
|
55
55
|
} catch (error) {
|
|
56
56
|
logDocflowError('launch fields: draft not synced', error, { workflowId });
|
|
57
57
|
|
|
58
58
|
return jsonResponse(502, {
|
|
59
59
|
message:
|
|
60
60
|
error instanceof CoreGraphqlError && error.userMessage !== undefined
|
|
61
|
-
? `Параметры сохранены,
|
|
62
|
-
: `Параметры сохранены,
|
|
61
|
+
? `Параметры сохранены, запуск процесса не обновлён: ${error.userMessage}`
|
|
62
|
+
: `Параметры сохранены, запуск процесса не обновлён: ${error instanceof Error ? error.message : 'ошибка редактора процессов'}`,
|
|
63
63
|
});
|
|
64
64
|
}
|
|
65
65
|
};
|
|
@@ -67,7 +67,7 @@ const handler = async (event: RoutePayload) => {
|
|
|
67
67
|
export default defineLogicFunction({
|
|
68
68
|
universalIdentifier: SAVE_LAUNCH_FIELDS_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIER,
|
|
69
69
|
name: 'docflow-save-launch-fields',
|
|
70
|
-
description: 'Сохраняет параметры запуска
|
|
70
|
+
description: 'Сохраняет параметры запуска и делает первым блоком процесса «Запуск с параметрами»',
|
|
71
71
|
timeoutSeconds: 30,
|
|
72
72
|
handler,
|
|
73
73
|
httpRouteTriggerSettings: {
|