github.com/pluralsh/plural-cli@v0.9.5/pkg/ui/web/src/Plural.tsx (about)

     1  import { theme as honorableTheme } from '@pluralsh/design-system'
     2  import { Grommet } from 'grommet'
     3  import { ThemeProvider as HonorableThemeProvider } from 'honorable'
     4  import React, { useMemo } from 'react'
     5  import { RouterProvider } from 'react-router-dom'
     6  import { ThemeProvider } from 'styled-components'
     7  
     8  import Loader from './components/loader/Loader'
     9  import { WailsContext, WailsContextProps } from './context/wails'
    10  import { Provider } from './graphql/generated/graphql'
    11  import { grommetTheme } from './grommet/theme'
    12  import { useWailsQuery } from './hooks/useWails'
    13  import { router } from './routes/router'
    14  import { Binding } from './services/wails'
    15  import { FontStyles } from './styled/fonts'
    16  import { GlobalStyles } from './styled/global'
    17  import { ScrollbarStyles } from './styled/scrollbar'
    18  import { styledTheme } from './styled/theme'
    19  import { PluralProject } from './types/client'
    20  
    21  function Plural(): React.ReactElement {
    22    const { data: context } = useWailsQuery(Binding.Context)
    23    const { data: project = {} as PluralProject } = useWailsQuery<PluralProject>(Binding.Project)
    24    const { data: provider } = useWailsQuery<Provider>(Binding.Provider)
    25    const { data: token } = useWailsQuery(Binding.Token)
    26  
    27    const isReady = useMemo(() => !!context && !!project && !!token, [context, project, token])
    28    const wailsContext = useMemo(() => ({
    29      context,
    30      project: { ...project, provider },
    31      token,
    32    } as WailsContextProps), [context, project, provider, token])
    33  
    34    return (
    35      <HonorableThemeProvider theme={honorableTheme}>
    36        <Grommet
    37          full
    38          theme={grommetTheme}
    39        >
    40          <ThemeProvider theme={styledTheme}>
    41            <WailsContext.Provider value={wailsContext}>
    42              <GlobalStyles />
    43              <FontStyles />
    44              <ScrollbarStyles />
    45              {isReady && <RouterProvider router={router} />}
    46              {!isReady && <Loader />}
    47            </WailsContext.Provider>
    48          </ThemeProvider>
    49        </Grommet>
    50      </HonorableThemeProvider>
    51    )
    52  }
    53  
    54  export default Plural