Vystup z vetve plati i za podminkou, samostatny krok Zalozit kontakt
Bezny postup nesel poskladat z kroku: najdi podle ICO, kdyz neni zkus mail, kdyz porad neni zaloz - ID dava jednou jedna vetev a jednou druha, ale rozsah vystupy z vetvi za podminku nepoustel. Slucovat kvuli tomu hledani a zakladani do jednoho kroku bylo obejiti nasi chyby, ne reseni. - Vystup z vetve je za podminkou k dispozici, jen jako nepovinny. Ze muze chybet, se neztratilo: builder to u pole ukaze a pri behu se dosadi prazdno. - Vystup se stejnym jmenem uz z nabidky nemaze ten starsi. Po druhem hledani kontaktu zmizelo ID z prvniho, tedy to, co je v tu chvili potreba. Odkaz se jmenem kroku je jednoznacny. - Duplicitni jmena u vystupu kroku uz nejsou nedodelek. Konflikt zustava mezi parametry spoustece, kde zadny prefix neni. - Novy krok Zalozit kontakt. Nic nedohledava, hledani je vlastni krok. Najit nebo zalozit zustava pro toho, komu staci jistota jednim krokem. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
c62902bfb6
commit
6297bbf480
+23
-15
@@ -165,42 +165,50 @@ export function collectScopes(
|
||||
}));
|
||||
};
|
||||
|
||||
const walk = (steps: FlowStep[], inherited: TriggerField[]) => {
|
||||
/**
|
||||
* Projde sekvenci a vrati pole, ktera v ni vznikla.
|
||||
* Musi sedet se serverem, viz src/data/flowScope.ts.
|
||||
*/
|
||||
const walk = (steps: FlowStep[], inherited: TriggerField[]): TriggerField[] => {
|
||||
let available = inherited;
|
||||
const produced: TriggerField[] = [];
|
||||
|
||||
const add = (outputs: TriggerField[]) => {
|
||||
if (outputs.length === 0) return;
|
||||
// Nic se neodebira: odkaz se jmenem kroku je jednoznacny a starsi vystup
|
||||
// muze byt prave ten, ktery clovek potrebuje. Viz src/data/flowScope.ts.
|
||||
available = [...available, ...outputs];
|
||||
produced.push(...outputs);
|
||||
};
|
||||
|
||||
for (const step of steps) {
|
||||
byStep.set(step.id, available);
|
||||
|
||||
if (step.kind === 'condition') {
|
||||
walk(step.yes, available);
|
||||
walk(step.no, available);
|
||||
const fromYes = walk(step.yes, available);
|
||||
const fromNo = walk(step.no, available);
|
||||
// Za podminkou plati obojí, ale jako nepovinne - probehla jen jedna vetev.
|
||||
add([...fromYes, ...fromNo].map((field) => ({ ...field, required: false })));
|
||||
continue;
|
||||
}
|
||||
|
||||
if (step.kind === 'foreach') {
|
||||
// Musi sedet se serverem, viz src/data/flowScope.ts.
|
||||
walk(step.steps, [
|
||||
...available,
|
||||
{ id: `${step.id}.item`, name: 'item', type: 'object', required: true },
|
||||
{ id: `${step.id}.index`, name: 'index', type: 'number', required: true },
|
||||
]);
|
||||
available = [
|
||||
...available,
|
||||
add([
|
||||
{ id: `${step.id}.results`, name: `${step.id}.results`, type: 'list', required: true },
|
||||
{ id: `${step.id}.count`, name: `${step.id}.count`, type: 'number', required: true },
|
||||
];
|
||||
]);
|
||||
continue;
|
||||
}
|
||||
|
||||
const outputs = outputsOf(step);
|
||||
if (outputs.length > 0) {
|
||||
// Novejsi vystup prekryje starsi se stejnym jmenem, stejne jako to
|
||||
// dela runtime pri dosazovani do sablon. Musi to sedet se serverem,
|
||||
// viz src/data/flowScope.ts.
|
||||
const names = new Set(outputs.map((output) => output.name));
|
||||
available = [...available.filter((field) => !names.has(field.name)), ...outputs];
|
||||
}
|
||||
add(outputsOf(step));
|
||||
}
|
||||
|
||||
return produced;
|
||||
};
|
||||
|
||||
walk(flow.steps, triggerFields);
|
||||
|
||||
Reference in New Issue
Block a user