import Clipboard from '@react-native-clipboard/clipboard' import _map from 'lodash/map' import React, { FC } from 'react' import { Image, SectionList, Text, TouchableOpacity, View } from 'react-native' import { IMyOrderDetailsItem, IMyOrderDetailsTicket } from '../../api/types' import { BottomSheetModal, Loading } from '../../components' import R from '../../res' import Notification from './components/Notification' import TicketActions from './components/TicketActions/TicketActions' import { TicketActionType } from './components/TicketActions/TicketActionsTypes' import TicketListItem from './components/TicketListItem/TicketListItem' import s from './styles' import { IMyOrderDetailsViewProps, IOrderDetailsSectionData } from './types' const MyOrderDetailsView: FC = ({ data: { header, items, tickets }, styles, texts, isLinkCopied, onPressCopyLink, downloadStatus, config = { areActivityIndicatorsEnabled: true, areAlertsEnabled: true, }, isLoading, onTicketSelection, selectedTicket, onActionSelected, ticketActionsIcons, bottomSheetModalRef, moreButtonIcon, }) => { //#region Handlers const onCopyLinkHandler = () => { if (isLinkCopied) { return } Clipboard.setString(header.shareLink) onPressCopyLink() } const handleOnTicketSelection = (ticket: IMyOrderDetailsTicket) => { onTicketSelection(ticket) } const handleHideActionsModal = () => { onTicketSelection(undefined) } const handleOnActionSelected = (actionType: TicketActionType) => { onActionSelected(actionType) } //#endregion const copyIconTint = styles?.header?.shareLink?.copyIconTint || R.colors.black const copyIconTintActive = styles?.header?.shareLink?.copyIconTintActive || R.colors.validGreen const title = texts?.title || 'ORDER DETAILS' const subTitle = texts?.subTitle || 'ORDER SUMMARY' const referralLink = texts?.referralLink || 'Your personal share link for this event is:' const itemsTotal = texts?.listItem?.total || 'Total' const itemsTicketType = texts?.listItem?.ticketType || 'Ticket Type: ' const itemsPrice = texts?.listItem?.price || 'Price: ' const itemsQuantity = texts?.listItem?.quantity || 'Quantity: ' const ticketsTitle = texts?.ticketsTitle || 'Your Tickets: ' const ticketsId = texts?.ticketItem?.ticketId || 'Ticket ID: ' const ticketsType = texts?.ticketItem?.ticketType || 'Ticket Type: ' const ticketsHolderName = texts?.ticketItem?.holderName || 'Ticket Holder Name: ' const ticketsStatus = texts?.ticketItem?.status || 'Status: ' const copyText = texts?.copyText?.copy || 'Copy' const copiedText = texts?.copyText?.copied || 'Copied' const soFarText = texts?.referral?.soFar || `So far, you've referred` const ticketsText = texts?.referral?.tickets || `tickets.` const sellTicket = texts?.sellTicket || 'Sell Ticket' const removeTicketFromResale = texts?.removeTicketFromResale || 'Remove from resale' const download = texts?.ticketItem?.download || `Download` const renderShareLink = () => ( {header.shareLink} {isLinkCopied ? copiedText : copyText} ) const renderHeader = () => ( {title} {subTitle} {referralLink} {header?.shareLink && renderShareLink()} {soFarText}{' '} {header.salesReferred} {' '} {ticketsText} ) const parsedItems: IOrderDetailsSectionData[] | undefined = items ? _map(items, (item) => { return { id: `${item.name}.${item.price}`, item: item, } }) : undefined const parsedTickets = _map(tickets, (item) => { return { id: `${item.hash}`, item: item, } }) const itemsData = [ { title: items ? texts?.listItem?.title || 'Items' : '', data: parsedItems || [], renderItem: ({ item }: any) => renderItemComp(item), id: 0, }, { title: ticketsTitle, data: parsedTickets, renderItem: ({ item }: any) => _renderTicket(item), id: 1, }, ] const renderItemComp = ({ item }: { item: IMyOrderDetailsItem }) => item ? ( {itemsTicketType} {item.name} {itemsPrice} {item.currency} {item.price} {itemsQuantity} {item.quantity} {itemsTotal} {item.currency} {item.total} ) : null const _renderTicket = ({ item }: { item: IMyOrderDetailsTicket }) => ( ) return ( { if (section.id === 0) { if (!items) { return null } } return {section.title} }} renderSectionFooter={({ section }) => { if (section.id === 0 && parsedItems) { return ( {itemsTotal} {parsedItems ? parsedItems[0].item.currency : ''} {header.total} ) } return null }} /> {config?.areAlertsEnabled && (downloadStatus === 'downloaded' || downloadStatus === 'failed') && ( )} {isLoading && } {selectedTicket && ( } /> )} ) } export default MyOrderDetailsView