Fix for environment bindings race condition.

This commit is contained in:
Dean 2024-08-09 12:44:10 +01:00
parent 6b85248111
commit 849f5f21f9
1 changed files with 38 additions and 24 deletions

View File

@ -70,6 +70,7 @@
// Stop unnecessary rendering // Stop unnecessary rendering
const memoBlock = memo(block) const memoBlock = memo(block)
const memoEnvVariables = memo($environment.variables)
const rowTriggers = [ const rowTriggers = [
TriggerStepID.ROW_UPDATED, TriggerStepID.ROW_UPDATED,
@ -91,11 +92,20 @@
let insertAtPos, getCaretPosition let insertAtPos, getCaretPosition
let stepLayouts = {} let stepLayouts = {}
$: memoEnvVariables.set($environment.variables)
$: memoBlock.set(block) $: memoBlock.set(block)
$: filters = lookForFilters(schemaProperties) || [] $: filters = lookForFilters(schemaProperties) || []
$: tempFilters = filters $: tempFilters = filters
$: stepId = block.stepId $: stepId = $memoBlock.stepId
$: bindings = getAvailableBindings(block, $selectedAutomation?.definition)
$: automationBindings = getAvailableBindings(
$memoBlock,
$selectedAutomation?.definition
)
$: environmentBindings = buildEnvironmentBindings($memoEnvVariables)
$: bindings = [...automationBindings, ...environmentBindings]
$: getInputData(testData, $memoBlock.inputs) $: getInputData(testData, $memoBlock.inputs)
$: tableId = inputData ? inputData.tableId : null $: tableId = inputData ? inputData.tableId : null
$: table = tableId $: table = tableId
@ -110,7 +120,7 @@
{ allowLinks: true } { allowLinks: true }
) )
$: queryLimit = tableId?.includes("datasource") ? "∞" : "1000" $: queryLimit = tableId?.includes("datasource") ? "∞" : "1000"
$: isTrigger = block?.type === AutomationStepType.TRIGGER $: isTrigger = $memoBlock?.type === AutomationStepType.TRIGGER
$: codeMode = $: codeMode =
stepId === AutomationActionStepId.EXECUTE_BASH stepId === AutomationActionStepId.EXECUTE_BASH
? EditorModes.Handlebars ? EditorModes.Handlebars
@ -119,13 +129,30 @@
disableWrapping: true, disableWrapping: true,
}) })
$: editingJs = codeMode === EditorModes.JS $: editingJs = codeMode === EditorModes.JS
$: requiredProperties = isTestModal ? [] : block.schema["inputs"].required $: requiredProperties = isTestModal
? []
: $memoBlock.schema["inputs"].required
$: stepCompletions = $: stepCompletions =
codeMode === EditorModes.Handlebars codeMode === EditorModes.Handlebars
? [hbAutocomplete([...bindingsToCompletions(bindings, codeMode)])] ? [hbAutocomplete([...bindingsToCompletions(bindings, codeMode)])]
: [] : []
const buildEnvironmentBindings = () => {
if ($licensing.environmentVariablesEnabled) {
return getEnvironmentBindings().map(binding => {
return {
...binding,
display: {
...binding.display,
rank: 98,
},
}
})
}
return []
}
const getInputData = (testData, blockInputs) => { const getInputData = (testData, blockInputs) => {
// Test data is not cloned for reactivity // Test data is not cloned for reactivity
let newInputData = testData || cloneDeep(blockInputs) let newInputData = testData || cloneDeep(blockInputs)
@ -151,9 +178,9 @@
// Store for any UX related data // Store for any UX related data
const stepStore = writable({}) const stepStore = writable({})
$: currentStep = $stepStore?.[block.id] $: stepState = $stepStore?.[block.id]
$: customStepLayouts($memoBlock, schemaProperties, currentStep) $: customStepLayouts($memoBlock, schemaProperties, stepState)
const customStepLayouts = block => { const customStepLayouts = block => {
if ( if (
@ -185,7 +212,6 @@
onChange: e => { onChange: e => {
onChange({ ["revision"]: e.detail }) onChange({ ["revision"]: e.detail })
}, },
bindings,
updateOnChange: false, updateOnChange: false,
forceModal: true, forceModal: true,
}, },
@ -214,7 +240,6 @@
onChange: e => { onChange: e => {
onChange({ [rowIdentifier]: e.detail }) onChange({ [rowIdentifier]: e.detail })
}, },
bindings,
updateOnChange: false, updateOnChange: false,
forceModal: true, forceModal: true,
}, },
@ -275,7 +300,7 @@
isUpdateRow: block.stepId === ActionStepID.UPDATE_ROW, isUpdateRow: block.stepId === ActionStepID.UPDATE_ROW,
} }
if (isTestModal && currentStep?.rowType === "oldRow") { if (isTestModal && stepState?.rowType === "oldRow") {
return [ return [
{ {
type: RowSelector, type: RowSelector,
@ -722,22 +747,9 @@
) )
} }
// Environment bindings
if ($licensing.environmentVariablesEnabled) {
bindings = bindings.concat(
getEnvironmentBindings().map(binding => {
return {
...binding,
display: {
...binding.display,
rank: 98,
},
}
})
)
}
return bindings return bindings
} }
function lookForFilters(properties) { function lookForFilters(properties) {
if (!properties) { if (!properties) {
return [] return []
@ -770,7 +782,7 @@
drawer.hide() drawer.hide()
} }
function canShowField(key, value) { function canShowField(value) {
const dependsOn = value?.dependsOn const dependsOn = value?.dependsOn
return !dependsOn || !!inputData[dependsOn] return !dependsOn || !!inputData[dependsOn]
} }
@ -829,6 +841,7 @@
<svelte:component <svelte:component
this={config.type} this={config.type}
{...config.props} {...config.props}
{bindings}
on:change={config.props.onChange} on:change={config.props.onChange}
/> />
</PropField> </PropField>
@ -836,6 +849,7 @@
<svelte:component <svelte:component
this={config.type} this={config.type}
{...config.props} {...config.props}
{bindings}
on:change={config.props.onChange} on:change={config.props.onChange}
/> />
{/if} {/if}