FPSMS-frontend
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 

51 Zeilen
1.3 KiB

  1. import { fetchJoDetail } from "@/app/api/jo";
  2. import { SearchParams, ServerFetchError } from "@/app/utils/fetchUtil";
  3. import JoSave from "@/components/JoSave";
  4. import PageTitleBar from "@/components/PageTitleBar";
  5. import { I18nProvider, getServerI18n } from "@/i18n";
  6. import { isArray } from "lodash";
  7. import { Metadata } from "next";
  8. import { notFound } from "next/navigation";
  9. import { Suspense } from "react";
  10. export const metadata: Metadata = {
  11. title: "Edit Job Order Detail",
  12. };
  13. type Props = SearchParams;
  14. const JoEdit: React.FC<Props> = async ({ searchParams }) => {
  15. const { t } = await getServerI18n("jo");
  16. const id = searchParams["id"];
  17. if (!id || isArray(id) || !isFinite(parseInt(id))) {
  18. notFound();
  19. }
  20. try {
  21. await fetchJoDetail(parseInt(id));
  22. } catch (e) {
  23. if (
  24. e instanceof ServerFetchError &&
  25. (e.response?.status === 404 || e.response?.status === 400)
  26. ) {
  27. console.log("Job Order not found:", e);
  28. } else {
  29. console.error("Error fetching Job Order detail:", e);
  30. }
  31. notFound();
  32. }
  33. return (
  34. <>
  35. <PageTitleBar title={t("Edit Job Order Detail")} className="mb-4" />
  36. <I18nProvider namespaces={["jo", "common"]}>
  37. <Suspense fallback={<JoSave.Loading />}>
  38. <JoSave id={parseInt(id)} />
  39. </Suspense>
  40. </I18nProvider>
  41. </>
  42. );
  43. };
  44. export default JoEdit;