chore: forbid direct react import (#5658)

This commit is contained in:
Kira Pilot
2023-01-10 13:30:48 -05:00
committed by GitHub
parent efee03fdec
commit 0171ccbf62
49 changed files with 171 additions and 159 deletions

View File

@ -122,6 +122,15 @@ rules:
react/jsx-uses-react: "off" react/jsx-uses-react: "off"
react/react-in-jsx-scope: "off" react/react-in-jsx-scope: "off"
"unicorn/explicit-length-check": "error" "unicorn/explicit-length-check": "error"
# https://github.com/jsx-eslint/eslint-plugin-react/issues/2628#issuecomment-984160944
no-restricted-syntax:
[
"error",
{
selector: "ImportDeclaration[source.value='react'][specifiers.0.type='ImportDefaultSpecifier']",
message: "Default React import not allowed",
},
]
settings: settings:
react: react:
version: detect version: detect

View File

@ -1,9 +1,9 @@
import { makeStyles } from "@material-ui/core/styles" import { makeStyles } from "@material-ui/core/styles"
import { Skeleton } from "@material-ui/lab" import { Skeleton } from "@material-ui/lab"
import React from "react" import { FC } from "react"
import { borderRadiusSm } from "theme/constants" import { borderRadiusSm } from "theme/constants"
export const AppLinkSkeleton: React.FC<{ width: number }> = ({ width }) => { export const AppLinkSkeleton: FC<{ width: number }> = ({ width }) => {
const styles = useStyles() const styles = useStyles()
return ( return (
<Skeleton <Skeleton

View File

@ -2,14 +2,14 @@ import { makeStyles } from "@material-ui/core/styles"
import Tooltip from "@material-ui/core/Tooltip" import Tooltip from "@material-ui/core/Tooltip"
import { useClickable } from "hooks/useClickable" import { useClickable } from "hooks/useClickable"
import { useClipboard } from "hooks/useClipboard" import { useClipboard } from "hooks/useClipboard"
import React, { HTMLProps } from "react" import { FC, HTMLProps } from "react"
import { combineClasses } from "util/combineClasses" import { combineClasses } from "util/combineClasses"
interface CopyableValueProps extends HTMLProps<HTMLDivElement> { interface CopyableValueProps extends HTMLProps<HTMLDivElement> {
value: string value: string
} }
export const CopyableValue: React.FC<CopyableValueProps> = ({ export const CopyableValue: FC<CopyableValueProps> = ({
value, value,
className, className,
...props ...props

View File

@ -1,10 +1,10 @@
import { makeStyles } from "@material-ui/core/styles" import { makeStyles } from "@material-ui/core/styles"
import { Stack } from "components/Stack/Stack" import { Stack } from "components/Stack/Stack"
import React, { PropsWithChildren } from "react" import { PropsWithChildren, FC } from "react"
import { MONOSPACE_FONT_FAMILY } from "theme/constants" import { MONOSPACE_FONT_FAMILY } from "theme/constants"
import { combineClasses } from "util/combineClasses" import { combineClasses } from "util/combineClasses"
export const EnabledBadge: React.FC = () => { export const EnabledBadge: FC = () => {
const styles = useStyles() const styles = useStyles()
return ( return (
<span className={combineClasses([styles.badge, styles.enabledBadge])}> <span className={combineClasses([styles.badge, styles.enabledBadge])}>
@ -13,7 +13,7 @@ export const EnabledBadge: React.FC = () => {
) )
} }
export const EntitledBadge: React.FC = () => { export const EntitledBadge: FC = () => {
const styles = useStyles() const styles = useStyles()
return ( return (
<span className={combineClasses([styles.badge, styles.enabledBadge])}> <span className={combineClasses([styles.badge, styles.enabledBadge])}>
@ -22,7 +22,7 @@ export const EntitledBadge: React.FC = () => {
) )
} }
export const DisabledBadge: React.FC = () => { export const DisabledBadge: FC = () => {
const styles = useStyles() const styles = useStyles()
return ( return (
<span className={combineClasses([styles.badge, styles.disabledBadge])}> <span className={combineClasses([styles.badge, styles.disabledBadge])}>
@ -31,7 +31,7 @@ export const DisabledBadge: React.FC = () => {
) )
} }
export const EnterpriseBadge: React.FC = () => { export const EnterpriseBadge: FC = () => {
const styles = useStyles() const styles = useStyles()
return ( return (
<span className={combineClasses([styles.badge, styles.enterpriseBadge])}> <span className={combineClasses([styles.badge, styles.enterpriseBadge])}>
@ -40,7 +40,7 @@ export const EnterpriseBadge: React.FC = () => {
) )
} }
export const VersionBadge: React.FC<{ export const VersionBadge: FC<{
version: string version: string
}> = ({ version }) => { }> = ({ version }) => {
const styles = useStyles() const styles = useStyles()
@ -51,7 +51,7 @@ export const VersionBadge: React.FC<{
) )
} }
export const Badges: React.FC<PropsWithChildren> = ({ children }) => { export const Badges: FC<PropsWithChildren> = ({ children }) => {
const styles = useStyles() const styles = useStyles()
return ( return (
<Stack <Stack

View File

@ -2,12 +2,13 @@ import { makeStyles } from "@material-ui/core/styles"
import { Margins } from "components/Margins/Margins" import { Margins } from "components/Margins/Margins"
import { Stack } from "components/Stack/Stack" import { Stack } from "components/Stack/Stack"
import { Sidebar } from "./Sidebar" import { Sidebar } from "./Sidebar"
import React, { import {
createContext, createContext,
PropsWithChildren, PropsWithChildren,
Suspense, Suspense,
useContext, useContext,
useEffect, useEffect,
FC,
} from "react" } from "react"
import { useActor } from "@xstate/react" import { useActor } from "@xstate/react"
import { XServiceContext } from "xServices/StateContext" import { XServiceContext } from "xServices/StateContext"
@ -30,9 +31,7 @@ export const useDeploySettings = (): DeploySettingsContextValue => {
return context return context
} }
export const DeploySettingsLayout: React.FC<PropsWithChildren> = ({ export const DeploySettingsLayout: FC<PropsWithChildren> = ({ children }) => {
children,
}) => {
const xServices = useContext(XServiceContext) const xServices = useContext(XServiceContext)
const [state, send] = useActor(xServices.deploymentConfigXService) const [state, send] = useActor(xServices.deploymentConfigXService)
const styles = useStyles() const styles = useStyles()

View File

@ -1,13 +1,13 @@
import { makeStyles } from "@material-ui/core/styles" import { makeStyles } from "@material-ui/core/styles"
import React from "react" import { FC, ReactNode, FormEventHandler } from "react"
import Button from "@material-ui/core/Button" import Button from "@material-ui/core/Button"
export const Fieldset: React.FC<{ export const Fieldset: FC<{
children: React.ReactNode children: ReactNode
title: string | JSX.Element title: string | JSX.Element
validation?: string | JSX.Element | false validation?: string | JSX.Element | false
button?: JSX.Element | false button?: JSX.Element | false
onSubmit: React.FormEventHandler<HTMLFormElement> onSubmit: FormEventHandler<HTMLFormElement>
isSubmitting?: boolean isSubmitting?: boolean
}> = ({ title, children, validation, button, onSubmit, isSubmitting }) => { }> = ({ title, children, validation, button, onSubmit, isSubmitting }) => {
const styles = useStyles() const styles = useStyles()

View File

@ -2,9 +2,9 @@ import Button from "@material-ui/core/Button"
import { makeStyles } from "@material-ui/core/styles" import { makeStyles } from "@material-ui/core/styles"
import LaunchOutlined from "@material-ui/icons/LaunchOutlined" import LaunchOutlined from "@material-ui/icons/LaunchOutlined"
import { Stack } from "components/Stack/Stack" import { Stack } from "components/Stack/Stack"
import React from "react" import { FC } from "react"
export const Header: React.FC<{ export const Header: FC<{
title: string | JSX.Element title: string | JSX.Element
description?: string | JSX.Element description?: string | JSX.Element
secondary?: boolean secondary?: boolean

View File

@ -1,27 +1,25 @@
import { makeStyles } from "@material-ui/core/styles" import { makeStyles } from "@material-ui/core/styles"
import React, { PropsWithChildren } from "react" import { PropsWithChildren, FC } from "react"
import { MONOSPACE_FONT_FAMILY } from "theme/constants" import { MONOSPACE_FONT_FAMILY } from "theme/constants"
import { DisabledBadge, EnabledBadge } from "./Badges" import { DisabledBadge, EnabledBadge } from "./Badges"
export const OptionName: React.FC<PropsWithChildren> = ({ children }) => { export const OptionName: FC<PropsWithChildren> = ({ children }) => {
const styles = useStyles() const styles = useStyles()
return <span className={styles.optionName}>{children}</span> return <span className={styles.optionName}>{children}</span>
} }
export const OptionDescription: React.FC<PropsWithChildren> = ({ export const OptionDescription: FC<PropsWithChildren> = ({ children }) => {
children,
}) => {
const styles = useStyles() const styles = useStyles()
return <span className={styles.optionDescription}>{children}</span> return <span className={styles.optionDescription}>{children}</span>
} }
const NotSet: React.FC = () => { const NotSet: FC = () => {
const styles = useStyles() const styles = useStyles()
return <span className={styles.optionValue}>Not set</span> return <span className={styles.optionValue}>Not set</span>
} }
export const OptionValue: React.FC<PropsWithChildren> = ({ children }) => { export const OptionValue: FC<PropsWithChildren> = ({ children }) => {
const styles = useStyles() const styles = useStyles()
if (typeof children === "boolean") { if (typeof children === "boolean") {

View File

@ -11,9 +11,9 @@ import {
OptionName, OptionName,
OptionValue, OptionValue,
} from "components/DeploySettingsLayout/Option" } from "components/DeploySettingsLayout/Option"
import React from "react" import { FC } from "react"
const OptionsTable: React.FC<{ const OptionsTable: FC<{
options: Record<string, DeploymentConfigField<Flaggable>> options: Record<string, DeploymentConfigField<Flaggable>>
}> = ({ options }) => { }> = ({ options }) => {
const styles = useStyles() const styles = useStyles()

View File

@ -6,11 +6,11 @@ import Globe from "@material-ui/icons/Public"
import VpnKeyOutlined from "@material-ui/icons/VpnKeyOutlined" import VpnKeyOutlined from "@material-ui/icons/VpnKeyOutlined"
import { GitIcon } from "components/Icons/GitIcon" import { GitIcon } from "components/Icons/GitIcon"
import { Stack } from "components/Stack/Stack" import { Stack } from "components/Stack/Stack"
import React, { ElementType, PropsWithChildren, ReactNode } from "react" import { ElementType, PropsWithChildren, ReactNode, FC } from "react"
import { NavLink } from "react-router-dom" import { NavLink } from "react-router-dom"
import { combineClasses } from "util/combineClasses" import { combineClasses } from "util/combineClasses"
const SidebarNavItem: React.FC< const SidebarNavItem: FC<
PropsWithChildren<{ href: string; icon: ReactNode }> PropsWithChildren<{ href: string; icon: ReactNode }>
> = ({ children, href, icon }) => { > = ({ children, href, icon }) => {
const styles = useStyles() const styles = useStyles()
@ -32,9 +32,7 @@ const SidebarNavItem: React.FC<
) )
} }
const SidebarNavItemIcon: React.FC<{ icon: ElementType }> = ({ const SidebarNavItemIcon: FC<{ icon: ElementType }> = ({ icon: Icon }) => {
icon: Icon,
}) => {
const styles = useStyles() const styles = useStyles()
return <Icon className={styles.sidebarNavItemIcon} /> return <Icon className={styles.sidebarNavItemIcon} />
} }

View File

@ -1,7 +1,7 @@
import DialogActions from "@material-ui/core/DialogActions" import DialogActions from "@material-ui/core/DialogActions"
import { alpha, makeStyles } from "@material-ui/core/styles" import { alpha, makeStyles } from "@material-ui/core/styles"
import Typography from "@material-ui/core/Typography" import Typography from "@material-ui/core/Typography"
import React, { ReactNode } from "react" import { ReactNode, FC, PropsWithChildren } from "react"
import { import {
Dialog, Dialog,
DialogActionButtons, DialogActionButtons,
@ -37,7 +37,7 @@ export interface ConfirmDialogProps
DialogActionButtonsProps, DialogActionButtonsProps,
"color" | "confirmDialog" | "onCancel" "color" | "confirmDialog" | "onCancel"
> { > {
readonly description?: React.ReactNode readonly description?: ReactNode
/** /**
* hideCancel hides the cancel button when set true, and shows the cancel * hideCancel hides the cancel button when set true, and shows the cancel
* button when set to false. When undefined: * button when set to false. When undefined:
@ -88,9 +88,7 @@ const useStyles = makeStyles((theme) => ({
* Quick-use version of the Dialog component with slightly alternative styles, * Quick-use version of the Dialog component with slightly alternative styles,
* great to use for dialogs that don't have any interaction beyond yes / no. * great to use for dialogs that don't have any interaction beyond yes / no.
*/ */
export const ConfirmDialog: React.FC< export const ConfirmDialog: FC<PropsWithChildren<ConfirmDialogProps>> = ({
React.PropsWithChildren<ConfirmDialogProps>
> = ({
cancelText, cancelText,
confirmLoading, confirmLoading,
confirmText, confirmText,

View File

@ -4,7 +4,7 @@ import TextField from "@material-ui/core/TextField"
import Typography from "@material-ui/core/Typography" import Typography from "@material-ui/core/Typography"
import { Maybe } from "components/Conditionals/Maybe" import { Maybe } from "components/Conditionals/Maybe"
import { Stack } from "components/Stack/Stack" import { Stack } from "components/Stack/Stack"
import React, { ChangeEvent, useState } from "react" import { ChangeEvent, useState, PropsWithChildren, FC } from "react"
import { useTranslation } from "react-i18next" import { useTranslation } from "react-i18next"
import { ConfirmDialog } from "../ConfirmDialog/ConfirmDialog" import { ConfirmDialog } from "../ConfirmDialog/ConfirmDialog"
@ -18,9 +18,15 @@ export interface DeleteDialogProps {
confirmLoading?: boolean confirmLoading?: boolean
} }
export const DeleteDialog: React.FC< export const DeleteDialog: FC<PropsWithChildren<DeleteDialogProps>> = ({
React.PropsWithChildren<DeleteDialogProps> isOpen,
> = ({ isOpen, onCancel, onConfirm, entity, info, name, confirmLoading }) => { onCancel,
onConfirm,
entity,
info,
name,
confirmLoading,
}) => {
const styles = useStyles() const styles = useStyles()
const { t } = useTranslation("common") const { t } = useTranslation("common")
const [nameValue, setNameValue] = useState("") const [nameValue, setNameValue] = useState("")

View File

@ -1,7 +1,7 @@
import React, { Component, ReactNode } from "react" import { Component, ReactNode, PropsWithChildren } from "react"
import { RuntimeErrorState } from "../RuntimeErrorState/RuntimeErrorState" import { RuntimeErrorState } from "../RuntimeErrorState/RuntimeErrorState"
type ErrorBoundaryProps = React.PropsWithChildren<unknown> type ErrorBoundaryProps = PropsWithChildren<unknown>
interface ErrorBoundaryState { interface ErrorBoundaryState {
error: Error | null error: Error | null

View File

@ -1,16 +1,16 @@
import IconButton from "@material-ui/core/IconButton" import IconButton from "@material-ui/core/IconButton"
import { makeStyles } from "@material-ui/core/styles" import { makeStyles } from "@material-ui/core/styles"
import Typography from "@material-ui/core/Typography" import Typography from "@material-ui/core/Typography"
import React, { useEffect } from "react" import { useEffect, FC, PropsWithChildren } from "react"
import { CloseIcon } from "../Icons/CloseIcon" import { CloseIcon } from "../Icons/CloseIcon"
export interface FormCloseButtonProps { export interface FormCloseButtonProps {
onClose: () => void onClose: () => void
} }
export const FormCloseButton: React.FC< export const FormCloseButton: FC<PropsWithChildren<FormCloseButtonProps>> = ({
React.PropsWithChildren<FormCloseButtonProps> onClose,
> = ({ onClose }) => { }) => {
const styles = useStyles() const styles = useStyles()
useEffect(() => { useEffect(() => {

View File

@ -1,5 +1,5 @@
import { makeStyles } from "@material-ui/core/styles" import { makeStyles } from "@material-ui/core/styles"
import React, { useCallback, useState } from "react" import { useCallback, useState, FC } from "react"
import { useCustomEvent } from "../../hooks/events" import { useCustomEvent } from "../../hooks/events"
import { CustomEventListener } from "../../util/events" import { CustomEventListener } from "../../util/events"
import { EnterpriseSnackbar } from "../EnterpriseSnackbar/EnterpriseSnackbar" import { EnterpriseSnackbar } from "../EnterpriseSnackbar/EnterpriseSnackbar"
@ -25,7 +25,7 @@ const variantFromMsgType = (type: MsgType) => {
} }
} }
export const GlobalSnackbar: React.FC = () => { export const GlobalSnackbar: FC = () => {
const styles = useStyles() const styles = useStyles()
const [open, setOpen] = useState<boolean>(false) const [open, setOpen] = useState<boolean>(false)
const [notification, setNotification] = useState<NotificationMsg>() const [notification, setNotification] = useState<NotificationMsg>()

View File

@ -6,7 +6,7 @@ import TableCell from "@material-ui/core/TableCell"
import TableContainer from "@material-ui/core/TableContainer" import TableContainer from "@material-ui/core/TableContainer"
import TableHead from "@material-ui/core/TableHead" import TableHead from "@material-ui/core/TableHead"
import TableRow from "@material-ui/core/TableRow" import TableRow from "@material-ui/core/TableRow"
import React, { FC } from "react" import { FC, memo } from "react"
import ReactMarkdown from "react-markdown" import ReactMarkdown from "react-markdown"
import { Prism as SyntaxHighlighter } from "react-syntax-highlighter" import { Prism as SyntaxHighlighter } from "react-syntax-highlighter"
import gfm from "remark-gfm" import gfm from "remark-gfm"
@ -98,7 +98,7 @@ export const Markdown: FC<{ children: string }> = ({ children }) => {
) )
} }
export const MemoizedMarkdown = React.memo(Markdown) export const MemoizedMarkdown = memo(Markdown)
const useStyles = makeStyles((theme) => ({ const useStyles = makeStyles((theme) => ({
markdown: { markdown: {

View File

@ -1,11 +1,11 @@
import { shallowEqual, useActor, useSelector } from "@xstate/react" import { shallowEqual, useActor, useSelector } from "@xstate/react"
import { FeatureNames } from "api/types" import { FeatureNames } from "api/types"
import React, { useContext } from "react" import { useContext, FC } from "react"
import { selectFeatureVisibility } from "xServices/entitlements/entitlementsSelectors" import { selectFeatureVisibility } from "xServices/entitlements/entitlementsSelectors"
import { XServiceContext } from "../../xServices/StateContext" import { XServiceContext } from "../../xServices/StateContext"
import { NavbarView } from "../NavbarView/NavbarView" import { NavbarView } from "../NavbarView/NavbarView"
export const Navbar: React.FC = () => { export const Navbar: FC = () => {
const xServices = useContext(XServiceContext) const xServices = useContext(XServiceContext)
const [appearanceState] = useActor(xServices.appearanceXService) const [appearanceState] = useActor(xServices.appearanceXService)
const [authState, authSend] = useActor(xServices.authXService) const [authState, authSend] = useActor(xServices.authXService)

View File

@ -4,13 +4,14 @@ import { makeStyles } from "@material-ui/core/styles"
import TextField, { TextFieldProps } from "@material-ui/core/TextField" import TextField, { TextFieldProps } from "@material-ui/core/TextField"
import VisibilityOffOutlined from "@material-ui/icons/VisibilityOffOutlined" import VisibilityOffOutlined from "@material-ui/icons/VisibilityOffOutlined"
import VisibilityOutlined from "@material-ui/icons/VisibilityOutlined" import VisibilityOutlined from "@material-ui/icons/VisibilityOutlined"
import React, { useCallback, useState } from "react" import { useCallback, useState, FC, PropsWithChildren } from "react"
type PasswordFieldProps = Omit<TextFieldProps, "InputProps" | "type"> type PasswordFieldProps = Omit<TextFieldProps, "InputProps" | "type">
export const PasswordField: React.FC< export const PasswordField: FC<PropsWithChildren<PasswordFieldProps>> = ({
React.PropsWithChildren<PasswordFieldProps> variant = "outlined",
> = ({ variant = "outlined", ...rest }) => { ...rest
}) => {
const styles = useStyles() const styles = useStyles()
const [showPassword, setShowPassword] = useState<boolean>(false) const [showPassword, setShowPassword] = useState<boolean>(false)

View File

@ -1,5 +1,5 @@
import { useActor } from "@xstate/react" import { useActor } from "@xstate/react"
import React, { useContext } from "react" import { useContext, FC, PropsWithChildren } from "react"
import { Navigate, useLocation } from "react-router" import { Navigate, useLocation } from "react-router"
import { embedRedirect } from "../../util/redirect" import { embedRedirect } from "../../util/redirect"
import { XServiceContext } from "../../xServices/StateContext" import { XServiceContext } from "../../xServices/StateContext"
@ -9,9 +9,9 @@ export interface RequireAuthProps {
children: JSX.Element children: JSX.Element
} }
export const RequireAuth: React.FC< export const RequireAuth: FC<PropsWithChildren<RequireAuthProps>> = ({
React.PropsWithChildren<RequireAuthProps> children,
> = ({ children }) => { }) => {
const xServices = useContext(XServiceContext) const xServices = useContext(XServiceContext)
const [authState] = useActor(xServices.authXService) const [authState] = useActor(xServices.authXService)
const location = useLocation() const location = useLocation()

View File

@ -1,6 +1,6 @@
import Avatar from "@material-ui/core/Avatar" import Avatar from "@material-ui/core/Avatar"
import { makeStyles } from "@material-ui/core/styles" import { makeStyles } from "@material-ui/core/styles"
import React from "react" import { FC } from "react"
import { WorkspaceResource } from "../../api/typesGenerated" import { WorkspaceResource } from "../../api/typesGenerated"
const FALLBACK_ICON = "/icon/widgets.svg" const FALLBACK_ICON = "/icon/widgets.svg"
@ -34,7 +34,7 @@ const getIconPathResource = (resourceType: string): string => {
export type ResourceAvatarProps = { resource: WorkspaceResource } export type ResourceAvatarProps = { resource: WorkspaceResource }
export const ResourceAvatar: React.FC<ResourceAvatarProps> = ({ resource }) => { export const ResourceAvatar: FC<ResourceAvatarProps> = ({ resource }) => {
const hasIcon = resource.icon && resource.icon !== "" const hasIcon = resource.icon && resource.icon !== ""
const avatarSrc = hasIcon ? resource.icon : getIconPathResource(resource.type) const avatarSrc = hasIcon ? resource.icon : getIconPathResource(resource.type)
const styles = useStyles() const styles = useStyles()

View File

@ -2,7 +2,7 @@ import Box from "@material-ui/core/Box"
import Link from "@material-ui/core/Link" import Link from "@material-ui/core/Link"
import { makeStyles } from "@material-ui/core/styles" import { makeStyles } from "@material-ui/core/styles"
import ErrorOutlineIcon from "@material-ui/icons/ErrorOutline" import ErrorOutlineIcon from "@material-ui/icons/ErrorOutline"
import React, { useEffect, useReducer } from "react" import { useEffect, useReducer, FC } from "react"
import { mapStackTrace } from "sourcemapped-stacktrace" import { mapStackTrace } from "sourcemapped-stacktrace"
import { Margins } from "../Margins/Margins" import { Margins } from "../Margins/Margins"
import { Section } from "../Section/Section" import { Section } from "../Section/Section"
@ -61,9 +61,7 @@ const ErrorStateDescription = ({ emailBody }: { emailBody?: string }) => {
/** /**
* An error UI that is displayed when our error boundary (ErrorBoundary.tsx) is triggered * An error UI that is displayed when our error boundary (ErrorBoundary.tsx) is triggered
*/ */
export const RuntimeErrorState: React.FC<RuntimeErrorStateProps> = ({ export const RuntimeErrorState: FC<RuntimeErrorStateProps> = ({ error }) => {
error,
}) => {
const styles = useStyles() const styles = useStyles()
const [reportState, dispatch] = useReducer(reducer, { const [reportState, dispatch] = useReducer(reducer, {
error, error,

View File

@ -1,6 +1,6 @@
import TextField from "@material-ui/core/TextField" import TextField from "@material-ui/core/TextField"
import { FormikContextType, FormikTouched, useFormik } from "formik" import { FormikContextType, FormikTouched, useFormik } from "formik"
import React from "react" import { FC } from "react"
import * as Yup from "yup" import * as Yup from "yup"
import { getFormHelpers } from "../../util/formUtils" import { getFormHelpers } from "../../util/formUtils"
import { LoadingButton } from "../LoadingButton/LoadingButton" import { LoadingButton } from "../LoadingButton/LoadingButton"
@ -49,7 +49,7 @@ export interface SecurityFormProps {
initialTouched?: FormikTouched<SecurityFormValues> initialTouched?: FormikTouched<SecurityFormValues>
} }
export const SecurityForm: React.FC<SecurityFormProps> = ({ export const SecurityForm: FC<SecurityFormProps> = ({
isLoading, isLoading,
onSubmit, onSubmit,
initialValues, initialValues,

View File

@ -1,28 +1,26 @@
import { makeStyles } from "@material-ui/core/styles" import { makeStyles } from "@material-ui/core/styles"
import React, { ReactNode } from "react" import { ReactNode, FC, PropsWithChildren } from "react"
import { Stack } from "../Stack/Stack" import { Stack } from "../Stack/Stack"
interface StyleProps { interface StyleProps {
highlight?: boolean highlight?: boolean
} }
export const TableCellData: React.FC<{ children: ReactNode }> = ({ export const TableCellData: FC<{ children: ReactNode }> = ({ children }) => {
children,
}) => {
return <Stack spacing={0}>{children}</Stack> return <Stack spacing={0}>{children}</Stack>
} }
export const TableCellDataPrimary: React.FC< export const TableCellDataPrimary: FC<
React.PropsWithChildren<{ highlight?: boolean }> PropsWithChildren<{ highlight?: boolean }>
> = ({ children, highlight }) => { > = ({ children, highlight }) => {
const styles = useStyles({ highlight }) const styles = useStyles({ highlight })
return <span className={styles.primary}>{children}</span> return <span className={styles.primary}>{children}</span>
} }
export const TableCellDataSecondary: React.FC< export const TableCellDataSecondary: FC<PropsWithChildren<unknown>> = ({
React.PropsWithChildren<unknown> children,
> = ({ children }) => { }) => {
const styles = useStyles({}) const styles = useStyles({})
return <span className={styles.secondary}>{children}</span> return <span className={styles.secondary}>{children}</span>

View File

@ -3,7 +3,14 @@ import Popover, { PopoverProps } from "@material-ui/core/Popover"
import { makeStyles } from "@material-ui/core/styles" import { makeStyles } from "@material-ui/core/styles"
import HelpIcon from "@material-ui/icons/HelpOutline" import HelpIcon from "@material-ui/icons/HelpOutline"
import OpenInNewIcon from "@material-ui/icons/OpenInNew" import OpenInNewIcon from "@material-ui/icons/OpenInNew"
import React, { createContext, useContext, useRef, useState } from "react" import {
createContext,
useContext,
useRef,
useState,
FC,
PropsWithChildren,
} from "react"
import { combineClasses } from "util/combineClasses" import { combineClasses } from "util/combineClasses"
import { Stack } from "../../Stack/Stack" import { Stack } from "../../Stack/Stack"
@ -39,7 +46,7 @@ const useHelpTooltip = () => {
return helpTooltipContext return helpTooltipContext
} }
export const HelpPopover: React.FC< export const HelpPopover: FC<
PopoverProps & { onOpen: () => void; onClose: () => void } PopoverProps & { onOpen: () => void; onClose: () => void }
> = ({ onOpen, onClose, children, ...props }) => { > = ({ onOpen, onClose, children, ...props }) => {
const styles = useStyles({ size: "small" }) const styles = useStyles({ size: "small" })
@ -68,9 +75,7 @@ export const HelpPopover: React.FC<
) )
} }
export const HelpTooltip: React.FC< export const HelpTooltip: FC<PropsWithChildren<HelpTooltipProps>> = ({
React.PropsWithChildren<HelpTooltipProps>
> = ({
children, children,
open, open,
size = "medium", size = "medium",
@ -122,7 +127,7 @@ export const HelpTooltip: React.FC<
) )
} }
export const HelpTooltipTitle: React.FC<React.PropsWithChildren<unknown>> = ({ export const HelpTooltipTitle: FC<PropsWithChildren<unknown>> = ({
children, children,
}) => { }) => {
const styles = useStyles({}) const styles = useStyles({})
@ -130,7 +135,7 @@ export const HelpTooltipTitle: React.FC<React.PropsWithChildren<unknown>> = ({
return <h4 className={styles.title}>{children}</h4> return <h4 className={styles.title}>{children}</h4>
} }
export const HelpTooltipText: React.FC<React.PropsWithChildren<unknown>> = ({ export const HelpTooltipText: FC<PropsWithChildren<unknown>> = ({
children, children,
}) => { }) => {
const styles = useStyles({}) const styles = useStyles({})
@ -138,9 +143,10 @@ export const HelpTooltipText: React.FC<React.PropsWithChildren<unknown>> = ({
return <p className={styles.text}>{children}</p> return <p className={styles.text}>{children}</p>
} }
export const HelpTooltipLink: React.FC< export const HelpTooltipLink: FC<PropsWithChildren<{ href: string }>> = ({
React.PropsWithChildren<{ href: string }> children,
> = ({ children, href }) => { href,
}) => {
const styles = useStyles({}) const styles = useStyles({})
return ( return (
@ -151,8 +157,8 @@ export const HelpTooltipLink: React.FC<
) )
} }
export const HelpTooltipAction: React.FC< export const HelpTooltipAction: FC<
React.PropsWithChildren<{ PropsWithChildren<{
icon: Icon icon: Icon
onClick: () => void onClick: () => void
ariaLabel?: string ariaLabel?: string
@ -177,9 +183,9 @@ export const HelpTooltipAction: React.FC<
) )
} }
export const HelpTooltipLinksGroup: React.FC< export const HelpTooltipLinksGroup: FC<PropsWithChildren<unknown>> = ({
React.PropsWithChildren<unknown> children,
> = ({ children }) => { }) => {
const styles = useStyles({}) const styles = useStyles({})
return ( return (

View File

@ -1,7 +1,7 @@
import Badge from "@material-ui/core/Badge" import Badge from "@material-ui/core/Badge"
import MenuItem from "@material-ui/core/MenuItem" import MenuItem from "@material-ui/core/MenuItem"
import { makeStyles } from "@material-ui/core/styles" import { makeStyles } from "@material-ui/core/styles"
import React, { useState } from "react" import { useState, FC, PropsWithChildren, MouseEvent } from "react"
import { colors } from "theme/colors" import { colors } from "theme/colors"
import * as TypesGen from "../../api/typesGenerated" import * as TypesGen from "../../api/typesGenerated"
import { navHeight } from "../../theme/constants" import { navHeight } from "../../theme/constants"
@ -16,13 +16,15 @@ export interface UserDropdownProps {
onSignOut: () => void onSignOut: () => void
} }
export const UserDropdown: React.FC< export const UserDropdown: FC<PropsWithChildren<UserDropdownProps>> = ({
React.PropsWithChildren<UserDropdownProps> buildInfo,
> = ({ buildInfo, user, onSignOut }: UserDropdownProps) => { user,
onSignOut,
}: UserDropdownProps) => {
const styles = useStyles() const styles = useStyles()
const [anchorEl, setAnchorEl] = useState<HTMLElement | undefined>() const [anchorEl, setAnchorEl] = useState<HTMLElement | undefined>()
const handleDropdownClick = (ev: React.MouseEvent<HTMLLIElement>): void => { const handleDropdownClick = (ev: MouseEvent<HTMLLIElement>): void => {
setAnchorEl(ev.currentTarget) setAnchorEl(ev.currentTarget)
} }
const onPopoverClose = () => { const onPopoverClose = () => {

View File

@ -1,7 +1,7 @@
import Paper from "@material-ui/core/Paper" import Paper from "@material-ui/core/Paper"
import { makeStyles } from "@material-ui/core/styles" import { makeStyles } from "@material-ui/core/styles"
import Typography from "@material-ui/core/Typography" import Typography from "@material-ui/core/Typography"
import React, { HTMLProps } from "react" import { HTMLProps, ReactNode, FC, PropsWithChildren } from "react"
import { CardPadding } from "../../theme/constants" import { CardPadding } from "../../theme/constants"
import { combineClasses } from "../../util/combineClasses" import { combineClasses } from "../../util/combineClasses"
@ -9,14 +9,17 @@ export interface WorkspaceSectionProps {
/** /**
* action appears in the top right of the section card * action appears in the top right of the section card
*/ */
action?: React.ReactNode action?: ReactNode
contentsProps?: HTMLProps<HTMLDivElement> contentsProps?: HTMLProps<HTMLDivElement>
title?: string | JSX.Element title?: string | JSX.Element
} }
export const WorkspaceSection: React.FC< export const WorkspaceSection: FC<PropsWithChildren<WorkspaceSectionProps>> = ({
React.PropsWithChildren<WorkspaceSectionProps> action,
> = ({ action, children, contentsProps, title }) => { children,
contentsProps,
title,
}) => {
const styles = useStyles() const styles = useStyles()
return ( return (

View File

@ -5,10 +5,10 @@ import PlayIcon from "@material-ui/icons/PlayArrowOutlined"
import { WorkspaceBuild } from "api/typesGenerated" import { WorkspaceBuild } from "api/typesGenerated"
import { Pill } from "components/Pill/Pill" import { Pill } from "components/Pill/Pill"
import i18next from "i18next" import i18next from "i18next"
import React from "react" import { FC, ReactNode, PropsWithChildren } from "react"
import { PaletteIndex } from "theme/palettes" import { PaletteIndex } from "theme/palettes"
const LoadingIcon: React.FC = () => { const LoadingIcon: FC = () => {
return <CircularProgress size={10} style={{ color: "#FFF" }} /> return <CircularProgress size={10} style={{ color: "#FFF" }} />
} }
@ -17,7 +17,7 @@ export const getStatus = (
): { ): {
type?: PaletteIndex type?: PaletteIndex
text: string text: string
icon: React.ReactNode icon: ReactNode
} => { } => {
const { t } = i18next const { t } = i18next
@ -95,8 +95,8 @@ export type WorkspaceStatusBadgeProps = {
className?: string className?: string
} }
export const WorkspaceStatusBadge: React.FC< export const WorkspaceStatusBadge: FC<
React.PropsWithChildren<WorkspaceStatusBadgeProps> PropsWithChildren<WorkspaceStatusBadgeProps>
> = ({ build, className }) => { > = ({ build, className }) => {
const { text, icon, type } = getStatus(build) const { text, icon, type } = getStatus(build)
return <Pill className={className} icon={icon} text={text} type={type} /> return <Pill className={className} icon={icon} text={text} type={type} />

View File

@ -1,14 +1,12 @@
import { useActor } from "@xstate/react" import { useActor } from "@xstate/react"
import React, { useContext, useEffect, useState } from "react" import { useContext, useEffect, useState, FC, PropsWithChildren } from "react"
import { Helmet } from "react-helmet-async" import { Helmet } from "react-helmet-async"
import { getApiKey } from "../../api/api" import { getApiKey } from "../../api/api"
import { pageTitle } from "../../util/page" import { pageTitle } from "../../util/page"
import { XServiceContext } from "../../xServices/StateContext" import { XServiceContext } from "../../xServices/StateContext"
import { CliAuthPageView } from "./CliAuthPageView" import { CliAuthPageView } from "./CliAuthPageView"
export const CliAuthenticationPage: React.FC< export const CliAuthenticationPage: FC<PropsWithChildren<unknown>> = () => {
React.PropsWithChildren<unknown>
> = () => {
const xServices = useContext(XServiceContext) const xServices = useContext(XServiceContext)
const [authState] = useActor(xServices.authXService) const [authState] = useActor(xServices.authXService)
const { me } = authState.context const { me } = authState.context

View File

@ -3,7 +3,7 @@ import { makeStyles } from "@material-ui/core/styles"
import { CodeExample } from "components/CodeExample/CodeExample" import { CodeExample } from "components/CodeExample/CodeExample"
import { SignInLayout } from "components/SignInLayout/SignInLayout" import { SignInLayout } from "components/SignInLayout/SignInLayout"
import { Welcome } from "components/Welcome/Welcome" import { Welcome } from "components/Welcome/Welcome"
import React from "react" import { FC } from "react"
import { Link as RouterLink } from "react-router-dom" import { Link as RouterLink } from "react-router-dom"
import { FullScreenLoader } from "../../components/Loader/FullScreenLoader" import { FullScreenLoader } from "../../components/Loader/FullScreenLoader"
@ -11,9 +11,7 @@ export interface CliAuthPageViewProps {
sessionToken: string | null sessionToken: string | null
} }
export const CliAuthPageView: React.FC<CliAuthPageViewProps> = ({ export const CliAuthPageView: FC<CliAuthPageViewProps> = ({ sessionToken }) => {
sessionToken,
}) => {
const styles = useStyles() const styles = useStyles()
if (!sessionToken) { if (!sessionToken) {

View File

@ -2,7 +2,7 @@ import Avatar from "@material-ui/core/Avatar"
import { makeStyles } from "@material-ui/core/styles" import { makeStyles } from "@material-ui/core/styles"
import { Template, TemplateExample } from "api/typesGenerated" import { Template, TemplateExample } from "api/typesGenerated"
import { Stack } from "components/Stack/Stack" import { Stack } from "components/Stack/Stack"
import React, { FC } from "react" import { FC } from "react"
import { firstLetter } from "util/firstLetter" import { firstLetter } from "util/firstLetter"
export interface SelectedTemplateProps { export interface SelectedTemplateProps {

View File

@ -1,7 +1,7 @@
import { useActor } from "@xstate/react" import { useActor } from "@xstate/react"
import { FeatureNames } from "api/types" import { FeatureNames } from "api/types"
import { AppearanceConfig } from "api/typesGenerated" import { AppearanceConfig } from "api/typesGenerated"
import React, { useContext } from "react" import { useContext, FC } from "react"
import { Helmet } from "react-helmet-async" import { Helmet } from "react-helmet-async"
import { pageTitle } from "util/page" import { pageTitle } from "util/page"
import { XServiceContext } from "xServices/StateContext" import { XServiceContext } from "xServices/StateContext"
@ -11,7 +11,7 @@ import { AppearanceSettingsPageView } from "./AppearanceSettingsPageView"
// implements a form, whereas the others are read-only. We make this // implements a form, whereas the others are read-only. We make this
// exception because the Service Banner is visual, and configuring it from // exception because the Service Banner is visual, and configuring it from
// the command line would be a significantly worse user experience. // the command line would be a significantly worse user experience.
const AppearanceSettingsPage: React.FC = () => { const AppearanceSettingsPage: FC = () => {
const xServices = useContext(XServiceContext) const xServices = useContext(XServiceContext)
const [appearanceXService, appearanceSend] = useActor( const [appearanceXService, appearanceSend] = useActor(
xServices.appearanceXService, xServices.appearanceXService,

View File

@ -1,10 +1,10 @@
import { useDeploySettings } from "components/DeploySettingsLayout/DeploySettingsLayout" import { useDeploySettings } from "components/DeploySettingsLayout/DeploySettingsLayout"
import React from "react" import { FC } from "react"
import { Helmet } from "react-helmet-async" import { Helmet } from "react-helmet-async"
import { pageTitle } from "util/page" import { pageTitle } from "util/page"
import { GeneralSettingsPageView } from "./GeneralSettingsPageView" import { GeneralSettingsPageView } from "./GeneralSettingsPageView"
const GeneralSettingsPage: React.FC = () => { const GeneralSettingsPage: FC = () => {
const { deploymentConfig: deploymentConfig } = useDeploySettings() const { deploymentConfig: deploymentConfig } = useDeploySettings()
return ( return (

View File

@ -1,10 +1,10 @@
import { useDeploySettings } from "components/DeploySettingsLayout/DeploySettingsLayout" import { useDeploySettings } from "components/DeploySettingsLayout/DeploySettingsLayout"
import React from "react" import { FC } from "react"
import { Helmet } from "react-helmet-async" import { Helmet } from "react-helmet-async"
import { pageTitle } from "util/page" import { pageTitle } from "util/page"
import { GitAuthSettingsPageView } from "./GitAuthSettingsPageView" import { GitAuthSettingsPageView } from "./GitAuthSettingsPageView"
const GitAuthSettingsPage: React.FC = () => { const GitAuthSettingsPage: FC = () => {
const { deploymentConfig: deploymentConfig } = useDeploySettings() const { deploymentConfig: deploymentConfig } = useDeploySettings()
return ( return (

View File

@ -1,10 +1,10 @@
import { useDeploySettings } from "components/DeploySettingsLayout/DeploySettingsLayout" import { useDeploySettings } from "components/DeploySettingsLayout/DeploySettingsLayout"
import React from "react" import { FC } from "react"
import { Helmet } from "react-helmet-async" import { Helmet } from "react-helmet-async"
import { pageTitle } from "util/page" import { pageTitle } from "util/page"
import { NetworkSettingsPageView } from "./NetworkSettingsPageView" import { NetworkSettingsPageView } from "./NetworkSettingsPageView"
const NetworkSettingsPage: React.FC = () => { const NetworkSettingsPage: FC = () => {
const { deploymentConfig: deploymentConfig } = useDeploySettings() const { deploymentConfig: deploymentConfig } = useDeploySettings()
return ( return (

View File

@ -1,13 +1,13 @@
import { useActor } from "@xstate/react" import { useActor } from "@xstate/react"
import { FeatureNames } from "api/types" import { FeatureNames } from "api/types"
import { useDeploySettings } from "components/DeploySettingsLayout/DeploySettingsLayout" import { useDeploySettings } from "components/DeploySettingsLayout/DeploySettingsLayout"
import React, { useContext } from "react" import { useContext, FC } from "react"
import { Helmet } from "react-helmet-async" import { Helmet } from "react-helmet-async"
import { pageTitle } from "util/page" import { pageTitle } from "util/page"
import { XServiceContext } from "xServices/StateContext" import { XServiceContext } from "xServices/StateContext"
import { SecuritySettingsPageView } from "./SecuritySettingsPageView" import { SecuritySettingsPageView } from "./SecuritySettingsPageView"
const SecuritySettingsPage: React.FC = () => { const SecuritySettingsPage: FC = () => {
const { deploymentConfig: deploymentConfig } = useDeploySettings() const { deploymentConfig: deploymentConfig } = useDeploySettings()
const xServices = useContext(XServiceContext) const xServices = useContext(XServiceContext)
const [entitlementsState] = useActor(xServices.entitlementsXService) const [entitlementsState] = useActor(xServices.entitlementsXService)

View File

@ -1,10 +1,10 @@
import { useDeploySettings } from "components/DeploySettingsLayout/DeploySettingsLayout" import { useDeploySettings } from "components/DeploySettingsLayout/DeploySettingsLayout"
import React from "react" import { FC } from "react"
import { Helmet } from "react-helmet-async" import { Helmet } from "react-helmet-async"
import { pageTitle } from "util/page" import { pageTitle } from "util/page"
import { UserAuthSettingsPageView } from "./UserAuthSettingsPageView" import { UserAuthSettingsPageView } from "./UserAuthSettingsPageView"
const UserAuthSettingsPage: React.FC = () => { const UserAuthSettingsPage: FC = () => {
const { deploymentConfig: deploymentConfig } = useDeploySettings() const { deploymentConfig: deploymentConfig } = useDeploySettings()
return ( return (

View File

@ -2,10 +2,10 @@ import Button from "@material-ui/core/Button"
import { makeStyles } from "@material-ui/core/styles" import { makeStyles } from "@material-ui/core/styles"
import { SignInLayout } from "components/SignInLayout/SignInLayout" import { SignInLayout } from "components/SignInLayout/SignInLayout"
import { Welcome } from "components/Welcome/Welcome" import { Welcome } from "components/Welcome/Welcome"
import React from "react" import { FC } from "react"
import { Link as RouterLink } from "react-router-dom" import { Link as RouterLink } from "react-router-dom"
const GitAuthPage: React.FC = () => { const GitAuthPage: FC = () => {
const styles = useStyles() const styles = useStyles()
return ( return (

View File

@ -1,13 +1,13 @@
import { useMachine } from "@xstate/react" import { useMachine } from "@xstate/react"
import { useOrganizationId } from "hooks/useOrganizationId" import { useOrganizationId } from "hooks/useOrganizationId"
import React from "react" import { FC } from "react"
import { Helmet } from "react-helmet-async" import { Helmet } from "react-helmet-async"
import { useNavigate } from "react-router-dom" import { useNavigate } from "react-router-dom"
import { pageTitle } from "util/page" import { pageTitle } from "util/page"
import { createGroupMachine } from "xServices/groups/createGroupXService" import { createGroupMachine } from "xServices/groups/createGroupXService"
import CreateGroupPageView from "./CreateGroupPageView" import CreateGroupPageView from "./CreateGroupPageView"
export const CreateGroupPage: React.FC = () => { export const CreateGroupPage: FC = () => {
const navigate = useNavigate() const navigate = useNavigate()
const organizationId = useOrganizationId() const organizationId = useOrganizationId()
const [createState, sendCreateEvent] = useMachine(createGroupMachine, { const [createState, sendCreateEvent] = useMachine(createGroupMachine, {

View File

@ -4,7 +4,7 @@ import { FormFooter } from "components/FormFooter/FormFooter"
import { FullPageForm } from "components/FullPageForm/FullPageForm" import { FullPageForm } from "components/FullPageForm/FullPageForm"
import { Margins } from "components/Margins/Margins" import { Margins } from "components/Margins/Margins"
import { useFormik } from "formik" import { useFormik } from "formik"
import React from "react" import { FC } from "react"
import { useNavigate } from "react-router-dom" import { useNavigate } from "react-router-dom"
import { getFormHelpers, nameValidator, onChangeTrimmed } from "util/formUtils" import { getFormHelpers, nameValidator, onChangeTrimmed } from "util/formUtils"
import * as Yup from "yup" import * as Yup from "yup"
@ -19,7 +19,7 @@ export type CreateGroupPageViewProps = {
isLoading: boolean isLoading: boolean
} }
export const CreateGroupPageView: React.FC<CreateGroupPageViewProps> = ({ export const CreateGroupPageView: FC<CreateGroupPageViewProps> = ({
onSubmit, onSubmit,
formErrors, formErrors,
isLoading, isLoading,

View File

@ -2,13 +2,13 @@ import { useMachine } from "@xstate/react"
import { useFeatureVisibility } from "hooks/useFeatureVisibility" import { useFeatureVisibility } from "hooks/useFeatureVisibility"
import { useOrganizationId } from "hooks/useOrganizationId" import { useOrganizationId } from "hooks/useOrganizationId"
import { usePermissions } from "hooks/usePermissions" import { usePermissions } from "hooks/usePermissions"
import React from "react" import { FC } from "react"
import { Helmet } from "react-helmet-async" import { Helmet } from "react-helmet-async"
import { pageTitle } from "util/page" import { pageTitle } from "util/page"
import { groupsMachine } from "xServices/groups/groupsXService" import { groupsMachine } from "xServices/groups/groupsXService"
import GroupsPageView from "./GroupsPageView" import GroupsPageView from "./GroupsPageView"
export const GroupsPage: React.FC = () => { export const GroupsPage: FC = () => {
const organizationId = useOrganizationId() const organizationId = useOrganizationId()
const [state] = useMachine(groupsMachine, { const [state] = useMachine(groupsMachine, {
context: { context: {

View File

@ -17,7 +17,7 @@ import { EmptyState } from "components/EmptyState/EmptyState"
import { Stack } from "components/Stack/Stack" import { Stack } from "components/Stack/Stack"
import { TableLoader } from "components/TableLoader/TableLoader" import { TableLoader } from "components/TableLoader/TableLoader"
import { UserAvatar } from "components/UserAvatar/UserAvatar" import { UserAvatar } from "components/UserAvatar/UserAvatar"
import React from "react" import { FC } from "react"
import { Link as RouterLink, useNavigate } from "react-router-dom" import { Link as RouterLink, useNavigate } from "react-router-dom"
import { Paywall } from "components/Paywall/Paywall" import { Paywall } from "components/Paywall/Paywall"
import { Group } from "api/typesGenerated" import { Group } from "api/typesGenerated"
@ -29,7 +29,7 @@ export type GroupsPageViewProps = {
isTemplateRBACEnabled: boolean isTemplateRBACEnabled: boolean
} }
export const GroupsPageView: React.FC<GroupsPageViewProps> = ({ export const GroupsPageView: FC<GroupsPageViewProps> = ({
groups, groups,
canCreateGroup, canCreateGroup,
isTemplateRBACEnabled, isTemplateRBACEnabled,

View File

@ -1,12 +1,12 @@
import { useMachine } from "@xstate/react" import { useMachine } from "@xstate/react"
import React from "react" import { FC } from "react"
import { Helmet } from "react-helmet-async" import { Helmet } from "react-helmet-async"
import { useNavigate, useParams } from "react-router-dom" import { useNavigate, useParams } from "react-router-dom"
import { pageTitle } from "util/page" import { pageTitle } from "util/page"
import { editGroupMachine } from "xServices/groups/editGroupXService" import { editGroupMachine } from "xServices/groups/editGroupXService"
import SettingsGroupPageView from "./SettingsGroupPageView" import SettingsGroupPageView from "./SettingsGroupPageView"
export const SettingsGroupPage: React.FC = () => { export const SettingsGroupPage: FC = () => {
const { groupId } = useParams() const { groupId } = useParams()
if (!groupId) { if (!groupId) {
throw new Error("Group ID not defined.") throw new Error("Group ID not defined.")

View File

@ -13,7 +13,7 @@ import { FullPageForm } from "components/FullPageForm/FullPageForm"
import { FullScreenLoader } from "components/Loader/FullScreenLoader" import { FullScreenLoader } from "components/Loader/FullScreenLoader"
import { Margins } from "components/Margins/Margins" import { Margins } from "components/Margins/Margins"
import { useFormik } from "formik" import { useFormik } from "formik"
import React, { useRef, useState } from "react" import { useRef, useState, FC } from "react"
import { useTranslation } from "react-i18next" import { useTranslation } from "react-i18next"
import { colors } from "theme/colors" import { colors } from "theme/colors"
import { getFormHelpers, nameValidator, onChangeTrimmed } from "util/formUtils" import { getFormHelpers, nameValidator, onChangeTrimmed } from "util/formUtils"
@ -30,7 +30,7 @@ const validationSchema = Yup.object({
quota_allowance: Yup.number().required().min(0).integer(), quota_allowance: Yup.number().required().min(0).integer(),
}) })
const UpdateGroupForm: React.FC<{ const UpdateGroupForm: FC<{
group: Group group: Group
errors: unknown errors: unknown
onSubmit: (data: FormData) => void onSubmit: (data: FormData) => void
@ -153,7 +153,7 @@ export type SettingsGroupPageViewProps = {
isUpdating: boolean isUpdating: boolean
} }
export const SettingsGroupPageView: React.FC<SettingsGroupPageViewProps> = ({ export const SettingsGroupPageView: FC<SettingsGroupPageViewProps> = ({
onCancel, onCancel,
onSubmit, onSubmit,
group, group,

View File

@ -1,13 +1,13 @@
import { useMachine } from "@xstate/react" import { useMachine } from "@xstate/react"
import { useOrganizationId } from "hooks/useOrganizationId" import { useOrganizationId } from "hooks/useOrganizationId"
import { usePermissions } from "hooks/usePermissions" import { usePermissions } from "hooks/usePermissions"
import React from "react" import { FC } from "react"
import { Helmet } from "react-helmet-async" import { Helmet } from "react-helmet-async"
import { pageTitle } from "../../util/page" import { pageTitle } from "../../util/page"
import { templatesMachine } from "../../xServices/templates/templatesXService" import { templatesMachine } from "../../xServices/templates/templatesXService"
import { TemplatesPageView } from "./TemplatesPageView" import { TemplatesPageView } from "./TemplatesPageView"
export const TemplatesPage: React.FC = () => { export const TemplatesPage: FC = () => {
const organizationId = useOrganizationId() const organizationId = useOrganizationId()
const permissions = usePermissions() const permissions = usePermissions()
const [templatesState] = useMachine(templatesMachine, { const [templatesState] = useMachine(templatesMachine, {

View File

@ -1,5 +1,5 @@
import { useActor } from "@xstate/react" import { useActor } from "@xstate/react"
import React, { useContext } from "react" import { useContext, FC } from "react"
import { Section } from "../../../components/Section/Section" import { Section } from "../../../components/Section/Section"
import { AccountForm } from "../../../components/SettingsAccountForm/SettingsAccountForm" import { AccountForm } from "../../../components/SettingsAccountForm/SettingsAccountForm"
import { XServiceContext } from "../../../xServices/StateContext" import { XServiceContext } from "../../../xServices/StateContext"
@ -8,7 +8,7 @@ export const Language = {
title: "Account", title: "Account",
} }
export const AccountPage: React.FC = () => { export const AccountPage: FC = () => {
const xServices = useContext(XServiceContext) const xServices = useContext(XServiceContext)
const [authState, authSend] = useActor(xServices.authXService) const [authState, authSend] = useActor(xServices.authXService)
const { me, permissions, updateProfileError } = authState.context const { me, permissions, updateProfileError } = authState.context

View File

@ -1,5 +1,5 @@
import { useActor } from "@xstate/react" import { useActor } from "@xstate/react"
import React, { useContext, useEffect } from "react" import { useContext, useEffect, PropsWithChildren, FC } from "react"
import { ConfirmDialog } from "../../../components/Dialogs/ConfirmDialog/ConfirmDialog" import { ConfirmDialog } from "../../../components/Dialogs/ConfirmDialog/ConfirmDialog"
import { Section } from "../../../components/Section/Section" import { Section } from "../../../components/Section/Section"
import { XServiceContext } from "../../../xServices/StateContext" import { XServiceContext } from "../../../xServices/StateContext"
@ -23,7 +23,7 @@ export const Language = {
cancelLabel: "Cancel", cancelLabel: "Cancel",
} }
export const SSHKeysPage: React.FC<React.PropsWithChildren<unknown>> = () => { export const SSHKeysPage: FC<PropsWithChildren<unknown>> = () => {
const xServices = useContext(XServiceContext) const xServices = useContext(XServiceContext)
const [authState, authSend] = useActor(xServices.authXService) const [authState, authSend] = useActor(xServices.authXService)
const { sshKey, getSSHKeyError, regenerateSSHKeyError } = authState.context const { sshKey, getSSHKeyError, regenerateSSHKeyError } = authState.context

View File

@ -1,6 +1,6 @@
import { useMachine } from "@xstate/react" import { useMachine } from "@xstate/react"
import { useMe } from "hooks/useMe" import { useMe } from "hooks/useMe"
import React from "react" import { FC } from "react"
import { userSecuritySettingsMachine } from "xServices/userSecuritySettings/userSecuritySettingsXService" import { userSecuritySettingsMachine } from "xServices/userSecuritySettings/userSecuritySettingsXService"
import { Section } from "../../../components/Section/Section" import { Section } from "../../../components/Section/Section"
import { SecurityForm } from "../../../components/SettingsSecurityForm/SettingsSecurityForm" import { SecurityForm } from "../../../components/SettingsSecurityForm/SettingsSecurityForm"
@ -9,7 +9,7 @@ export const Language = {
title: "Security", title: "Security",
} }
export const SecurityPage: React.FC = () => { export const SecurityPage: FC = () => {
const me = useMe() const me = useMe()
const [securityState, securitySend] = useMachine( const [securityState, securitySend] = useMachine(
userSecuritySettingsMachine, userSecuritySettingsMachine,

View File

@ -1,6 +1,6 @@
import { useMachine } from "@xstate/react" import { useMachine } from "@xstate/react"
import { useOrganizationId } from "hooks/useOrganizationId" import { useOrganizationId } from "hooks/useOrganizationId"
import React from "react" import { FC } from "react"
import { Helmet } from "react-helmet-async" import { Helmet } from "react-helmet-async"
import { useNavigate } from "react-router" import { useNavigate } from "react-router"
import { createUserMachine } from "xServices/users/createUserXService" import { createUserMachine } from "xServices/users/createUserXService"
@ -13,7 +13,7 @@ export const Language = {
unknownError: "Oops, an unknown error occurred.", unknownError: "Oops, an unknown error occurred.",
} }
export const CreateUserPage: React.FC = () => { export const CreateUserPage: FC = () => {
const myOrgId = useOrganizationId() const myOrgId = useOrganizationId()
const navigate = useNavigate() const navigate = useNavigate()
const [createUserState, createUserSend] = useMachine(createUserMachine, { const [createUserState, createUserSend] = useMachine(createUserMachine, {

View File

@ -6,7 +6,7 @@ import { Margins } from "components/Margins/Margins"
import dayjs from "dayjs" import dayjs from "dayjs"
import { scheduleToAutoStart } from "pages/WorkspaceSchedulePage/schedule" import { scheduleToAutoStart } from "pages/WorkspaceSchedulePage/schedule"
import { ttlMsToAutoStop } from "pages/WorkspaceSchedulePage/ttl" import { ttlMsToAutoStop } from "pages/WorkspaceSchedulePage/ttl"
import React, { useEffect } from "react" import { useEffect, FC } from "react"
import { useTranslation } from "react-i18next" import { useTranslation } from "react-i18next"
import { Navigate, useNavigate, useParams } from "react-router-dom" import { Navigate, useNavigate, useParams } from "react-router-dom"
import { scheduleChanged } from "util/schedule" import { scheduleChanged } from "util/schedule"
@ -31,7 +31,7 @@ const useStyles = makeStyles((theme) => ({
}, },
})) }))
export const WorkspaceSchedulePage: React.FC = () => { export const WorkspaceSchedulePage: FC = () => {
const { t } = useTranslation("workspaceSchedulePage") const { t } = useTranslation("workspaceSchedulePage")
const styles = useStyles() const styles = useStyles()
const { username: usernameQueryParam, workspace: workspaceQueryParam } = const { username: usernameQueryParam, workspace: workspaceQueryParam } =