dev #21
@ -315,6 +315,78 @@ export default function AdminDashboardPage() {
|
|||||||
<ArrowRightIcon className="h-5 w-5 text-blue-600 opacity-70 group-hover:opacity-100" />
|
<ArrowRightIcon className="h-5 w-5 text-blue-600 opacity-70 group-hover:opacity-100" />
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
|
{/* User Verify */}
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
onClick={() => router.push('/admin/user-verify')}
|
||||||
|
className="group w-full flex items-center justify-between rounded-lg border border-rose-200 bg-rose-50 hover:bg-rose-100 px-4 py-4 transform transition-transform duration-200 hover:scale-[1.02] hover:shadow-md"
|
||||||
|
>
|
||||||
|
<div className="flex items-center gap-4">
|
||||||
|
<span className="inline-flex h-10 w-10 items-center justify-center rounded-md bg-rose-100 border border-rose-200 group-hover:animate-pulse">
|
||||||
|
<ExclamationTriangleIcon className="h-6 w-6 text-rose-600" />
|
||||||
|
</span>
|
||||||
|
<div className="text-left">
|
||||||
|
<div className="text-base font-semibold text-rose-900">User Verify</div>
|
||||||
|
<div className="text-xs text-rose-700">Review and verify user onboarding status</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<ArrowRightIcon className="h-5 w-5 text-rose-600 opacity-70 group-hover:opacity-100" />
|
||||||
|
</button>
|
||||||
|
|
||||||
|
{/* Finance Management */}
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
onClick={() => router.push('/admin/finance-management')}
|
||||||
|
className="group w-full flex items-center justify-between rounded-lg border border-emerald-200 bg-emerald-50 hover:bg-emerald-100 px-4 py-4 transform transition-transform duration-200 hover:scale-[1.02] hover:shadow-md"
|
||||||
|
>
|
||||||
|
<div className="flex items-center gap-4">
|
||||||
|
<span className="inline-flex h-10 w-10 items-center justify-center rounded-md bg-emerald-100 border border-emerald-200 group-hover:animate-pulse">
|
||||||
|
<BanknotesIcon className="h-6 w-6 text-emerald-600" />
|
||||||
|
</span>
|
||||||
|
<div className="text-left">
|
||||||
|
<div className="text-base font-semibold text-emerald-900">Finance Management</div>
|
||||||
|
<div className="text-xs text-emerald-700">Tax rates, billing settings and finance tools</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<ArrowRightIcon className="h-5 w-5 text-emerald-600 opacity-70 group-hover:opacity-100" />
|
||||||
|
</button>
|
||||||
|
|
||||||
|
{/* Pool Management */}
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
onClick={() => router.push('/admin/pool-management')}
|
||||||
|
className="group w-full flex items-center justify-between rounded-lg border border-cyan-200 bg-cyan-50 hover:bg-cyan-100 px-4 py-4 transform transition-transform duration-200 hover:scale-[1.02] hover:shadow-md"
|
||||||
|
>
|
||||||
|
<div className="flex items-center gap-4">
|
||||||
|
<span className="inline-flex h-10 w-10 items-center justify-center rounded-md bg-cyan-100 border border-cyan-200 group-hover:animate-pulse">
|
||||||
|
<ServerStackIcon className="h-6 w-6 text-cyan-600" />
|
||||||
|
</span>
|
||||||
|
<div className="text-left">
|
||||||
|
<div className="text-base font-semibold text-cyan-900">Pool Management</div>
|
||||||
|
<div className="text-xs text-cyan-700">Manage pool structures and assignments</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<ArrowRightIcon className="h-5 w-5 text-cyan-600 opacity-70 group-hover:opacity-100" />
|
||||||
|
</button>
|
||||||
|
|
||||||
|
{/* Affiliate Management */}
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
onClick={() => router.push('/admin/affiliate-management')}
|
||||||
|
className="group w-full flex items-center justify-between rounded-lg border border-violet-200 bg-violet-50 hover:bg-violet-100 px-4 py-4 transform transition-transform duration-200 hover:scale-[1.02] hover:shadow-md"
|
||||||
|
>
|
||||||
|
<div className="flex items-center gap-4">
|
||||||
|
<span className="inline-flex h-10 w-10 items-center justify-center rounded-md bg-violet-100 border border-violet-200 group-hover:animate-pulse">
|
||||||
|
<UsersIcon className="h-6 w-6 text-violet-600" />
|
||||||
|
</span>
|
||||||
|
<div className="text-left">
|
||||||
|
<div className="text-base font-semibold text-violet-900">Affiliate Management</div>
|
||||||
|
<div className="text-xs text-violet-700">Partner content and affiliate controls</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<ArrowRightIcon className="h-5 w-5 text-violet-600 opacity-70 group-hover:opacity-100" />
|
||||||
|
</button>
|
||||||
|
|
||||||
{/* News Management */}
|
{/* News Management */}
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
|
|||||||
@ -4,7 +4,7 @@ import PageLayout from '../../components/PageLayout';
|
|||||||
import { useRouter } from 'next/navigation';
|
import { useRouter } from 'next/navigation';
|
||||||
import { useActiveCoffees } from '../hooks/getActiveCoffees';
|
import { useActiveCoffees } from '../hooks/getActiveCoffees';
|
||||||
import { getStandardVatRate, getVatRates } from './hooks/getTaxRate';
|
import { getStandardVatRate, getVatRates } from './hooks/getTaxRate';
|
||||||
import { subscribeAbo } from './hooks/subscribeAbo';
|
import { subscribeAbo, type SubscribeAboInput } from './hooks/subscribeAbo';
|
||||||
import useAuthStore from '../../store/authStore'
|
import useAuthStore from '../../store/authStore'
|
||||||
import { useShippingFees } from '../hooks/useShippingFees';
|
import { useShippingFees } from '../hooks/useShippingFees';
|
||||||
import { useAboContractTemplateHtml } from './hooks/useAboContractTemplateHtml'
|
import { useAboContractTemplateHtml } from './hooks/useAboContractTemplateHtml'
|
||||||
@ -580,7 +580,7 @@ export default function SummaryPage() {
|
|||||||
setSubmitError(null)
|
setSubmitError(null)
|
||||||
setSubmitLoading(true)
|
setSubmitLoading(true)
|
||||||
try {
|
try {
|
||||||
const payload = {
|
const payload: SubscribeAboInput = {
|
||||||
items: selectedEntries.map(entry => ({
|
items: selectedEntries.map(entry => ({
|
||||||
coffeeId: entry.coffee.id,
|
coffeeId: entry.coffee.id,
|
||||||
quantity: Math.round(entry.quantity / 10), // packs
|
quantity: Math.round(entry.quantity / 10), // packs
|
||||||
|
|||||||
@ -761,88 +761,11 @@ export default function Header({ setGlobalLoggingOut }: HeaderProps) {
|
|||||||
onClick={() => { router.push('/admin'); setMobileMenuOpen(false); }}
|
onClick={() => { router.push('/admin'); setMobileMenuOpen(false); }}
|
||||||
className="w-full text-left rounded-lg px-2 py-1.5 text-slate-800 hover:bg-indigo-50 hover:text-slate-900 transition-colors dark:text-indigo-50 dark:hover:bg-white/10 dark:hover:text-white"
|
className="w-full text-left rounded-lg px-2 py-1.5 text-slate-800 hover:bg-indigo-50 hover:text-slate-900 transition-colors dark:text-indigo-50 dark:hover:bg-white/10 dark:hover:text-white"
|
||||||
>
|
>
|
||||||
Dashboard
|
Admin Dashboard
|
||||||
</button>
|
</button>
|
||||||
<button
|
<p className="px-2 py-1 text-xs text-slate-500 dark:text-indigo-100/70">
|
||||||
onClick={() => { router.push('/admin/dashboard-management'); setMobileMenuOpen(false); }}
|
Open the dashboard to access all admin modules via icon panels.
|
||||||
className="w-full text-left rounded-lg px-2 py-1.5 text-slate-800 hover:bg-indigo-50 hover:text-slate-900 transition-colors dark:text-indigo-50 dark:hover:bg-white/10 dark:hover:text-white"
|
</p>
|
||||||
>
|
|
||||||
Dashboard Management
|
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
onClick={() => { router.push('/admin/user-verify'); setMobileMenuOpen(false); }}
|
|
||||||
className="w-full text-left rounded-lg px-2 py-1.5 text-slate-800 hover:bg-indigo-50 hover:text-slate-900 transition-colors dark:text-indigo-50 dark:hover:bg-white/10 dark:hover:text-white"
|
|
||||||
>
|
|
||||||
User Verify
|
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
onClick={() => { router.push('/admin/user-management'); setMobileMenuOpen(false); }}
|
|
||||||
className="w-full text-left rounded-lg px-2 py-1.5 text-slate-800 hover:bg-indigo-50 hover:text-slate-900 transition-colors dark:text-indigo-50 dark:hover:bg-white/10 dark:hover:text-white"
|
|
||||||
>
|
|
||||||
User Management
|
|
||||||
</button>
|
|
||||||
{DISPLAY_MATRIX && (
|
|
||||||
<button
|
|
||||||
onClick={() => { router.push('/admin/matrix-management'); setMobileMenuOpen(false); }}
|
|
||||||
className="w-full text-left rounded-lg px-2 py-1.5 text-slate-800 hover:bg-indigo-50 hover:text-slate-900 transition-colors dark:text-indigo-50 dark:hover:bg-white/10 dark:hover:text-white"
|
|
||||||
>
|
|
||||||
Matrix Management
|
|
||||||
</button>
|
|
||||||
)}
|
|
||||||
<button
|
|
||||||
onClick={() => { router.push('/admin/contract-management'); setMobileMenuOpen(false); }}
|
|
||||||
className="w-full text-left rounded-lg px-2 py-1.5 text-slate-800 hover:bg-indigo-50 hover:text-slate-900 transition-colors dark:text-indigo-50 dark:hover:bg-white/10 dark:hover:text-white"
|
|
||||||
>
|
|
||||||
Contract Management
|
|
||||||
</button>
|
|
||||||
{DISPLAY_ABONEMENTS && (
|
|
||||||
<>
|
|
||||||
<button
|
|
||||||
onClick={() => { router.push('/admin/subscriptions'); setMobileMenuOpen(false); }}
|
|
||||||
className="w-full text-left rounded-lg px-2 py-1.5 text-slate-800 hover:bg-indigo-50 hover:text-slate-900 transition-colors dark:text-indigo-50 dark:hover:bg-white/10 dark:hover:text-white"
|
|
||||||
>
|
|
||||||
Coffee Management
|
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
onClick={() => { router.push('/admin/finance-management'); setMobileMenuOpen(false); }}
|
|
||||||
className="w-full text-left rounded-lg px-2 py-1.5 text-slate-800 hover:bg-indigo-50 hover:text-slate-900 transition-colors dark:text-indigo-50 dark:hover:bg-white/10 dark:hover:text-white"
|
|
||||||
>
|
|
||||||
Finance Management
|
|
||||||
</button>
|
|
||||||
</>
|
|
||||||
)}
|
|
||||||
{DISPLAY_POOLS && (
|
|
||||||
<button
|
|
||||||
onClick={() => { router.push('/admin/pool-management'); setMobileMenuOpen(false); }}
|
|
||||||
className="w-full text-left rounded-lg px-2 py-1.5 text-slate-800 hover:bg-indigo-50 hover:text-slate-900 transition-colors dark:text-indigo-50 dark:hover:bg-white/10 dark:hover:text-white"
|
|
||||||
>
|
|
||||||
Pool Management
|
|
||||||
</button>
|
|
||||||
)}
|
|
||||||
<button
|
|
||||||
onClick={() => { router.push('/admin/affiliate-management'); setMobileMenuOpen(false); }}
|
|
||||||
className="w-full text-left rounded-lg px-2 py-1.5 text-slate-800 hover:bg-indigo-50 hover:text-slate-900 transition-colors dark:text-indigo-50 dark:hover:bg-white/10 dark:hover:text-white"
|
|
||||||
>
|
|
||||||
Affiliate Management
|
|
||||||
</button>
|
|
||||||
{DISPLAY_NEWS && (
|
|
||||||
<button
|
|
||||||
onClick={() => { router.push('/admin/news-management'); setMobileMenuOpen(false); }}
|
|
||||||
className="w-full text-left rounded-lg px-2 py-1.5 text-slate-800 hover:bg-indigo-50 hover:text-slate-900 transition-colors dark:text-indigo-50 dark:hover:bg-white/10 dark:hover:text-white"
|
|
||||||
>
|
|
||||||
News Management
|
|
||||||
</button>
|
|
||||||
)}
|
|
||||||
|
|
||||||
{/* ADDED: Dev Management in hamburger admin nav */}
|
|
||||||
{isAdminOrSuper && (
|
|
||||||
<button
|
|
||||||
onClick={() => { router.push('/admin/dev-management'); setMobileMenuOpen(false); }}
|
|
||||||
className="w-full text-left rounded-lg px-2 py-1.5 text-slate-800 hover:bg-indigo-50 hover:text-slate-900 transition-colors dark:text-indigo-50 dark:hover:bg-white/10 dark:hover:text-white"
|
|
||||||
>
|
|
||||||
Dev Management
|
|
||||||
</button>
|
|
||||||
)}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user