feat: add plugin support for custom page integration (#12900)

* Added plugin UI route functionality.

* Updated Sample UI plugin with route example.

* Added UI route tests.

* Plugin name added to UI Route URL.

* Updated docs.

* Docs fix.

* Updated sample_route text.

* Update src/backend/InvenTree/plugin/base/ui/mixins.py

Co-authored-by: Matthias Mair <code@mjmair.com>

* Fixed nav dynamic link highlighting.

* Added changelog entry.

---------

Co-authored-by: Matthias Mair <code@mjmair.com>
Co-authored-by: Oliver <oliver.henry.walters@gmail.com>
This commit is contained in:
James Todd
2026-09-27 08:13:54 +10:00
committed by GitHub
co-authored by Matthias Mair Oliver
parent ba848a83aa
commit d33d77d679
11 changed files with 199 additions and 5 deletions
@@ -222,7 +222,7 @@ class SampleUserInterfacePlugin(SettingsMixin, UserInterfaceMixin, InvenTreePlug
'key': 'sample-nav-item',
'title': 'Sample Nav Item',
'icon': 'ti:menu',
'options': {'url': '/sample/page/'},
'options': {'url': 'plugin/sampleui/test'},
}
]
@@ -237,6 +237,25 @@ class SampleUserInterfacePlugin(SettingsMixin, UserInterfaceMixin, InvenTreePlug
}
]
def get_ui_routes(self, request, context, **kwargs):
"""Return a list of custom UI routes."""
return [
{
# Adds a simple route to /web/plugin/sampleui/test
'key': 'sample-route',
'title': 'Sample Route',
'source': self.plugin_static_file('sample_route.js:getBasicPage'),
'options': {'path': 'test'},
},
{
# Adds a simple route, with an argument to /web/plugin/sampleui/test/:arg1 (e.g., /web/plugin/sampleui/test/1)
'key': 'sample-route-arg',
'title': 'Sample Route Arg',
'source': self.plugin_static_file('sample_route.js:getArgPage'),
'options': {'path': 'test/:arg1'},
},
]
def get_admin_context(self) -> dict:
"""Return custom context data which can be rendered in the admin panel."""
return {'apple': 'banana', 'foo': 'bar', 'hello': 'world'}