feat(animations): expose element
and params
within transition matchers (#22693)
PR Close #22693
This commit is contained in:

committed by
Kara Erickson

parent
db56836425
commit
58b94e6f5e
@ -46,7 +46,8 @@ export interface StateAst extends Ast<AnimationMetadataType.State> {
|
||||
}
|
||||
|
||||
export interface TransitionAst extends Ast<AnimationMetadataType.Transition> {
|
||||
matchers: ((fromState: string, toState: string) => boolean)[];
|
||||
matchers: ((fromState: string, toState: string, element: any, params: {[key: string]:
|
||||
any}) => boolean)[];
|
||||
animation: Ast<AnimationMetadataType>;
|
||||
queryCount: number;
|
||||
depCount: number;
|
||||
|
@ -6,7 +6,8 @@
|
||||
* found in the LICENSE file at https://angular.io/license
|
||||
*/
|
||||
export const ANY_STATE = '*';
|
||||
export declare type TransitionMatcherFn = (fromState: any, toState: any) => boolean;
|
||||
export declare type TransitionMatcherFn =
|
||||
(fromState: any, toState: any, element: any, params: {[key: string]: any}) => boolean;
|
||||
|
||||
export function parseTransitionExpr(
|
||||
transitionValue: string | TransitionMatcherFn, errors: string[]): TransitionMatcherFn[] {
|
||||
|
@ -24,8 +24,8 @@ export class AnimationTransitionFactory {
|
||||
private _triggerName: string, public ast: TransitionAst,
|
||||
private _stateStyles: {[stateName: string]: AnimationStateStyles}) {}
|
||||
|
||||
match(currentState: any, nextState: any): boolean {
|
||||
return oneOrMoreTransitionsMatch(this.ast.matchers, currentState, nextState);
|
||||
match(currentState: any, nextState: any, element: any, params: {[key: string]: any}): boolean {
|
||||
return oneOrMoreTransitionsMatch(this.ast.matchers, currentState, nextState, element, params);
|
||||
}
|
||||
|
||||
buildStyles(stateName: string, params: {[key: string]: any}, errors: any[]) {
|
||||
@ -89,8 +89,9 @@ export class AnimationTransitionFactory {
|
||||
}
|
||||
|
||||
function oneOrMoreTransitionsMatch(
|
||||
matchFns: TransitionMatcherFn[], currentState: any, nextState: any): boolean {
|
||||
return matchFns.some(fn => fn(currentState, nextState));
|
||||
matchFns: TransitionMatcherFn[], currentState: any, nextState: any, element: any,
|
||||
params: {[key: string]: any}): boolean {
|
||||
return matchFns.some(fn => fn(currentState, nextState, element, params));
|
||||
}
|
||||
|
||||
export class AnimationStateStyles {
|
||||
|
@ -47,8 +47,10 @@ export class AnimationTrigger {
|
||||
|
||||
get containsQueries() { return this.ast.queryCount > 0; }
|
||||
|
||||
matchTransition(currentState: any, nextState: any): AnimationTransitionFactory|null {
|
||||
const entry = this.transitionFactories.find(f => f.match(currentState, nextState));
|
||||
matchTransition(currentState: any, nextState: any, element: any, params: {[key: string]: any}):
|
||||
AnimationTransitionFactory|null {
|
||||
const entry =
|
||||
this.transitionFactories.find(f => f.match(currentState, nextState, element, params));
|
||||
return entry || null;
|
||||
}
|
||||
|
||||
|
@ -248,7 +248,8 @@ export class AnimationTransitionNamespace {
|
||||
}
|
||||
});
|
||||
|
||||
let transition = trigger.matchTransition(fromState.value, toState.value);
|
||||
let transition =
|
||||
trigger.matchTransition(fromState.value, toState.value, element, toState.params);
|
||||
let isFallbackTransition = false;
|
||||
if (!transition) {
|
||||
if (!defaultToFallback) return;
|
||||
|
Reference in New Issue
Block a user