diff --git a/src/app/inventory/movement/detail/edit/page.tsx b/src/app/inventory/movement/detail/edit/page.tsx
new file mode 100644
index 00000000..bde4ece1
--- /dev/null
+++ b/src/app/inventory/movement/detail/edit/page.tsx
@@ -0,0 +1,48 @@
+'use client';
+
+import { useRouter, useSearchParams } from 'next/navigation';
+import useSWR from 'swr';
+
+import MovementForm from '@/components/pages/inventory/movement/form/MovementForm';
+import { MovementApi } from '@/services/api/inventory';
+import { isResponseError, isResponseSuccess } from '@/lib/api-helper';
+
+const MovementEdit = () => {
+ const router = useRouter();
+ const searchParams = useSearchParams();
+
+ const movementId = searchParams.get('movementId');
+
+ const { data: movement, isLoading: isLoadingMovement } = useSWR(
+ movementId,
+ (id: number) => MovementApi.getSingle(id)
+ );
+
+ if (!movementId) {
+ router.back();
+
+ return (
+
+
+
+ );
+ }
+
+ if (!isLoadingMovement && (!movement || isResponseError(movement))) {
+ router.replace('/404');
+ return;
+ }
+
+ return (
+
+ {isLoadingMovement && (
+
+ )}
+ {!isLoadingMovement && isResponseSuccess(movement) && (
+
+ )}
+
+ );
+};
+
+export default MovementEdit;
diff --git a/src/app/inventory/movement/detail/layout.tsx b/src/app/inventory/movement/detail/layout.tsx
new file mode 100644
index 00000000..7220dfa1
--- /dev/null
+++ b/src/app/inventory/movement/detail/layout.tsx
@@ -0,0 +1,11 @@
+import SuspenseHelper from '@/components/helper/SuspenseHelper';
+
+const Layout = ({
+ children,
+}: Readonly<{
+ children: React.ReactNode;
+}>) => {
+ return {children};
+};
+
+export default Layout;
diff --git a/src/app/inventory/movement/detail/page.tsx b/src/app/inventory/movement/detail/page.tsx
new file mode 100644
index 00000000..5947cd1b
--- /dev/null
+++ b/src/app/inventory/movement/detail/page.tsx
@@ -0,0 +1,48 @@
+'use client';
+
+import { useRouter, useSearchParams } from 'next/navigation';
+import useSWR from 'swr';
+
+import MovementForm from '@/components/pages/inventory/movement/form/MovementForm';
+import { MovementApi } from '@/services/api/inventory';
+import { isResponseError, isResponseSuccess } from '@/lib/api-helper';
+
+const MovementDetail = () => {
+ const router = useRouter();
+ const searchParams = useSearchParams();
+
+ const movementId = searchParams.get('movementId');
+
+ const { data: movement, isLoading: isLoadingMovement } = useSWR(
+ movementId,
+ (id: number) => MovementApi.getSingle(id)
+ );
+
+ if (!movementId) {
+ router.back();
+
+ return (
+
+
+
+ );
+ }
+
+ if (!isLoadingMovement && (!movement || isResponseError(movement))) {
+ router.replace('/404');
+ return;
+ }
+
+ return (
+
+ {isLoadingMovement && (
+
+ )}
+ {!isLoadingMovement && isResponseSuccess(movement) && (
+
+ )}
+
+ );
+};
+
+export default MovementDetail;