1
0
Fork 0
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:
Chaim Lev-Ari 2022-09-13 16:56:38 +03:00 committed by GitHub
parent dd1662c8b8
commit 6c4c958bf0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
61 changed files with 1952 additions and 96 deletions

View 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);
}
},
});
}

View file

@ -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;

View file

@ -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, []))

View 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',
},
},
});
}

View file

@ -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,
});
}