fix(animations): ignore triggers that are registered multiple times (#14723)
This commit is contained in:
parent
9186068df1
commit
2602b039b4
@ -40,7 +40,7 @@ export class DomAnimationEngine {
|
|||||||
|
|
||||||
private _elementTriggerStates = new Map<any, {[triggerName: string]: string}>();
|
private _elementTriggerStates = new Map<any, {[triggerName: string]: string}>();
|
||||||
|
|
||||||
private _triggers: {[triggerName: string]: AnimationTrigger} = {};
|
private _triggers: {[triggerName: string]: AnimationTrigger} = Object.create(null);
|
||||||
private _triggerListeners = new Map<any, TriggerListenerTuple[]>();
|
private _triggerListeners = new Map<any, TriggerListenerTuple[]>();
|
||||||
|
|
||||||
constructor(private _driver: AnimationDriver, private _normalizer: AnimationStyleNormalizer) {}
|
constructor(private _driver: AnimationDriver, private _normalizer: AnimationStyleNormalizer) {}
|
||||||
@ -58,7 +58,7 @@ export class DomAnimationEngine {
|
|||||||
registerTrigger(trigger: AnimationTriggerMetadata, name: string = null): void {
|
registerTrigger(trigger: AnimationTriggerMetadata, name: string = null): void {
|
||||||
name = name || trigger.name;
|
name = name || trigger.name;
|
||||||
if (this._triggers[name]) {
|
if (this._triggers[name]) {
|
||||||
throw new Error(`The provided animation trigger "${name}" has already been registered!`);
|
return;
|
||||||
}
|
}
|
||||||
this._triggers[name] = buildTrigger(name, trigger.definitions);
|
this._triggers[name] = buildTrigger(name, trigger.definitions);
|
||||||
}
|
}
|
||||||
|
@ -32,9 +32,14 @@ export class NoopAnimationEngine extends AnimationEngine {
|
|||||||
private _changes: ChangeTuple[] = [];
|
private _changes: ChangeTuple[] = [];
|
||||||
private _flaggedRemovals = new Set<any>();
|
private _flaggedRemovals = new Set<any>();
|
||||||
private _onDoneFns: (() => any)[] = [];
|
private _onDoneFns: (() => any)[] = [];
|
||||||
private _triggerStyles: {[triggerName: string]: {[stateName: string]: ɵStyleData}} = {};
|
private _triggerStyles: {[triggerName: string]: {[stateName: string]: ɵStyleData}} =
|
||||||
|
Object.create(null);
|
||||||
|
|
||||||
registerTrigger(trigger: AnimationTriggerMetadata, name: string = null): void {
|
registerTrigger(trigger: AnimationTriggerMetadata, name: string = null): void {
|
||||||
|
name = name || trigger.name;
|
||||||
|
if (this._triggerStyles[name]) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
const stateMap: {[stateName: string]: ɵStyleData} = {};
|
const stateMap: {[stateName: string]: ɵStyleData} = {};
|
||||||
trigger.definitions.forEach(def => {
|
trigger.definitions.forEach(def => {
|
||||||
if (def.type === AnimationMetadataType.State) {
|
if (def.type === AnimationMetadataType.State) {
|
||||||
@ -42,7 +47,6 @@ export class NoopAnimationEngine extends AnimationEngine {
|
|||||||
stateMap[stateDef.name] = normalizeStyles(stateDef.styles.styles);
|
stateMap[stateDef.name] = normalizeStyles(stateDef.styles.styles);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
name = name || trigger.name;
|
|
||||||
this._triggerStyles[name] = stateMap;
|
this._triggerStyles[name] = stateMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,12 +39,10 @@ export function main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
describe('trigger registration', () => {
|
describe('trigger registration', () => {
|
||||||
it('should throw an error if the same trigger is registered twice', () => {
|
it('should ignore and not throw an error if the same trigger is registered twice', () => {
|
||||||
const engine = makeEngine();
|
const engine = makeEngine();
|
||||||
engine.registerTrigger(trigger('trig', []));
|
engine.registerTrigger(trigger('trig', []));
|
||||||
expect(() => {
|
expect(() => { engine.registerTrigger(trigger('trig', [])); }).not.toThrow();
|
||||||
engine.registerTrigger(trigger('trig', []));
|
|
||||||
}).toThrowError(/The provided animation trigger "trig" has already been registered!/);
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user