import { RecordShowRightDrawerActionMenu } from '@/action-menu/components/RecordShowRightDrawerActionMenu'; import { RecordShowRightDrawerOpenRecordButton } from '@/action-menu/components/RecordShowRightDrawerOpenRecordButton'; import { ActivityTargetableObject } from '@/activities/types/ActivityTargetableEntity'; import { isNewViewableRecordLoadingState } from '@/object-record/record-right-drawer/states/isNewViewableRecordLoading'; import { CardComponents } from '@/object-record/record-show/components/CardComponents'; import { FieldsCard } from '@/object-record/record-show/components/FieldsCard'; import { SummaryCard } from '@/object-record/record-show/components/SummaryCard'; import { RecordLayout } from '@/object-record/record-show/types/RecordLayout'; import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; import { ObjectRecord } from '@/object-record/types/ObjectRecord'; import { RightDrawerFooter } from '@/ui/layout/right-drawer/components/RightDrawerFooter'; import { ShowPageLeftContainer } from '@/ui/layout/show-page/components/ShowPageLeftContainer'; import { ShowPageSubContainerTabListContainer } from '@/ui/layout/show-page/components/ShowPageSubContainerTabListContainer'; import { SingleTabProps, TabList } from '@/ui/layout/tab/components/TabList'; import { useTabList } from '@/ui/layout/tab/hooks/useTabList'; import { useIsMobile } from '@/ui/utilities/responsive/hooks/useIsMobile'; import styled from '@emotion/styled'; import { useRecoilState, useRecoilValue } from 'recoil'; const StyledShowPageRightContainer = styled.div<{ isMobile: boolean }>` display: flex; flex-direction: column; height: 100%; justify-content: start; width: 100%; height: 100%; overflow: auto; `; const StyledTabListContainer = styled.div<{ shouldDisplay: boolean }>` display: ${({ shouldDisplay }) => (shouldDisplay ? 'flex' : 'none')}; `.withComponent(ShowPageSubContainerTabListContainer); const StyledContentContainer = styled.div<{ isInRightDrawer: boolean }>` flex: 1; overflow-y: auto; background: ${({ theme }) => theme.background.primary}; padding-bottom: ${({ theme, isInRightDrawer }) => isInRightDrawer ? theme.spacing(16) : 0}; `; export const TAB_LIST_COMPONENT_ID = 'show-page-right-tab-list'; type ShowPageSubContainerProps = { layout?: RecordLayout; tabs: SingleTabProps[]; targetableObject: Pick< ActivityTargetableObject, 'targetObjectNameSingular' | 'id' >; isInRightDrawer?: boolean; loading: boolean; isNewRightDrawerItemLoading?: boolean; }; export const ShowPageSubContainer = ({ tabs, layout, targetableObject, loading, isInRightDrawer = false, isNewRightDrawerItemLoading = false, }: ShowPageSubContainerProps) => { const tabListComponentId = `${TAB_LIST_COMPONENT_ID}-${isInRightDrawer}-${targetableObject.id}`; const { activeTabId } = useTabList(tabListComponentId); const isMobile = useIsMobile(); const isNewViewableRecordLoading = useRecoilValue( isNewViewableRecordLoadingState, ); const summaryCard = ( ); const fieldsCard = ( ); const renderActiveTabContent = () => { const activeTab = tabs.find((tab) => tab.id === activeTabId); if (!activeTab?.cards?.length) return null; return activeTab.cards.map((card, index) => { const CardComponent = CardComponents[card.type]; return CardComponent ? ( ) : null; }); }; const [recordFromStore] = useRecoilState( recordStoreFamilyState(targetableObject.id), ); const visibleTabs = tabs.filter((tab) => !tab.hide); const displaySummaryAndFields = layout && !layout.hideSummaryAndFields && !isMobile && !isInRightDrawer; return ( <> {displaySummaryAndFields && ( {summaryCard} {fieldsCard} )} 1}> {(isMobile || isInRightDrawer) && summaryCard} {renderActiveTabContent()} {isInRightDrawer && recordFromStore && ( , , ]} /> )} ); };