fix(frontend): stabilize department empty state layout
This commit is contained in:
parent
da44727280
commit
7a4a12673b
@ -8,6 +8,7 @@
|
||||
"build": "next build",
|
||||
"start": "next start",
|
||||
"lint": "eslint",
|
||||
"test": "node --experimental-strip-types --test src/**/*.test.ts",
|
||||
"postinstall": "cp node_modules/pdfjs-dist/build/pdf.worker.min.mjs public/pdf.worker.min.mjs || true"
|
||||
},
|
||||
"dependencies": {
|
||||
|
||||
@ -18,6 +18,10 @@ import {
|
||||
} from "lucide-react";
|
||||
|
||||
import { AppShell } from "@/components/AppShell";
|
||||
import {
|
||||
DEPARTMENT_MEMBERS_EMPTY_STATE_CLASSNAME,
|
||||
getDepartmentMembersListClassName,
|
||||
} from "@/components/departments/layout";
|
||||
import { RequestAvatar } from "@/components/requests/RequestAvatar";
|
||||
import { SearchableSelectSingle } from "@/components/shared/SearchableSelect";
|
||||
import { Modal } from "@/components/ui/Modal";
|
||||
@ -367,6 +371,20 @@ function DepartmentEditorModal({
|
||||
);
|
||||
}
|
||||
|
||||
function DepartmentMembersEmptyState() {
|
||||
return (
|
||||
<div className={DEPARTMENT_MEMBERS_EMPTY_STATE_CLASSNAME}>
|
||||
<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>
|
||||
);
|
||||
}
|
||||
|
||||
function AddMemberModal({
|
||||
isOpen,
|
||||
items,
|
||||
@ -707,13 +725,7 @@ export default function DepartmentDetailPage() {
|
||||
) : null}
|
||||
</div>
|
||||
|
||||
<div
|
||||
className={
|
||||
isManagementMode
|
||||
? "space-y-3"
|
||||
: "flex flex-wrap items-center gap-2"
|
||||
}
|
||||
>
|
||||
<div className={getDepartmentMembersListClassName(isManagementMode)}>
|
||||
{h.filteredMembers.length ? (
|
||||
h.filteredMembers.map((member) => (
|
||||
<DepartmentMemberRow
|
||||
@ -736,15 +748,7 @@ 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>
|
||||
<DepartmentMembersEmptyState />
|
||||
)}
|
||||
</div>
|
||||
|
||||
|
||||
22
frontend/src/components/departments/layout.test.ts
Normal file
22
frontend/src/components/departments/layout.test.ts
Normal file
@ -0,0 +1,22 @@
|
||||
import test from "node:test";
|
||||
import assert from "node:assert/strict";
|
||||
|
||||
import {
|
||||
DEPARTMENT_MEMBERS_EMPTY_STATE_CLASSNAME,
|
||||
getDepartmentMembersListClassName,
|
||||
} from "./layout.ts";
|
||||
|
||||
test("showcase members layout keeps bubble flow", () => {
|
||||
assert.equal(
|
||||
getDepartmentMembersListClassName(false),
|
||||
"flex flex-wrap items-center gap-2",
|
||||
);
|
||||
});
|
||||
|
||||
test("management members layout keeps stacked editing rows", () => {
|
||||
assert.equal(getDepartmentMembersListClassName(true), "space-y-3");
|
||||
});
|
||||
|
||||
test("department empty state spans full section width", () => {
|
||||
assert.match(DEPARTMENT_MEMBERS_EMPTY_STATE_CLASSNAME, /\bw-full\b/);
|
||||
});
|
||||
8
frontend/src/components/departments/layout.ts
Normal file
8
frontend/src/components/departments/layout.ts
Normal file
@ -0,0 +1,8 @@
|
||||
export function getDepartmentMembersListClassName(isManagementMode: boolean) {
|
||||
return isManagementMode
|
||||
? "space-y-3"
|
||||
: "flex flex-wrap items-center gap-2";
|
||||
}
|
||||
|
||||
export const DEPARTMENT_MEMBERS_EMPTY_STATE_CLASSNAME =
|
||||
"app-surface-muted w-full rounded-xl p-8 text-center";
|
||||
Loading…
x
Reference in New Issue
Block a user