From aa52f4e58f7d897d807a756016217a5ff58561f7 Mon Sep 17 00:00:00 2001 From: adiguba Date: Fri, 14 Oct 2022 22:00:15 +0200 Subject: [PATCH] fix 7948 --- .../render_dom/wrappers/Element/index.ts | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/compiler/compile/render_dom/wrappers/Element/index.ts b/src/compiler/compile/render_dom/wrappers/Element/index.ts index 8d0429879e..004fba1f4c 100644 --- a/src/compiler/compile/render_dom/wrappers/Element/index.ts +++ b/src/compiler/compile/render_dom/wrappers/Element/index.ts @@ -308,40 +308,58 @@ export default class ElementWrapper extends Wrapper { const has_transitions = !!(this.node.intro || this.node.outro); const not_equal = this.renderer.component.component_options.immutable ? x`@not_equal` : x`@safe_not_equal`; + const tag_will_be_removed = block.get_unique_name('tag_will_be_removed'); + if (has_transitions) { + block.add_variable(tag_will_be_removed, x`false`); + } + block.chunks.update.push(b` if (${tag}) { if (!${previous_tag}) { ${this.var} = ${this.child_dynamic_element_block.name}(#ctx); + ${previous_tag} = ${tag}; ${this.var}.c(); - ${has_transitions && b`@transition_in(${this.var})`} + ${has_transitions && b`@transition_in(${this.var});`} ${this.var}.m(${this.get_update_mount_node(anchor)}, ${anchor}); } else if (${not_equal}(${previous_tag}, ${tag})) { ${this.var}.d(1); ${this.renderer.options.dev && b`@validate_dynamic_element(${tag});`} ${this.renderer.options.dev && this.node.children.length > 0 && b`@validate_void_dynamic_element(${tag});`} ${this.var} = ${this.child_dynamic_element_block.name}(#ctx); + ${previous_tag} = ${tag}; ${this.var}.c(); + ${has_transitions && b`if (${tag_will_be_removed}) { + ${tag_will_be_removed} = false; + @transition_in(${this.var}) + }`} ${this.var}.m(${this.get_update_mount_node(anchor)}, ${anchor}); } else { + ${has_transitions && b`if (${tag_will_be_removed}) { + ${tag_will_be_removed} = false; + @transition_in(${this.var}) + }`} ${this.var}.p(#ctx, #dirty); } } else if (${previous_tag}) { ${ has_transitions ? b` + ${tag_will_be_removed} = true; @group_outros(); @transition_out(${this.var}, 1, 1, () => { ${this.var} = null; + ${previous_tag} = ${tag}; + ${tag_will_be_removed} = false; }); @check_outros(); ` : b` ${this.var}.d(1); ${this.var} = null; + ${previous_tag} = ${tag}; ` } } - ${previous_tag} = ${tag}; `); if (this.child_dynamic_element_block.has_intros) {