Loading backend @ c27fc035 Compare 7f028b9f to c27fc035 Original line number Diff line number Diff line Subproject commit 7f028b9f77aa760d544e391cc22cdb74fc41590b Subproject commit c27fc03543594163601281b728067593ffa4815d frontend/src/exercisepanel/ExerciseManager/ExerciseCreator.tsx +29 −0 Original line number Diff line number Diff line Loading @@ -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>>() Loading @@ -84,6 +85,7 @@ const ExerciseCreator: FC<ExerciseCreatorProps> = ({ open, setOpen }) => { setName('') setOnDemand(false) setInterval(undefined) setSandbox(false) setLlm(false) setConfigOverride(undefined) Loading Loading @@ -187,6 +189,7 @@ const ExerciseCreator: FC<ExerciseCreatorProps> = ({ open, setOpen }) => { name, configOverride, onDemand, sandbox, llm, allowedStartInterval, }, Loading Loading @@ -214,6 +217,7 @@ const ExerciseCreator: FC<ExerciseCreatorProps> = ({ open, setOpen }) => { configOverride, addExercise, name, sandbox, llm, beginWiggling, reset, Loading Loading @@ -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} Loading graphql/graphql-cache.d.ts +1 −1 Original line number Diff line number Diff line Loading @@ -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 ": graphql/graphql-env.d.ts +2 −2 Original line number Diff line number Diff line Loading @@ -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; } }; }; }; Loading graphql/schema.graphql +2 −0 Original line number Diff line number Diff line Loading @@ -271,6 +271,7 @@ input CreateExerciseInput { llm: Boolean = false name: String = "" onDemand: Boolean = false sandbox: Boolean = false teamCount: Int! } Loading @@ -286,6 +287,7 @@ type CreateExerciseType { llm: Boolean name: String onDemand: Boolean sandbox: Boolean teamCount: Int! } Loading Loading
backend @ c27fc035 Compare 7f028b9f to c27fc035 Original line number Diff line number Diff line Subproject commit 7f028b9f77aa760d544e391cc22cdb74fc41590b Subproject commit c27fc03543594163601281b728067593ffa4815d
frontend/src/exercisepanel/ExerciseManager/ExerciseCreator.tsx +29 −0 Original line number Diff line number Diff line Loading @@ -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>>() Loading @@ -84,6 +85,7 @@ const ExerciseCreator: FC<ExerciseCreatorProps> = ({ open, setOpen }) => { setName('') setOnDemand(false) setInterval(undefined) setSandbox(false) setLlm(false) setConfigOverride(undefined) Loading Loading @@ -187,6 +189,7 @@ const ExerciseCreator: FC<ExerciseCreatorProps> = ({ open, setOpen }) => { name, configOverride, onDemand, sandbox, llm, allowedStartInterval, }, Loading Loading @@ -214,6 +217,7 @@ const ExerciseCreator: FC<ExerciseCreatorProps> = ({ open, setOpen }) => { configOverride, addExercise, name, sandbox, llm, beginWiggling, reset, Loading Loading @@ -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} Loading
graphql/graphql-cache.d.ts +1 −1 Original line number Diff line number Diff line Loading @@ -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 ":
graphql/graphql-env.d.ts +2 −2 Original line number Diff line number Diff line Loading @@ -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; } }; }; }; Loading
graphql/schema.graphql +2 −0 Original line number Diff line number Diff line Loading @@ -271,6 +271,7 @@ input CreateExerciseInput { llm: Boolean = false name: String = "" onDemand: Boolean = false sandbox: Boolean = false teamCount: Int! } Loading @@ -286,6 +287,7 @@ type CreateExerciseType { llm: Boolean name: String onDemand: Boolean sandbox: Boolean teamCount: Int! } Loading