refactor(webui): adopt semantic workspace actions
This commit is contained in:
@@ -1,7 +1,6 @@
|
|||||||
import { Search } from "lucide-react";
|
import { Search } from "lucide-react";
|
||||||
import { useEffect, useMemo, useState, type FormEvent } from "react";
|
import { useEffect, useMemo, useState, type FormEvent } from "react";
|
||||||
import { ActionToolbar,
|
import { Button,
|
||||||
Button,
|
|
||||||
DocumentationHelpLink,
|
DocumentationHelpLink,
|
||||||
DismissibleAlert,
|
DismissibleAlert,
|
||||||
FilterBar,
|
FilterBar,
|
||||||
@@ -14,6 +13,7 @@ import { ActionToolbar,
|
|||||||
StatusBadge,
|
StatusBadge,
|
||||||
i18nMessage,
|
i18nMessage,
|
||||||
useGuardedNavigate,
|
useGuardedNavigate,
|
||||||
|
WorkspaceActionBar,
|
||||||
WorkspaceFrame,
|
WorkspaceFrame,
|
||||||
type PlatformRouteContext
|
type PlatformRouteContext
|
||||||
} from "@govoplan/core-webui";
|
} from "@govoplan/core-webui";
|
||||||
@@ -36,6 +36,7 @@ export default function CasesPage({ settings }: PlatformRouteContext) {
|
|||||||
const [total, setTotal] = useState(0);
|
const [total, setTotal] = useState(0);
|
||||||
const [loading, setLoading] = useState(true);
|
const [loading, setLoading] = useState(true);
|
||||||
const [error, setError] = useState("");
|
const [error, setError] = useState("");
|
||||||
|
const [reloadKey, setReloadKey] = useState(0);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const controller = new AbortController();
|
const controller = new AbortController();
|
||||||
@@ -61,7 +62,7 @@ export default function CasesPage({ settings }: PlatformRouteContext) {
|
|||||||
}).
|
}).
|
||||||
finally(() => setLoading(false));
|
finally(() => setLoading(false));
|
||||||
return () => controller.abort();
|
return () => controller.abort();
|
||||||
}, [settings, status, submittedQuery]);
|
}, [reloadKey, settings, status, submittedQuery]);
|
||||||
|
|
||||||
const statusLabels = useMemo(
|
const statusLabels = useMemo(
|
||||||
() => new Map(catalog.statuses.map((item) => [item.status_key, item])),
|
() => new Map(catalog.statuses.map((item) => [item.status_key, item])),
|
||||||
@@ -80,7 +81,13 @@ export default function CasesPage({ settings }: PlatformRouteContext) {
|
|||||||
return (
|
return (
|
||||||
<main className="cases-page">
|
<main className="cases-page">
|
||||||
<WorkspaceFrame className="cases-shell" label="Cases" interfaceId="cases.catalogue" helpContextId="cases.page.catalogue" helpModuleId="cases">
|
<WorkspaceFrame className="cases-shell" label="Cases" interfaceId="cases.catalogue" helpContextId="cases.page.catalogue" helpModuleId="cases">
|
||||||
<ActionToolbar surface="panel-header" className="cases-toolbar">
|
<WorkspaceActionBar
|
||||||
|
scope="collection-pane"
|
||||||
|
variant="collection"
|
||||||
|
refreshable
|
||||||
|
reloadAction={{ onReload: () => setReloadKey((value) => value + 1), loading }}
|
||||||
|
className="cases-toolbar"
|
||||||
|
contextActions={<>
|
||||||
<FilterBar as="form" surface="control" wrap="never" width="default" className="cases-search" onSubmit={submit}>
|
<FilterBar as="form" surface="control" wrap="never" width="default" className="cases-search" onSubmit={submit}>
|
||||||
<Search size={17} aria-hidden="true" />
|
<Search size={17} aria-hidden="true" />
|
||||||
<input
|
<input
|
||||||
@@ -107,8 +114,9 @@ export default function CasesPage({ settings }: PlatformRouteContext) {
|
|||||||
</select>
|
</select>
|
||||||
</label>
|
</label>
|
||||||
<span className="cases-count">{i18nMessage("i18n:govoplan-cases.case_count", { value0: total })}</span>
|
<span className="cases-count">{i18nMessage("i18n:govoplan-cases.case_count", { value0: total })}</span>
|
||||||
<DocumentationHelpLink reference={CASES_DOCUMENTATION} />
|
</>}
|
||||||
</ActionToolbar>
|
helpAction={<DocumentationHelpLink reference={CASES_DOCUMENTATION} />}
|
||||||
|
/>
|
||||||
<PageScrollViewport className="cases-list-viewport">
|
<PageScrollViewport className="cases-list-viewport">
|
||||||
{error &&
|
{error &&
|
||||||
<DismissibleAlert tone="error" onDismiss={() => setError("")}>
|
<DismissibleAlert tone="error" onDismiss={() => setError("")}>
|
||||||
|
|||||||
Reference in New Issue
Block a user