Update FuncNode toggle to check when script yields

Updating FuncNode toggle to use a prop to determine when toggling
the script yield or yield with last in the ExpressionNode. The
is Yielding prop is not ineffective for determining how to toggle
a FuncNode. This also fixes an issue where toggling was not
updating FuncMenu styles.
pull/3730/head
Delmer Reed 2018-06-19 12:53:01 -04:00 committed by Iris Scholten
parent b0bcce10a3
commit bbd2d7aadd
2 changed files with 26 additions and 19 deletions

View File

@ -116,7 +116,8 @@ class ExpressionNode extends PureComponent<Props, State> {
onDelete={onDeleteFuncNode}
onToggleYield={onToggleYield}
isYieldable={isAfterFilter && isAfterRange}
isYielding={this.isBeforeFuncYield(i)}
isYielding={this.isBeforeYielding(i)}
isYieldedInScript={this.isYieldNodeIndex(i + 1)}
declarationID={declarationID}
onGenerateScript={onGenerateScript}
declarationsFromBody={declarationsFromBody}
@ -125,7 +126,10 @@ class ExpressionNode extends PureComponent<Props, State> {
/>
)
if (nonYieldableIndexesToggled[i]) {
if (
nonYieldableIndexesToggled[i] &&
!this.isYieldNodeIndex(i + 1)
) {
const script = scriptUpToYield(
bodyID,
declarationID,
@ -133,10 +137,6 @@ class ExpressionNode extends PureComponent<Props, State> {
false
)
if (this.isBeforeFuncYield(i)) {
return funcNode
}
return (
<Fragment key={`${i}-notInScript`}>
{funcNode}
@ -167,7 +167,8 @@ class ExpressionNode extends PureComponent<Props, State> {
onDelete={onDeleteFuncNode}
onToggleYield={this.handleHideImplicitYield}
isYieldable={isAfterFilter && isAfterRange}
isYielding={this.isBeforeFuncYield(i)}
isYielding={this.isBeforeYielding(i)}
isYieldedInScript={this.isYieldNodeIndex(i + 1)}
declarationID={declarationID}
onGenerateScript={onGenerateScript}
declarationsFromBody={declarationsFromBody}
@ -202,9 +203,14 @@ class ExpressionNode extends PureComponent<Props, State> {
)
}
private isBeforeFuncYield(funcIndex: number): boolean {
private isBeforeYielding(funcIndex: number): boolean {
const {funcs, isLastBody} = this.props
const {isImplicitYieldToggled} = this.state
const {isImplicitYieldToggled, nonYieldableIndexesToggled} = this.state
const beforeToggledLastYield = !!nonYieldableIndexesToggled[funcIndex]
if (beforeToggledLastYield) {
return true
}
if (
funcIndex === funcs.length - 1 &&
@ -218,9 +224,14 @@ class ExpressionNode extends PureComponent<Props, State> {
return false
}
const nextFunc = funcs[funcIndex + 1]
return this.isYieldNodeIndex(funcIndex + 1)
}
if (nextFunc.name === 'yield') {
private isYieldNodeIndex(funcIndex) {
const {funcs} = this.props
const nextFunc = _.get(funcs, `${funcIndex}`, null)
if (nextFunc && nextFunc.name === 'yield') {
return true
}

View File

@ -30,6 +30,7 @@ interface Props {
isYielding: boolean
isYieldable: boolean
onDeleteBody: (bodyID: string) => void
isYieldedInScript: boolean
}
interface State {
@ -182,19 +183,14 @@ export default class FuncNode extends PureComponent<Props, State> {
index,
bodyID,
declarationID,
isYieldable,
onToggleYieldWithLast,
isYielding,
isYieldedInScript,
} = this.props
if (isYieldable) {
if (isYieldedInScript) {
onToggleYield(bodyID, declarationID, index)
} else {
if (isYielding) {
onToggleYield(bodyID, declarationID, index)
} else {
onToggleYieldWithLast(index)
}
onToggleYieldWithLast(index)
}
}