diff --git a/packages/feedback/src/core/components/Actor.ts b/packages/feedback/src/core/components/Actor.ts index 3ba04e85ddd1..ba90e9e116ec 100644 --- a/packages/feedback/src/core/components/Actor.ts +++ b/packages/feedback/src/core/components/Actor.ts @@ -46,8 +46,8 @@ export function Actor({ triggerLabel, triggerAriaLabel, shadow, styleNonce }: Ac shadow.appendChild(el); }, removeFromDom(): void { - shadow.removeChild(el); - shadow.removeChild(style); + el.remove(); + style.remove(); }, show(): void { el.ariaHidden = 'false'; diff --git a/packages/feedback/src/modal/integration.tsx b/packages/feedback/src/modal/integration.tsx index f4b228d814b6..d08d58b99a9e 100644 --- a/packages/feedback/src/modal/integration.tsx +++ b/packages/feedback/src/modal/integration.tsx @@ -44,8 +44,8 @@ export const feedbackModalIntegration = ((): FeedbackModalIntegration => { } }, removeFromDom(): void { - shadowRoot.removeChild(el); - shadowRoot.removeChild(style); + el.remove(); + style.remove(); DOCUMENT.body.style.overflow = originalOverflow; }, open() { diff --git a/packages/feedback/test/core/components/Actor.test.ts b/packages/feedback/test/core/components/Actor.test.ts index 06782f10393a..d238b5c5019f 100644 --- a/packages/feedback/test/core/components/Actor.test.ts +++ b/packages/feedback/test/core/components/Actor.test.ts @@ -63,4 +63,24 @@ describe('Actor', () => { expect(actorAria.el.textContent).toBe('Button'); expect(actorAria.el.ariaLabel).toBe('Aria'); }); + + it('does not throw if removeFromDom() is called when it is not mounted', () => { + const feedbackIntegration = buildFeedbackIntegration({ + lazyLoadIntegration: vi.fn(), + }); + + const configuredIntegration = feedbackIntegration({}); + mockSdk({ + sentryOptions: { + integrations: [configuredIntegration], + }, + }); + + const feedback = getFeedback(); + + const actorComponent = feedback!.createWidget(); + + expect(() => actorComponent.removeFromDom()).not.toThrowError(); + expect(() => actorComponent.removeFromDom()).not.toThrowError(); + }); });