mirror of
https://github.com/portainer/portainer.git
synced 2025-08-08 07:15:23 +02:00
feat(edge/update): remote update structure [EE-4040] (#7553)
This commit is contained in:
parent
dd1662c8b8
commit
6c4c958bf0
61 changed files with 1952 additions and 96 deletions
32
app/portainer/feature-flags/useRedirectFeatureFlag.ts
Normal file
32
app/portainer/feature-flags/useRedirectFeatureFlag.ts
Normal file
|
@ -0,0 +1,32 @@
|
|||
import { useRouter } from '@uirouter/react';
|
||||
|
||||
import { usePublicSettings } from '../settings/queries';
|
||||
|
||||
export enum FeatureFlag {
|
||||
EdgeRemoteUpdate = 'edgeRemoteUpdate',
|
||||
}
|
||||
|
||||
export function useFeatureFlag(
|
||||
flag: FeatureFlag,
|
||||
{ onSuccess }: { onSuccess?: (isEnabled: boolean) => void } = {}
|
||||
) {
|
||||
return usePublicSettings<boolean>({
|
||||
select: (settings) => settings.Features[flag],
|
||||
onSuccess,
|
||||
});
|
||||
}
|
||||
|
||||
export function useRedirectFeatureFlag(
|
||||
flag: FeatureFlag,
|
||||
to = 'portainer.home'
|
||||
) {
|
||||
const router = useRouter();
|
||||
|
||||
useFeatureFlag(flag, {
|
||||
onSuccess(isEnabled) {
|
||||
if (!isEnabled) {
|
||||
router.stateService.go(to);
|
||||
}
|
||||
},
|
||||
});
|
||||
}
|
|
@ -28,7 +28,6 @@ export function PublicSettingsViewModel(settings) {
|
|||
this.RequiredPasswordLength = settings.RequiredPasswordLength;
|
||||
this.EnableEdgeComputeFeatures = settings.EnableEdgeComputeFeatures;
|
||||
this.EnforceEdgeID = settings.EnforceEdgeID;
|
||||
this.FeatureFlagSettings = settings.FeatureFlagSettings;
|
||||
this.LogoURL = settings.LogoURL;
|
||||
this.OAuthLoginURI = settings.OAuthLoginURI;
|
||||
this.EnableTelemetry = settings.EnableTelemetry;
|
||||
|
|
|
@ -10,9 +10,14 @@ import {
|
|||
|
||||
import { wizardModule } from './wizard';
|
||||
import { teamsModule } from './teams';
|
||||
import { updateSchedulesModule } from './update-schedules';
|
||||
|
||||
export const viewsModule = angular
|
||||
.module('portainer.app.react.views', [wizardModule, teamsModule])
|
||||
.module('portainer.app.react.views', [
|
||||
wizardModule,
|
||||
teamsModule,
|
||||
updateSchedulesModule,
|
||||
])
|
||||
.component('defaultRegistryName', r2a(DefaultRegistryName, []))
|
||||
.component('defaultRegistryAction', r2a(DefaultRegistryAction, []))
|
||||
.component('defaultRegistryDomain', r2a(DefaultRegistryDomain, []))
|
||||
|
|
48
app/portainer/react/views/update-schedules.ts
Normal file
48
app/portainer/react/views/update-schedules.ts
Normal file
|
@ -0,0 +1,48 @@
|
|||
import angular from 'angular';
|
||||
import { StateRegistry } from '@uirouter/angularjs';
|
||||
|
||||
import { r2a } from '@/react-tools/react2angular';
|
||||
import {
|
||||
ListView,
|
||||
CreateView,
|
||||
ItemView,
|
||||
} from '@/react/portainer/environments/update-schedules';
|
||||
|
||||
export const updateSchedulesModule = angular
|
||||
.module('portainer.edge.updateSchedules', [])
|
||||
.component('updateSchedulesListView', r2a(ListView, []))
|
||||
.component('updateSchedulesCreateView', r2a(CreateView, []))
|
||||
.component('updateSchedulesItemView', r2a(ItemView, []))
|
||||
.config(config).name;
|
||||
|
||||
function config($stateRegistryProvider: StateRegistry) {
|
||||
$stateRegistryProvider.register({
|
||||
name: 'portainer.endpoints.updateSchedules',
|
||||
url: '/update-schedules',
|
||||
views: {
|
||||
'content@': {
|
||||
component: 'updateSchedulesListView',
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
$stateRegistryProvider.register({
|
||||
name: 'portainer.endpoints.updateSchedules.create',
|
||||
url: '/update-schedules/new',
|
||||
views: {
|
||||
'content@': {
|
||||
component: 'updateSchedulesCreateView',
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
$stateRegistryProvider.register({
|
||||
name: 'portainer.endpoints.updateSchedules.item',
|
||||
url: '/update-schedules/:id',
|
||||
views: {
|
||||
'content@': {
|
||||
component: 'updateSchedulesItemView',
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
|
@ -19,14 +19,17 @@ import { DefaultRegistry, Settings } from './types';
|
|||
export function usePublicSettings<T = PublicSettingsViewModel>({
|
||||
enabled,
|
||||
select,
|
||||
onSuccess,
|
||||
}: {
|
||||
select?: (settings: PublicSettingsViewModel) => T;
|
||||
enabled?: boolean;
|
||||
onSuccess?: (data: T) => void;
|
||||
} = {}) {
|
||||
return useQuery(['settings', 'public'], () => getPublicSettings(), {
|
||||
select,
|
||||
...withError('Unable to retrieve public settings'),
|
||||
enabled,
|
||||
onSuccess,
|
||||
});
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue