2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-06-16 12:05:53 +00:00

Merge remote-tracking branch 'upstream/master' into pui-feature-plugin

This commit is contained in:
wolflu05
2024-09-19 09:37:47 +02:00
4 changed files with 24 additions and 14 deletions

View File

@ -18,9 +18,9 @@ When rendering certain content in the user interface, the rendering functions ar
## Custom Panels ## Custom Panels
Many of the pages in the InvenTree web interface are built using a series of "panels" which are displayed on the page. Custom panels can be added to these pages, by implementing the `get_custom_panels` method: Many of the pages in the InvenTree web interface are built using a series of "panels" which are displayed on the page. Custom panels can be added to these pages, by implementing the `get_ui_panels` method:
::: plugin.base.ui.mixins.UserInterfaceMixin.get_custom_panels ::: plugin.base.ui.mixins.UserInterfaceMixin.get_ui_panels
options: options:
show_bases: False show_bases: False
show_root_heading: False show_root_heading: False

View File

@ -9,6 +9,7 @@ from rest_framework.views import APIView
import plugin.base.ui.serializers as UIPluginSerializers import plugin.base.ui.serializers as UIPluginSerializers
from common.settings import get_global_setting from common.settings import get_global_setting
from InvenTree.exceptions import log_error
from plugin import registry from plugin import registry
@ -31,17 +32,22 @@ class PluginPanelList(APIView):
if get_global_setting('ENABLE_PLUGINS_INTERFACE'): if get_global_setting('ENABLE_PLUGINS_INTERFACE'):
# Extract all plugins from the registry which provide custom panels # Extract all plugins from the registry which provide custom panels
for _plugin in registry.with_mixin('ui', active=True): for _plugin in registry.with_mixin('ui', active=True):
# Allow plugins to fill this data out try:
plugin_panels = _plugin.get_custom_panels( # Allow plugins to fill this data out
target_model, target_id, request plugin_panels = _plugin.get_ui_panels(
) target_model, target_id, request
)
if plugin_panels and type(plugin_panels) is list: if plugin_panels and type(plugin_panels) is list:
for panel in plugin_panels: for panel in plugin_panels:
panel['plugin'] = _plugin.slug panel['plugin'] = _plugin.slug
# TODO: Validate each panel before inserting # TODO: Validate each panel before inserting
panels.append(panel) panels.append(panel)
except Exception:
# Custom panels could not load
# Log the error and continue
log_error(f'{_plugin.slug}.get_ui_panels')
return Response( return Response(
UIPluginSerializers.PluginPanelSerializer(panels, many=True).data UIPluginSerializers.PluginPanelSerializer(panels, many=True).data

View File

@ -51,6 +51,10 @@ class UserInterfaceMixin:
- All content is accessed via the API, as requested by the user interface. - All content is accessed via the API, as requested by the user interface.
- This means that content can be dynamically generated, based on the current state of the system. - This means that content can be dynamically generated, based on the current state of the system.
The following custom UI methods are available:
- get_ui_panels: Return a list of custom panels to be injected into the UI
""" """
class MixinMeta: class MixinMeta:
@ -63,8 +67,8 @@ class UserInterfaceMixin:
super().__init__() super().__init__()
self.add_mixin('ui', True, __class__) # type: ignore self.add_mixin('ui', True, __class__) # type: ignore
def get_custom_panels( def get_ui_panels(
self, instance_type: str, instance_id: int, request: Request self, instance_type: str, instance_id: int, request: Request, **kwargs
) -> list[CustomPanel]: ) -> list[CustomPanel]:
"""Return a list of custom panels to be injected into the UI. """Return a list of custom panels to be injected into the UI.

View File

@ -44,7 +44,7 @@ class SampleUserInterfacePlugin(SettingsMixin, UserInterfaceMixin, InvenTreePlug
}, },
} }
def get_custom_panels(self, instance_type: str, instance_id: int, request): def get_ui_panels(self, instance_type: str, instance_id: int, request, **kwargs):
"""Return a list of custom panels to be injected into the UI.""" """Return a list of custom panels to be injected into the UI."""
panels = [] panels = []