88 lines
3.0 KiB
C#
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
|
|
};
|
|
}
|