This commit is contained in:
@@ -26,7 +26,7 @@ interface Category {
|
||||
}
|
||||
|
||||
export default function ContractCategoriesPage() {
|
||||
const [selectedProjectId, setSelectedProjectId] = useState<number | undefined>(undefined);
|
||||
const [selectedProjectId, setSelectedProjectId] = useState<string | undefined>(undefined);
|
||||
const { data: projects = [], isLoading: isLoadingProjects } = useProjects();
|
||||
|
||||
const columns: ColumnDef<Category>[] = [
|
||||
@@ -59,8 +59,8 @@ export default function ContractCategoriesPage() {
|
||||
<div className="flex items-center gap-4">
|
||||
<span className="text-sm font-medium">Project:</span>
|
||||
<Select
|
||||
value={selectedProjectId?.toString() ?? ''}
|
||||
onValueChange={(v) => setSelectedProjectId(v ? parseInt(v) : undefined)}
|
||||
value={selectedProjectId ?? ''}
|
||||
onValueChange={(v) => setSelectedProjectId(v || undefined)}
|
||||
>
|
||||
<SelectTrigger className="w-[300px]">
|
||||
{isLoadingProjects ? (
|
||||
@@ -160,7 +160,7 @@ class MappingErrorBoundary extends React.Component<
|
||||
}
|
||||
}
|
||||
|
||||
function CategoryMappingSection({ projectId }: { projectId: number }) {
|
||||
function CategoryMappingSection({ projectId }: { projectId: string }) {
|
||||
return (
|
||||
<div className="space-y-4">
|
||||
<h2 className="text-xl font-semibold">Category Mappings (Map Sub-categories to Categories)</h2>
|
||||
@@ -174,7 +174,7 @@ function CategoryMappingSection({ projectId }: { projectId: number }) {
|
||||
);
|
||||
}
|
||||
|
||||
function ManageMappings({ projectId }: { projectId: number }) {
|
||||
function ManageMappings({ projectId }: { projectId: string }) {
|
||||
const queryClient = useQueryClient();
|
||||
const [selectedCat, setSelectedCat] = useState<string>('');
|
||||
const [selectedSubCat, setSelectedSubCat] = useState<string>('');
|
||||
@@ -210,7 +210,7 @@ function ManageMappings({ projectId }: { projectId: number }) {
|
||||
const mappings = Array.isArray(rawMappings) ? rawMappings : [];
|
||||
|
||||
const createMutation = useMutation({
|
||||
mutationFn: (data: { projectId: number; categoryId: number; subCategoryId: number }) =>
|
||||
mutationFn: (data: { projectId: number | string; categoryId: number; subCategoryId: number }) =>
|
||||
drawingMasterDataService.createContractMapping(data),
|
||||
onSuccess: () => {
|
||||
queryClient.invalidateQueries({ queryKey: ['contract-mappings'] });
|
||||
|
||||
@@ -18,7 +18,7 @@ interface SubCategory {
|
||||
}
|
||||
|
||||
export default function ContractSubCategoriesPage() {
|
||||
const [selectedProjectId, setSelectedProjectId] = useState<number | undefined>(undefined);
|
||||
const [selectedProjectId, setSelectedProjectId] = useState<string | undefined>(undefined);
|
||||
const { data: projects = [], isLoading: isLoadingProjects } = useProjects();
|
||||
|
||||
const columns: ColumnDef<SubCategory>[] = [
|
||||
@@ -51,8 +51,8 @@ export default function ContractSubCategoriesPage() {
|
||||
<div className="flex items-center gap-4">
|
||||
<span className="text-sm font-medium">Project:</span>
|
||||
<Select
|
||||
value={selectedProjectId?.toString() ?? ''}
|
||||
onValueChange={(v) => setSelectedProjectId(v ? parseInt(v) : undefined)}
|
||||
value={selectedProjectId ?? ''}
|
||||
onValueChange={(v) => setSelectedProjectId(v || undefined)}
|
||||
>
|
||||
<SelectTrigger className="w-[300px]">
|
||||
{isLoadingProjects ? (
|
||||
|
||||
@@ -24,7 +24,7 @@ interface Volume {
|
||||
}
|
||||
|
||||
export default function ContractVolumesPage() {
|
||||
const [selectedProjectId, setSelectedProjectId] = useState<number | undefined>(undefined);
|
||||
const [selectedProjectId, setSelectedProjectId] = useState<string | undefined>(undefined);
|
||||
const { data: projects = [], isLoading: isLoadingProjects } = useProjects();
|
||||
|
||||
const columns: ColumnDef<Volume>[] = [
|
||||
@@ -63,8 +63,8 @@ export default function ContractVolumesPage() {
|
||||
<div className="flex items-center gap-4">
|
||||
<span className="text-sm font-medium">Project:</span>
|
||||
<Select
|
||||
value={selectedProjectId?.toString() ?? ""}
|
||||
onValueChange={(v) => setSelectedProjectId(v ? parseInt(v) : undefined)}
|
||||
value={selectedProjectId ?? ''}
|
||||
onValueChange={(v) => setSelectedProjectId(v || undefined)}
|
||||
>
|
||||
<SelectTrigger className="w-[300px]">
|
||||
{isLoadingProjects ? (
|
||||
|
||||
@@ -19,7 +19,7 @@ interface MainCategory {
|
||||
}
|
||||
|
||||
export default function ShopMainCategoriesPage() {
|
||||
const [selectedProjectId, setSelectedProjectId] = useState<number | undefined>(undefined);
|
||||
const [selectedProjectId, setSelectedProjectId] = useState<string | undefined>(undefined);
|
||||
const { data: projects = [], isLoading: isLoadingProjects } = useProjects();
|
||||
|
||||
const columns: ColumnDef<MainCategory>[] = [
|
||||
@@ -62,8 +62,8 @@ export default function ShopMainCategoriesPage() {
|
||||
<div className="flex items-center gap-4">
|
||||
<span className="text-sm font-medium">Project:</span>
|
||||
<Select
|
||||
value={selectedProjectId?.toString() ?? ''}
|
||||
onValueChange={(v) => setSelectedProjectId(v ? parseInt(v) : undefined)}
|
||||
value={selectedProjectId ?? ''}
|
||||
onValueChange={(v) => setSelectedProjectId(v || undefined)}
|
||||
>
|
||||
<SelectTrigger className="w-[300px]">
|
||||
{isLoadingProjects ? (
|
||||
|
||||
@@ -19,7 +19,7 @@ interface SubCategory {
|
||||
}
|
||||
|
||||
export default function ShopSubCategoriesPage() {
|
||||
const [selectedProjectId, setSelectedProjectId] = useState<number | undefined>(undefined);
|
||||
const [selectedProjectId, setSelectedProjectId] = useState<string | undefined>(undefined);
|
||||
const { data: projects = [], isLoading: isLoadingProjects } = useProjects();
|
||||
|
||||
console.log('Projects Data:', projects);
|
||||
@@ -64,8 +64,8 @@ export default function ShopSubCategoriesPage() {
|
||||
<div className="flex items-center gap-4">
|
||||
<span className="text-sm font-medium">Project:</span>
|
||||
<Select
|
||||
value={selectedProjectId?.toString() ?? ''}
|
||||
onValueChange={(v) => setSelectedProjectId(v ? parseInt(v) : undefined)}
|
||||
value={selectedProjectId ?? ''}
|
||||
onValueChange={(v) => setSelectedProjectId(v || undefined)}
|
||||
>
|
||||
<SelectTrigger className="w-[300px]">
|
||||
{isLoadingProjects ? (
|
||||
|
||||
@@ -14,7 +14,7 @@ export default function TagsPage() {
|
||||
});
|
||||
|
||||
const projectOptions = [
|
||||
{ label: "Global (All Projects)", value: "" },
|
||||
{ label: "Global (All Projects)", value: "__none__" },
|
||||
...(projectsData || []).map((p: Record<string, unknown>) => ({
|
||||
label: p.project_name || p.project_code || `Project ${p.id}`,
|
||||
value: String(p.id),
|
||||
@@ -57,11 +57,9 @@ export default function TagsPage() {
|
||||
|
||||
const formatPayload = (data: Record<string, unknown>) => {
|
||||
const payload = { ...data };
|
||||
// Backend entity uses project_id (underscore) per ADR-017/018 schema
|
||||
if (!payload.project_id || payload.project_id === "") {
|
||||
// ADR-019: project_id is now a UUID string or '__none__' for global
|
||||
if (!payload.project_id || payload.project_id === "__none__") {
|
||||
payload.project_id = null;
|
||||
} else {
|
||||
payload.project_id = Number(payload.project_id);
|
||||
}
|
||||
return payload;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user