From 4ac6332541a61b41d0f932e0904ef852b7ce3545 Mon Sep 17 00:00:00 2001 From: Devansu Yadav Date: Wed, 12 Apr 2023 04:00:49 +0530 Subject: [PATCH 1/4] Migrate all checkbox inputs to the `CheckBoxInput` component (#16813) * [dashboard] migrate to CheckBoxInput (#16768) * [dashboard] remove CheckBox comp usage * [dashboard] remove `CheckBox` on team settings * [dashboard] remove border on checkbox click state * [dashboard] refactor code for `CheckboxInput` --- .../src/admin/BlockedRepositories.tsx | 27 +++--- components/dashboard/src/admin/Settings.tsx | 61 ++++++------ components/dashboard/src/admin/UserDetail.tsx | 34 +++++-- .../components/forms/CheckboxInputField.tsx | 35 +++++-- .../src/projects/ProjectSettings.tsx | 93 ++++++++++--------- .../src/projects/ProjectVariables.tsx | 13 +-- .../dashboard/src/teams/TeamSettings.tsx | 25 +++-- .../src/user-settings/Integrations.tsx | 24 ++--- .../src/user-settings/Notifications.tsx | 57 +++++++----- .../PersonalAccessTokensCreateView.tsx | 18 ++-- .../dashboard/src/user-settings/SelectIDE.tsx | 13 +-- 11 files changed, 219 insertions(+), 181 deletions(-) diff --git a/components/dashboard/src/admin/BlockedRepositories.tsx b/components/dashboard/src/admin/BlockedRepositories.tsx index 6ac8f0824350de..cb922296f24cec 100644 --- a/components/dashboard/src/admin/BlockedRepositories.tsx +++ b/components/dashboard/src/admin/BlockedRepositories.tsx @@ -11,7 +11,7 @@ import { AdminPageHeader } from "./AdminPageHeader"; import { BlockedRepository } from "@gitpod/gitpod-protocol/lib/blocked-repositories-protocol"; import ConfirmationModal from "../components/ConfirmationModal"; import Modal from "../components/Modal"; -import CheckBox from "../components/CheckBox"; +import { CheckboxInput, CheckboxInputContainer } from "../components/forms/CheckboxInputField"; import { ItemFieldContextMenu } from "../components/ItemsList"; import { ContextMenuEntry } from "../components/ContextMenu"; import Alert from "../components/Alert"; @@ -299,17 +299,20 @@ function Details(props: { }} /> - { - if (!!props.update) { - props.update({ blockUser: v.target.checked }); - } - }} - /> + + + { + if (!!props.update) { + props.update({ blockUser: checked }); + } + }} + /> + ); } diff --git a/components/dashboard/src/admin/Settings.tsx b/components/dashboard/src/admin/Settings.tsx index b1d83514682706..a8bfdb2058e59e 100644 --- a/components/dashboard/src/admin/Settings.tsx +++ b/components/dashboard/src/admin/Settings.tsx @@ -7,7 +7,7 @@ import React, { useContext } from "react"; import { TelemetryData, InstallationAdminSettings } from "@gitpod/gitpod-protocol"; import { AdminContext } from "../admin-context"; -import CheckBox from "../components/CheckBox"; +import { CheckboxInput, CheckboxInputContainer } from "../components/forms/CheckboxInputField"; import { getGitpodService } from "../service/service"; import { useEffect, useState } from "react"; import InfoBox from "../components/InfoBox"; @@ -65,37 +65,34 @@ export default function Settings() { Read our Privacy Policy

- - Enable usage telemetry on your Gitpod instance. A preview of your telemetry is available - below. - - } - checked={adminSettings?.sendTelemetry ?? false} - onChange={(evt) => - actuallySetTelemetryPrefs({ - ...adminSettings, - sendTelemetry: evt.target.checked, - } as InstallationAdminSettings) - } - /> - - Include an optional customer ID in usage telemetry to provide individualized support. - - } - checked={adminSettings?.sendCustomerID ?? false} - onChange={(evt) => - actuallySetTelemetryPrefs({ - ...adminSettings, - sendCustomerID: evt.target.checked, - } as InstallationAdminSettings) - } - /> + + + actuallySetTelemetryPrefs({ + ...adminSettings, + sendTelemetry: checked, + } as InstallationAdminSettings) + } + /> + + + actuallySetTelemetryPrefs({ + ...adminSettings, + sendCustomerID: checked, + } as InstallationAdminSettings) + } + /> + Telemetry preview
{JSON.stringify(telemetryData, null, 2)}
diff --git a/components/dashboard/src/admin/UserDetail.tsx b/components/dashboard/src/admin/UserDetail.tsx index 351a17305f2081..95bd7c213e1116 100644 --- a/components/dashboard/src/admin/UserDetail.tsx +++ b/components/dashboard/src/admin/UserDetail.tsx @@ -16,7 +16,6 @@ import { AccountStatement, Subscription } from "@gitpod/gitpod-protocol/lib/acco import { Plans } from "@gitpod/gitpod-protocol/lib/plans"; import dayjs from "dayjs"; import { useEffect, useRef, useState } from "react"; -import CheckBox from "../components/CheckBox"; import Modal from "../components/Modal"; import { getGitpodService } from "../service/service"; import { WorkspaceSearch } from "./WorkspacesSearch"; @@ -26,6 +25,7 @@ import { BillingMode } from "@gitpod/gitpod-protocol/lib/billing-mode"; import { AttributionId } from "@gitpod/gitpod-protocol/lib/attribution"; import CaretDown from "../icons/CaretDown.svg"; import ContextMenu from "../components/ContextMenu"; +import { CheckboxInput, CheckboxInputField } from "../components/forms/CheckboxInputField"; import { CostCenterJSON, CostCenter_BillingStrategy } from "@gitpod/gitpod-protocol/lib/usage"; import { Heading2, Subheading } from "../components/typography/headings"; @@ -424,12 +424,20 @@ export default function UserDetail(p: { user: User }) { , ]} > -

Edit feature access by adding or removing feature flags for this user.

-
+ {flags.map((e) => ( - + ))} -
+ , ]} > -

Edit user permissions by adding or removing roles for this user.

-
+ {rop.map((e) => ( - + ))} -
+
); diff --git a/components/dashboard/src/components/forms/CheckboxInputField.tsx b/components/dashboard/src/components/forms/CheckboxInputField.tsx index 5e42de90fb4240..952c1b53aaf21a 100644 --- a/components/dashboard/src/components/forms/CheckboxInputField.tsx +++ b/components/dashboard/src/components/forms/CheckboxInputField.tsx @@ -5,7 +5,7 @@ */ import classNames from "classnames"; -import { FC, ReactNode, useCallback } from "react"; +import React, { FC, ReactNode, useCallback } from "react"; import { useId } from "../../hooks/useId"; import { InputField } from "./InputField"; import { InputFieldHint } from "./InputFieldHint"; @@ -25,11 +25,11 @@ export const CheckboxInputField: FC = ({ label, error, type CheckboxInputProps = { id?: string; - value: string; + value?: string; checked: boolean; disabled?: boolean; - label: string; - hint?: string; + label: React.ReactNode; + hint?: React.ReactNode; onChange: (checked: boolean) => void; }; export const CheckboxInput: FC = ({ @@ -51,21 +51,28 @@ export const CheckboxInput: FC = ({ [onChange], ); + const inputProps: React.InputHTMLAttributes = { + id: elementId, + checked: checked, + disabled, + onChange: handleChange, + }; + + if (value) { + inputProps.value = value; + } + return (