Verified Commit 8b2a73fb authored by Marek Veselý's avatar Marek Veselý
Browse files

feat: add All Teams tab to Analyst questionnaires

parent 2e62d639
Loading
Loading
Loading
Loading
+67 −0
Original line number Diff line number Diff line
import { css } from '@emotion/css'
import { SummaryQuestionnaireCard } from '@inject/frontend'
import type { VariablesOf } from '@inject/graphql'
import {
  AnalystQuestionnaireSummary,
  AnalystQuestionnaireUpdatesSubscription,
  useSubscription,
  useTypedQuery,
  type Team,
} from '@inject/graphql'
import { Container } from '@inject/shared'
import { useMemo, type FC } from 'react'

const container = css`
  flex: 1;
  padding: 1rem;
  overflow: auto;
  display: flex;
  flex-direction: column;
  gap: 1rem;
`

interface SummaryQuestionnairesProps {
  exerciseId: string
  teams: Team[]
}

export const SummaryQuestionnaires: FC<SummaryQuestionnairesProps> = ({
  exerciseId,
  teams,
}) => {
  const teamIds = teams.map(t => t.id)

  const [{ data }] = useTypedQuery({
    query: AnalystQuestionnaireSummary,
    variables: {
      exerciseId,
      teamIds: teams.map(t => t.id),
    },
    context: useMemo(
      () => ({
        suspense: true,
      }),
      []
    ),
    requestPolicy: 'cache-and-network',
  })
  const questionnaires = data?.questionnaires ?? []

  useSubscription({
    document: AnalystQuestionnaireUpdatesSubscription,
    variables: {
      teamIds,
    } as VariablesOf<typeof AnalystQuestionnaireUpdatesSubscription>,
  })

  return (
    <Container className={container}>
      {questionnaires.map(questionnaire => (
        <SummaryQuestionnaireCard
          key={questionnaire.id}
          questionnaire={questionnaire}
        />
      ))}
    </Container>
  )
}
+1 −1
Original line number Diff line number Diff line
@@ -36,7 +36,7 @@ export const TeamQuestionnaires: FC<TeamQuestionnairesProps> = ({

  useSubscription({
    document: AnalystQuestionnaireUpdatesSubscription,
    variables: { teamId: team.id } as VariablesOf<
    variables: { teamIds: [team.id] } as VariablesOf<
      typeof AnalystQuestionnaireUpdatesSubscription
    >,
  })
+26 −0
Original line number Diff line number Diff line
import { Divider } from '@blueprintjs/core'
import type { Team } from '@inject/graphql'
import type { FC, ReactNode } from 'react'
import { TeamSelector } from '../TeamSelector'
import { useTeamSelectorProps } from '../TeamSelector/useTeamSelectorProps'
import { wrapper } from './classes'

interface TeamOrAllSelectPageProps {
  teams: Team[]
  getChildren: (selectedTeam: Team | undefined) => ReactNode
}

export const TeamOrAllSelectPage: FC<TeamOrAllSelectPageProps> = ({
  teams,
  getChildren,
}) => {
  const teamSelectorProps = useTeamSelectorProps({ teams, includeAll: true })

  return (
    <div className={wrapper}>
      <TeamSelector {...teamSelectorProps} />
      <Divider />
      {getChildren(teamSelectorProps.selectedTeam)}
    </div>
  )
}
+8 −0
Original line number Diff line number Diff line
import { css } from '@emotion/css'

export const wrapper = css`
  display: flex;
  flex-direction: column;
  height: 100%;
  overflow: auto;
`
+1 −8
Original line number Diff line number Diff line
import { Divider } from '@blueprintjs/core'
import { css } from '@emotion/css'
import type { Team } from '@inject/graphql'
import type { FC, ReactNode } from 'react'
import { TeamSelector } from '../TeamSelector'
import { useTeamSelectorProps } from '../TeamSelector/useTeamSelectorProps'

const wrapper = css`
  display: flex;
  flex-direction: column;
  height: 100%;
  overflow: auto;
`
import { wrapper } from './classes'

interface TeamSelectPageProps {
  teams: Team[]
Loading