Skip to content

Commit

Permalink
[PUI] Panels plugin fix (inventree#8147)
Browse files Browse the repository at this point in the history
* Rename "get_custom_panels" method

- So that PUI plugin does not conflict with CUI plugin

* Update docstrings

* Rename "get_ui_panels" -> "ui_panels"

* Docs fix

* rename "ui_panels" -> "get_ui_panels"
  • Loading branch information
SchrodingersGat authored Sep 19, 2024
1 parent 6a8875a commit 8514970
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 14 deletions.
4 changes: 2 additions & 2 deletions docs/docs/extend/plugins/ui.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ When rendering certain content in the user interface, the rendering functions ar

## 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.integration.UserInterfaceMixin.UserInterfaceMixin.get_custom_panels
::: plugin.base.integration.UserInterfaceMixin.UserInterfaceMixin.get_ui_panels
options:
show_bases: False
show_root_heading: False
Expand Down
24 changes: 15 additions & 9 deletions src/backend/InvenTree/plugin/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
from common.api import GlobalSettingsPermissions
from common.settings import get_global_setting
from InvenTree.api import MetadataView
from InvenTree.exceptions import log_error
from InvenTree.filters import SEARCH_ORDER_FILTER
from InvenTree.mixins import (
CreateAPI,
Expand Down Expand Up @@ -433,17 +434,22 @@ def get(self, request):
if get_global_setting('ENABLE_PLUGINS_INTERFACE'):
# Extract all plugins from the registry which provide custom panels
for _plugin in registry.with_mixin('ui', active=True):
# Allow plugins to fill this data out
plugin_panels = _plugin.get_custom_panels(
target_model, target_id, request
)
try:
# Allow plugins to fill this data out
plugin_panels = _plugin.get_ui_panels(
target_model, target_id, request
)

if plugin_panels and type(plugin_panels) is list:
for panel in plugin_panels:
panel['plugin'] = _plugin.slug
if plugin_panels and type(plugin_panels) is list:
for panel in plugin_panels:
panel['plugin'] = _plugin.slug

# TODO: Validate each panel before inserting
panels.append(panel)
# TODO: Validate each panel before inserting
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(PluginSerializers.PluginPanelSerializer(panels, many=True).data)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,10 @@ class UserInterfaceMixin:
- 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.
The following custom UI methods are available:
- get_ui_panels: Return a list of custom panels to be injected into the UI
"""

class MixinMeta:
Expand All @@ -46,8 +50,8 @@ def __init__(self):
super().__init__()
self.add_mixin('ui', True, __class__)

def get_custom_panels(
self, instance_type: str, instance_id: int, request: Request
def get_ui_panels(
self, instance_type: str, instance_id: int, request: Request, **kwargs
) -> list[CustomPanel]:
"""Return a list of custom panels to be injected into the UI.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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."""
panels = []

Expand Down

0 comments on commit 8514970

Please sign in to comment.