Skip to content

Commit

Permalink
Add logic for accepting and deleting suggestions
Browse files Browse the repository at this point in the history
  • Loading branch information
terlan98 committed Dec 17, 2023
1 parent c20864c commit e2d36d7
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 7 deletions.
7 changes: 6 additions & 1 deletion Themis/Models/Feedback/AssessmentFeedback.swift
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,17 @@ public struct AssessmentFeedback: Identifiable {
init(
baseFeedback: Feedback = Feedback(),
scope: ThemisFeedbackScope,
detail: (any FeedbackDetail)? = nil
detail: (any FeedbackDetail)? = nil,
textPrefix: String? = nil
) {
self.baseFeedback = baseFeedback
self.scope = scope
self.detail = detail
self.detail?.buildArtemisFeedback(feedback: &self.baseFeedback)

if let textPrefix {
self.baseFeedback.text = textPrefix + (self.baseFeedback.text ?? "")
}
}

mutating func setBaseFeedback(to feedback: Feedback) {
Expand Down
14 changes: 14 additions & 0 deletions Themis/ViewModels/Assessment/Programming/CodeEditorViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -241,12 +241,18 @@ extension CodeEditorViewModel {
guard let range = getLineRange(text: code, fromLine: lineStart, toLine: lineEnd) else {
return
}
deleteHighlight(for: feedbackSuggestion)
appendHighlight(feedbackId: feedbackId, range: range, path: file.path)
}

undoManager.endUndoGrouping() // undo group with addFeedback in AssessmentResult
}

@MainActor
func deleteHighlight(for feedbackSuggestion: ProgrammingFeedbackSuggestion) {
feedbackSuggestions.removeAll(where: { $0.id == feedbackSuggestion.id })
}

@MainActor
func addInlineHighlight(feedbackId: UUID) {
if let file = selectedFile, let selectedSection = selectedSection {
Expand Down Expand Up @@ -414,6 +420,14 @@ extension CodeEditorViewModel: FeedbackDelegate {
addFeedbackSuggestionInlineHighlight(feedbackSuggestion: suggestion, feedbackId: feedback.id)
}

@MainActor
func onFeedbackSuggestionDiscard(_ suggestion: any FeedbackSuggestion) {
guard let suggestion = suggestion as? ProgrammingFeedbackSuggestion else {
return
}
deleteHighlight(for: suggestion)
}

@MainActor
func onFeedbackCellTap(_ feedback: AssessmentFeedback, participationId: Int?, templateParticipationId: Int?) {
guard let file = (feedback.detail as? ProgrammingFeedbackDetail)?.file,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -178,21 +178,45 @@ struct EditFeedbackViewBase: View {
}

private func createFeedback() {
// We need to add a prefix for programming feedback suggestions
var baseFeedbackTextPrefix: String? = nil

if let feedbackSuggestion = feedbackSuggestion as? ProgrammingFeedbackSuggestion {
if detailText == feedbackSuggestion.description && score == feedbackSuggestion.credits {
baseFeedbackTextPrefix = Feedback.feedbackSuggestionAcceptedIdentifier
} else {
baseFeedbackTextPrefix = Feedback.feedbackSuggestionAdaptedIdentifier
}
}

if scope == .inline {
let feedback = AssessmentFeedback(baseFeedback: Feedback(detailText: detailText,
credits: score,
type: .MANUAL,
gradingInstruction: linkedGradingInstruction),
scope: scope,
detail: incompleteFeedback?.detail)
detail: incompleteFeedback?.detail,
textPrefix: baseFeedbackTextPrefix)

assessmentResult.addFeedback(feedback: feedback)
feedbackDelegate?.onFeedbackCreation(feedback)

if let feedbackSuggestion {
feedbackDelegate?.onFeedbackSuggestionSelection(feedbackSuggestion, feedback)
} else {
feedbackDelegate?.onFeedbackCreation(feedback)
}
} else {
assessmentResult.addFeedback(feedback: AssessmentFeedback(baseFeedback: Feedback(detailText: detailText,
credits: score,
type: .MANUAL_UNREFERENCED),
scope: scope))
let feedback = AssessmentFeedback(baseFeedback: Feedback(detailText: detailText,
credits: score,
type: .MANUAL_UNREFERENCED),
scope: scope,
textPrefix: baseFeedbackTextPrefix)

assessmentResult.addFeedback(feedback: feedback)

if let feedbackSuggestion {
feedbackDelegate?.onFeedbackSuggestionSelection(feedbackSuggestion, feedback)
}
}
}

Expand Down

0 comments on commit e2d36d7

Please sign in to comment.