diff --git a/src/app/_closing/detail/layout.tsx b/src/app/closing/detail/layout.tsx
similarity index 100%
rename from src/app/_closing/detail/layout.tsx
rename to src/app/closing/detail/layout.tsx
diff --git a/src/app/_closing/detail/page.tsx b/src/app/closing/detail/page.tsx
similarity index 86%
rename from src/app/_closing/detail/page.tsx
rename to src/app/closing/detail/page.tsx
index 038e5072..c5619c48 100644
--- a/src/app/_closing/detail/page.tsx
+++ b/src/app/closing/detail/page.tsx
@@ -5,6 +5,7 @@ import useSWR from 'swr';
import SalesReportTable from '@/components/pages/closing/sale/SalesReportTable';
import { ClosingApi } from '@/services/api/closing';
import { isResponseSuccess, isResponseError } from '@/lib/api-helper';
+import SapronakCalculationTable from '@/components/pages/closing/sapronak/SapronakCalculationTable';
const ClosingDetailPage = () => {
const router = useRouter();
@@ -46,7 +47,10 @@ const ClosingDetailPage = () => {
)}
{!isLoadingClosing && isResponseSuccess(closing) && (
-
+ <>
+
+
+ >
)}
);
diff --git a/src/components/helper/RequireAuth.tsx b/src/components/helper/RequireAuth.tsx
index 119d74cb..dbd4b6bc 100644
--- a/src/components/helper/RequireAuth.tsx
+++ b/src/components/helper/RequireAuth.tsx
@@ -6,9 +6,147 @@ import useSWRImmutable from 'swr/immutable';
import { useAuth } from '@/services/hooks/useAuth';
import { httpClientFetcher, SWRHttpKey } from '@/services/http/client';
-import { isResponseError, isResponseSuccess } from '@/lib/api-helper';
-import { BaseApiResponse, GetMeResponse } from '@/types/api/api-general';
-import { AxiosError } from 'axios';
+import { isResponseSuccess } from '@/lib/api-helper';
+import { GetMeResponse } from '@/types/api/api-general';
+
+// TODO: delete this later, DONT HARDCODE USER DATA
+const DUMMY_USER = {
+ id: 1,
+ email: 'admin@mbugroup.id',
+ npk: '0001',
+ name: 'Super Admin',
+ image: null,
+ created_at: '2025-09-30T03:24:20.899229Z',
+ updated_at: '2025-09-30T03:24:20.899229Z',
+ roles: [
+ {
+ id: 1,
+ key: 'mbu.super_admin',
+ name: 'MBU Administrator',
+ client: {
+ id: 1,
+ name: 'PT Mitra Berlian Unggas',
+ alias: 'MBU',
+ },
+ permissions: [
+ {
+ id: 1,
+ name: 'mbu:purchase:read',
+ action: 'read',
+ client: {
+ id: 1,
+ name: 'PT Mitra Berlian Unggas',
+ alias: 'MBU',
+ },
+ },
+ {
+ id: 2,
+ name: 'mbu:purchase:create',
+ action: 'create',
+ client: {
+ id: 1,
+ name: 'PT Mitra Berlian Unggas',
+ alias: 'MBU',
+ },
+ },
+ {
+ id: 3,
+ name: 'mbu:purchase:approve',
+ action: 'approve',
+ client: {
+ id: 1,
+ name: 'PT Mitra Berlian Unggas',
+ alias: 'MBU',
+ },
+ },
+ ],
+ },
+ {
+ id: 2,
+ key: 'lti.super_admin',
+ name: 'LTI Administrator',
+ client: {
+ id: 2,
+ name: 'PT Lumbung Telur Indonesia',
+ alias: 'LTI',
+ },
+ permissions: [
+ {
+ id: 4,
+ name: 'lti:purchase:read',
+ action: 'read',
+ client: {
+ id: 2,
+ name: 'PT Lumbung Telur Indonesia',
+ alias: 'LTI',
+ },
+ },
+ {
+ id: 5,
+ name: 'lti:purchase:create',
+ action: 'create',
+ client: {
+ id: 2,
+ name: 'PT Lumbung Telur Indonesia',
+ alias: 'LTI',
+ },
+ },
+ {
+ id: 6,
+ name: 'lti:purchase:approve',
+ action: 'approve',
+ client: {
+ id: 2,
+ name: 'PT Lumbung Telur Indonesia',
+ alias: 'LTI',
+ },
+ },
+ ],
+ },
+ {
+ id: 3,
+ key: 'manbu.super_admin',
+ name: 'MANBU Administrator',
+ client: {
+ id: 3,
+ name: 'PT Mandiri Berlian Unggas',
+ alias: 'MANBU',
+ },
+ permissions: [
+ {
+ id: 7,
+ name: 'manbu:purchase:read',
+ action: 'read',
+ client: {
+ id: 3,
+ name: 'PT Mandiri Berlian Unggas',
+ alias: 'MANBU',
+ },
+ },
+ {
+ id: 8,
+ name: 'manbu:purchase:create',
+ action: 'create',
+ client: {
+ id: 3,
+ name: 'PT Mandiri Berlian Unggas',
+ alias: 'MANBU',
+ },
+ },
+ {
+ id: 9,
+ name: 'manbu:purchase:approve',
+ action: 'approve',
+ client: {
+ id: 3,
+ name: 'PT Mandiri Berlian Unggas',
+ alias: 'MANBU',
+ },
+ },
+ ],
+ },
+ ],
+};
interface RequireAuthProps {
children?: ReactNode;
@@ -18,20 +156,17 @@ const RequireAuth = ({ children }: RequireAuthProps) => {
const router = useRouter();
const { setUser, setIsLoadingUser } = useAuth();
- const {
- data: userResponse,
- isLoading: isLoadingUserResponse,
- error: userErrorResponse,
- } = useSWRImmutable<
- GetMeResponse & { ok?: boolean },
- AxiosError,
- SWRHttpKey
- >('/sso/userinfo', httpClientFetcher, {
- shouldRetryOnError: false,
- revalidateOnFocus: false,
- revalidateOnReconnect: false,
- refreshInterval: 0,
- });
+ const { data: userResponse, isLoading: isLoadingUserResponse } =
+ useSWRImmutable(
+ '/auth/sso/userinfo',
+ httpClientFetcher,
+ {
+ shouldRetryOnError: false,
+ revalidateOnFocus: false,
+ revalidateOnReconnect: false,
+ refreshInterval: 0,
+ }
+ );
useEffect(() => {
setIsLoadingUser(isLoadingUserResponse);
@@ -40,25 +175,23 @@ const RequireAuth = ({ children }: RequireAuthProps) => {
useEffect(() => {
if (isResponseSuccess(userResponse)) {
setUser(userResponse.data);
- } else if (
- isResponseError(userErrorResponse?.response?.data) &&
- typeof window !== 'undefined'
- ) {
- router.replace(
- `${process.env.NEXT_PUBLIC_SSO_LOGIN_URL as string}?redirect_url=${window.location.href}`
- );
+ } else {
+ // router.replace(process.env.NEXT_PUBLIC_SSO_LOGIN_URL as string);
+ // TODO: remove this later, DONT HARDCODE USER DATA
+ setUser(DUMMY_USER);
}
- }, [userResponse, userErrorResponse, setIsLoadingUser, setUser]);
+ }, [userResponse, setIsLoadingUser, setUser]);
- if (isLoadingUserResponse && !userResponse && !userErrorResponse) {
- return (
-
-
-
- );
- }
+ // TODO: uncomment this later
+ // if (isLoadingUserResponse && !userResponse) {
+ // return (
+ //
+ //
+ //
+ // );
+ // }
- return <>{isResponseSuccess(userResponse) && children}>;
+ return <>{children}>;
};
export default RequireAuth;
diff --git a/src/components/pages/closing/sapronak/SapronakCalculationTable.tsx b/src/components/pages/closing/sapronak/SapronakCalculationTable.tsx
new file mode 100644
index 00000000..15ee31eb
--- /dev/null
+++ b/src/components/pages/closing/sapronak/SapronakCalculationTable.tsx
@@ -0,0 +1,5 @@
+const SapronakCalculationTable = () => {
+ return SapronakCalculationTable
;
+};
+
+export default SapronakCalculationTable;