Verified Commit 163f1dd1 authored by Marek Veselý's avatar Marek Veselý
Browse files

fix: add more info to content and description from prevLogs

parent 21785193
Loading
Loading
Loading
Loading
+19 −9
Original line number Diff line number Diff line
@@ -2,6 +2,12 @@ import { Classes, Colors } from '@blueprintjs/core'
import { css } from '@emotion/css'
import type { IAnalystActionLogSimple } from '@inject/graphql'
import type { FC } from 'react'
import {
  getConfirmationTextForConfirmationLog,
  getInjectNameForConfirmationLog,
  getQuestionnaireNameForReviewLog,
  getQuestionnaireNameForSubmissionLog,
} from '../utilities'

const activated = css`
  color: ${Colors.GREEN2};
@@ -27,19 +33,23 @@ export const ActionLogContent: FC<ActionLogContentProps> = ({ actionLog }) => {
      return <>{actionLog.details.tool.displayName}</>
    case 'IInjectDetailsType':
      return <>{actionLog.details.inject.displayName}</>
    case 'IConfirmationDetailsType':
      // TODO: improve (requires more data from BE)
      return <>confirmation</>
    case 'IConfirmationDetailsType': {
      const injectName = getInjectNameForConfirmationLog(actionLog)
      const confirmationText = getConfirmationTextForConfirmationLog(actionLog)
      return `${injectName} confirmation${confirmationText ? `: "${confirmationText}"` : ''}`
    }
    case 'ICustomInjectDetailsType':
      return <>custom inject</>
    case 'IEmailType':
      return <>{actionLog.details.thread.subject}</>
    case 'IQuestionnaireReviewDetailsType':
      // TODO: improve (requires more data from BE)
      return <>questionnaire reviewed</>
    case 'IQuestionnaireSubmissionType':
      // TODO: improve (requires more data from BE)
      return <>questionnaire submitted</>
    case 'IQuestionnaireReviewDetailsType': {
      const questionnaireName = getQuestionnaireNameForReviewLog(actionLog)
      return <>{questionnaireName} reviewed</>
    }
    case 'IQuestionnaireSubmissionType': {
      const questionnaireName = getQuestionnaireNameForSubmissionLog(actionLog)
      return <>{questionnaireName} submitted</>
    }
    case 'ITeamQuestionnaireStateType':
      return <>{actionLog.details.questionnaire.displayName}</>
    case 'IFileDownloadDetailsType':
+21 −12
Original line number Diff line number Diff line
import type { IAnalystActionLogSimple } from '@inject/graphql'
import type { FC } from 'react'
import {
  getConfirmationTextForConfirmationLog,
  getInjectNameForConfirmationLog,
  getQuestionnaireNameForReviewLog,
  getQuestionnaireNameForSubmissionLog,
} from '../utilities'

interface ActionLogDescriptionProps {
  actionLog: IAnalystActionLogSimple
}

// TODO: add users? ask xvykopal

export const ActionLogDescription: FC<ActionLogDescriptionProps> = ({
  actionLog,
}) => {
@@ -25,13 +29,16 @@ export const ActionLogDescription: FC<ActionLogDescriptionProps> = ({
          the team
        </>
      )
    case 'IConfirmationDetailsType':
      // TODO: improve (requires more data from BE)
    case 'IConfirmationDetailsType': {
      const injectName = getInjectNameForConfirmationLog(actionLog)
      const confirmationText = getConfirmationTextForConfirmationLog(actionLog)
      return (
        <>
          An inject was <b>confirmed</b> by a trainee
          The <b>{injectName}</b> inject was <b>confirmed</b> by a trainee
          (button text: &quot;<b>{confirmationText}</b>&quot;)
        </>
      )
    }
    case 'ICustomInjectDetailsType':
      return (
        <>
@@ -52,21 +59,23 @@ export const ActionLogDescription: FC<ActionLogDescriptionProps> = ({
        </>
      )
    }
    case 'IQuestionnaireReviewDetailsType':
      // TODO: improve (requires more data from BE)
    case 'IQuestionnaireReviewDetailsType': {
      const questionnaireName = getQuestionnaireNameForReviewLog(actionLog)
      return (
        <>
          A questionnaire was <b>reviewed</b> by an instructor
          The <b>{questionnaireName}</b> was <b>reviewed</b> by an instructor
        </>
      )
    case 'IQuestionnaireSubmissionType':
      // TODO: improve (requires more data from BE)
    }
    case 'IQuestionnaireSubmissionType': {
      const questionnaireName = getQuestionnaireNameForSubmissionLog(actionLog)
      return (
        <>
          A questionnaire was submitted by a trainee, the answers were{' '}
          <b>{actionLog.details.accepted ? '' : 'not '}accepted</b>
          The <b>{questionnaireName}</b> was submitted by a trainee, the answers
          were <b>{actionLog.details.accepted ? '' : 'not '}accepted</b>
        </>
      )
    }
    case 'ITeamQuestionnaireStateType':
      return (
        <>
+85 −0
Original line number Diff line number Diff line
@@ -154,3 +154,88 @@ export const plotDataElement = css`
    opacity: 1;
  }
