fix(animations): properly support boolean-based transitions and state changes (#19279)
Closes #9396 Closes #12337 PR Close #19279
This commit is contained in:

committed by
Chuck Jazdzewski

parent
b1ca5d4ddf
commit
c4704c8abc
@ -65,16 +65,27 @@ function parseAnimationAlias(alias: string, errors: string[]): string|Transition
|
||||
}
|
||||
}
|
||||
|
||||
const TRUE_BOOLEAN_VALUES = new Set<string>();
|
||||
TRUE_BOOLEAN_VALUES.add('true');
|
||||
TRUE_BOOLEAN_VALUES.add('1');
|
||||
|
||||
const FALSE_BOOLEAN_VALUES = new Set<string>();
|
||||
FALSE_BOOLEAN_VALUES.add('false');
|
||||
FALSE_BOOLEAN_VALUES.add('0');
|
||||
|
||||
function makeLambdaFromStates(lhs: string, rhs: string): TransitionMatcherFn {
|
||||
const LHS_MATCH_BOOLEAN = TRUE_BOOLEAN_VALUES.has(lhs) || FALSE_BOOLEAN_VALUES.has(lhs);
|
||||
const RHS_MATCH_BOOLEAN = TRUE_BOOLEAN_VALUES.has(rhs) || FALSE_BOOLEAN_VALUES.has(rhs);
|
||||
|
||||
return (fromState: any, toState: any): boolean => {
|
||||
let lhsMatch = lhs == ANY_STATE || lhs == fromState;
|
||||
let rhsMatch = rhs == ANY_STATE || rhs == toState;
|
||||
|
||||
if (!lhsMatch && typeof fromState === 'boolean') {
|
||||
lhsMatch = fromState ? lhs === 'true' : lhs === 'false';
|
||||
if (!lhsMatch && LHS_MATCH_BOOLEAN && typeof fromState === 'boolean') {
|
||||
lhsMatch = fromState ? TRUE_BOOLEAN_VALUES.has(lhs) : FALSE_BOOLEAN_VALUES.has(lhs);
|
||||
}
|
||||
if (!rhsMatch && typeof toState === 'boolean') {
|
||||
rhsMatch = toState ? rhs === 'true' : rhs === 'false';
|
||||
if (!rhsMatch && RHS_MATCH_BOOLEAN && typeof toState === 'boolean') {
|
||||
rhsMatch = toState ? TRUE_BOOLEAN_VALUES.has(rhs) : FALSE_BOOLEAN_VALUES.has(rhs);
|
||||
}
|
||||
|
||||
return lhsMatch && rhsMatch;
|
||||
|
Reference in New Issue
Block a user