Verified Commit 89f55081 authored by Marek Veselý's avatar Marek Veselý
Browse files

feat: add back sandbox switch

parent 72b67ee8
Loading
Loading
Loading
Loading
Compare 7f028b9f to c27fc035
Original line number Diff line number Diff line
Subproject commit 7f028b9f77aa760d544e391cc22cdb74fc41590b
Subproject commit c27fc03543594163601281b728067593ffa4815d
+29 −0
Original line number Diff line number Diff line
@@ -64,6 +64,7 @@ const ExerciseCreator: FC<ExerciseCreatorProps> = ({ open, setOpen }) => {
  const [name, setName] = useState<string>('')
  const [onDemand, setOnDemand] = useState<boolean>(false)
  const [interval, setInterval] = useState<[Date | null, Date | null]>()
  const [sandbox, setSandbox] = useState<boolean>(false)
  const [llm, setLlm] = useState<boolean>(false)
  const [configOverride, setConfigOverride] =
    useState<Partial<ConfigOverride>>()
@@ -84,6 +85,7 @@ const ExerciseCreator: FC<ExerciseCreatorProps> = ({ open, setOpen }) => {
    setName('')
    setOnDemand(false)
    setInterval(undefined)
    setSandbox(false)
    setLlm(false)
    setConfigOverride(undefined)

@@ -187,6 +189,7 @@ const ExerciseCreator: FC<ExerciseCreatorProps> = ({ open, setOpen }) => {
            name,
            configOverride,
            onDemand,
            sandbox,
            llm,
            allowedStartInterval,
          },
@@ -214,6 +217,7 @@ const ExerciseCreator: FC<ExerciseCreatorProps> = ({ open, setOpen }) => {
      configOverride,
      addExercise,
      name,
      sandbox,
      llm,
      beginWiggling,
      reset,
@@ -369,6 +373,31 @@ const ExerciseCreator: FC<ExerciseCreatorProps> = ({ open, setOpen }) => {
            onChange={e => setLlm(e.currentTarget.checked)}
          />

          <Switch
            labelElement={
              <span className={labelClass}>
                <span>{t('exerciseManager.logCollection.title')}</span>
                <HelpIcon
                  small
                  text={
                    <span>
                      <p>{t('exerciseManager.logCollection.help')}</p>
                      <p
                        className={css`
                          margin-bottom: 0;
                        `}
                      >
                        <b>{t('exerciseManager.logCollection.helpBold')}</b>
                      </p>
                    </span>
                  }
                />
              </span>
            }
            checked={sandbox}
            onChange={e => setSandbox(e.currentTarget.checked)}
          />

          <OverrideConfig
            customTeamError={errors.names}
            className={overrideConfigClass}
+1 −1
Original line number Diff line number Diff line
@@ -441,7 +441,7 @@ declare module 'gql.tada' {
    "\n    mutation CopyUsersAssignment($fromExerciseId: ID!, $toExerciseId: ID!) {\n      copyUsersAssignment(\n        fromExerciseId: $fromExerciseId\n        toExerciseId: $toExerciseId\n      ) {\n        result {\n          assignedUserIds\n          unaffectedUserIds\n        }\n      }\n    }\n  ":
      TadaDocumentNode<{ copyUsersAssignment: { result: { assignedUserIds: string[]; unaffectedUserIds: string[]; }; } | null; }, { toExerciseId: string; fromExerciseId: string; }, void>;
    "\n    mutation CreateExercise($createExerciseInput: CreateExerciseInput!) {\n      createExercise(createExerciseInput: $createExerciseInput) {\n        exercise {\n          ...Exercise\n        }\n      }\n    }\n  ":
      TadaDocumentNode<{ createExercise: { exercise: { id: string; name: string; definition: { id: string; name: string; description: string; }; teams: { id: string; achievedScore: number; totalScore: number; name: string; role: string; exercise: { id: string; name: string; onDemand: boolean; } & { id: string; name: string; }; instructorSubscribed: boolean; analystSubscribed: boolean; users: ({ __typename?: "IUserType" | undefined; id: string; username: string; firstName: string | null; lastName: string | null; } | { __typename?: "TUserType" | undefined; id: string; username: string; firstName: string | null; lastName: string | null; })[] & ({ __typename: "IUserType"; id: string; username: string; firstName: string | null; lastName: string | null; group: "ADMIN" | "BOT" | "INSTRUCTOR" | "TRAINEE"; lastLogin: string | null; dateJoined: string; isGuest: boolean; isActive: boolean; isImported: boolean; tags: { id: string; name: string; }[]; expiration: string | null; plainPassword: string | null; teams: { id: string; role: string; name: string; exercise: { id: string; name: string; }; }[]; exercises: { id: string; name: string; }[]; definitions: { id: string; name: string; }[]; } | { __typename: "TUserType"; id: string; username: string; firstName: string | null; lastName: string | null; group: "ADMIN" | "BOT" | "INSTRUCTOR" | "TRAINEE"; lastLogin: string | null; dateJoined: string; isGuest: boolean; })[]; exerciseState: { id: string; status: "EXPIRED" | "FINISHED" | "NOT_STARTED" | "PAUSED" | "RUNNING" | "STOPPED"; } & { status: "EXPIRED" | "FINISHED" | "NOT_STARTED" | "PAUSED" | "RUNNING" | "STOPPED"; }; showOverview: boolean; emailAddress: { id: string; definitionAddress: { id: string; address: string; description: string; control: { id: string; milestoneCondition: string; activateMilestone: string[]; deactivateMilestone: string[]; roles: string[]; }; teamVisible: boolean; organization: string; signed: boolean; llmAssessment: { id: string; } | null; } | null; address: string; team: { id: string; name: string; role: string; achievedScore: number; totalScore: number; showOverview: boolean; } | null; } | null; openSearchAccess: { id: string; username: string; password: string; indexName: string; } | null; }[]; instructors: ({ __typename: "IUserType"; id: string; username: string; firstName: string | null; lastName: string | null; group: "ADMIN" | "BOT" | "INSTRUCTOR" | "TRAINEE"; lastLogin: string | null; dateJoined: string; isGuest: boolean; isActive: boolean; isImported: boolean; tags: { id: string; name: string; }[]; expiration: string | null; plainPassword: string | null; teams: { id: string; role: string; name: string; exercise: { id: string; name: string; }; }[]; exercises: { id: string; name: string; }[]; definitions: { id: string; name: string; }[]; } | { __typename: "TUserType"; id: string; username: string; firstName: string | null; lastName: string | null; group: "ADMIN" | "BOT" | "INSTRUCTOR" | "TRAINEE"; lastLogin: string | null; dateJoined: string; isGuest: boolean; })[]; createdBy: { __typename: "IUserType"; id: string; username: string; firstName: string | null; lastName: string | null; group: "ADMIN" | "BOT" | "INSTRUCTOR" | "TRAINEE"; lastLogin: string | null; dateJoined: string; isGuest: boolean; isActive: boolean; isImported: boolean; tags: { id: string; name: string; }[]; expiration: string | null; plainPassword: string | null; teams: { id: string; role: string; name: string; exercise: { id: string; name: string; }; }[]; exercises: { id: string; name: string; }[]; definitions: { id: string; name: string; }[]; } | { __typename: "TUserType"; id: string; username: string; firstName: string | null; lastName: string | null; group: "ADMIN" | "BOT" | "INSTRUCTOR" | "TRAINEE"; lastLogin: string | null; dateJoined: string; isGuest: boolean; } | null; timestampCreated: string; config: { id: string; exerciseDuration: number; customEmailSuffix: string; updateIntervalS: number; enabledFeatures: ("EMAIL_BETWEEN_TEAMS" | "ENABLE_EMAIL" | "ENABLE_QUESTIONNAIRES" | "ENABLE_ROLES" | "ENABLE_TOOLS" | "SHOW_EXERCISE_OVERVIEW" | "SHOW_EXERCISE_TIME")[]; allowedFileTypes: string[]; }; states: { id: string; elapsedS: number; startTime: string | null; finishTime: string | null; status: "EXPIRED" | "FINISHED" | "NOT_STARTED" | "PAUSED" | "RUNNING" | "STOPPED"; teams: { id: string; instructorSubscribed: boolean; analystSubscribed: boolean; showOverview: boolean; }[]; allowedStartInterval: { timeFrom: string; timeTo: string; } | null; }[]; onDemand: boolean; entered: boolean; sandbox: boolean; llm: boolean; }; } | null; }, { createExerciseInput: { teamCount: number; onDemand?: boolean | null | undefined; name?: string | null | undefined; llm?: boolean | null | undefined; definitionId: string; configOverride?: { updateIntervalS?: number | null | undefined; showExerciseTime?: boolean | null | undefined; showExerciseOverview?: boolean | null | undefined; exerciseDuration?: number | null | undefined; emailBetweenTeams?: boolean | null | undefined; customTeamNames?: string[] | null | undefined; customEmailSuffix?: string | null | undefined; } | null | undefined; allowedStartInterval?: { timeTo: string; timeFrom: string; } | null | undefined; }; }, void>;
      TadaDocumentNode<{ createExercise: { exercise: { id: string; name: string; definition: { id: string; name: string; description: string; }; teams: { id: string; achievedScore: number; totalScore: number; name: string; role: string; exercise: { id: string; name: string; onDemand: boolean; } & { id: string; name: string; }; instructorSubscribed: boolean; analystSubscribed: boolean; users: ({ __typename?: "IUserType" | undefined; id: string; username: string; firstName: string | null; lastName: string | null; } | { __typename?: "TUserType" | undefined; id: string; username: string; firstName: string | null; lastName: string | null; })[] & ({ __typename: "IUserType"; id: string; username: string; firstName: string | null; lastName: string | null; group: "ADMIN" | "BOT" | "INSTRUCTOR" | "TRAINEE"; lastLogin: string | null; dateJoined: string; isGuest: boolean; isActive: boolean; isImported: boolean; tags: { id: string; name: string; }[]; expiration: string | null; plainPassword: string | null; teams: { id: string; role: string; name: string; exercise: { id: string; name: string; }; }[]; exercises: { id: string; name: string; }[]; definitions: { id: string; name: string; }[]; } | { __typename: "TUserType"; id: string; username: string; firstName: string | null; lastName: string | null; group: "ADMIN" | "BOT" | "INSTRUCTOR" | "TRAINEE"; lastLogin: string | null; dateJoined: string; isGuest: boolean; })[]; exerciseState: { id: string; status: "EXPIRED" | "FINISHED" | "NOT_STARTED" | "PAUSED" | "RUNNING" | "STOPPED"; } & { status: "EXPIRED" | "FINISHED" | "NOT_STARTED" | "PAUSED" | "RUNNING" | "STOPPED"; }; showOverview: boolean; emailAddress: { id: string; definitionAddress: { id: string; address: string; description: string; control: { id: string; milestoneCondition: string; activateMilestone: string[]; deactivateMilestone: string[]; roles: string[]; }; teamVisible: boolean; organization: string; signed: boolean; llmAssessment: { id: string; } | null; } | null; address: string; team: { id: string; name: string; role: string; achievedScore: number; totalScore: number; showOverview: boolean; } | null; } | null; openSearchAccess: { id: string; username: string; password: string; indexName: string; } | null; }[]; instructors: ({ __typename: "IUserType"; id: string; username: string; firstName: string | null; lastName: string | null; group: "ADMIN" | "BOT" | "INSTRUCTOR" | "TRAINEE"; lastLogin: string | null; dateJoined: string; isGuest: boolean; isActive: boolean; isImported: boolean; tags: { id: string; name: string; }[]; expiration: string | null; plainPassword: string | null; teams: { id: string; role: string; name: string; exercise: { id: string; name: string; }; }[]; exercises: { id: string; name: string; }[]; definitions: { id: string; name: string; }[]; } | { __typename: "TUserType"; id: string; username: string; firstName: string | null; lastName: string | null; group: "ADMIN" | "BOT" | "INSTRUCTOR" | "TRAINEE"; lastLogin: string | null; dateJoined: string; isGuest: boolean; })[]; createdBy: { __typename: "IUserType"; id: string; username: string; firstName: string | null; lastName: string | null; group: "ADMIN" | "BOT" | "INSTRUCTOR" | "TRAINEE"; lastLogin: string | null; dateJoined: string; isGuest: boolean; isActive: boolean; isImported: boolean; tags: { id: string; name: string; }[]; expiration: string | null; plainPassword: string | null; teams: { id: string; role: string; name: string; exercise: { id: string; name: string; }; }[]; exercises: { id: string; name: string; }[]; definitions: { id: string; name: string; }[]; } | { __typename: "TUserType"; id: string; username: string; firstName: string | null; lastName: string | null; group: "ADMIN" | "BOT" | "INSTRUCTOR" | "TRAINEE"; lastLogin: string | null; dateJoined: string; isGuest: boolean; } | null; timestampCreated: string; config: { id: string; exerciseDuration: number; customEmailSuffix: string; updateIntervalS: number; enabledFeatures: ("EMAIL_BETWEEN_TEAMS" | "ENABLE_EMAIL" | "ENABLE_QUESTIONNAIRES" | "ENABLE_ROLES" | "ENABLE_TOOLS" | "SHOW_EXERCISE_OVERVIEW" | "SHOW_EXERCISE_TIME")[]; allowedFileTypes: string[]; }; states: { id: string; elapsedS: number; startTime: string | null; finishTime: string | null; status: "EXPIRED" | "FINISHED" | "NOT_STARTED" | "PAUSED" | "RUNNING" | "STOPPED"; teams: { id: string; instructorSubscribed: boolean; analystSubscribed: boolean; showOverview: boolean; }[]; allowedStartInterval: { timeFrom: string; timeTo: string; } | null; }[]; onDemand: boolean; entered: boolean; sandbox: boolean; llm: boolean; }; } | null; }, { createExerciseInput: { teamCount: number; sandbox?: boolean | null | undefined; onDemand?: boolean | null | undefined; name?: string | null | undefined; llm?: boolean | null | undefined; definitionId: string; configOverride?: { updateIntervalS?: number | null | undefined; showExerciseTime?: boolean | null | undefined; showExerciseOverview?: boolean | null | undefined; exerciseDuration?: number | null | undefined; emailBetweenTeams?: boolean | null | undefined; customTeamNames?: string[] | null | undefined; customEmailSuffix?: string | null | undefined; } | null | undefined; allowedStartInterval?: { timeTo: string; timeFrom: string; } | null | undefined; }; }, void>;
    "\n    mutation ChangeAllowedStartInterval(\n      $exerciseId: ID!\n      $exerciseStateIds: [ID!]!\n      $allowedStartInterval: TimeIntervalInput!\n    ) {\n      changeAllowedStartInterval(\n        exerciseId: $exerciseId\n        exerciseStateIds: $exerciseStateIds\n        allowedStartInterval: $allowedStartInterval\n      ) {\n        exercise {\n          id\n        }\n      }\n    }\n  ":
      TadaDocumentNode<{ changeAllowedStartInterval: { exercise: { id: string; }; } | null; }, { allowedStartInterval: { timeTo: string; timeFrom: string; }; exerciseStateIds: string[]; exerciseId: string; }, void>;
    "\n    mutation CreateBot($createBotInput: CreateBotInput!) {\n      createBot(createBotInput: $createBotInput) {\n        apiToken\n        botUser {\n          ...IUser\n        }\n      }\n    }\n  ":
+2 −2
Original line number Diff line number Diff line
@@ -42,9 +42,9 @@ export type introspection_types = {
    'CreateBotInput': { kind: 'INPUT_OBJECT'; name: 'CreateBotInput'; isOneOf: false; inputFields: [{ name: 'allowedEndpoints'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'EndpointPermissions'; ofType: null; }; }; }; }; defaultValue: null }, { name: 'username'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }]; };
    'CreateBotMutation': { kind: 'OBJECT'; name: 'CreateBotMutation'; fields: { 'apiToken': { name: 'apiToken'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'botUser': { name: 'botUser'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'IUserType'; ofType: null; }; } }; }; };
    'CreateDomainRestriction': { kind: 'OBJECT'; name: 'CreateDomainRestriction'; fields: { 'newDomain': { name: 'newDomain'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'DomainRestrictionType'; ofType: null; }; } }; }; };
    'CreateExerciseInput': { kind: 'INPUT_OBJECT'; name: 'CreateExerciseInput'; isOneOf: false; inputFields: [{ name: 'allowedStartInterval'; type: { kind: 'INPUT_OBJECT'; name: 'TimeIntervalInput'; ofType: null; }; defaultValue: null }, { name: 'configOverride'; type: { kind: 'INPUT_OBJECT'; name: 'ConfigOverrideInput'; ofType: null; }; defaultValue: null }, { name: 'definitionId'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'llm'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: "false" }, { name: 'name'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: "\"\"" }, { name: 'onDemand'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: "false" }, { name: 'teamCount'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; }; defaultValue: null }]; };
    'CreateExerciseInput': { kind: 'INPUT_OBJECT'; name: 'CreateExerciseInput'; isOneOf: false; inputFields: [{ name: 'allowedStartInterval'; type: { kind: 'INPUT_OBJECT'; name: 'TimeIntervalInput'; ofType: null; }; defaultValue: null }, { name: 'configOverride'; type: { kind: 'INPUT_OBJECT'; name: 'ConfigOverrideInput'; ofType: null; }; defaultValue: null }, { name: 'definitionId'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'llm'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: "false" }, { name: 'name'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: "\"\"" }, { name: 'onDemand'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: "false" }, { name: 'sandbox'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: "false" }, { name: 'teamCount'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; }; defaultValue: null }]; };
    'CreateExerciseMutation': { kind: 'OBJECT'; name: 'CreateExerciseMutation'; fields: { 'exercise': { name: 'exercise'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ExerciseType'; ofType: null; }; } }; }; };
    'CreateExerciseType': { kind: 'OBJECT'; name: 'CreateExerciseType'; fields: { 'allowedStartInterval': { name: 'allowedStartInterval'; type: { kind: 'OBJECT'; name: 'TimeIntervalType'; ofType: null; } }; 'configOverride': { name: 'configOverride'; type: { kind: 'OBJECT'; name: 'ConfigOverrideType'; ofType: null; } }; 'definitionId': { name: 'definitionId'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; } }; 'llm': { name: 'llm'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; } }; 'name': { name: 'name'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'onDemand': { name: 'onDemand'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; } }; 'teamCount': { name: 'teamCount'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; } }; }; };
    'CreateExerciseType': { kind: 'OBJECT'; name: 'CreateExerciseType'; fields: { 'allowedStartInterval': { name: 'allowedStartInterval'; type: { kind: 'OBJECT'; name: 'TimeIntervalType'; ofType: null; } }; 'configOverride': { name: 'configOverride'; type: { kind: 'OBJECT'; name: 'ConfigOverrideType'; ofType: null; } }; 'definitionId': { name: 'definitionId'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; } }; 'llm': { name: 'llm'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; } }; 'name': { name: 'name'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'onDemand': { name: 'onDemand'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; } }; 'sandbox': { name: 'sandbox'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; } }; 'teamCount': { name: 'teamCount'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; } }; }; };
    'CreateExercisesType': { kind: 'OBJECT'; name: 'CreateExercisesType'; fields: { 'exercise': { name: 'exercise'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ExerciseType'; ofType: null; }; } }; }; };
    'CreateInstructorCommentType': { kind: 'OBJECT'; name: 'CreateInstructorCommentType'; fields: { 'log': { name: 'log'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INTERFACE'; name: 'ActionLogInterface'; ofType: null; }; } }; }; };
    'CreateNoticeboardMessageMutation': { kind: 'OBJECT'; name: 'CreateNoticeboardMessageMutation'; fields: { 'message': { name: 'message'; type: { kind: 'OBJECT'; name: 'NoticeboardMessageType'; ofType: null; } }; }; };
+2 −0
Original line number Diff line number Diff line
@@ -271,6 +271,7 @@ input CreateExerciseInput {
  llm: Boolean = false
  name: String = ""
  onDemand: Boolean = false
  sandbox: Boolean = false
  teamCount: Int!
}

@@ -286,6 +287,7 @@ type CreateExerciseType {
  llm: Boolean
  name: String
  onDemand: Boolean
  sandbox: Boolean
  teamCount: Int!
}

Loading