Path: blob/main/components/dashboard/src/user-settings/ShowTokenModal.tsx
2500 views
/**1* Copyright (c) 2022 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 { PersonalAccessToken } from "@gitpod/public-api/lib/gitpod/experimental/v1/tokens_pb";7import { useMemo, useState } from "react";8import DateSelector from "../components/DateSelector";9import Modal, { ModalBody, ModalFooter, ModalHeader } from "../components/Modal";10import { getTokenExpirationDays, getTokenExpirationDescription } from "./PersonalAccessTokens";11import { Button } from "@podkit/buttons/Button";12import { useIsDataOps } from "../data/featureflag-query";1314interface TokenModalProps {15token: PersonalAccessToken;16title: string;17description: string;18descriptionImportant: string;19actionDescription: string;20showDateSelector?: boolean;21onSave: (data: { expirationDate: Date }) => void;22onClose: () => void;23}2425function ShowTokenModal(props: TokenModalProps) {26const [expiration, setExpiration] = useState({27expirationDays: "30 Days",28expirationDate: new Date(Date.now() + 30 * 24 * 60 * 60 * 1000),29});3031const save = () => {32props.onSave({ expirationDate: expiration.expirationDate });33props.onClose();34};3536const isDataOps = useIsDataOps();37const TokenExpirationDays = useMemo(() => getTokenExpirationDays(isDataOps), [isDataOps]);3839return (40<Modal visible onClose={props.onClose} onSubmit={save}>41<ModalHeader>{props.title}</ModalHeader>42<ModalBody>43<div className="text-gray-500 dark:text-gray-400 text-md">44<span>{props.description}</span> <span className="font-semibold">{props.descriptionImportant}</span>45</div>46<div className="p-4 mt-2 rounded-xl bg-pk-surface-secondary">47<div className="font-semibold text-gray-700 dark:text-gray-200">{props.token.name}</div>48<div className="font-medium text-gray-400 dark:text-gray-300">49{getTokenExpirationDescription(props.token.expirationTime!.toDate())}50</div>51</div>52<div className="mt-4">53{props.showDateSelector && (54<DateSelector55title="Expiration Date"56description={getTokenExpirationDescription(expiration.expirationDate)}57options={TokenExpirationDays}58value={TokenExpirationDays.find((i) => i.value === expiration.expirationDays)?.value}59onChange={(value) => {60const date = TokenExpirationDays.find((e) => e.value === value)?.getDate();61if (!date) {62return;63}64setExpiration({65expirationDays: value,66expirationDate: date,67});68}}69/>70)}71</div>72</ModalBody>73<ModalFooter>74<Button variant="secondary" onClick={props.onClose}>75Cancel76</Button>77<Button type="submit" variant="destructive">78{props.actionDescription}79</Button>80</ModalFooter>81</Modal>82);83}8485export default ShowTokenModal;868788