import { ChevronRightIcon } from '@heroicons/react/24/solid'; import PageContent from 'components/page/page-content'; import { getMetaobjectsByIds } from 'lib/shopify'; import { Tab, TabGroup, TabList, TabPanel, TabPanels } from './tab-components'; const TabPanelContent = async ({ ids }: { ids: string[] }) => { const content = await getMetaobjectsByIds(ids); return ( <TabPanel className="flex min-w-full flex-col space-y-5"> {content.map((block) => ( <PageContent key={block.id} block={block} /> ))} </TabPanel> ); }; const Tabs = async ({ tabItemIds }: { tabItemIds: string[] }) => { const tabItems = await getMetaobjectsByIds(tabItemIds); if (!tabItems || tabItems.length === 0) return null; return ( <TabGroup vertical> <div className="flex w-full gap-x-10"> <TabList className="flex shrink-0 basis-1/4 flex-col gap-2"> {tabItems.map((item) => ( <Tab key={item.id} className="flex items-center justify-between rounded-sm bg-gray-200/60 p-3 text-left text-sm font-medium text-black-700 focus:outline-none focus:ring-0 data-[selected]:bg-primary data-[selected]:text-white" > {item.title} <ChevronRightIcon className="size-4" /> </Tab> ))} </TabList> <TabPanels className="flex basis-3/4"> {tabItems.map((item) => ( <TabPanelContent key={item.id} ids={item.content ? JSON.parse(item.content) : []} /> ))} </TabPanels> </div> </TabGroup> ); }; export const TabsPlaceholder = () => { return ( <div className="flex w-full gap-x-10"> <div className="flex shrink-0 basis-1/4 animate-pulse flex-col gap-2"> <div className="h-14 bg-gray-200/60" /> <div className="h-14 bg-gray-200/60" /> <div className="h-14 bg-gray-200/60" /> <div className="h-14 bg-gray-200/60" /> <div className="h-14 bg-gray-200/60" /> </div> <div className="flex h-96 basis-3/4 animate-pulse rounded bg-gray-200/60" /> </div> ); }; export default Tabs;