Skip to content

Shift planning tool#143

Merged
Scroll-Bar merged 34 commits into
mainfrom
dev
Apr 30, 2026
Merged

Shift planning tool#143
Scroll-Bar merged 34 commits into
mainfrom
dev

Conversation

@A-Guldborg
Copy link
Copy Markdown
Contributor

No description provided.

A-Guldborg and others added 23 commits April 15, 2026 19:13
Satellite shifts:
- Shifts can now have a linked satellite shift with its own location; only primary slots appear in the availability survey
- Admin shift planning tab renders satellite shifts inline below their primary, with add/remove controls
- Generation resolves satellite availability transparently through the primary shift's survey response

Anchor seminar days:
- Period creation/edit lets shift managers declare candidate anchor seminar dates
- New anchors (wantsAnchor=true, no anchor role yet) select which seminar dates they can attend; the mix/only-anchor radio is hidden for them since they always receive exactly one opening + one closing shift
- Responses overview shows a per-date vote table (can attend / cannot attend) with the most-voted day highlighted
- Responses individual view shows the user's seminar day selections read-only
- Generation excludes new anchor phase-2 slots that fall before the most-voted seminar date or belong to mandatory-party events

Role-aware participation survey:
- Passive-role members see targeted options (become active / apply to stay passive / become legacy / leave) with a §29.1 constitutional warning when staying passive
- Legacy-role members see only two options (stay legacy / leave)
- All others see renamed options (Active member / Passive member / Legacy member / Implicit member)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Fix stale-closure bug in ExistingUsersTab role multi-select: save was triggered in onOpenChange which read outdated state; moved save into onChange using the committed value argument so removals persist correctly
- Grant anchor roles to new anchors in a separate committed write before the bulkWriter that creates engagements, ensuring roles are in place when downstream logic reads them; remove the now-unnecessary informational alert from the availability survey

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
ShiftPlanningResponsesPage (810 → 400 lines):
- Extract useResponseEditor hook: encapsulates all editor state, load effect, and submit handler for the individual-response editor panel

ShiftAvailabilityPage (779 → 415 lines):
- Extract SemesterParticipationCard: role-aware participation radio groups with passive §29.1 alert
- Extract AnchorPreferenceCard: anchor yes/no toggle, mix/only radio, and seminar day checkboxes
- Extract EventAvailabilityGrid: event can/cannot cards with per-shift checkboxes
- Deduplicate the submit-disabled condition into a single isSubmitDisabled variable

ShiftManagement (769 → 490 lines):
- Extract usePeriodForm hook: period create/edit form state, validation, and API calls

ShiftPlanningTab:
- Remove explanatory comment that restated what the code already expresses

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- createShiftPlanningPeriod: write anchorSeminarDays to Firestore (field was missing from addDoc call)
- useResponseEditor: pass anchorSeminarDays through admin submit so member selections aren't overwritten with []
- ShiftPlanningTab: correct Popconfirm description — generation adds to unassigned slots, existing engagements are kept

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ount

- createShiftPlanningPeriod: persist anchorSeminarDays to Firestore (was silently dropped from addDoc)
- useResponseEditor: pass anchorSeminarDays through admin submit so member selections aren't overwritten with []
- ShiftPlanningTab: correct Popconfirm description — generation fills unassigned slots, existing engagements are kept
- Remove replacedEngagementCount: was always hardcoded to 0 and never read by any caller

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…s, clean up result type

- Remove the early-exit HttpsError for !allSubmitted && !afterDeadline; generation now
  always proceeds. Non-submitters are treated as participationStatus 'leave' so they
  receive no shift assignments.
- Warn shift manager in the Popconfirm when N members have not submitted, making clear
  they will be treated as leaving the bar.
- Convert unmetMandatory entries into structured 'mandatory_assignment_not_met' warnings
  so they appear in the generation warning list instead of being silently returned and ignored.
- Remove dead result fields: afterDeadline, allSubmitted, missingSubmissionUserIds,
  unmetMandatoryCount, unmetMandatory. Update warning code union on frontend to match.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…chor grants

Instead of only granting Role.ANCHOR to new anchors, generation now computes a unified
role update per user: strips passive/legacy, adds anchor if applicable, then adds back
passive or legacy based on participationStatus. All applied in one write per user before
the engagement bulkWriter, eliminating the previous two-step anchor-only grant.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Bumps [mailgun.js](https://github.com/mailgun/mailgun.js) from 12.9.0 to 13.0.0.
- [Release notes](https://github.com/mailgun/mailgun.js/releases)
- [Changelog](https://github.com/mailgun/mailgun.js/blob/master/CHANGELOG.md)
- [Commits](mailgun/mailgun.js@v12.9.0...v13.0.0)

---
updated-dependencies:
- dependency-name: mailgun.js
  dependency-version: 13.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
…nctions/dev/mailgun.js-13.0.0

Bump mailgun.js from 12.9.0 to 13.0.0 in /functions
@Scroll-Bar Scroll-Bar merged commit 45999df into main Apr 30, 2026
1 check passed
@Scroll-Bar Scroll-Bar deleted the dev branch April 30, 2026 14:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants