* Make plugin registry hash independent of plugin discovery order
calculate_plugin_hash() iterates self.plugins.items() in insertion
order, which is the plugin discovery order of the local process. Two
processes can hold the same registry state (same plugins, versions,
active flags) in a different order and compute different hashes,
ping-ponging the _PLUGIN_REGISTRY_HASH setting and triggering endless
registry reloads in check_reload().
Sort by slug before hashing so the hash represents the registry state
rather than the iteration order of any particular process. Add a
regression test that reverses the plugin dict and asserts the hash is
unchanged.
* Address review comments: explicit sort key, guard against vacuous test
---------
Co-authored-by: Christopher Johnson <keitonasawa@gmail.com>
Co-authored-by: Nasawa <christopher@anigeek.com>
* bump container deps
* specific n version
* switch to nvm as n is not officially supported
* fix bash script
* fix corepack
* move yarn config inline
* revert nvm usage
(cherry picked from commit 9ee189a16b)
Co-authored-by: Matthias Mair <code@mjmair.com>
* UX: Disable standard allocation for trackable parts and add tooltip (#11811)
* Test: Update Playwright tests for disabled trackable allocation
* Fix: Align trackable allocation logic and tests based on review
* Test: Fix incorrect assumption of trackable Red Widget in pui_build.spec.ts
---------
(cherry picked from commit c2c8e72f37)
Co-authored-by: Aditya Kumar Mishra <154746713+adityakrmishra@users.noreply.github.com>
Co-authored-by: Matthias Mair <code@mjmair.com>
* fix(tasks): bypass Invoke PTY for interactive superuser/flush commands
Docker TTY sessions could drop the first keypress and stall at the username prompt when using invoke superuser (and interactive flush).
Run these interactive management commands via direct subprocess stdio instead of Invoke PTY mediation.
Refs #11751.
* chore: remove changelog entry per review
(cherry picked from commit 245ead26bc)
Co-authored-by: getpwnam <cp@evilbit.co.uk>
* Bug fix for build forms
- Memoize outputs to prevent re-rendering reset issues
* Add playwright test
(cherry picked from commit 3dfd03fa89)
Co-authored-by: Oliver <oliver.henry.walters@gmail.com>
* ensure tracing is only set up once
* check if instrument was already called
(cherry picked from commit 914cd72ef1)
Co-authored-by: Matthias Mair <code@mjmair.com>
* Lock notes on orders if they are completed
Fixes#11879
* also check setting
* use statuscode object
* remove build lock
(cherry picked from commit 610e275ca0)
Co-authored-by: Matthias Mair <code@mjmair.com>
* Fix: preserve existing widget sizes when adding a dashboard widget
When adding a new widget from the drawer, addWidget called
updateLayoutForWidget with overrideSize=true on every existing layout
key. That flag forces w/h on every layout entry to the widget's
minWidth/minHeight, which silently reset all user-customised widget
sizes back to their minimums.
Pass overrideSize=false instead. Existing widgets retain their layout
entries (and therefore their user-set sizes); the newly added widget
has no entry yet, so react-grid-layout auto-places it at default size.
Adds a Playwright regression test that resizes a widget, adds a second
widget, and asserts the first widget's height is preserved.
* Make widget-resize regression test reliable
Replace the previous drag-based test with a deterministic check that
manipulates the persisted layout directly. The resize handles only
exist when isResizable={editing} is true, so the previous test's
attempt to grab .react-resizable-handle returned null in CI.
The new test inflates the first widget's layout entry in
localStorage, reloads to rehydrate zustand, then adds a second widget
via the menu and asserts the first widget retained its enlarged
dimensions. This directly exercises the addWidget code path without
needing edit mode or mouse simulation.
* Apply biome formatting
* Patch backend profile to inflate widget; fix unused non-null assertion
Updating localStorage was wiped out by observeProfile() on reload, so
inflate the widget on the backend user profile instead.
---------
(cherry picked from commit d603358205)
Co-authored-by: tigger2000ttfn <tigger2000ttfn@gmail.com>
Co-authored-by: tigger2000ttfn <tigger2000ttfn@users.noreply.github.com>
* Ensure a new BOM item triggers check_bom_valid
* Ensure BOM validation is properly recomputed on a BOM item update
* Add unit tests
* Tweak unit tests
* Update 'clear_bom' method
(cherry picked from commit a94798daaa)
Co-authored-by: Oliver <oliver.henry.walters@gmail.com>
* Move useFilterSet state to the @lib
* Refactor useTable hook into @lib
* Refactor string helper functions
* Refactor constructFormUrl func
* Refactor Boundary component
* Refactor StoredTableState
* More refactoring
* Refactor CopyButton and CopyableCell
* Pass table render func to plugins
* Provide internal wrapper function, while allowing the "api" and "navigate" functions to be provided by the caller
* Adds <InvenTreeTable /> component which is exposed to plugins
* Update frontend versioning
* Update docs
* Handle condition where UI does not provide table rendering function
* Move queryFilters out of custom state
* Fix exported type
* Extract searchParams
- Cannot be used outside of router component
- Only provide when the table is generated internally
* Bump UI version
* Fix for right-click context menu
- Function needs to be defined with the context menu provider
(cherry picked from commit 23f43ffd33)
Co-authored-by: Oliver <oliver.henry.walters@gmail.com>
* move to router based path building
* fix url names
* fix import
* fix test helper
* fix test
* more test fixes
* fix api response
* remove url patch
* bump api version
* reduce diff
* Fix version tag
* fix schema generation errors
* adjust texts
* fix tests
* add test for notification behavior / readakk
* add todo for wrong endpoint
* rename
* adjust docstring
* fix outstanding permission todo - this pattern should be changed in the API