Path: blob/main/components/dashboard/src/teams/policies/RoleRestrictions.tsx
2501 views
/**1* Copyright (c) 2024 Gitpod GmbH. All rights reserved.2* Licensed under the GNU Affero General Public License (AGPL).3* See License.AGPL.txt in the project root for license information.4*/56import { OrganizationSettings } from "@gitpod/public-api/lib/gitpod/v1/organization_pb";7import { useState } from "react";8import { Button } from "@podkit/buttons/Button";9import { ConfigurationSettingsField } from "../../repositories/detail/ConfigurationSettingsField";10import { useMutation } from "@tanstack/react-query";11import type { PlainMessage } from "@bufbuild/protobuf";12import { Link } from "react-router-dom";13import {14OrganizationRoleRestrictionModal,15OrganizationRoleRestrictionModalProps,16OrgMemberPermissionRestrictionsOptions,17} from "../../components/OrgMemberPermissionsOptions";18import { LightbulbIcon } from "lucide-react";19import { Heading3, Subheading } from "@podkit/typography/Headings";2021type RolePermissionsRestrictionsProps = {22settings: OrganizationSettings | undefined;23isOwner: boolean;24handleUpdateTeamSettings: (25newSettings: Partial<PlainMessage<OrganizationSettings>>,26options?: { throwMutateError?: boolean },27) => Promise<void>;28};29export const RolePermissionsRestrictions = ({30settings,31isOwner,32handleUpdateTeamSettings,33}: RolePermissionsRestrictionsProps) => {34const [showModal, setShowModal] = useState(false);3536const updateMutation: OrganizationRoleRestrictionModalProps["updateMutation"] = useMutation({37mutationFn: async ({ roleRestrictions }) => {38await handleUpdateTeamSettings({ roleRestrictions }, { throwMutateError: true });39},40});4142return (43<ConfigurationSettingsField>44<Heading3>Roles allowed to start workspaces from non-imported repos</Heading3>45<Subheading className="mb-2">46Restrict specific roles from initiating workspaces using non-imported repositories. This setting47requires <span className="font-medium">Owner</span> permissions to modify.48<br />49<span className="flex flex-row items-center gap-1 my-2">50<LightbulbIcon size={20} />{" "}51<span>52Tip: Imported repositories are those listed under{" "}53<Link to={"/repositories"} className="gp-link">54Repository settings55</Link>56.57</span>58</span>59</Subheading>6061<OrgMemberPermissionRestrictionsOptions roleRestrictions={settings?.roleRestrictions ?? []} />6263{isOwner && (64<Button className="mt-6" onClick={() => setShowModal(true)}>65Manage Permissions66</Button>67)}6869{showModal && (70<OrganizationRoleRestrictionModal71isLoading={false}72defaultClass={""}73roleRestrictions={settings?.roleRestrictions ?? []}74showSetDefaultButton={false}75showSwitchTitle={false}76allowedClasses={[]}77updateMutation={updateMutation}78onClose={() => setShowModal(false)}79/>80)}81</ConfigurationSettingsField>82);83};848586