refactor(frontend): hide inactive department members
This commit is contained in:
parent
3b855e2ef1
commit
54b7fc498e
@ -432,7 +432,6 @@ export default function DepartmentDetailPage() {
|
||||
const h = useDepartmentPage(departmentId);
|
||||
|
||||
const activeMembersCount = h.members.filter((member) => member.is_active).length;
|
||||
const inactiveMembersCount = h.members.length - activeMembersCount;
|
||||
const roleOptions = h.roles.map((role) => ({ id: role.id, name: role.name }));
|
||||
const isManagementMode =
|
||||
h.userPerms.can_manage ||
|
||||
@ -558,9 +557,6 @@ export default function DepartmentDetailPage() {
|
||||
<p className="app-card-caption">О составе</p>
|
||||
<div className="mt-3 flex flex-wrap gap-2">
|
||||
<MetaChip>{activeMembersCount} активных</MetaChip>
|
||||
{inactiveMembersCount ? (
|
||||
<MetaChip>{inactiveMembersCount} неактивных</MetaChip>
|
||||
) : null}
|
||||
{isManagementMode ? (
|
||||
<MetaChip tone="warning">Режим управления</MetaChip>
|
||||
) : (
|
||||
@ -612,17 +608,6 @@ export default function DepartmentDetailPage() {
|
||||
className="app-input w-full rounded-lg py-2.5 pl-9 pr-3 text-sm"
|
||||
/>
|
||||
</div>
|
||||
<label className="app-text-muted inline-flex items-center gap-2 rounded-lg px-3 py-2 text-sm">
|
||||
<input
|
||||
type="checkbox"
|
||||
checked={h.showInactiveMembers}
|
||||
onChange={(event) =>
|
||||
h.setShowInactiveMembers(event.target.checked)
|
||||
}
|
||||
className="rounded border-[var(--border-strong)]"
|
||||
/>
|
||||
Показывать неактивных
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div className="space-y-3">
|
||||
@ -646,15 +631,15 @@ export default function DepartmentDetailPage() {
|
||||
) : (
|
||||
<div className="app-surface-muted rounded-xl p-8 text-center">
|
||||
<Users size={24} className="app-text-muted mx-auto mb-3" />
|
||||
<p className="text-sm font-medium text-[var(--foreground)]">
|
||||
Участники не найдены
|
||||
</p>
|
||||
<p className="app-text-muted mt-2 text-sm">
|
||||
Измени поисковый запрос или включи показ неактивных связей.
|
||||
</p>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
<p className="text-sm font-medium text-[var(--foreground)]">
|
||||
Участники не найдены
|
||||
</p>
|
||||
<p className="app-text-muted mt-2 text-sm">
|
||||
Измени поисковый запрос.
|
||||
</p>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="app-surface rounded-2xl p-5">
|
||||
|
||||
@ -51,7 +51,6 @@ export type DepartmentPageController = {
|
||||
selectableEmployees: Array<{ id: number; name: string }>;
|
||||
selectedHeadId: number | null;
|
||||
selectedMemberId: number | null;
|
||||
showInactiveMembers: boolean;
|
||||
userPerms: DepartmentUserPermissions;
|
||||
closeAddMember: () => void;
|
||||
closeDepartmentEditor: () => void;
|
||||
@ -67,7 +66,6 @@ export type DepartmentPageController = {
|
||||
setRoleDraft: (next: DepartmentRoleDraft | ((current: DepartmentRoleDraft) => DepartmentRoleDraft)) => void;
|
||||
setSelectedHeadId: (id: number | null) => void;
|
||||
setSelectedMemberId: (id: number | null) => void;
|
||||
setShowInactiveMembers: (value: boolean) => void;
|
||||
submitAddMember: () => Promise<void>;
|
||||
submitHeadChange: () => Promise<void>;
|
||||
submitQuickHeadChange: (headId: number) => Promise<void>;
|
||||
@ -132,7 +130,6 @@ export function useDepartmentPage(departmentId: number): DepartmentPageControlle
|
||||
const [error, setError] = useState<string | null>(null);
|
||||
const [pendingKey, setPendingKey] = useState<SavingKey | null>(null);
|
||||
const [membersQuery, setMembersQuery] = useState("");
|
||||
const [showInactiveMembers, setShowInactiveMembers] = useState(false);
|
||||
|
||||
const [editDepartmentOpen, setEditDepartmentOpen] = useState(false);
|
||||
const [departmentDraft, setDepartmentDraft] = useState({ name: "", description: "" });
|
||||
@ -234,7 +231,7 @@ export function useDepartmentPage(departmentId: number): DepartmentPageControlle
|
||||
const q = membersQuery.trim().toLowerCase();
|
||||
|
||||
return members.filter((item) => {
|
||||
if (!showInactiveMembers && !item.is_active) {
|
||||
if (!item.is_active) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -256,7 +253,7 @@ export function useDepartmentPage(departmentId: number): DepartmentPageControlle
|
||||
roleName.includes(q)
|
||||
);
|
||||
});
|
||||
}, [members, membersQuery, showInactiveMembers]);
|
||||
}, [members, membersQuery]);
|
||||
|
||||
const selectableEmployees = useMemo(() => {
|
||||
const activeIds = new Set(
|
||||
@ -542,7 +539,6 @@ export function useDepartmentPage(departmentId: number): DepartmentPageControlle
|
||||
selectableEmployees,
|
||||
selectedHeadId,
|
||||
selectedMemberId,
|
||||
showInactiveMembers,
|
||||
userPerms: userPerms || EMPTY_USER_PERMS,
|
||||
closeAddMember,
|
||||
closeDepartmentEditor,
|
||||
@ -558,7 +554,6 @@ export function useDepartmentPage(departmentId: number): DepartmentPageControlle
|
||||
setRoleDraft,
|
||||
setSelectedHeadId,
|
||||
setSelectedMemberId,
|
||||
setShowInactiveMembers,
|
||||
submitAddMember,
|
||||
submitHeadChange,
|
||||
submitQuickHeadChange,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user