diff --git a/src/app/closing/detail/page.tsx b/src/app/closing/detail/page.tsx
index 1b4ebc45..62f3fa20 100644
--- a/src/app/closing/detail/page.tsx
+++ b/src/app/closing/detail/page.tsx
@@ -24,6 +24,11 @@ const ClosingDetailPage = () => {
() => ClosingApi.getPenjualan(Number(closingId))
);
+ const { data: hppEkspedisiData, isLoading: isLoadingHppEkspedisi } = useSWR(
+ closingId ? `hpp-ekspedisi-${closingId}` : null,
+ () => ClosingApi.getHppEkspedisi(Number(closingId))
+ );
+
if (!closingId) {
router.back();
@@ -39,7 +44,7 @@ const ClosingDetailPage = () => {
return;
}
- const isLoading = isLoadingClosing || isLoadingSales;
+ const isLoading = isLoadingClosing || isLoadingSales || isLoadingHppEkspedisi;
return (
@@ -50,6 +55,11 @@ const ClosingDetailPage = () => {
id={Number(closingId)}
initialValue={closing.data}
salesData={isResponseSuccess(salesData) ? salesData.data : undefined}
+ hppExpeditionData={
+ isResponseSuccess(hppEkspedisiData)
+ ? hppEkspedisiData.data
+ : undefined
+ }
/>
)}
diff --git a/src/components/Dropdown.tsx b/src/components/Dropdown.tsx
new file mode 100644
index 00000000..5bfa7a7d
--- /dev/null
+++ b/src/components/Dropdown.tsx
@@ -0,0 +1,114 @@
+import React, { ReactNode, useState, useRef } from 'react';
+
+import { cn } from '@/lib/helper';
+
+export interface DropdownProps {
+ trigger: ReactNode;
+ children: ReactNode;
+ className?: {
+ wrapper?: string;
+ trigger?: string;
+ content?: string;
+ };
+ align?: 'start' | 'center' | 'end';
+ direction?: 'top' | 'bottom' | 'left' | 'right';
+ hover?: boolean;
+ defaultOpen?: boolean;
+ open?: boolean;
+ close?: boolean;
+ controlled?: boolean;
+}
+
+const Dropdown = ({
+ trigger,
+ children,
+ className,
+ align,
+ direction,
+ hover,
+ defaultOpen = false,
+ open,
+ close,
+ controlled = false,
+}: DropdownProps) => {
+ const [isOpen, setIsOpen] = useState(defaultOpen);
+ const dropdownRef = useRef(null);
+
+ const toggleDropdown = () => {
+ if (!controlled) {
+ const newState = !isOpen;
+ setIsOpen(newState);
+ }
+ };
+
+ const getWrapperClasses = () => {
+ const openState = controlled ? open : isOpen;
+
+ return cn(
+ 'dropdown',
+ {
+ 'dropdown-start': align === 'start',
+ 'dropdown-center': align === 'center',
+ 'dropdown-end': align === 'end',
+ 'dropdown-top': direction === 'top',
+ 'dropdown-bottom': direction === 'bottom',
+ 'dropdown-left': direction === 'left',
+ 'dropdown-right': direction === 'right',
+ 'dropdown-hover': hover,
+ 'dropdown-open': openState && !close,
+ 'dropdown-close': close,
+ },
+ className?.wrapper
+ );
+ };
+
+ const getTriggerClasses = () => {
+ return cn(className?.trigger);
+ };
+
+ const getContentClasses = () => {
+ return cn(
+ 'dropdown-content z-[9999] shadow-sm bg-base-100 rounded-box',
+ className?.content
+ );
+ };
+
+ if (controlled) {
+ return (
+
+ {trigger}
+ {open && !close && (
+
+ {children}
+
+ )}
+
+ );
+ }
+
+ return (
+
+
{
+ if (e.key === 'Enter' || e.key === ' ') {
+ e.preventDefault();
+ toggleDropdown();
+ }
+ }}
+ >
+ {trigger}
+
+ {!close && (
+
+ {children}
+
+ )}
+
+ );
+};
+
+export default Dropdown;
diff --git a/src/components/Navbar.tsx b/src/components/Navbar.tsx
index bee92a57..280217a0 100644
--- a/src/components/Navbar.tsx
+++ b/src/components/Navbar.tsx
@@ -7,7 +7,7 @@ import { Icon } from '@iconify/react';
import Menu from '@/components/menu/Menu';
import MenuItem from '@/components/menu/MenuItem';
import Button from '@/components/Button';
-import Dropdown from '@/components/dropdown/Dropdown';
+import Dropdown from '@/components/Dropdown';
import { useAuth } from '@/services/hooks/useAuth';
import { AuthApi } from '@/services/api/auth';
@@ -54,7 +54,8 @@ const Navbar = ({ title, toggleSidebar }: NavbarProps) => {
@@ -62,9 +63,11 @@ const Navbar = ({ title, toggleSidebar }: NavbarProps) => {
}
- contentClassName='w-52 mt-3'
+ className={{
+ content: 'w-52 mt-3',
+ }}
>
-