import Add from "@mui/icons-material/Add";
import EditOutlined from "@mui/icons-material/EditOutlined";
import { AdminSwitch } from "@/shared/ui/AdminSwitch.jsx";
import TextField from "@mui/material/TextField";
import Tooltip from "@mui/material/Tooltip";
import { formatMillis } from "@/shared/utils/time.js";
import { DataState } from "@/shared/ui/DataState.jsx";
import { IconButton } from "@/shared/ui/IconButton.jsx";
import { MultiValueAutocomplete } from "@/shared/ui/MultiValueAutocomplete.jsx";
import { regionStatusFilters } from "@/features/host-org/constants.js";
import { HostOrgActionModal } from "@/features/host-org/components/HostOrgActionModal.jsx";
import { HostOrgTable } from "@/features/host-org/components/HostOrgTable.jsx";
import { useHostRegionsPage } from "@/features/host-org/hooks/useHostRegionsPage.js";
import { createOptionsColumnFilter, createTextColumnFilter } from "@/shared/ui/tableFilters.js";
import styles from "@/features/host-org/host-org.module.css";
const baseRegionColumns = [
{ key: "regionId", label: "区域 ID", width: "minmax(90px, 0.6fr)" },
{ key: "regionCode", label: "区域编码", width: "minmax(110px, 0.8fr)" },
{ key: "name", label: "区域名称", width: "minmax(150px, 1fr)" },
{
key: "countries",
label: "国家码",
render: (item) => ,
width: "minmax(220px, 1.5fr)",
},
{ key: "sortOrder", label: "排序", width: "minmax(80px, 0.5fr)" },
{
key: "updatedAtMs",
label: "更新时间",
render: (item) => formatMillis(item.updatedAtMs),
width: "minmax(170px, 1fr)",
},
];
export function HostRegionsPage() {
const page = useHostRegionsPage();
const createDisabled = !page.abilities.canCreate;
const updateDisabled = !page.abilities.canUpdate;
const items = page.data.items || [];
const total = page.data.total || 0;
const regionColumns = [
...baseRegionColumns.slice(0, 3),
{
key: "status",
label: "状态",
render: (item) => ,
filter: createOptionsColumnFilter({
options: regionStatusFilters,
placeholder: "搜索状态",
value: page.status,
onChange: page.changeStatus,
}),
width: "minmax(90px, 0.6fr)",
},
...baseRegionColumns.slice(3),
].map((column) =>
column.key === "regionCode"
? {
...column,
filter: createTextColumnFilter({
placeholder: "搜索区域、国家码",
value: page.query,
onChange: page.changeQuery,
}),
}
: column,
);
const columns = page.abilities.canUpdate
? [
...regionColumns,
{
key: "actions",
label: "操作",
render: (item) => ,
width: "minmax(80px, 0.5fr)",
},
]
: regionColumns;
return (
{page.abilities.canCreate ? (
) : null}
item.regionId}
pagination={{ page: 1, pageSize: Math.max(items.length, 1), total }}
/>
page.setRegionForm({ ...page.regionForm, regionCode: event.target.value })}
/>
page.setRegionForm({ ...page.regionForm, name: event.target.value })}
/>
page.setRegionForm({ ...page.regionForm, sortOrder: event.target.value })}
/>
page.setRegionForm({ ...page.regionForm, countries })}
/>
);
}
function RegionActions({ item, page }) {
if (item.regionCode === "GLOBAL") {
return "-";
}
return (
{page.abilities.canUpdate ? (
page.openEditRegion(item)}>
) : null}
);
}
function RegionStatusSwitch({ item, page }) {
const checked = item.status === "active";
const isGlobal = item.regionCode === "GLOBAL";
return (
page.toggleRegion(item, event.target.checked)}
/>
);
}
function CountryCodeSelect({ disabled, label, labels, loading, onChange, options, value }) {
const selected = value || [];
const mergedOptions = [...new Set([...options, ...selected])].sort();
return (
);
}
function CountryCodes({ countries = [] }) {
const items = Array.isArray(countries) ? countries : [];
if (!items.length) {
return "-";
}
return (
{items.map((country) => (
{country}
))}
);
}
const primaryActionSx = {
borderColor: "var(--primary)",
backgroundColor: "var(--primary)",
color: "var(--active-contrast)",
"&:hover": {
borderColor: "var(--primary-strong)",
backgroundColor: "var(--primary-strong)",
color: "var(--active-contrast)",
},
};