您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 

80 行
2.3 KiB

  1. import { fetchAllCustomers, fetchAllSubsidiaries } from "@/app/api/customer";
  2. import { fetchGrades } from "@/app/api/grades";
  3. import {
  4. fetchMainProjects,
  5. fetchProjectBuildingTypes,
  6. fetchProjectCategories,
  7. fetchProjectContractTypes,
  8. fetchProjectDetails,
  9. fetchProjectFundingTypes,
  10. fetchProjectLocationTypes,
  11. fetchProjectServiceTypes,
  12. fetchProjectWorkNatures,
  13. } from "@/app/api/projects";
  14. import { preloadStaff, preloadTeamLeads } from "@/app/api/staff";
  15. import { fetchAllTasks, fetchTaskTemplates } from "@/app/api/tasks";
  16. import { getUserAbilities } from "@/app/utils/commonUtil";
  17. import CreateProject from "@/components/CreateProject";
  18. import { I18nProvider, getServerI18n } from "@/i18n";
  19. import { MAINTAIN_PROJECT } from "@/middleware";
  20. import Typography from "@mui/material/Typography";
  21. import { isArray } from "lodash";
  22. import { Metadata } from "next";
  23. import { notFound } from "next/navigation";
  24. interface Props {
  25. searchParams: { [key: string]: string | string[] | undefined };
  26. }
  27. export const metadata: Metadata = {
  28. title: "Edit Sub Project",
  29. };
  30. const Projects: React.FC<Props> = async ({ searchParams }) => {
  31. const { t } = await getServerI18n("projects");
  32. const projectId = searchParams["id"];
  33. const abilities = await getUserAbilities()
  34. if (!projectId || isArray(projectId) || !abilities.includes(MAINTAIN_PROJECT)) {
  35. notFound();
  36. }
  37. // Preload necessary dependencies
  38. fetchAllTasks();
  39. fetchTaskTemplates();
  40. fetchProjectCategories();
  41. fetchProjectContractTypes();
  42. fetchProjectFundingTypes();
  43. fetchProjectLocationTypes();
  44. fetchProjectServiceTypes();
  45. fetchProjectBuildingTypes();
  46. fetchProjectWorkNatures();
  47. fetchAllCustomers();
  48. fetchAllSubsidiaries();
  49. fetchGrades();
  50. preloadTeamLeads();
  51. preloadStaff();
  52. try {
  53. await fetchProjectDetails(projectId);
  54. const data = await fetchMainProjects();
  55. if (!Boolean(data) || data.length === 0) {
  56. notFound();
  57. }
  58. } catch (e) {
  59. notFound();
  60. }
  61. return (
  62. <>
  63. <Typography variant="h4">{t("Edit Sub Project")}</Typography>
  64. <I18nProvider namespaces={["projects"]}>
  65. <CreateProject isEditMode isSubProject projectId={projectId}/>
  66. </I18nProvider>
  67. </>
  68. );
  69. };
  70. export default Projects;