`

// TODO: add inject to confirmation log on BE instead?
export const getInjectNameForConfirmationLog = (
  actionLog: IAnalystActionLogSimple
) => {
  if (actionLog.details.__typename !== 'IConfirmationDetailsType') {
    throw new Error(
      'getInjectNameForConfirmationLog called with non-confirmation log'
    )
  }

  const prevLog = actionLog.previousLogs.find(
    prevLog =>
      prevLog.__typename === 'IActionLogType' &&
      prevLog.details.__typename === 'IInjectDetailsType'
  )
  return prevLog?.__typename === 'IActionLogType' &&
    prevLog.details.__typename === 'IInjectDetailsType'
    ? prevLog.details.inject.displayName
    : 'inject'
}
// TODO: add confirmation to confirmation log on BE instead?
export const getConfirmationTextForConfirmationLog = (
  actionLog: IAnalystActionLogSimple
) => {
  if (actionLog.details.__typename !== 'IConfirmationDetailsType') {
    throw new Error(
      'getConfirmationTextForConfirmationLog called with non-confirmation log'
    )
  }
  const prevLog = actionLog.previousLogs.find(
    prevLog =>
      prevLog.__typename === 'IActionLogType' &&
      prevLog.details.__typename === 'IInjectDetailsType'
  )
  return prevLog?.__typename === 'IActionLogType' &&
    prevLog.details.__typename === 'IInjectDetailsType'
    ? prevLog.details.confirmation?.text
    : undefined
}
// TODO: add questionnaire to review log on BE instead?
export const getQuestionnaireNameForSubmissionLog = (
  actionLog: IAnalystActionLogSimple
) => {
  if (actionLog.details.__typename !== 'IQuestionnaireSubmissionType') {
    throw new Error(
      'getQuestionnaireNameForSubmissionLog called with non-submission log'
    )
  }

  const prevLog = actionLog.previousLogs.find(
    prevLog =>
      prevLog.__typename === 'IActionLogType' &&
      prevLog.details.__typename === 'ITeamQuestionnaireStateType'
  )
  return prevLog?.__typename === 'IActionLogType' &&
    prevLog.details.__typename === 'ITeamQuestionnaireStateType'
    ? prevLog.details.questionnaire.displayName
    : 'questionnaire'
}
// TODO: add questionnaire to review log on BE instead?
export const getQuestionnaireNameForReviewLog = (
  actionLog: IAnalystActionLogSimple
) => {
  if (actionLog.details.__typename !== 'IQuestionnaireReviewDetailsType') {
    throw new Error(
      'getQuestionnaireNameForReviewLog called with non-review log'
    )
  }

  const prevLog = actionLog.previousLogs.find(
    prevLog =>
      prevLog.__typename === 'IActionLogType' &&
      prevLog.details.__typename === 'IQuestionnaireSubmissionType'
  )
  const prevPrevLog = prevLog?.previousLogs.find(
    prevPrevLog =>
      prevPrevLog.__typename === 'IActionLogType' &&
      prevPrevLog.details.__typename === 'ITeamQuestionnaireStateType'
  )
  return prevPrevLog?.__typename === 'IActionLogType' &&
    prevPrevLog.details.__typename === 'ITeamQuestionnaireStateType'
    ? prevPrevLog.details.questionnaire.displayName
    : 'questionnaire'
}
+45 −1
Original line number Diff line number Diff line
@@ -2508,7 +2508,51 @@ export const IAnalystActionLogSimple = graphql(
          cmd
        }
      }
      # TODO: add prev/next logs (also in actionLogs subscription)
      previousLogs {
        __typename
        id
        timestamp
        ... on IActionLogType {
          details {
            __typename
            ... on IInjectDetailsType {
              id
              inject {
                id
                displayName
              }
              confirmation {
                id
                text
              }
            }
            ... on ITeamQuestionnaireStateType {
              id
              questionnaire {
                id
                displayName
              }
            }
          }
        }
        previousLogs {
          __typename
          id
          timestamp
          ... on IActionLogType {
            details {
              __typename
              ... on ITeamQuestionnaireStateType {
                id
                questionnaire {
                  id
                  displayName
                }
              }
            }
          }
        }
      }
    }
  `,
  []
+8 −8

File changed.

Preview size limit exceeded, changes collapsed.