feature: phase1 - org-type navigation, Cases permissions, staff filtering, and route guards.

This commit is contained in:
2026-06-28 14:59:06 +03:30
parent 64c7e5a257
commit dc965b2528
22 changed files with 376 additions and 76 deletions

View File

@@ -9,13 +9,13 @@ import {
canViewStaff,
} from '@/components/shared/permissions';
import {
STAFF_FEATURE_GROUPS,
permissionNamesFromFeatureState,
emptyFeaturePermissionState,
featureStateFromPermissionNames,
featureStateHasTreatmentEdit,
resolveStaffFeatureLabel,
formatAccessSummary,
staffFeatureGroupsForOrgType,
type FeaturePermState,
} from '@/components/staff/staff-permission-form';
import {
@@ -112,7 +112,7 @@ function PermissionGrid({
return (
<div className="grid gap-3 sm:grid-cols-2">
{STAFF_FEATURE_GROUPS.map((g) => {
{staffFeatureGroupsForOrgType(organizationType).map((g) => {
const cell = state[g.edit] ?? { read: false, edit: false };
return (
<div
@@ -199,10 +199,14 @@ export default function StaffPage() {
const canEdit = useMemo(() => canEditStaff(currentOrganization), [currentOrganization]);
const inviteHasTreatmentEdit = useMemo(
() => featureStateHasTreatmentEdit(invitePerms),
[invitePerms],
() =>
currentOrganization?.type === 'CLINIC' && featureStateHasTreatmentEdit(invitePerms),
[currentOrganization?.type, invitePerms],
);
const editHasTreatmentEdit = useMemo(
() => currentOrganization?.type === 'CLINIC' && featureStateHasTreatmentEdit(editPerms),
[currentOrganization?.type, editPerms],
);
const editHasTreatmentEdit = useMemo(() => featureStateHasTreatmentEdit(editPerms), [editPerms]);
const hasActivePlan = Boolean(currentOrganization?.plan);
const atSeatLimit = useMemo(() => {
if (!seats || seats.unlimited) return false;
@@ -309,7 +313,7 @@ export default function StaffPage() {
setInviteStep(1);
setInviteEmail('');
setInviteName('');
setInvitePerms(emptyFeaturePermissionState());
setInvitePerms(emptyFeaturePermissionState(currentOrganization?.type));
const defaults = createDefaultWorkingHoursState();
setInviteWorkingHoursDays(defaults.days);
setInviteAutoRepeatWeekly(defaults.autoRepeatWeekly);
@@ -393,7 +397,7 @@ export default function StaffPage() {
setEditing(m);
setEditStep(1);
setEditName(m.name);
setEditPerms(featureStateFromPermissionNames(m.permissions ?? []));
setEditPerms(featureStateFromPermissionNames(m.permissions ?? [], currentOrganization?.type));
setEditHoursValidationError(null);
const defaults = createDefaultWorkingHoursState();
setEditWorkingHoursDays(defaults.days);