summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lib/category/components/Breadcrumb.jsx103
-rw-r--r--src/lib/transaction/components/Transactions.jsx22
-rw-r--r--src/pages/my/menu.jsx11
3 files changed, 78 insertions, 58 deletions
diff --git a/src/lib/category/components/Breadcrumb.jsx b/src/lib/category/components/Breadcrumb.jsx
index 127904ee..e691e379 100644
--- a/src/lib/category/components/Breadcrumb.jsx
+++ b/src/lib/category/components/Breadcrumb.jsx
@@ -1,56 +1,87 @@
-import odooApi from '@/core/api/odooApi'
-import { createSlug } from '@/core/utils/slug'
+import odooApi from '@/core/api/odooApi';
+import { createSlug } from '@/core/utils/slug';
import {
Breadcrumb as ChakraBreadcrumb,
BreadcrumbItem,
BreadcrumbLink,
- Skeleton
-} from '@chakra-ui/react'
-import Link from 'next/link'
-import React from 'react'
-import { useQuery } from 'react-query'
+ Skeleton,
+} from '@chakra-ui/react';
+import Link from 'next/link';
+import React from 'react';
+import { useQuery } from 'react-query';
-/**
- * Render a breadcrumb component.
- *
- * @param {object} categoryId - The ID of the category.
- * @return {JSX.Element} The breadcrumb component.
- */
const Breadcrumb = ({ categoryId }) => {
const breadcrumbs = useQuery(
- `category-breadcrumbs/${categoryId}`,
- async () => await odooApi('GET', `/api/v1/category/${categoryId}/category-breadcrumb`)
- )
+ ['category-breadcrumbs', categoryId],
+ async () =>
+ await odooApi('GET', `/api/v1/category/${categoryId}/category-breadcrumb`)
+ );
+
+ const items = breadcrumbs.data ?? [];
+ const lastIdx = items.length - 1;
return (
<div className='container mx-auto py-4 md:py-6'>
<Skeleton isLoaded={!breadcrumbs.isLoading} className='w-2/3'>
- <ChakraBreadcrumb>
+ <ChakraBreadcrumb
+ spacing='8px'
+ sx={{
+ // mobile boleh wrap; desktop tetap 1 baris
+ '& ol': {
+ display: 'flex',
+ flexWrap: { base: 'wrap', md: 'nowrap' },
+ alignItems: 'center',
+ },
+ '& li': { display: 'inline-flex', alignItems: 'center' },
+ // semua item sebelum terakhir: jangan pernah wrap (tetap di baris atas)
+ '& li:not(:last-of-type)': {
+ flex: '0 0 auto',
+ whiteSpace: 'nowrap',
+ },
+ // item terakhir: boleh ambil sisa lebar & wrap jika perlu
+ '& li:last-of-type': {
+ flex: '1 1 auto',
+ minWidth: 0,
+ },
+ }}
+ >
+ {/* Home */}
<BreadcrumbItem>
- <BreadcrumbLink as={Link} href='/' className='!text-danger-500 whitespace-nowrap'>
+ <BreadcrumbLink as={Link} href='/' className='!text-danger-500'>
Home
</BreadcrumbLink>
</BreadcrumbItem>
- {breadcrumbs.data?.map((category, index) => (
- <BreadcrumbItem key={index} isCurrentPage={index === breadcrumbs.data.length - 1}>
- {index === breadcrumbs.data.length - 1 ? (
- <BreadcrumbLink className='whitespace-nowrap'>{category.name}</BreadcrumbLink>
- ) : (
- <BreadcrumbLink
- as={Link}
- href={createSlug('/shop/category/', category.name, category.id)}
- className='!text-danger-500 whitespace-nowrap'
- >
- {category.name}
- </BreadcrumbLink>
- )}
- </BreadcrumbItem>
- ))}
+ {/* Categories */}
+ {items.map((category, index) => {
+ const isLast = index === lastIdx;
+ return (
+ <BreadcrumbItem key={index} isCurrentPage={isLast}>
+ {isLast ? (
+ // HANYA yang terakhir boleh turun/wrap di mobile
+ <BreadcrumbLink className='block whitespace-normal break-words md:whitespace-nowrap'>
+ {category.name}
+ </BreadcrumbLink>
+ ) : (
+ <BreadcrumbLink
+ as={Link}
+ href={createSlug(
+ '/shop/category/',
+ category.name,
+ category.id
+ )}
+ className='!text-danger-500'
+ >
+ {category.name}
+ </BreadcrumbLink>
+ )}
+ </BreadcrumbItem>
+ );
+ })}
</ChakraBreadcrumb>
</Skeleton>
</div>
- )
-}
+ );
+};
-export default Breadcrumb
+export default Breadcrumb;
diff --git a/src/lib/transaction/components/Transactions.jsx b/src/lib/transaction/components/Transactions.jsx
index 5e37be50..7efa773a 100644
--- a/src/lib/transaction/components/Transactions.jsx
+++ b/src/lib/transaction/components/Transactions.jsx
@@ -451,12 +451,12 @@ const Transactions = ({ context = '' }) => {
return (
<>
<MobileView>
- <div className='p-4 flex flex-col gap-y-4'>
- <div className='grid grid-cols-[30%_30%_40%] justify-between items-center gap-2 w-full '>
+ <div className=' flex flex-col gap-y-4'>
+ <div className='grid grid-cols-[40%_40%_15%] justify-between items-center gap-2 w-full '>
<select
value={statusNew}
onChange={(e) => handleStatusChange(e.target.value)}
- className='border border-gray-300 rounded-lg px-2 py-1 text-xs bg-white shadow-sm focus:outline-none focus:ring-2 focus:ring-red-500'
+ className='border border-gray-300 rounded-lg px-2 py-2 text-xs bg-white shadow-sm focus:outline-none focus:ring-2 focus:ring-red-500'
>
{statuses.map((status) => (
<option key={status.id} value={status.id}>
@@ -467,7 +467,7 @@ const Transactions = ({ context = '' }) => {
<select
value={sortNew}
onChange={(e) => setSortNew(e.target.value)}
- className='border border-gray-300 rounded-lg px-2 py-1 text-xs bg-white shadow-sm focus:outline-none focus:ring-2 focus:ring-red-500'
+ className='border border-gray-300 rounded-lg px-2 py-2 text-xs bg-white shadow-sm focus:outline-none focus:ring-2 focus:ring-red-500'
>
{sortes.map((status) => (
<option key={status.id} value={status.id}>
@@ -478,14 +478,14 @@ const Transactions = ({ context = '' }) => {
<div ref={calendarRef} className="relative inline-block">
<button
type='button'
- className='p-2 w-auto h-auto cursor-pointer hover:bg-gray-100 rounded transition duration-150 ease-in-out flex items-center justify-center'
+ className='p-1 w-full h-auto cursor-pointer border hover:bg-gray-100 rounded transition duration-150 ease-in-out flex items-center justify-center'
onClick={() => setIsOpenCalender((prev) => !prev)}
>
<span className='text-nowrap px-1 truncate flex items-center gap-1'>
{state[0]?.startDate ? (
`${state[0].startDate.toLocaleDateString()} - ${state[0].endDate.toLocaleDateString()}`
) : (
- <Calendar size={16} className="text-gray-500" />
+ <Calendar size={20} className="text-gray-500" />
)}
</span>
</button>
@@ -634,7 +634,7 @@ const Transactions = ({ context = '' }) => {
>
<div className='flex flex-row justify-between items-start'>
<Link href={`${router.pathname}/${saleOrder.id}`}>
- <h2 className='text-danger-500'>{saleOrder.name}</h2>
+ <h2 className='text-danger-500 text-base'>{saleOrder.name}</h2>
<span className='font-medium text-black opacity-75'>
{formatDate(saleOrder.dateOrder.split(' ')[0]) || '-'}
</span>
@@ -662,8 +662,8 @@ const Transactions = ({ context = '' }) => {
</div>
<div className='flex w-4/5 flex-col gap-2 justify-start'>
<p className='flex flex-row gap-2'>
- <span className=' text-black'>Nomor PO:</span>
- <span className=' text-red-500 font-semibold'>
+ <span className=' text-black text-sm'>Nomor PO:</span>
+ <span className=' text-red-500 font-semibold text-sm'>
{saleOrder.purchaseOrderName || '-'}
</span>
</p>
@@ -718,8 +718,8 @@ const Transactions = ({ context = '' }) => {
<div className='col-span-2 h-[1px] w-full bg-gray-300'></div>
<div className='flex flex-row gap-3 justify-between items-center text-sm'>
<div className='flex flex-col text-black text-xs'>
- <p className='font-extralight'>Total Harga</p>
- <p className='font-semibold'>
+ <p className='font-extralight text-sm'>Total Harga</p>
+ <p className='font-semibold text-lg'>
{currencyFormat(saleOrder.amountTotal)}
</p>
</div>
diff --git a/src/pages/my/menu.jsx b/src/pages/my/menu.jsx
index 2a46d866..fa656ed4 100644
--- a/src/pages/my/menu.jsx
+++ b/src/pages/my/menu.jsx
@@ -48,17 +48,6 @@ export default function Menu() {
<MenuHeader>Aktivitas Pembelian</MenuHeader>
<div className='divide-y divide-gray_r-6 border-y border-gray_r-6 mt-4'>
- <LinkItem href='/my/quotations'>
- {' '}
- <div className='flex gap-x-3 items-center'>
- <ImageNext
- src='/images/icon/icon_daftar_quotation.svg'
- width={18}
- height={20}
- />
- <p>Daftar Quotation</p>
- </div>
- </LinkItem>
<LinkItem href='/my/transactions'>
<div className='flex gap-x-3 items-center'>
<ImageNext