(dispatch, getState)
| 83 | } |
| 84 | |
| 85 | function triggerDefaultState(dispatch, getState) { |
| 86 | const {graphs, paths, layout} = getState(); |
| 87 | |
| 88 | // overallOrder will assert circular dependencies for multi output. |
| 89 | try { |
| 90 | graphs.MultiGraph.overallOrder(); |
| 91 | } catch (err) { |
| 92 | dispatch( |
| 93 | onError({ |
| 94 | type: 'backEnd', |
| 95 | error: { |
| 96 | message: 'Circular Dependencies', |
| 97 | html: err.toString() |
| 98 | } |
| 99 | }) |
| 100 | ); |
| 101 | } |
| 102 | |
| 103 | const layoutCallbacks = getLayoutCallbacks( |
| 104 | graphs, |
| 105 | paths, |
| 106 | layout.components, |
| 107 | { |
| 108 | outputsOnly: true |
| 109 | } |
| 110 | ); |
| 111 | |
| 112 | // Also include no-output and no-input callbacks that should fire on initial load |
| 113 | const specialCallbacks = (graphs.callbacks || []).reduce((acc, cb) => { |
| 114 | if (cb.prevent_initial_call) { |
| 115 | return acc; |
| 116 | } |
| 117 | |
| 118 | const isNoOutput = cb.noOutput; |
| 119 | const isNoInput = !cb.noOutput && cb.inputs.length === 0; |
| 120 | |
| 121 | if (!isNoOutput && !isNoInput) { |
| 122 | return acc; |
| 123 | } |
| 124 | |
| 125 | const resolved = makeResolvedCallback(cb, resolveDeps(), ''); |
| 126 | resolved.initialCall = true; |
| 127 | |
| 128 | if (isNoOutput) { |
| 129 | // No-output: include if no inputs or any input is in layout |
| 130 | if (cb.inputs.length === 0) { |
| 131 | acc.push(resolved); |
| 132 | } else { |
| 133 | const inputs = resolved.getInputs(paths); |
| 134 | if ( |
| 135 | inputs.some(inp => |
| 136 | Array.isArray(inp) ? inp.length > 0 : inp |
| 137 | ) |
| 138 | ) { |
| 139 | acc.push(resolved); |
| 140 | } |
| 141 | } |
| 142 | } else { |
no test coverage detected
searching dependent graphs…