From 1e21961e6aca9be71ddef82ddddba0ca9bc62a08 Mon Sep 17 00:00:00 2001 From: Chaim Lev-Ari Date: Wed, 21 Sep 2022 09:14:29 +0300 Subject: [PATCH] refactor(app): move settings components to react [EE-3442] (#7625) --- app/angulartics.matomo/analytics-services.ts | 2 +- .../EdgeDevicesView/EdgeDevicesView.tsx | 2 +- .../components/EdgeAsyncIntervalsForm.tsx | 163 ++++++++++++++++++ .../components/EdgeCheckInIntervalField.tsx | 2 +- app/edge/components/useIntervalOptions.ts | 67 +++++++ .../environments/queries/useAgentDetails.ts | 2 +- .../feature-flags/useRedirectFeatureFlag.ts | 2 +- .../EnvironmentItem/EdgeIndicator.tsx | 2 +- .../KubeconfigButton/KubeconfigPrompt.tsx | 2 +- .../hostmanagement/fdo/fdo.service.ts | 2 +- .../open-amt/open-amt.service.ts | 3 +- app/portainer/react/components/index.ts | 12 ++ app/portainer/react/views/index.ts | 17 ++ .../settings/authentication/index.js | 3 +- .../authentication/internal-auth/index.ts | 1 - .../edge-compute/SettingsFDO/index.ts | 11 -- .../edge-compute/SettingsOpenAMT/index.ts | 9 - app/portainer/settings/index.js | 10 +- app/react/components/PasswordCheckHint.tsx | 2 +- app/react/docker/containers/utils.ts | 4 +- .../networks/ItemView/NetworkDetailsTable.tsx | 2 +- .../DefaultRegistry/DefaultRegistryAction.tsx | 9 +- .../DefaultRegistry/DefaultRegistryDomain.tsx | 3 +- .../DefaultRegistry/DefaultRegistryName.tsx | 3 +- .../InternalAuth}/Badge.tsx | 0 .../InternalAuth}/InternalAuth.tsx | 15 +- .../PasswordLengthSlider.module.css | 0 .../PasswordLengthSlider.tsx | 4 +- .../InternalAuth}/SaveAuthSettingsButton.tsx | 0 .../AuthenticationView/InternalAuth/index.ts | 1 + .../AutoEnvCreationSettingsForm.tsx | 2 +- .../AutomaticEdgeEnvCreation.tsx | 3 +- .../EnableWaitingRoomSwitch.tsx | 0 .../AutomaticEdgeEnvCreation/index.ts | 0 .../DeploymentSyncOptions.tsx | 142 +++++++++++++++ .../DeploymentSyncOptions/types.ts | 9 + .../DeploymentSyncOptions/validation.ts | 25 +++ .../EdgeComputeSettings.tsx | 0 .../EdgeComputeSettings.validation.ts | 0 .../EdgeComputeSettings/index.ts | 0 .../EdgeComputeSettings}/types.ts | 0 .../EdgeComputeSettingsView.tsx | 11 +- .../FDOProfilesDatatable.tsx | 2 +- .../FDOProfilesDatatableActions.tsx | 0 .../FDOProfilesDatatableContainer.tsx | 0 .../FDOProfilesDatatable/columns/created.tsx | 0 .../FDOProfilesDatatable/columns/index.tsx | 0 .../FDOProfilesDatatable/columns/name.tsx | 0 .../FDOProfilesDatatable/useFDOProfiles.tsx | 0 .../SettingsFDO/SettingsFDO.module.css | 0 .../SettingsFDO/SettingsFDO.tsx | 3 +- .../SettingsFDO/SettingsFDO.validation.ts | 0 .../EdgeComputeView/SettingsFDO/index.ts | 1 + .../SettingsOpenAMT/SettingsOpenAMT.tsx | 0 .../SettingsOpenAMT.validation.ts | 0 .../EdgeComputeView/SettingsOpenAMT/index.ts | 1 + .../settings/EdgeComputeView/types.ts | 7 + app/{ => react}/portainer/settings/queries.ts | 3 +- .../portainer/settings/settings.service.ts | 3 +- app/{ => react}/portainer/settings/types.ts | 0 .../users/teams/ItemView/Details.tsx | 2 +- .../users/teams/ItemView/ItemView.tsx | 2 +- app/react/sidebar/SettingsSidebar.tsx | 2 +- app/react/sidebar/Sidebar.tsx | 2 +- app/setup-tests/server-handlers.ts | 2 +- tsconfig.json | 7 +- 66 files changed, 488 insertions(+), 96 deletions(-) create mode 100644 app/edge/components/EdgeAsyncIntervalsForm.tsx create mode 100644 app/edge/components/useIntervalOptions.ts delete mode 100644 app/portainer/settings/authentication/internal-auth/index.ts delete mode 100644 app/portainer/settings/edge-compute/SettingsFDO/index.ts delete mode 100644 app/portainer/settings/edge-compute/SettingsOpenAMT/index.ts rename app/{portainer/settings/authentication/internal-auth/components => react/portainer/settings/AuthenticationView/InternalAuth}/Badge.tsx (100%) rename app/{portainer/settings/authentication/internal-auth => react/portainer/settings/AuthenticationView/InternalAuth}/InternalAuth.tsx (81%) rename app/{portainer/settings/authentication/internal-auth/components => react/portainer/settings/AuthenticationView/InternalAuth}/PasswordLengthSlider/PasswordLengthSlider.module.css (100%) rename app/{portainer/settings/authentication/internal-auth/components => react/portainer/settings/AuthenticationView/InternalAuth}/PasswordLengthSlider/PasswordLengthSlider.tsx (96%) rename app/{portainer/settings/authentication/components => react/portainer/settings/AuthenticationView/InternalAuth}/SaveAuthSettingsButton.tsx (100%) create mode 100644 app/react/portainer/settings/AuthenticationView/InternalAuth/index.ts rename app/{portainer/settings/edge-compute => react/portainer/settings/EdgeComputeView}/AutomaticEdgeEnvCreation/AutoEnvCreationSettingsForm.tsx (97%) rename app/{portainer/settings/edge-compute => react/portainer/settings/EdgeComputeView}/AutomaticEdgeEnvCreation/AutomaticEdgeEnvCreation.tsx (96%) rename app/{portainer/settings/edge-compute => react/portainer/settings/EdgeComputeView}/AutomaticEdgeEnvCreation/EnableWaitingRoomSwitch.tsx (100%) rename app/{portainer/settings/edge-compute => react/portainer/settings/EdgeComputeView}/AutomaticEdgeEnvCreation/index.ts (100%) create mode 100644 app/react/portainer/settings/EdgeComputeView/DeploymentSyncOptions/DeploymentSyncOptions.tsx create mode 100644 app/react/portainer/settings/EdgeComputeView/DeploymentSyncOptions/types.ts create mode 100644 app/react/portainer/settings/EdgeComputeView/DeploymentSyncOptions/validation.ts rename app/{portainer/settings/edge-compute => react/portainer/settings/EdgeComputeView}/EdgeComputeSettings/EdgeComputeSettings.tsx (100%) rename app/{portainer/settings/edge-compute => react/portainer/settings/EdgeComputeView}/EdgeComputeSettings/EdgeComputeSettings.validation.ts (100%) rename app/{portainer/settings/edge-compute => react/portainer/settings/EdgeComputeView}/EdgeComputeSettings/index.ts (100%) rename app/{portainer/settings/edge-compute => react/portainer/settings/EdgeComputeView/EdgeComputeSettings}/types.ts (100%) rename app/{portainer/settings/edge-compute => react/portainer/settings/EdgeComputeView}/EdgeComputeSettingsView.tsx (57%) rename app/{portainer/settings/edge-compute => react/portainer/settings/EdgeComputeView}/FDOProfilesDatatable/FDOProfilesDatatable.tsx (97%) rename app/{portainer/settings/edge-compute => react/portainer/settings/EdgeComputeView}/FDOProfilesDatatable/FDOProfilesDatatableActions.tsx (100%) rename app/{portainer/settings/edge-compute => react/portainer/settings/EdgeComputeView}/FDOProfilesDatatable/FDOProfilesDatatableContainer.tsx (100%) rename app/{portainer/settings/edge-compute => react/portainer/settings/EdgeComputeView}/FDOProfilesDatatable/columns/created.tsx (100%) rename app/{portainer/settings/edge-compute => react/portainer/settings/EdgeComputeView}/FDOProfilesDatatable/columns/index.tsx (100%) rename app/{portainer/settings/edge-compute => react/portainer/settings/EdgeComputeView}/FDOProfilesDatatable/columns/name.tsx (100%) rename app/{portainer/settings/edge-compute => react/portainer/settings/EdgeComputeView}/FDOProfilesDatatable/useFDOProfiles.tsx (100%) rename app/{portainer/settings/edge-compute => react/portainer/settings/EdgeComputeView}/SettingsFDO/SettingsFDO.module.css (100%) rename app/{portainer/settings/edge-compute => react/portainer/settings/EdgeComputeView}/SettingsFDO/SettingsFDO.tsx (97%) rename app/{portainer/settings/edge-compute => react/portainer/settings/EdgeComputeView}/SettingsFDO/SettingsFDO.validation.ts (100%) create mode 100644 app/react/portainer/settings/EdgeComputeView/SettingsFDO/index.ts rename app/{portainer/settings/edge-compute => react/portainer/settings/EdgeComputeView}/SettingsOpenAMT/SettingsOpenAMT.tsx (100%) rename app/{portainer/settings/edge-compute => react/portainer/settings/EdgeComputeView}/SettingsOpenAMT/SettingsOpenAMT.validation.ts (100%) create mode 100644 app/react/portainer/settings/EdgeComputeView/SettingsOpenAMT/index.ts create mode 100644 app/react/portainer/settings/EdgeComputeView/types.ts rename app/{ => react}/portainer/settings/queries.ts (95%) rename app/{ => react}/portainer/settings/settings.service.ts (95%) rename app/{ => react}/portainer/settings/types.ts (100%) diff --git a/app/angulartics.matomo/analytics-services.ts b/app/angulartics.matomo/analytics-services.ts index c1202fd79..da543af66 100644 --- a/app/angulartics.matomo/analytics-services.ts +++ b/app/angulartics.matomo/analytics-services.ts @@ -1,6 +1,6 @@ import _ from 'lodash'; -import { usePublicSettings } from '@/portainer/settings/queries'; +import { usePublicSettings } from '@/react/portainer/settings/queries'; const categories = [ 'docker', diff --git a/app/edge/EdgeDevices/EdgeDevicesView/EdgeDevicesView.tsx b/app/edge/EdgeDevices/EdgeDevicesView/EdgeDevicesView.tsx index d30e464c7..ff2e0a5d9 100644 --- a/app/edge/EdgeDevices/EdgeDevicesView/EdgeDevicesView.tsx +++ b/app/edge/EdgeDevices/EdgeDevicesView/EdgeDevicesView.tsx @@ -1,6 +1,6 @@ import { useState } from 'react'; -import { useSettings } from '@/portainer/settings/queries'; +import { useSettings } from '@/react/portainer/settings/queries'; import { useGroups } from '@/portainer/environment-groups/queries'; import { PageHeader } from '@@/PageHeader'; diff --git a/app/edge/components/EdgeAsyncIntervalsForm.tsx b/app/edge/components/EdgeAsyncIntervalsForm.tsx new file mode 100644 index 000000000..f36ccd9ec --- /dev/null +++ b/app/edge/components/EdgeAsyncIntervalsForm.tsx @@ -0,0 +1,163 @@ +import { number, object, SchemaOf } from 'yup'; + +import { r2a } from '@/react-tools/react2angular'; + +import { FormControl } from '@@/form-components/FormControl'; +import { Select } from '@@/form-components/Input'; + +import { Options, useIntervalOptions } from './useIntervalOptions'; + +export const EDGE_ASYNC_INTERVAL_USE_DEFAULT = -1; + +export interface EdgeAsyncIntervalsValues { + PingInterval: number; + SnapshotInterval: number; + CommandInterval: number; +} + +export const options: Options = [ + { label: 'Use default interval', value: -1, isDefault: true }, + { + value: 0, + label: 'disabled', + }, + { + value: 60, + label: '1 minute', + }, + { + value: 60 * 60, + label: '1 hour', + }, + { + value: 24 * 60 * 60, + label: '1 day', + }, + { + value: 7 * 24 * 60 * 60, + label: '1 week', + }, +]; + +const defaultFieldSettings = { + ping: { + label: 'Ping interval', + tooltip: + 'Interval used by this Edge agent to check in with the Portainer instance', + }, + snapshot: { + label: 'Snapshot interval', + tooltip: 'Interval used by this Edge agent to snapshot the agent state', + }, + command: { + label: 'Command interval', + tooltip: + 'Interval used by this Edge agent to fetch commands from the Portainer instance', + }, +}; + +interface Props { + values: EdgeAsyncIntervalsValues; + isDefaultHidden?: boolean; + readonly?: boolean; + fieldSettings?: typeof defaultFieldSettings; + onChange(value: EdgeAsyncIntervalsValues): void; +} + +export function EdgeAsyncIntervalsForm({ + onChange, + values, + isDefaultHidden = false, + readonly = false, + fieldSettings = defaultFieldSettings, +}: Props) { + const pingIntervalOptions = useIntervalOptions( + 'Edge.PingInterval', + options, + isDefaultHidden + ); + + const snapshotIntervalOptions = useIntervalOptions( + 'Edge.SnapshotInterval', + options, + isDefaultHidden + ); + + const commandIntervalOptions = useIntervalOptions( + 'Edge.CommandInterval', + options, + isDefaultHidden + ); + + return ( + <> + + + + + +