Files
Wollmilchsau/Wollmilchsau/Store/QuestionnaireStore/QuestionnaireReducers.cs
T
2026-08-23 18:48:39 +02:00

88 lines
3.0 KiB
C#

using System.Collections.Immutable;
using Fluxor;
namespace Wollmilchsau.Store.QuestionnaireStore;
public static class QuestionnaireReducers
{
[ReducerMethod]
public static QuestionnaireState ReduceLoadQuestionnaire(QuestionnaireState state, LoadQuestionnaire action) => state with
{
StudentId = action.StudentId,
Classroom = action.Classroom,
Distributions = QuestionnaireState.CreateEmptyDistributions(),
IsLoading = true,
ParticipationAllowed = QuestionnaireSubmissionPolicy.IsClassroomAllowed(action.Classroom),
SubmissionClosed = false,
ShowValidationErrors = false,
ValidationError = null,
Saved = false
};
[ReducerMethod]
public static QuestionnaireState ReduceQuestionnaireLoaded(QuestionnaireState state, QuestionnaireLoaded action) => state with
{
Distributions = action.Distributions,
IsLoading = false,
SubmissionClosed = action.SubmissionClosed
};
[ReducerMethod]
public static QuestionnaireState ReduceQuestionnaireSubmissionClosed(QuestionnaireState state, QuestionnaireSubmissionClosed action) => state with
{
SubmissionClosed = true,
Saved = false
};
[ReducerMethod]
public static QuestionnaireState ReduceSetSemesterOption(QuestionnaireState state, SetSemesterOption action)
{
if (state.IsLoading || !state.ParticipationAllowed || state.SubmissionClosed)
{
return state;
}
var distributions = state.Distributions.ToArray();
distributions[action.DistributionIndex] = distributions[action.DistributionIndex].SetItem(action.SemesterIndex, action.Option);
var updatedState = state with
{
Distributions = distributions.ToImmutableList(),
Saved = false
};
return updatedState with
{
ValidationError = updatedState.ShowValidationErrors
? QuestionnaireValidation.Validate(updatedState.Distributions)
: null
};
}
[ReducerMethod]
public static QuestionnaireState ReduceSaveQuestionnaire(QuestionnaireState state, SaveQuestionnaire action) => state with
{
ShowValidationErrors = true,
ValidationError = !state.ParticipationAllowed
? QuestionnaireSubmissionPolicy.ClassroomNotAllowedMessage
: state.SubmissionClosed
? QuestionnaireSubmissionPolicy.ClosedMessage
: QuestionnaireValidation.Validate(state.Distributions),
Saved = false
};
[ReducerMethod]
public static QuestionnaireState ReduceQuestionnaireSaveSucceeded(QuestionnaireState state, QuestionnaireSaveSucceeded action) => state with
{
Saved = true,
ValidationError = null
};
[ReducerMethod]
public static QuestionnaireState ReduceQuestionnaireSaveRejected(QuestionnaireState state, QuestionnaireSaveRejected action) => state with
{
ShowValidationErrors = true,
ValidationError = action.Error,
Saved = false
};
}