gridstack / gridstack.js

Build interactive dashboards in minutes.
https://gridstackjs.com
MIT License
6.38k stars 1.27k forks source link

[BUG] New widgets added by .load() displace existing widgets #2639

Closed jilow closed 3 months ago

jilow commented 4 months ago

Subject of the issue

New widgets created by the .load() method are rendered in the middle of the grid and displace existing widgets.

This behavior doesn't match .addWidget() which places new widgets in the next available slot without displacing.

Screenshots

.addWidget(newItem) .load(items + newItem)
image image

Your environment

Version: 10.0.1 & 10.1.1 Browser/OS: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:124.0) Gecko/20100101 Firefox/124.0

Steps to reproduce

Demo: https://jsfiddle.net/2g4zarb8/

  1. Create a new node with auto position (no w or h).
  2. Add the widget using .addWidget() and observe it in the next open horizontal spot.
  3. Add the same widget using .load() and observe it in the middle of the grid.

Expected behavior

New widgets are placed consistently regardless of which method was used. In this case I'd expect new widget added with .load() to be placed in the same location .addWidget() would.

adumesny commented 4 months ago

yeah, that case should work but load() was written expecting complete layouts (doing just the diffs) but since that item is new it should addWidget() at the end since there is no location... special case.

adumesny commented 3 months ago

fixed in the next release. don't forget to donate if you find this lib useful!

jilow commented 3 months ago

Thanks for fixing this so quickly @adumesny! I can confirm that this is no longer an issue as of v10.1.2.