|
@@ -10,6 +10,7 @@ import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
|
|
|
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select";
|
|
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select";
|
|
|
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table";
|
|
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table";
|
|
|
import { Badge } from "@/components/ui/badge";
|
|
import { Badge } from "@/components/ui/badge";
|
|
|
|
|
+import { useShop } from "@/components/context/ShopContext";
|
|
|
import {
|
|
import {
|
|
|
Dialog,
|
|
Dialog,
|
|
|
DialogContent,
|
|
DialogContent,
|
|
@@ -119,12 +120,16 @@ export function ManageStoreDataContent({ defaultTab }: ManageStoreDataContentPro
|
|
|
const [searchParams] = useSearchParams();
|
|
const [searchParams] = useSearchParams();
|
|
|
const { toast } = useToast();
|
|
const { toast } = useToast();
|
|
|
const { t } = useTranslation();
|
|
const { t } = useTranslation();
|
|
|
|
|
+ const { selectedShop } = useShop();
|
|
|
|
|
|
|
|
const [stores, setStores] = useState<StoreData[]>([]);
|
|
const [stores, setStores] = useState<StoreData[]>([]);
|
|
|
const [selectedStore, setSelectedStore] = useState<StoreData | null>(null);
|
|
const [selectedStore, setSelectedStore] = useState<StoreData | null>(null);
|
|
|
const [loading, setLoading] = useState(true);
|
|
const [loading, setLoading] = useState(true);
|
|
|
const [activeTab, setActiveTab] = useState<"products" | "website">(defaultTab || "products");
|
|
const [activeTab, setActiveTab] = useState<"products" | "website">(defaultTab || "products");
|
|
|
|
|
|
|
|
|
|
+ // Track if we're on a dedicated page (Products or Website Content)
|
|
|
|
|
+ const isDedicatedPage = defaultTab !== undefined;
|
|
|
|
|
+
|
|
|
// Filter and search state
|
|
// Filter and search state
|
|
|
const [searchQuery, setSearchQuery] = useState("");
|
|
const [searchQuery, setSearchQuery] = useState("");
|
|
|
const [statusFilter, setStatusFilter] = useState<"all" | "enabled" | "disabled">("all");
|
|
const [statusFilter, setStatusFilter] = useState<"all" | "enabled" | "disabled">("all");
|
|
@@ -229,6 +234,20 @@ export function ManageStoreDataContent({ defaultTab }: ManageStoreDataContentPro
|
|
|
fetchStores();
|
|
fetchStores();
|
|
|
}, [searchParams, toast]);
|
|
}, [searchParams, toast]);
|
|
|
|
|
|
|
|
|
|
+ // Update selected store when global shop context changes (for dedicated pages)
|
|
|
|
|
+ useEffect(() => {
|
|
|
|
|
+ if (isDedicatedPage && selectedShop) {
|
|
|
|
|
+ setSelectedStore(selectedShop);
|
|
|
|
|
+ // Reset state when shop changes
|
|
|
|
|
+ setPage(1);
|
|
|
|
|
+ setSearchQuery("");
|
|
|
|
|
+ setStatusFilter("all");
|
|
|
|
|
+ setCategoryFilter("all");
|
|
|
|
|
+ setSelectedItems(new Set());
|
|
|
|
|
+ setSelectAll(false);
|
|
|
|
|
+ }
|
|
|
|
|
+ }, [selectedShop, isDedicatedPage]);
|
|
|
|
|
+
|
|
|
// Fetch categories when store changes
|
|
// Fetch categories when store changes
|
|
|
useEffect(() => {
|
|
useEffect(() => {
|
|
|
if (selectedStore) {
|
|
if (selectedStore) {
|
|
@@ -953,10 +972,22 @@ export function ManageStoreDataContent({ defaultTab }: ManageStoreDataContentPro
|
|
|
<div className="flex-1 space-y-6 p-8 bg-slate-900">
|
|
<div className="flex-1 space-y-6 p-8 bg-slate-900">
|
|
|
<div className="flex items-center justify-between">
|
|
<div className="flex items-center justify-between">
|
|
|
<div>
|
|
<div>
|
|
|
- <h2 className="text-3xl font-bold tracking-tight text-white">{t('manageStoreData.title')}</h2>
|
|
|
|
|
- <p className="text-slate-400">{t('manageStoreData.subtitle')}</p>
|
|
|
|
|
|
|
+ <h2 className="text-3xl font-bold tracking-tight text-white">
|
|
|
|
|
+ {isDedicatedPage
|
|
|
|
|
+ ? activeTab === "products"
|
|
|
|
|
+ ? t('sidebar.products')
|
|
|
|
|
+ : t('sidebar.websiteContent')
|
|
|
|
|
+ : t('manageStoreData.title')
|
|
|
|
|
+ }
|
|
|
|
|
+ </h2>
|
|
|
|
|
+ <p className="text-slate-400">
|
|
|
|
|
+ {isDedicatedPage
|
|
|
|
|
+ ? selectedStore?.store_name || t('manageStoreData.storeSelector.unnamedStore')
|
|
|
|
|
+ : t('manageStoreData.subtitle')
|
|
|
|
|
+ }
|
|
|
|
|
+ </p>
|
|
|
</div>
|
|
</div>
|
|
|
- {stores.length > 1 && (
|
|
|
|
|
|
|
+ {!isDedicatedPage && stores.length > 1 && (
|
|
|
<Select value={selectedStore?.id} onValueChange={(value) => {
|
|
<Select value={selectedStore?.id} onValueChange={(value) => {
|
|
|
const store = stores.find(s => s.id === value);
|
|
const store = stores.find(s => s.id === value);
|
|
|
if (store) setSelectedStore(store);
|
|
if (store) setSelectedStore(store);
|
|
@@ -989,16 +1020,19 @@ export function ManageStoreDataContent({ defaultTab }: ManageStoreDataContentPro
|
|
|
setSelectedItems(new Set());
|
|
setSelectedItems(new Set());
|
|
|
setSelectAll(false);
|
|
setSelectAll(false);
|
|
|
}}>
|
|
}}>
|
|
|
- <TabsList className="bg-slate-700 mb-6">
|
|
|
|
|
- <TabsTrigger value="products" className="data-[state=active]:bg-slate-600 data-[state=active]:text-white">
|
|
|
|
|
- <Package className="w-4 h-4 mr-2" />
|
|
|
|
|
- {t('manageStoreData.tabs.products')} ({enabledCount}/{totalCount})
|
|
|
|
|
- </TabsTrigger>
|
|
|
|
|
- <TabsTrigger value="website" className="data-[state=active]:bg-slate-600 data-[state=active]:text-white">
|
|
|
|
|
- <Globe className="w-4 h-4 mr-2" />
|
|
|
|
|
- {t('manageStoreData.tabs.website')}
|
|
|
|
|
- </TabsTrigger>
|
|
|
|
|
- </TabsList>
|
|
|
|
|
|
|
+ {/* Hide tabs on dedicated pages (Products/Website Content pages) */}
|
|
|
|
|
+ {!isDedicatedPage && (
|
|
|
|
|
+ <TabsList className="bg-slate-700 mb-6">
|
|
|
|
|
+ <TabsTrigger value="products" className="data-[state=active]:bg-slate-600 data-[state=active]:text-white">
|
|
|
|
|
+ <Package className="w-4 h-4 mr-2" />
|
|
|
|
|
+ {t('manageStoreData.tabs.products')} ({enabledCount}/{totalCount})
|
|
|
|
|
+ </TabsTrigger>
|
|
|
|
|
+ <TabsTrigger value="website" className="data-[state=active]:bg-slate-600 data-[state=active]:text-white">
|
|
|
|
|
+ <Globe className="w-4 h-4 mr-2" />
|
|
|
|
|
+ {t('manageStoreData.tabs.website')}
|
|
|
|
|
+ </TabsTrigger>
|
|
|
|
|
+ </TabsList>
|
|
|
|
|
+ )}
|
|
|
|
|
|
|
|
{/* Search and Filter Bar - Only show for products tab */}
|
|
{/* Search and Filter Bar - Only show for products tab */}
|
|
|
{activeTab === "products" && (
|
|
{activeTab === "products" && (
|