Register Regular Actions to Pimcore Copilot
To register regular actions in Pimcore Copilot, two components need to be implemented. For actual examples see shipped implementations.
Server-Side Component
The server-side component is responsible for providing available actions based on search tokens.
To implement:
- Create a PHP class that implements [
Pimcore\Bundle\CopilotBundle\Copilot\ActionProviderInterface] - Register it as Symfony service with tag name
pimcore.copilot.actions_providerand optionalprioritypriorityshould influence order of search results provided by multiple adapters (not implemented yet).
- Result of ActionProvider needs to be a list of [
Pimcore\Bundle\CopilotBundle\Copilot\Model\ActionInterface] objects- Either use [
Pimcore\Bundle\CopilotBundle\Copilot\Model\RegularAction] or provide custom implementation - See method comments of interface for expected data
- Either use [
Client-Side Component
The client-side component is responsible for
- executing some action when action is selected in Pimcore Copilot.
- tracing progress of long-running actions and populating action history if necessary and wanted.
To implement:
- Create a JS class that extends [
pimcore.plugin.PimcoreCopilotBundle.copilot.adapters.abstractAdapter] and implementstartProcessingmethod (will be called when action is selected in Pimcore Copilot)this.actionItem: Action item containing all data provided by controller (title,jsAdapterName,jsConfig,icon,iconCls)this.context: Context in what Pimcore Copilot dialog window was opened (subject,selected_elements,tags)this.dialogWindow: Reference to Pimcore Copilot dialog window - e.g. do close it if necessary
- JS class needs to be in namespace
pimcore.plugin.PimcoreCopilotBundle.copilot.adapters.
Example
Server-Side Component
namespace App\RegularActions;
use Pimcore\Bundle\CopilotBundle\Copilot\ActionProviderInterface;
use Pimcore\Bundle\CopilotBundle\Copilot\Model\RegularAction;
final class AlertAction implements ActionProviderInterface
{
public function getActions(string $searchLanguage): array
{
return
[
new RegularAction('Alert', 'alertAdapter', ['message' => 'My Alert Message']),
];
}
}
Client-Side Component
pimcore.plugin.PimcoreCopilotBundle.copilot.adapters.alertAdapter = Class.create(pimcore.plugin.PimcoreCopilotBundle.copilot.adapters.abstractAdapter, {
startProcessing: function() {
this.dialogWindow.hideWindow();
const jsConfig = this.actionItem.jsConfig;
alert(jsConfig.message);
}
});
Register Service
App\RegularActions\AlertAction:
tags:
- { name: "pimcore.copilot.actions_provider", priority: 40 }