Skip to content
This repository was archived by the owner on Jan 30, 2026. It is now read-only.

fix: improve cleanup logic#11

Merged
caio-pizzol merged 1 commit intomainfrom
cursor/SD-543-fix-memory-leak-clear-trigger-refs-92f6
Oct 9, 2025
Merged

fix: improve cleanup logic#11
caio-pizzol merged 1 commit intomainfrom
cursor/SD-543-fix-memory-leak-clear-trigger-refs-92f6

Conversation

@caio-pizzol
Copy link
Contributor

This commit refines the cleanup process in the SuperDocTemplateBuilder component by ensuring that the instance is properly referenced before calling the destroy method. It also resets additional references to prevent memory leaks.

This commit refines the cleanup process in the SuperDocTemplateBuilder component by ensuring that the instance is properly referenced before calling the destroy method. It also resets additional references to prevent memory leaks.
@linear
Copy link

linear bot commented Oct 9, 2025

SD-543 Fix memory leak: clear trigger refs on unmount

Summary

Ensure cleanup refs are cleared on unmount to prevent memory leaks when component is destroyed during active menu interaction

Tasks

  • Add cleanup for triggerCleanupRef.current in main useEffect return
  • Add cleanup for menuTriggerFromRef.current in main useEffect return
  • Clear superdocRef.current references before setting to null on unmount
  • Test unmount during active menu state to verify no console warnings

Notes

Problem: When component unmounts while menu is open or trigger is active, refs hold closures that reference editor/DOM that no longer exist

Current code (src/index.tsx ~line 400):

return () => {
  if (superdocRef.current) {
    if (typeof superdocRef.current.destroy === 'function') {
      superdocRef.current.destroy();
    }
    superdocRef.current = null;
  }
};

Missing: Clear triggerCleanupRef.current and menuTriggerFromRef.current before destroying

Fix:

return () => {
  // Clear trigger refs
  triggerCleanupRef.current = null;
  menuTriggerFromRef.current = null;
  
  // Destroy editor
  if (superdocRef.current) {
    if (typeof superdocRef.current.destroy === 'function') {
      superdocRef.current.destroy();
    }
    superdocRef.current = null;
  }
};

Verification: Mount component → type trigger → unmount → verify no memory leaks in Chrome DevTools

@caio-pizzol caio-pizzol enabled auto-merge (squash) October 9, 2025 19:32
@caio-pizzol caio-pizzol merged commit 01f0bf9 into main Oct 9, 2025
2 checks passed
@caio-pizzol caio-pizzol deleted the cursor/SD-543-fix-memory-leak-clear-trigger-refs-92f6 branch October 9, 2025 19:32
@superdoc-bot
Copy link
Contributor

superdoc-bot bot commented Oct 9, 2025

🎉 This PR is included in version 0.2.0-next.2 🎉

The release is available on:

Your semantic-release bot 📦🚀

superdoc-bot bot pushed a commit that referenced this pull request Nov 13, 2025
# [0.2.0](v0.1.0...v0.2.0) (2025-11-13)

### Bug Fixes

* force pre-release ([f752754](f752754))
* improve cleanup logic ([#11](#11)) ([01f0bf9](01f0bf9))
* update field ID type and improve field handling ([#14](#14)) ([e0e6d31](e0e6d31))
* update field IDs and categories in README and App component ([61a473d](61a473d))

### Features

* add import functionality for .docx files in the template builder ([#15](#15)) ([42faccc](42faccc))
* enhance exportTemplate functionality with configurable options ([#17](#17)) ([7e2a03d](7e2a03d))
* enhance field handling with mode support in template builder ([#16](#16)) ([d46ab5d](d46ab5d))
* implement viewport clamping for menu positioning in SuperDocTemplateBuilder ([#10](#10)) ([09e82ee](09e82ee))
@superdoc-bot
Copy link
Contributor

superdoc-bot bot commented Nov 13, 2025

🎉 This PR is included in version 0.2.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

caio-pizzol pushed a commit that referenced this pull request Jan 30, 2026
* chore(release): 0.2.0 [skip ci]

# [0.2.0](v0.1.0...v0.2.0) (2025-11-13)

### Bug Fixes

* force pre-release ([f752754](f752754))
* improve cleanup logic ([#11](#11)) ([01f0bf9](01f0bf9))
* update field ID type and improve field handling ([#14](#14)) ([e0e6d31](e0e6d31))
* update field IDs and categories in README and App component ([61a473d](61a473d))

### Features

* add import functionality for .docx files in the template builder ([#15](#15)) ([42faccc](42faccc))
* enhance exportTemplate functionality with configurable options ([#17](#17)) ([7e2a03d](7e2a03d))
* enhance field handling with mode support in template builder ([#16](#16)) ([d46ab5d](d46ab5d))
* implement viewport clamping for menu positioning in SuperDocTemplateBuilder ([#10](#10)) ([09e82ee](09e82ee))

* chore(release): 0.3.0 [skip ci]

# [0.3.0](v0.2.0...v0.3.0) (2025-11-21)

### Bug Fixes

* add deduplication for React dependencies in Vite config and clean up package.json ([dc17f23](dc17f23))
* add missing deployment ID in GitHub Pages workflow ([e350b3b](e350b3b))
* update SuperDoc initialization with document mode and enhance Vite config external dependencies ([9e0989a](9e0989a))

### Features

* add getSuperDoc method for accessing SuperDoc API ([#18](#18)) ([ccda4e0](ccda4e0))
* enhance field management with grouping and improved UI ([#19](#19)) ([a64e8b8](a64e8b8))

* chore(release): 0.4.0 [skip ci]

# [0.4.0](v0.3.0...v0.4.0) (2025-12-11)

### Bug Fixes

* disable comments module + sd update ([#22](#22)) ([79d24c7](79d24c7))
* remove dedupe + add dev react runtime ([#20](#20)) ([830b009](830b009))

### Features

* onexport callback ([#21](#21)) ([c85abc1](c85abc1))

* chore(release): 0.5.0 [skip ci]

# [0.5.0](v0.4.0...v0.5.0) (2025-12-16)

### Bug Fixes

* demo app ([461c620](461c620))
* demo with dedupe ([75c4184](75c4184))

### Features

* add mode to field def + move from metadata ([4141fda](4141fda))

* chore(release): 1.0.0 [skip ci]

# [1.0.0](v0.5.0...v1.0.0) (2026-01-16)

* Breaking change: migrate template builder to SuperDoc v1 ([#24](#24)) ([78af7cc](78af7cc))

### BREAKING CHANGES

* - Upgraded `superdoc` to version `1.5.0-next.7` in both `package.json` and `pnpm-lock.yaml`.
- Updated React and React DOM versions to `19.2.3`.
- Enhanced performance by using `useMemo` for toolbar settings and scheduling callbacks with `queueMicrotask` to avoid blocking rendering.
- Various dependency updates in `pnpm-lock.yaml` for improved compatibility and security.

* chore: update superdoc version to 1.5.0 in package.json and pnpm-lock.yaml

* refactor: streamline field update callbacks in SuperDocTemplateBuilder

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: semantic-release-bot <semantic-release-bot@martynus.net>
Co-authored-by: Caio Pizzol <caiopizzol@icloud.com>
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant