Skip to content

Commit fcbb578

Browse files
committed
Added persistence
1 parent 6f29126 commit fcbb578

7 files changed

Lines changed: 87 additions & 7 deletions

File tree

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Generated by Django 5.0.2 on 2025-05-13 23:27
2+
3+
from django.conf import settings
4+
from django.db import migrations, models
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
("plan", "0015_schedule_breaks"),
11+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
12+
]
13+
14+
operations = [
15+
migrations.AddConstraint(
16+
model_name="break",
17+
constraint=models.UniqueConstraint(
18+
condition=models.Q(("name__isnull", False), models.Q(("name", ""), _negated=True)),
19+
fields=("name", "person"),
20+
name="unique_break_name_per_person",
21+
),
22+
),
23+
]
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Generated by Django 5.0.2 on 2025-05-14 00:27
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
("plan", "0016_break_unique_break_name_per_person"),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name="break",
15+
name="checked",
16+
field=models.BooleanField(
17+
default=True,
18+
help_text="\nWhether or not the break has been checked by the user. This is used to\ndetermine if the break should be displayed in the user's schedule.\n",
19+
),
20+
),
21+
]

backend/plan/models.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,16 @@ class Break(models.Model):
4242
),
4343
)
4444

45+
checked = models.BooleanField(
46+
default=True,
47+
help_text=dedent(
48+
"""
49+
Whether or not the break has been checked by the user. This is used to
50+
determine if the break should be displayed in the user's schedule.
51+
"""
52+
),
53+
)
54+
4555
meeting_times = models.TextField(
4656
blank=True,
4757
help_text=dedent(

backend/plan/views.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -501,6 +501,8 @@ def get_breaks(data):
501501
if break_id:
502502
break_candidate = Break.objects.filter(id=break_id).first()
503503
if break_candidate:
504+
break_candidate.checked = b.get("checked", False)
505+
break_candidate.save()
504506
breaks.append(break_candidate)
505507
return breaks
506508

@@ -701,7 +703,8 @@ def update(self, request):
701703
{"detail": "Error setting meetings: " + str(e)}, status=status.HTTP_400_BAD_REQUEST
702704
)
703705

704-
print("current_break", current_break)
706+
checked = request.data.get("checked")
707+
current_break.checked = checked if checked is not None else current_break.checked
705708

706709
try:
707710
current_break.save()
@@ -724,7 +727,6 @@ def create(self, request, *args, **kwargs):
724727
{"detail": "Break name is required."}, status=status.HTTP_400_BAD_REQUEST
725728
)
726729
location_string = request.data.get("location_string")
727-
print(request.data)
728730
try:
729731
if break_id:
730732
new_break = self.get_queryset().create(
@@ -762,7 +764,6 @@ def create(self, request, *args, **kwargs):
762764
}
763765
for m in meetings
764766
]
765-
print(meetings_with_codes)
766767
try:
767768
set_meetings(new_break, meetings_with_codes)
768769
except Exception as e:

frontend/plan/actions/index.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -703,7 +703,9 @@ export const updateScheduleOnBackend = (name, schedule) => (dispatch) => {
703703
...schedule,
704704
name,
705705
sections: schedule.sections,
706-
breaks: (schedule.breaks ?? []).map((breakItem) => breakItem.break),
706+
breaks: (schedule.breaks ?? []).map((breakItem) => {
707+
return { ...breakItem.break, checked: breakItem.checked };
708+
}),
707709
};
708710
doAPIRequest(`/plan/schedules/${schedule.id}/`, {
709711
method: "PUT",

frontend/plan/components/schedule/ScheduleDisplay.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ const ScheduleDisplay = ({
145145
breaks = friendshipState.activeFriendSchedule?.breaks
146146
|| schedData.breaks || [];
147147

148-
const notEmpty = sections.length > 0;
148+
const notEmpty = sections.length > 0 || breaks.length > 0;
149149

150150
let startHour = 10.5;
151151
let endHour = 16;

frontend/plan/reducers/schedule.js

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ const handleUpdateSchedulesOnFrontend = (state, schedulesFromBackend) => {
195195
};
196196
return {
197197
break: newBreak,
198-
checked: true,
198+
checked: newBreak.checked,
199199
};
200200
}),
201201
id: scheduleFromBackend.id,
@@ -474,6 +474,28 @@ export const schedule = (state = initialState, action) => {
474474
};
475475

476476
case ADD_BREAK_ITEM:
477+
// Check name is not already in use
478+
if (
479+
state.schedules[state.scheduleSelected].breaks.find(
480+
(br) => br.break.name === action.name
481+
)
482+
) {
483+
showToast("Break name already in use!", true);
484+
return { ...state };
485+
}
486+
487+
// Check that some date is selected
488+
if (action.days.length === 0) {
489+
showToast("Please select a day!", true);
490+
return { ...state };
491+
}
492+
493+
// Check that the name box is not empty
494+
if (action.name === "") {
495+
showToast("Please enter a name!", true);
496+
return { ...state };
497+
}
498+
477499
if (!state.readOnly) {
478500
const newBreakItem = {
479501
name: action.name,
@@ -525,7 +547,7 @@ export const schedule = (state = initialState, action) => {
525547
return breakSection;
526548
}
527549
);
528-
return {
550+
const temp = {
529551
...state,
530552
schedules: {
531553
...state.schedules,
@@ -537,6 +559,7 @@ export const schedule = (state = initialState, action) => {
537559
},
538560
},
539561
};
562+
return temp;
540563
}
541564
showToast("Cannot remove breaks from a friend's schedule!", true);
542565
return { ...state };

0 commit comments

Comments
 (0)