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 244ca350ffcddb..d40d4a227824fa 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";
@@ -64,37 +64,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 79cd8915e948ab..781fd53da9ec0d 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 (