{{ 'XP.Plugin.RuntimeApplyingTitle' | translate: { Default: 'Plugin changes are being applied' } }}
@if (runtimeRestart.backgroundPluginNames().length) {
{{
'XP.Plugin.RuntimeApplyingDescription'
| translate
: {
Default:
'API replicas are restarting in background batches for {{pluginNames
}}. You can continue using this page.', pluginNames: runtimeRestart.backgroundPluginNames().join(', ') } }}
} @else {
{{
'XP.Plugin.RuntimeApplyingGenericDescription'
| translate
: { Default: 'API replicas are restarting in background batches. You can continue using this page.' }
}}
}
@if (runtimeRestart.pendingPluginNames().length) {
{{
'XP.Plugin.RestartRequiredDescription'
| translate
: {
Default: 'Plugin changes for {{pluginNames}}
are staged.', pluginNames: runtimeRestart.pendingPluginNames().join(', ') } }}
} @else {
{{
'XP.Plugin.RestartRequiredGenericDescription'
| translate: { Default: 'System plugin changes are staged. Restart the API service to activate them.' }
}}
}
@if (runtimeRestart.lastError(); as error) {
{{ error }}
}
@if (!runtimeRestart.canRestart()) {
{{
runtimeRestart.restartUnavailableMessageKey()
| translate
: {
Default: 'Ask a SuperAdmin in the default tenant scope to restart the API service.'
}
}}
{{
'XP.Plugin.ArchiveInstallHint'
| translate
: {
Default:
'Upload a plugin package archive (.zip, .tgz, .tar.gz, or .tar). The archive must contain one package.json and a built dist/ or src/index.ts entry.'
}
}}
@if (archiveFile()) {
}
@if (archiveInstallError()) {
{{ archiveInstallError() }}
}
@if (archiveInstalling()) {
}
{{ 'XP.Plugin.InstallFromLocal' | translate: { Default: 'Install from Local Workspace' } }}
{{
'XP.Plugin.LocalInstallHint'
| translate
: {
Default:
'Development only. workspacePath must be an absolute path on the API host and inside PLUGIN_WORKSPACE_ROOTS. Xpert copies the workspace into the host plugin directory for loading.'
}
}}
{{
'XP.Plugin.LocalWorkspacePathHint'
| translate
: {
Default: 'Add the plugin workspace path to the PLUGIN_WORKSPACE_ROOTS environment variable first.'
}
}}