@bjsdistribution/dms-client-return 0.2.2-prod → 0.2.3-prod
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/common/expand-collapse/index.js +44 -26
- package/dist/common/expand-collapse/index.js.map +1 -1
- package/dist/common/modals/order-action-modal/OrderActionModal.js.map +1 -1
- package/dist/common/modals/order-action-modal/footer/OrderActionFooter.js.map +1 -1
- package/dist/components/client-portal/ClientPortalResponsive.js +148 -0
- package/dist/components/client-portal/ClientPortalResponsive.js.map +1 -0
- package/dist/components/client-portal/OutstandingTable.js +112 -118
- package/dist/components/client-portal/OutstandingTable.js.map +1 -1
- package/dist/components/client-portal/ReturnOverview.js +38 -37
- package/dist/components/client-portal/ReturnOverview.js.map +1 -1
- package/dist/components/client-portal/return-confirm/ConfirmedMain.js +4 -4
- package/dist/components/client-portal/return-confirm/ConfirmedMain.js.map +1 -1
- package/dist/components/client-portal/return-confirm/ReturnConfirmedTable.js +445 -185
- package/dist/components/client-portal/return-confirm/ReturnConfirmedTable.js.map +1 -1
- package/dist/components/fakeData.js.map +1 -1
- package/dist/components/order-daily-overview/common/fakedata.js.map +1 -1
- package/dist/components/order-daily-overview/common/mediaQuery.js +17 -0
- package/dist/components/order-daily-overview/common/mediaQuery.js.map +1 -0
- package/dist/components/order-daily-overview/filters/FilterStyle.js +174 -11
- package/dist/components/order-daily-overview/filters/FilterStyle.js.map +1 -1
- package/dist/components/order-daily-overview/header/route-header/RouterHeaderStyle.js +9 -4
- package/dist/components/order-daily-overview/header/route-header/RouterHeaderStyle.js.map +1 -1
- package/dist/components/order-daily-overview/header/route-header/title/HeaderTitle.js +11 -1
- package/dist/components/order-daily-overview/header/route-header/title/HeaderTitle.js.map +1 -1
- package/dist/components/order-daily-overview/header-filters/Styledfilters.js +46 -17
- package/dist/components/order-daily-overview/header-filters/Styledfilters.js.map +1 -1
- package/dist/components/order-daily-overview/index.js +76 -53
- package/dist/components/order-daily-overview/index.js.map +1 -1
- package/dist/components/order-daily-overview/return-after-table/table/OrderTable.js +101 -103
- package/dist/components/order-daily-overview/return-after-table/table/OrderTable.js.map +1 -1
- package/dist/components/order-daily-overview/return-after-table/table-filters/ReturnOrderFilter.js +135 -134
- package/dist/components/order-daily-overview/return-after-table/table-filters/ReturnOrderFilter.js.map +1 -1
- package/dist/components/order-daily-overview/return-after-table/table-filters/TableFilters.js +17 -11
- package/dist/components/order-daily-overview/return-after-table/table-filters/TableFilters.js.map +1 -1
- package/dist/components/order-daily-overview/return-order-table/return-orders-filters/ReturnFilter.js +5 -5
- package/dist/components/order-daily-overview/return-order-table/return-orders-filters/ReturnFilter.js.map +1 -1
- package/dist/components/order-daily-overview/return-order-table/return-orders-filters/ReturnOrderTable.js +129 -135
- package/dist/components/order-daily-overview/return-order-table/return-orders-filters/ReturnOrderTable.js.map +1 -1
- package/dist/components/order-daily-overview/return-order-table/return-orders-filters/returnstyles.js +346 -27
- package/dist/components/order-daily-overview/return-order-table/return-orders-filters/returnstyles.js.map +1 -1
- package/dist/components/order-daily-overview/table/ReturnTable.js +199 -183
- package/dist/components/order-daily-overview/table/ReturnTable.js.map +1 -1
- package/dist/components/order-daily-overview/table/table-data/styles.js +159 -38
- package/dist/components/order-daily-overview/table/table-data/styles.js.map +1 -1
- package/dist/components/order-daily-overview/table-view/PaginationStyle.js +21 -6
- package/dist/components/order-daily-overview/table-view/PaginationStyle.js.map +1 -1
- package/dist/components/order-view/DynamicTable.js +136 -35
- package/dist/components/order-view/DynamicTable.js.map +1 -1
- package/dist/components/order-view/details-filters/DetailsFilters.js +33 -8
- package/dist/components/order-view/details-filters/DetailsFilters.js.map +1 -1
- package/dist/components/order-view/details-filters/left-side-filters/ActionsMenu.js +23 -5
- package/dist/components/order-view/details-filters/left-side-filters/ActionsMenu.js.map +1 -1
- package/dist/components/order-view/details-filters/left-side-filters/dropdowns/DropDowns.js +39 -22
- package/dist/components/order-view/details-filters/left-side-filters/dropdowns/DropDowns.js.map +1 -1
- package/dist/components/order-view/details-filters/right-side-filters/Details.js +25 -12
- package/dist/components/order-view/details-filters/right-side-filters/Details.js.map +1 -1
- package/dist/components/order-view/general-information/Status.js +58 -28
- package/dist/components/order-view/general-information/Status.js.map +1 -1
- package/dist/components/order-view/generic-table/AuditLogs.js +129 -24
- package/dist/components/order-view/generic-table/AuditLogs.js.map +1 -1
- package/dist/components/order-view/notes/logs/index.js +15 -7
- package/dist/components/order-view/notes/logs/index.js.map +1 -1
- package/dist/components/order-view/notes/order-dropdown/NewReturnDropdown.js +7 -7
- package/dist/components/order-view/notes/order-dropdown/NewReturnDropdown.js.map +1 -1
- package/dist/components/order-view/notification/index.js +68 -55
- package/dist/components/order-view/notification/index.js.map +1 -1
- package/dist/components/order-view/order-actions/Dropdown.js +3 -3
- package/dist/components/order-view/order-actions/Dropdown.js.map +1 -1
- package/dist/components/order-view/order-actions/actions/cancel-order/CancelOrderTable.js +45 -47
- package/dist/components/order-view/order-actions/actions/cancel-order/CancelOrderTable.js.map +1 -1
- package/dist/components/order-view/order-actions/actions/cancel-order/ReturnReason.js +23 -36
- package/dist/components/order-view/order-actions/actions/cancel-order/ReturnReason.js.map +1 -1
- package/dist/components/order-view/order-actions/actions/confirm-order/tables/ProductTable.js +23 -25
- package/dist/components/order-view/order-actions/actions/confirm-order/tables/ProductTable.js.map +1 -1
- package/dist/components/order-view/order-actions/actions/force-debrief/ForceDebriefModal.js +88 -89
- package/dist/components/order-view/order-actions/actions/force-debrief/ForceDebriefModal.js.map +1 -1
- package/dist/components/order-view/order-actions/actions/force-debrief/charges/collection-add-ons/index.js +16 -16
- package/dist/components/order-view/order-actions/actions/force-debrief/charges/collection-add-ons/index.js.map +1 -1
- package/dist/components/order-view/order-actions/actions/force-debrief/escalation/EscalationReason.js +22 -23
- package/dist/components/order-view/order-actions/actions/force-debrief/escalation/EscalationReason.js.map +1 -1
- package/dist/components/order-view/order-actions/actions/force-debrief/order-info/RadioButtons.js +52 -56
- package/dist/components/order-view/order-actions/actions/force-debrief/order-info/RadioButtons.js.map +1 -1
- package/dist/components/order-view/order-actions/actions/force-debrief/order-info/dropdowns/FailureReasonDropdown.js +26 -27
- package/dist/components/order-view/order-actions/actions/force-debrief/order-info/dropdowns/FailureReasonDropdown.js.map +1 -1
- package/dist/components/order-view/order-actions/actions/hold-order/HoldOrderModal.js +29 -29
- package/dist/components/order-view/order-actions/actions/hold-order/HoldOrderModal.js.map +1 -1
- package/dist/components/order-view/order-actions/actions/split-order/SplitOrderTable.js +54 -222
- package/dist/components/order-view/order-actions/actions/split-order/SplitOrderTable.js.map +1 -1
- package/dist/components/order-view/order-actions/actions/split-order/index.js +37 -50
- package/dist/components/order-view/order-actions/actions/split-order/index.js.map +1 -1
- package/dist/components/order-view/order-actions/actions/uncancel-order/UncancelOrderTable.js +35 -37
- package/dist/components/order-view/order-actions/actions/uncancel-order/UncancelOrderTable.js.map +1 -1
- package/dist/components/order-view/order-actions/actions/what3words/What3WordsModal.tsx.js +85 -85
- package/dist/components/order-view/order-actions/actions/what3words/What3WordsModal.tsx.js.map +1 -1
- package/dist/components/order-view/order-details/expanded-content/customer-section/contact-info/ContactHome.js +12 -8
- package/dist/components/order-view/order-details/expanded-content/customer-section/contact-info/ContactHome.js.map +1 -1
- package/dist/components/order-view/order-details/expanded-content/customer-section/contact-info/ContactMobile.js +22 -18
- package/dist/components/order-view/order-details/expanded-content/customer-section/contact-info/ContactMobile.js.map +1 -1
- package/dist/components/order-view/order-details/expanded-content/customer-section/contact-info/index.js +14 -8
- package/dist/components/order-view/order-details/expanded-content/customer-section/contact-info/index.js.map +1 -1
- package/dist/components/order-view/order-details/expanded-content/customer-section/index.js +19 -13
- package/dist/components/order-view/order-details/expanded-content/customer-section/index.js.map +1 -1
- package/dist/components/order-view/order-details/expanded-content/customer-section/location-info/Address.js +11 -6
- package/dist/components/order-view/order-details/expanded-content/customer-section/location-info/Address.js.map +1 -1
- package/dist/components/order-view/order-details/expanded-content/customer-section/location-info/Latitude.js +23 -21
- package/dist/components/order-view/order-details/expanded-content/customer-section/location-info/Latitude.js.map +1 -1
- package/dist/components/order-view/order-details/expanded-content/customer-section/location-info/Longitude.js +23 -21
- package/dist/components/order-view/order-details/expanded-content/customer-section/location-info/Longitude.js.map +1 -1
- package/dist/components/order-view/order-details/expanded-content/customer-section/location-info/index.js +39 -21
- package/dist/components/order-view/order-details/expanded-content/customer-section/location-info/index.js.map +1 -1
- package/dist/components/order-view/order-details/expanded-content/footer/index.js +28 -14
- package/dist/components/order-view/order-details/expanded-content/footer/index.js.map +1 -1
- package/dist/components/order-view/order-details/expanded-content/orders-section/index.js +44 -28
- package/dist/components/order-view/order-details/expanded-content/orders-section/index.js.map +1 -1
- package/dist/components/order-view/order-details/expanded-content/services-section/OrderServices.js +28 -20
- package/dist/components/order-view/order-details/expanded-content/services-section/OrderServices.js.map +1 -1
- package/dist/components/order-view/order-details/expanded-content/services-section/ServiceLevel.js +17 -18
- package/dist/components/order-view/order-details/expanded-content/services-section/ServiceLevel.js.map +1 -1
- package/dist/components/order-view/order-details/expanded-content/services-section/ServiceType.js +22 -26
- package/dist/components/order-view/order-details/expanded-content/services-section/ServiceType.js.map +1 -1
- package/dist/components/order-view/order-details/expanded-content/services-section/index.js +79 -25
- package/dist/components/order-view/order-details/expanded-content/services-section/index.js.map +1 -1
- package/dist/components/order-view/order-details/helper.js.map +1 -1
- package/dist/components/order-view/products-info/collapsed-content/index.js +21 -15
- package/dist/components/order-view/products-info/collapsed-content/index.js.map +1 -1
- package/dist/components/order-view/products-info/index.js +36 -36
- package/dist/components/order-view/products-info/index.js.map +1 -1
- package/dist/components/order-view/return-client-products/product-table/ReturnProductTable.js +265 -334
- package/dist/components/order-view/return-client-products/product-table/ReturnProductTable.js.map +1 -1
- package/dist/components/order-view/store.js +155 -162
- package/dist/components/order-view/store.js.map +1 -1
- package/dist/components/order-view/toolbox-resources/expanded-content/index.js +281 -173
- package/dist/components/order-view/toolbox-resources/expanded-content/index.js.map +1 -1
- package/dist/components/utils.js +5 -4
- package/dist/components/utils.js.map +1 -1
- package/dist/types/common/modals/order-action-modal/OrderActionModal.d.ts +1 -2
- package/dist/types/common/modals/order-action-modal/footer/OrderActionFooter.d.ts +1 -1
- package/dist/types/components/client-portal/ClientPortalResponsive.d.ts +15 -0
- package/dist/types/components/order-daily-overview/common/mediaQuery.d.ts +4 -0
- package/dist/types/components/order-daily-overview/filters/FilterStyle.d.ts +1 -0
- package/dist/types/components/order-view/order-actions/Dropdown.d.ts +0 -1
- package/dist/types/components/order-view/return-client-products/product-table/ReturnProductTable.d.ts +1 -0
- package/dist/types/components/order-view/store.d.ts +0 -1
- package/dist/types/components/order-view/types.d.ts +1 -1
- package/dist/types/components/utils.d.ts +1 -0
- package/package.json +2 -2
- package/dist/assets/icons/ChevronDownIcon.js +0 -26
- package/dist/assets/icons/ChevronDownIcon.js.map +0 -1
- package/dist/components/order-view/return-client-products/product-table/palletGrouping.js +0 -47
- package/dist/components/order-view/return-client-products/product-table/palletGrouping.js.map +0 -1
- package/dist/types/components/order-view/return-client-products/product-table/palletGrouping.d.ts +0 -23
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../src/components/order-view/toolbox-resources/expanded-content/index.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport styled, { css } from 'styled-components';\nimport {\n useEpodImages,\n useOrderId,\n // useOrderProductsToolbox,\n useZoomCallLogs,\n useZoomCallLogsLoader,\n skeletonTomTom,\n} from '../../store';\nimport CustomScrollBar from '../../../../common/scrollbar';\nimport CollapsableForm from '../../../../common/expand-collapse';\nimport CollapsedContent from '../collapsed-content';\nimport Tippy from '@tippyjs/react';\nimport DownloadIcon from '../../../../assets/icons/DownloadIcon';\nimport { Image, notification, Skeleton, Spin, Tabs } from 'antd';\nimport {\n formatUtcToLocal,\n PrivateIcon,\n PublicIcon,\n toReverseDeliveryLabel,\n useAxios,\n ViewIcon,\n} from '@bjsdistribution/dms-component-library';\nimport { useAtom, useClientPortal } from '../../../store';\nimport { ApiResponse } from '../../types';\n\nfunction Toolbox() {\n const [orderId] = useOrderId();\n // const [orderToolbox] = useOrderProductsToolbox();\n // const [epodData, setEpodData] = useState<any[]>([]);\n const [tomTomLoader] = useAtom(skeletonTomTom);\n const [activeTab, setActiveTab] = useState<string>('pda');\n // zoom call logs\n const [zoomCallLogs, setZoomCallLogs] = useZoomCallLogs();\n const [zoomCallLogsLoader, setZoomCallLogsLoader] = useZoomCallLogsLoader();\n const [spinner, setSpinner] = useState<any>([]);\n const [epodImages] = useEpodImages();\n const [epodDataClient, setEpodDataClient] = useState<any[]>([]);\n const [clientPortal] = useClientPortal();\n\n // get logs call\n const {\n data: fetchedZoomCallLogs,\n // setShouldPerformAction: setAction,\n loading: zoomCallLogsLoading,\n fetchData: callLogsApi,\n } = useAxios<{\n data: ApiResponse[];\n }>({\n endpoint: `v1/orders/call_logs/?order_id=${orderId}`,\n method: 'GET',\n // performAction: false,\n });\n\n useEffect(() => {\n if (orderId) {\n setZoomCallLogs(fetchedZoomCallLogs?.data);\n }\n // loader state\n setZoomCallLogsLoader(zoomCallLogsLoading);\n }, [zoomCallLogsLoading]);\n\n const { fetchData: fetchCallRecording } = useAxios<{\n data: any[];\n message: string;\n }>({\n endpoint: `/v1/orders/call_logs/recording/download/`,\n method: 'POST',\n config: {\n responseType: 'blob',\n },\n });\n\n // // images for normal [portal]\n // const filterData = orderToolbox?.data?.resources?.result;\n // const imageData = filterData?.map((pic: any) => ({\n // s3_content: pic?.s3_content,\n // type: pic?.type,\n // time: new Date(pic?.timestamp * 1000).toLocaleString(),\n // path: pic?.path,\n // visibility_status: pic?.visibility_status\n // }));\n\n // useEffect(() => {\n // if (imageData && imageData?.length > 0) {\n // setEpodData(imageData);\n // }\n // }, [imageData?.length > 0]);\n\n // images for client Protal\n const filterDataClient = epodImages?.result;\n const imageDataClient = filterDataClient?.map((pic: any) => ({\n s3_content: pic?.s3_content,\n // Use image_link for photos as it already contains the .jpg extension\n image_link: pic?.image_link,\n type: pic?.type,\n time: new Date(pic?.timestamp * 1000).toLocaleString(),\n path: pic?.path,\n visibility_status: pic?.visibility_status,\n }));\n\n useEffect(() => {\n if (imageDataClient && imageDataClient?.length > 0) {\n setEpodDataClient(imageDataClient);\n }\n }, [imageDataClient?.length > 0]);\n\n // Detect file type from the first bytes (magic numbers) of a blob\n const detectExtensionFromBlob = async (blob: Blob): Promise<string> => {\n const arr = new Uint8Array(await blob.slice(0, 12).arrayBuffer());\n\n // JPEG: FF D8 FF\n if (arr[0] === 0xff && arr[1] === 0xd8 && arr[2] === 0xff) return '.jpeg';\n // PNG: 89 50 4E 47\n if (\n arr[0] === 0x89 &&\n arr[1] === 0x50 &&\n arr[2] === 0x4e &&\n arr[3] === 0x47\n )\n return '.png';\n // PDF: %PDF (25 50 44 46)\n if (\n arr[0] === 0x25 &&\n arr[1] === 0x50 &&\n arr[2] === 0x44 &&\n arr[3] === 0x46\n )\n return '.pdf';\n // MP3 with ID3 tag: 49 44 33\n if (arr[0] === 0x49 && arr[1] === 0x44 && arr[2] === 0x33) return '.mp3';\n // MP3 frame sync: FF FB, FF F3, FF F2\n if (\n arr[0] === 0xff &&\n (arr[1] === 0xfb || arr[1] === 0xf3 || arr[1] === 0xf2)\n )\n return '.mp3';\n // WAV: RIFF....WAVE\n if (\n arr[0] === 0x52 &&\n arr[1] === 0x49 &&\n arr[2] === 0x46 &&\n arr[3] === 0x46 &&\n arr[8] === 0x57 &&\n arr[9] === 0x41 &&\n arr[10] === 0x56 &&\n arr[11] === 0x45\n )\n return '.wav';\n // OGG: OggS\n if (\n arr[0] === 0x4f &&\n arr[1] === 0x67 &&\n arr[2] === 0x67 &&\n arr[3] === 0x53\n )\n return '.ogg';\n // GIF: GIF8\n if (\n arr[0] === 0x47 &&\n arr[1] === 0x49 &&\n arr[2] === 0x46 &&\n arr[3] === 0x38\n )\n return '.gif';\n // WEBP: RIFF....WEBP\n if (\n arr[0] === 0x52 &&\n arr[1] === 0x49 &&\n arr[2] === 0x46 &&\n arr[3] === 0x46 &&\n arr[8] === 0x57 &&\n arr[9] === 0x45 &&\n arr[10] === 0x42 &&\n arr[11] === 0x50\n )\n return '.webp';\n // MP4: ....ftyp (bytes 4-7)\n if (\n arr[4] === 0x66 &&\n arr[5] === 0x74 &&\n arr[6] === 0x79 &&\n arr[7] === 0x70\n )\n return '.mp4';\n\n return '';\n };\n\n // Fallback: map MIME type to extension\n const getExtensionFromMime = (mimeType: string): string => {\n const mimeMap: Record<string, string> = {\n 'image/jpeg': '.jpeg',\n 'image/jpg': '.jpg',\n 'image/png': '.png',\n 'image/gif': '.gif',\n 'image/webp': '.webp',\n 'application/pdf': '.pdf',\n 'audio/mpeg': '.mp3',\n 'audio/mp3': '.mp3',\n 'audio/wav': '.wav',\n 'audio/ogg': '.ogg',\n 'audio/x-wav': '.wav',\n 'video/mp4': '.mp4',\n };\n return mimeMap[mimeType?.toLowerCase()] || '';\n };\n\n const handleDownload = async (url: string, filename?: string) => {\n if (!url) return;\n try {\n const response = await fetch(url);\n if (!response.ok) throw new Error('Download failed');\n const blob = await response.blob();\n\n // 1. Try magic bytes detection (most reliable)\n let extension = await detectExtensionFromBlob(blob);\n\n // 2. Fallback to Content-Type header\n if (!extension) {\n const contentType = response.headers.get('Content-Type') || '';\n extension = getExtensionFromMime(contentType.split(';')[0]?.trim());\n }\n\n // 3. Fallback to blob.type\n if (!extension && blob.type) {\n extension = getExtensionFromMime(blob.type);\n }\n\n // Build a proper filename with extension\n let downloadName = filename || 'download';\n // Only append extension if the filename doesn't already have one\n const hasExtension = /\\.\\w{2,5}$/.test(downloadName);\n if (!hasExtension && extension) {\n downloadName = `${downloadName}${extension}`;\n }\n\n const blobUrl = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = blobUrl;\n link.download = downloadName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(blobUrl);\n } catch (err) {\n // Fallback: open in new tab\n const link = document.createElement('a');\n link.href = url;\n link.download = filename || 'download';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n };\n\n const onChangeTab = (key: string) => {\n setActiveTab(key);\n\n if (key === 'customer_calls') {\n callLogsApi();\n }\n };\n\n const activeLoaderState =\n activeTab === 'pda' ? tomTomLoader : zoomCallLogsLoader;\n\n // const activeApiData =\n // activeTab === 'pda'\n // ? clientPortal\n // ? epodData || []\n // : epodImages?.result || []\n // : zoomCallLogs || [];\n\n // const imageDataClient = epodImages?.result?.map((pic: any) => ({\n // s3_content: pic?.s3_content,\n // type: pic?.type,\n // time: new Date(pic?.timestamp * 1000).toLocaleString(),\n // path: pic?.path,\n // }));\n\n const activeApiData = activeTab === 'pda' ? epodDataClient : zoomCallLogs;\n\n // const activeApiData =\n // activeTab === 'pda'\n // ? (clientPortal ? epodData : epodDataClient) || []\n // : zoomCallLogs || [];\n\n // console.log(activeApiData, 'activeApiDataactiveApiData');\n\n const updateSpinner = (url: string, status: boolean) => {\n setSpinner((prev: any) => {\n // If URL exists, update it; otherwise, add new object\n return prev.some((item: any) => item.url === url)\n ? prev.map((item: any) =>\n item.url === url ? { ...item, status } : item\n )\n : [...prev, { url, status }];\n });\n };\n\n const downloadRecording = async (url: string) => {\n try {\n updateSpinner(url, true);\n const newPayload = {\n recording_url: url,\n };\n\n const resp: any = await fetchCallRecording({\n payload: newPayload,\n });\n\n const { pathname } = new URL(url);\n const id = pathname.split('/').pop();\n\n // Detect actual file type from blob content\n const blob = resp instanceof Blob ? resp : new Blob([resp]);\n let extension = await detectExtensionFromBlob(blob);\n\n // Fallback to blob.type if magic bytes didn't match\n if (!extension && blob.type) {\n extension = getExtensionFromMime(blob.type);\n }\n\n // Default to .mp3 for call recordings if detection fails\n if (!extension) {\n extension = '.mp3';\n }\n\n const downloadUrl = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = downloadUrl;\n a.download = `${id}${extension}`;\n a.click();\n URL.revokeObjectURL(downloadUrl);\n notification.success({\n message: 'Success',\n description: 'File downloaded successfully',\n });\n } catch (err) {\n console.log(err);\n notification.error({\n message: 'Failed to download file',\n //@ts-ignore\n description: err,\n });\n } finally {\n updateSpinner(url, false);\n }\n };\n\n const renderTableBody = (key: string, apiData: any[]) => {\n if (key === 'pda') {\n return apiData?.map((item, index) => (\n <TableRow key={index}>\n <TableData>\n {item?.visibility_status === 'locked' ? (\n <PrivateIcon />\n ) : (\n <PublicIcon />\n )}\n <div>{item?.path}</div>\n </TableData>\n <TableData>\n {toReverseDeliveryLabel(item?.type, clientPortal)}\n </TableData>\n <TableData>{item?.time}</TableData>\n <TableData colSpan={2}>\n {(item?.type === 'photo' || item?.type === 'call_recording') && (\n <Actions>\n <Row>\n {item?.type === 'call_recording' ? (\n <Tippy content=\"Play\" placement=\"top\" trigger=\"mouseenter\">\n <TippyContainer\n onClick={() => {\n // Append extension from path to s3_content URL for proper browser playback/download\n const ext = item?.path?.match(/\\.\\w+$/)?.[0] || '';\n window.open(`${item?.s3_content}${ext}`, '_blank');\n }}\n >\n <ViewIcon style={{ cursor: 'pointer' }} />\n </TippyContainer>\n </Tippy>\n ) : (\n <Tippy content=\"View\" placement=\"top\" trigger=\"mouseenter\">\n <TippyContainer className=\"ImageView\">\n <ViewIcon style={{ cursor: 'pointer' }} />\n {/* Use image_link for photos so the preview uses the .jpg URL */}\n <Image\n width=\"20px\"\n src={\n item?.type === 'photo'\n ? item?.image_link\n : item?.s3_content\n }\n />\n </TippyContainer>\n </Tippy>\n )}\n\n <Tippy\n content=\"Download\"\n placement=\"top\"\n trigger=\"mouseenter\"\n >\n <TippyContainer\n onClick={() => {\n // For photos, image_link already has .jpg extension\n // For other types, append extension from path to s3_content URL\n const ext = item?.path?.match(/\\.\\w+$/)?.[0] || '';\n const downloadUrl =\n item?.type === 'photo'\n ? item?.image_link\n : `${item?.s3_content}${ext}`;\n handleDownload(\n downloadUrl,\n item?.path?.split('/').pop()\n );\n }}\n >\n <DownloadIcon />\n </TippyContainer>\n </Tippy>\n </Row>\n </Actions>\n )}\n </TableData>\n </TableRow>\n ));\n } else {\n return zoomCallLogs?.map((item: any, index: number) => {\n const recording = item?.recordings?.[0]; // take first recording only all are same\n const spinnerItem = spinner.find((s: any) => s.url === recording?.url);\n const isLoading = spinnerItem?.status || false;\n\n return (\n <TableRow key={index}>\n <TableData>{item?.description}</TableData>\n <TableData>{item?.source_type}</TableData>\n <TableData>\n <DateTimeContainer>\n <span>{formatUtcToLocal(item?.start_datetime).date}</span>\n <span>{formatUtcToLocal(item?.start_datetime).time}</span>\n </DateTimeContainer>\n </TableData>\n <TableData colSpan={2}>\n <div className=\"call-recording-actions\">\n <Row>\n {!isLoading && recording && (\n <>\n <Tippy\n content=\"Play\"\n placement=\"top\"\n trigger=\"mouseenter\"\n >\n <TippyContainer\n onClick={() => window.open(recording.url, '_blank')}\n >\n <ViewIcon style={{ cursor: 'pointer' }} />\n </TippyContainer>\n </Tippy>\n <Tippy\n content=\"Download\"\n placement=\"top\"\n trigger=\"mouseenter\"\n >\n <TippyContainer\n onClick={() => downloadRecording(recording.url)}\n >\n <DownloadIcon />\n </TippyContainer>\n </Tippy>\n </>\n )}\n {recording && <Spin size=\"small\" spinning={isLoading} />}\n </Row>\n </div>\n </TableData>\n </TableRow>\n );\n });\n }\n };\n\n return (\n <CollapsableForm collapsedContent={<CollapsedContent />}>\n <TabsContainer>\n <Tabs\n defaultActiveKey=\"pda\"\n activeKey={activeTab}\n onChange={onChangeTab}\n >\n <Tabs.TabPane\n key=\"pda\"\n tab={\n <div\n className={activeTab === 'pda' ? 'active-tab' : 'passive-tab'}\n >\n PDA <span className=\"count\">{epodDataClient?.length}</span>\n </div>\n }\n />\n\n <Tabs.TabPane\n key=\"customer_calls\"\n tab={\n <div\n className={\n activeTab === 'customer_calls' ? 'active-tab' : 'passive-tab'\n }\n >\n Customer Calls\n <span className=\"count\">{zoomCallLogs?.length}</span>\n </div>\n }\n />\n </Tabs>\n </TabsContainer>\n <MainContainer>\n <Container>\n <TableWrapper>\n <CustomScrollBar>\n <Table>\n <TableHead>\n <TableRow>\n <TableHeadData>Content</TableHeadData>\n <TableHeadData>Type</TableHeadData>\n <TableHeadData>Time</TableHeadData>\n <TableHeadData>Options</TableHeadData>\n </TableRow>\n </TableHead>\n <TableBody>\n {activeLoaderState ? (\n <>\n {/* Skeleton Rows */}\n <TableRow>\n <TableCell>\n <Skeleton.Input\n active\n size=\"small\"\n style={{ width: 100 }}\n />\n </TableCell>\n <TableCell>\n <Skeleton.Input\n active\n size=\"small\"\n style={{ width: 80 }}\n />\n </TableCell>\n <TableCell>\n <Skeleton.Input\n active\n size=\"small\"\n style={{ width: 130 }}\n />\n </TableCell>\n <TableCell>\n <Skeleton.Input\n active\n size=\"small\"\n style={{ width: 100 }}\n />\n </TableCell>\n <TableCell>\n <Skeleton.Input\n active\n size=\"small\"\n style={{ width: 100 }}\n />\n </TableCell>\n </TableRow>\n <TableRow>\n <TableCell>\n <Skeleton.Input\n active\n size=\"small\"\n style={{ width: 100 }}\n />\n </TableCell>\n <TableCell>\n <Skeleton.Input\n active\n size=\"small\"\n style={{ width: 80 }}\n />\n </TableCell>\n <TableCell>\n <Skeleton.Input\n active\n size=\"small\"\n style={{ width: 130 }}\n />\n </TableCell>\n <TableCell>\n <Skeleton.Input\n active\n size=\"small\"\n style={{ width: 100 }}\n />\n </TableCell>\n <TableCell>\n <Skeleton.Input\n active\n size=\"small\"\n style={{ width: 100 }}\n />\n </TableCell>\n </TableRow>\n </>\n ) : activeApiData?.length > 0 ? (\n renderTableBody(activeTab, activeApiData)\n ) : (\n <TableRow>\n <TableData colSpan={5}>No entries found.</TableData>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </CustomScrollBar>\n </TableWrapper>\n </Container>\n </MainContainer>\n </CollapsableForm>\n );\n}\n\nconst DateTimeContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: 2px;\n`;\n\nconst tabText = css`\n color: #3a3630 !important;\n font-family: 'Lato', sans-serif;\n font-size: 14px;\n font-weight: 500;\n`;\n\nconst countBadge = css`\n color: #fff;\n background: #3a3630;\n padding: 2px 5px;\n border-radius: 6px;\n font-size: 13px;\n font-family: 'Lato', sans-serif;\n height: 18px;\n display: flex;\n align-items: center;\n`;\n\nconst TabsContainer = styled.div`\n margin-bottom: 10px;\n\n .ant-tabs {\n width: 100%;\n }\n .ant-tabs-tab {\n .ant-tabs-tab-btn {\n ${tabText};\n .count {\n ${countBadge};\n }\n .passive-tab {\n display: flex;\n gap: 5px;\n align-items: center;\n opacity: 0.3;\n }\n }\n }\n .ant-tabs-tab-active {\n .ant-tabs-tab-btn {\n ${tabText};\n .count {\n ${countBadge};\n }\n .active-tab {\n display: flex;\n gap: 5px;\n align-items: center;\n }\n }\n }\n .ant-tabs-ink-bar {\n background: #feba30;\n }\n`;\n\nconst TableCell = styled.td<{ width?: string }>`\n padding: 12px 8px;\n text-align: left;\n max-width: ${({ width }) => width || 'auto'};\n`;\nconst Container = styled.div`\n height: 30vh;\n pointer-events: initial;\n @media (max-width: 1024px) {\n height: 40vh;\n }\n`;\n\nconst TableWrapper = styled.div`\n height: 100%;\n overflow-x: auto;\n scrollbar-width: thin;\n border-top-left-radius: 15px;\n border-top-right-radius: 15px;\n`;\n\nconst TableHeadData = styled.th`\n padding: 10px 5px;\n font-family: 'Roboto', sans-serif;\n font-size: 14px;\n font-weight: 500;\n line-height: 24px;\n letter-spacing: 0px;\n text-align: left;\n`;\n\nconst TableData = styled.td`\n border-spacing: 0px;\n padding: 10px 5px;\n font-family: 'Lato', sans-serif;\n font-size: 13px;\n font-weight: 400;\n line-height: 16px;\n letter-spacing: 0px;\n\n .call-recording-actions {\n display: flex;\n gap: 5px;\n align-items: center;\n }\n`;\n\nconst TableRow = styled.tr`\n border-bottom: 1px solid rgb(215, 214, 213);\n font-weight: 300;\n`;\n\nconst TableBody = styled.tbody`\n border-bottom-right-radius: 10px;\n background: rgb(255, 255, 255);\n height: 96%;\n overflow: auto;\n width: 100%;\n`;\n\nconst TableHead = styled.thead`\n position: sticky;\n top: 0px;\n z-index: 1;\n background: #f8f8f8;\n white-space: nowrap;\n`;\n\nconst Table = styled.table`\n width: 100%;\n background: rgb(255, 255, 255);\n box-shadow: 0px 4px 30px 0px #2e2d740d;\n border-collapse: collapse;\n`;\n\nconst Actions = styled.div``;\n\nconst TippyContainer = styled.div`\n display: inline-block;\n margin: 7px;\n`;\n\nconst Row = styled.div`\n gap: 10px;\n cursor: pointer;\n display: flex;\n align-items: center;\n .ImageView {\n position: relative;\n .ant-image {\n position: absolute;\n left: 0;\n top: 2px;\n opacity: 0;\n }\n }\n`;\n\nconst MainContainer = styled.div`\n .col {\n display: flex;\n align-items: center;\n color: #3a3630;\n padding: 10px 5px;\n text-align: left;\n }\n\n .col.noFlex {\n flex: 0;\n }\n\n .col.sm {\n flex: 1;\n min-width: 100px;\n }\n\n .col.md {\n flex: 2;\n justify-content: flex-start;\n min-width: 85px;\n }\n\n .col.lg {\n flex: 4;\n justify-content: flex-start;\n min-width: 180px;\n }\n\n .col.date {\n }\n\n .col.amount,\n .col.price {\n justify-content: flex-end;\n }\n\n .TableHeadData,\n .TableData {\n padding: 10px 5px;\n text-align: left;\n white-space: nowrap;\n }\n\n .TableRow {\n display: flex;\n width: 100%;\n }\n\n .Table {\n width: 100%;\n }\n`;\n\nexport default Toolbox;\n//\n"],"names":["Toolbox","orderId","useOrderId","tomTomLoader","useAtom","skeletonTomTom","activeTab","setActiveTab","useState","zoomCallLogs","setZoomCallLogs","useZoomCallLogs","zoomCallLogsLoader","setZoomCallLogsLoader","useZoomCallLogsLoader","spinner","setSpinner","epodImages","useEpodImages","epodDataClient","setEpodDataClient","clientPortal","useClientPortal","fetchedZoomCallLogs","zoomCallLogsLoading","callLogsApi","useAxios","useEffect","fetchCallRecording","imageDataClient","pic","detectExtensionFromBlob","blob","arr","getExtensionFromMime","mimeType","handleDownload","url","filename","response","extension","contentType","downloadName","blobUrl","link","onChangeTab","key","activeLoaderState","activeApiData","updateSpinner","status","prev","item","downloadRecording","resp","pathname","id","downloadUrl","a","notification","err","renderTableBody","apiData","index","TableRow","jsxs","TableData","jsx","PrivateIcon","PublicIcon","toReverseDeliveryLabel","Actions","Row","Tippy","TippyContainer","ext","ViewIcon","Image","DownloadIcon","recording","isLoading","s","DateTimeContainer","formatUtcToLocal","Fragment","Spin","CollapsableForm","CollapsedContent","TabsContainer","Tabs","MainContainer","Container","TableWrapper","CustomScrollBar","Table","TableHead","TableHeadData","TableBody","TableCell","Skeleton","styled","tabText","css","countBadge","width"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/components/order-view/toolbox-resources/expanded-content/index.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport styled, { css } from 'styled-components';\nimport {\n useEpodImages,\n useOrderId,\n // useOrderProductsToolbox,\n useZoomCallLogs,\n useZoomCallLogsLoader,\n skeletonTomTom,\n} from '../../store';\nimport CustomScrollBar from '../../../../common/scrollbar';\nimport CollapsableForm from '../../../../common/expand-collapse';\nimport CollapsedContent from '../collapsed-content';\nimport Tippy from '@tippyjs/react';\nimport DownloadIcon from '../../../../assets/icons/DownloadIcon';\nimport { Image, notification, Skeleton, Spin, Tabs } from 'antd';\nimport {\n formatUtcToLocal,\n PrivateIcon,\n PublicIcon,\n useAxios,\n ViewIcon,\n} from '@bjsdistribution/dms-component-library';\nimport { useAtom, useClientPortal } from '../../../store';\nimport { toReverseDeliveryLabel } from '../../../utils';\nimport { ApiResponse } from '../../types';\n\nfunction Toolbox() {\n const [orderId] = useOrderId();\n // const [orderToolbox] = useOrderProductsToolbox();\n // const [epodData, setEpodData] = useState<any[]>([]);\n const [tomTomLoader] = useAtom(skeletonTomTom);\n const [activeTab, setActiveTab] = useState<string>('pda');\n // zoom call logs\n const [zoomCallLogs, setZoomCallLogs] = useZoomCallLogs();\n const [zoomCallLogsLoader, setZoomCallLogsLoader] = useZoomCallLogsLoader();\n const [spinner, setSpinner] = useState<any>([]);\n const [epodImages] = useEpodImages();\n const [epodDataClient, setEpodDataClient] = useState<any[]>([]);\n const [clientPortal] = useClientPortal();\n\n // get logs call\n const {\n data: fetchedZoomCallLogs,\n // setShouldPerformAction: setAction,\n loading: zoomCallLogsLoading,\n fetchData: callLogsApi,\n } = useAxios<{\n data: ApiResponse[];\n }>({\n endpoint: `v1/orders/call_logs/?order_id=${orderId}`,\n method: 'GET',\n // performAction: false,\n });\n\n useEffect(() => {\n if (orderId) {\n setZoomCallLogs(fetchedZoomCallLogs?.data);\n }\n // loader state\n setZoomCallLogsLoader(zoomCallLogsLoading);\n }, [zoomCallLogsLoading]);\n\n const { fetchData: fetchCallRecording } = useAxios<{\n data: any[];\n message: string;\n }>({\n endpoint: `/v1/orders/call_logs/recording/download/`,\n method: 'POST',\n config: {\n responseType: 'blob',\n },\n });\n\n // // images for normal [portal]\n // const filterData = orderToolbox?.data?.resources?.result;\n // const imageData = filterData?.map((pic: any) => ({\n // s3_content: pic?.s3_content,\n // type: pic?.type,\n // time: new Date(pic?.timestamp * 1000).toLocaleString(),\n // path: pic?.path,\n // visibility_status: pic?.visibility_status\n // }));\n\n // useEffect(() => {\n // if (imageData && imageData?.length > 0) {\n // setEpodData(imageData);\n // }\n // }, [imageData?.length > 0]);\n\n // images for client Protal\n const filterDataClient = epodImages?.result;\n const imageDataClient = filterDataClient?.map((pic: any) => ({\n s3_content: pic?.s3_content,\n // Use image_link for photos as it already contains the .jpg extension\n image_link: pic?.image_link,\n type: pic?.type,\n time: new Date(pic?.timestamp * 1000).toLocaleString(),\n path: pic?.path,\n visibility_status: pic?.visibility_status,\n }));\n\n useEffect(() => {\n if (imageDataClient && imageDataClient?.length > 0) {\n setEpodDataClient(imageDataClient);\n }\n }, [imageDataClient?.length > 0]);\n\n // Detect file type from the first bytes (magic numbers) of a blob\n const detectExtensionFromBlob = async (blob: Blob): Promise<string> => {\n const arr = new Uint8Array(await blob.slice(0, 12).arrayBuffer());\n\n // JPEG: FF D8 FF\n if (arr[0] === 0xff && arr[1] === 0xd8 && arr[2] === 0xff) return '.jpeg';\n // PNG: 89 50 4E 47\n if (\n arr[0] === 0x89 &&\n arr[1] === 0x50 &&\n arr[2] === 0x4e &&\n arr[3] === 0x47\n )\n return '.png';\n // PDF: %PDF (25 50 44 46)\n if (\n arr[0] === 0x25 &&\n arr[1] === 0x50 &&\n arr[2] === 0x44 &&\n arr[3] === 0x46\n )\n return '.pdf';\n // MP3 with ID3 tag: 49 44 33\n if (arr[0] === 0x49 && arr[1] === 0x44 && arr[2] === 0x33) return '.mp3';\n // MP3 frame sync: FF FB, FF F3, FF F2\n if (\n arr[0] === 0xff &&\n (arr[1] === 0xfb || arr[1] === 0xf3 || arr[1] === 0xf2)\n )\n return '.mp3';\n // WAV: RIFF....WAVE\n if (\n arr[0] === 0x52 &&\n arr[1] === 0x49 &&\n arr[2] === 0x46 &&\n arr[3] === 0x46 &&\n arr[8] === 0x57 &&\n arr[9] === 0x41 &&\n arr[10] === 0x56 &&\n arr[11] === 0x45\n )\n return '.wav';\n // OGG: OggS\n if (\n arr[0] === 0x4f &&\n arr[1] === 0x67 &&\n arr[2] === 0x67 &&\n arr[3] === 0x53\n )\n return '.ogg';\n // GIF: GIF8\n if (\n arr[0] === 0x47 &&\n arr[1] === 0x49 &&\n arr[2] === 0x46 &&\n arr[3] === 0x38\n )\n return '.gif';\n // WEBP: RIFF....WEBP\n if (\n arr[0] === 0x52 &&\n arr[1] === 0x49 &&\n arr[2] === 0x46 &&\n arr[3] === 0x46 &&\n arr[8] === 0x57 &&\n arr[9] === 0x45 &&\n arr[10] === 0x42 &&\n arr[11] === 0x50\n )\n return '.webp';\n // MP4: ....ftyp (bytes 4-7)\n if (\n arr[4] === 0x66 &&\n arr[5] === 0x74 &&\n arr[6] === 0x79 &&\n arr[7] === 0x70\n )\n return '.mp4';\n\n return '';\n };\n\n // Fallback: map MIME type to extension\n const getExtensionFromMime = (mimeType: string): string => {\n const mimeMap: Record<string, string> = {\n 'image/jpeg': '.jpeg',\n 'image/jpg': '.jpg',\n 'image/png': '.png',\n 'image/gif': '.gif',\n 'image/webp': '.webp',\n 'application/pdf': '.pdf',\n 'audio/mpeg': '.mp3',\n 'audio/mp3': '.mp3',\n 'audio/wav': '.wav',\n 'audio/ogg': '.ogg',\n 'audio/x-wav': '.wav',\n 'video/mp4': '.mp4',\n };\n return mimeMap[mimeType?.toLowerCase()] || '';\n };\n\n const handleDownload = async (url: string, filename?: string) => {\n if (!url) return;\n try {\n const response = await fetch(url);\n if (!response.ok) throw new Error('Download failed');\n const blob = await response.blob();\n\n // 1. Try magic bytes detection (most reliable)\n let extension = await detectExtensionFromBlob(blob);\n\n // 2. Fallback to Content-Type header\n if (!extension) {\n const contentType = response.headers.get('Content-Type') || '';\n extension = getExtensionFromMime(contentType.split(';')[0]?.trim());\n }\n\n // 3. Fallback to blob.type\n if (!extension && blob.type) {\n extension = getExtensionFromMime(blob.type);\n }\n\n // Build a proper filename with extension\n let downloadName = filename || 'download';\n // Only append extension if the filename doesn't already have one\n const hasExtension = /\\.\\w{2,5}$/.test(downloadName);\n if (!hasExtension && extension) {\n downloadName = `${downloadName}${extension}`;\n }\n\n const blobUrl = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = blobUrl;\n link.download = downloadName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(blobUrl);\n } catch (err) {\n // Fallback: open in new tab\n const link = document.createElement('a');\n link.href = url;\n link.download = filename || 'download';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n };\n\n const onChangeTab = (key: string) => {\n setActiveTab(key);\n\n if (key === 'customer_calls') {\n callLogsApi();\n }\n };\n\n const activeLoaderState =\n activeTab === 'pda' ? tomTomLoader : zoomCallLogsLoader;\n\n // const activeApiData =\n // activeTab === 'pda'\n // ? clientPortal\n // ? epodData || []\n // : epodImages?.result || []\n // : zoomCallLogs || [];\n\n // const imageDataClient = epodImages?.result?.map((pic: any) => ({\n // s3_content: pic?.s3_content,\n // type: pic?.type,\n // time: new Date(pic?.timestamp * 1000).toLocaleString(),\n // path: pic?.path,\n // }));\n\n const activeApiData = activeTab === 'pda' ? epodDataClient : zoomCallLogs;\n\n // const activeApiData =\n // activeTab === 'pda'\n // ? (clientPortal ? epodData : epodDataClient) || []\n // : zoomCallLogs || [];\n\n // console.log(activeApiData, 'activeApiDataactiveApiData');\n\n const updateSpinner = (url: string, status: boolean) => {\n setSpinner((prev: any) => {\n // If URL exists, update it; otherwise, add new object\n return prev.some((item: any) => item.url === url)\n ? prev.map((item: any) =>\n item.url === url ? { ...item, status } : item\n )\n : [...prev, { url, status }];\n });\n };\n\n const downloadRecording = async (url: string) => {\n try {\n updateSpinner(url, true);\n const newPayload = {\n recording_url: url,\n };\n\n const resp: any = await fetchCallRecording({\n payload: newPayload,\n });\n\n const { pathname } = new URL(url);\n const id = pathname.split('/').pop();\n\n // Detect actual file type from blob content\n const blob = resp instanceof Blob ? resp : new Blob([resp]);\n let extension = await detectExtensionFromBlob(blob);\n\n // Fallback to blob.type if magic bytes didn't match\n if (!extension && blob.type) {\n extension = getExtensionFromMime(blob.type);\n }\n\n // Default to .mp3 for call recordings if detection fails\n if (!extension) {\n extension = '.mp3';\n }\n\n const downloadUrl = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = downloadUrl;\n a.download = `${id}${extension}`;\n a.click();\n URL.revokeObjectURL(downloadUrl);\n notification.success({\n message: 'Success',\n description: 'File downloaded successfully',\n });\n } catch (err) {\n console.log(err);\n notification.error({\n message: 'Failed to download file',\n //@ts-ignore\n description: err,\n });\n } finally {\n updateSpinner(url, false);\n }\n };\n\n const renderTableBody = (key: string, apiData: any[]) => {\n if (key === 'pda') {\n return apiData?.map((item, index) => (\n <TableRow key={index} className=\"data-row\">\n <TableData data-label=\"Content\">\n <div className=\"cell-value\">\n {item?.visibility_status === 'locked' ? (\n <PrivateIcon />\n ) : (\n <PublicIcon />\n )}\n <div>{item?.path}</div>\n </div>\n </TableData>\n <TableData data-label=\"Type\">\n {toReverseDeliveryLabel(item?.type, clientPortal)}\n </TableData>\n <TableData data-label=\"Time\">{item?.time}</TableData>\n <TableData colSpan={2} data-label=\"Options\">\n {(item?.type === 'photo' || item?.type === 'call_recording') && (\n <Actions>\n <Row>\n {item?.type === 'call_recording' ? (\n <Tippy content=\"Play\" placement=\"top\" trigger=\"mouseenter\">\n <TippyContainer\n onClick={() => {\n // Append extension from path to s3_content URL for proper browser playback/download\n const ext = item?.path?.match(/\\.\\w+$/)?.[0] || '';\n window.open(`${item?.s3_content}${ext}`, '_blank');\n }}\n >\n <ViewIcon style={{ cursor: 'pointer' }} />\n </TippyContainer>\n </Tippy>\n ) : (\n <Tippy content=\"View\" placement=\"top\" trigger=\"mouseenter\">\n <TippyContainer className=\"ImageView\">\n <ViewIcon style={{ cursor: 'pointer' }} />\n {/* Use image_link for photos so the preview uses the .jpg URL */}\n <Image\n width=\"20px\"\n src={\n item?.type === 'photo'\n ? item?.image_link\n : item?.s3_content\n }\n />\n </TippyContainer>\n </Tippy>\n )}\n\n <Tippy\n content=\"Download\"\n placement=\"top\"\n trigger=\"mouseenter\"\n >\n <TippyContainer\n onClick={() => {\n // For photos, image_link already has .jpg extension\n // For other types, append extension from path to s3_content URL\n const ext = item?.path?.match(/\\.\\w+$/)?.[0] || '';\n const downloadUrl =\n item?.type === 'photo'\n ? item?.image_link\n : `${item?.s3_content}${ext}`;\n handleDownload(\n downloadUrl,\n item?.path?.split('/').pop()\n );\n }}\n >\n <DownloadIcon />\n </TippyContainer>\n </Tippy>\n </Row>\n </Actions>\n )}\n </TableData>\n </TableRow>\n ));\n } else {\n return zoomCallLogs?.map((item: any, index: number) => {\n const recording = item?.recordings?.[0]; // take first recording only all are same\n const spinnerItem = spinner.find((s: any) => s.url === recording?.url);\n const isLoading = spinnerItem?.status || false;\n\n return (\n <TableRow key={index} className=\"data-row\">\n <TableData data-label=\"Content\">{item?.description}</TableData>\n <TableData data-label=\"Type\">{item?.source_type}</TableData>\n <TableData data-label=\"Time\">\n <DateTimeContainer>\n <span>{formatUtcToLocal(item?.start_datetime).date}</span>\n <span>{formatUtcToLocal(item?.start_datetime).time}</span>\n </DateTimeContainer>\n </TableData>\n <TableData colSpan={2} data-label=\"Options\">\n <div className=\"call-recording-actions\">\n <Row>\n {!isLoading && recording && (\n <>\n <Tippy\n content=\"Play\"\n placement=\"top\"\n trigger=\"mouseenter\"\n >\n <TippyContainer\n onClick={() => window.open(recording.url, '_blank')}\n >\n <ViewIcon style={{ cursor: 'pointer' }} />\n </TippyContainer>\n </Tippy>\n <Tippy\n content=\"Download\"\n placement=\"top\"\n trigger=\"mouseenter\"\n >\n <TippyContainer\n onClick={() => downloadRecording(recording.url)}\n >\n <DownloadIcon />\n </TippyContainer>\n </Tippy>\n </>\n )}\n {recording && <Spin size=\"small\" spinning={isLoading} />}\n </Row>\n </div>\n </TableData>\n </TableRow>\n );\n });\n }\n };\n\n return (\n <CollapsableForm collapsedContent={<CollapsedContent />}>\n <TabsContainer>\n <Tabs\n defaultActiveKey=\"pda\"\n activeKey={activeTab}\n onChange={onChangeTab}\n >\n <Tabs.TabPane\n key=\"pda\"\n tab={\n <div\n className={activeTab === 'pda' ? 'active-tab' : 'passive-tab'}\n >\n PDA <span className=\"count\">{epodDataClient?.length}</span>\n </div>\n }\n />\n\n <Tabs.TabPane\n key=\"customer_calls\"\n tab={\n <div\n className={\n activeTab === 'customer_calls' ? 'active-tab' : 'passive-tab'\n }\n >\n Customer Calls\n <span className=\"count\">{zoomCallLogs?.length}</span>\n </div>\n }\n />\n </Tabs>\n </TabsContainer>\n <MainContainer>\n <Container className=\"mobile-table-container\">\n <TableWrapper className=\"mobile-table-wrapper\">\n <CustomScrollBar>\n <Table>\n <TableHead>\n <TableRow>\n <TableHeadData>Content</TableHeadData>\n <TableHeadData>Type</TableHeadData>\n <TableHeadData>Time</TableHeadData>\n <TableHeadData>Options</TableHeadData>\n </TableRow>\n </TableHead>\n <TableBody>\n {activeLoaderState ? (\n <>\n {/* Skeleton Rows */}\n <TableRow>\n <TableCell>\n <Skeleton.Input\n active\n size=\"small\"\n style={{ width: 100 }}\n />\n </TableCell>\n <TableCell>\n <Skeleton.Input\n active\n size=\"small\"\n style={{ width: 80 }}\n />\n </TableCell>\n <TableCell>\n <Skeleton.Input\n active\n size=\"small\"\n style={{ width: 130 }}\n />\n </TableCell>\n <TableCell>\n <Skeleton.Input\n active\n size=\"small\"\n style={{ width: 100 }}\n />\n </TableCell>\n <TableCell>\n <Skeleton.Input\n active\n size=\"small\"\n style={{ width: 100 }}\n />\n </TableCell>\n </TableRow>\n <TableRow>\n <TableCell>\n <Skeleton.Input\n active\n size=\"small\"\n style={{ width: 100 }}\n />\n </TableCell>\n <TableCell>\n <Skeleton.Input\n active\n size=\"small\"\n style={{ width: 80 }}\n />\n </TableCell>\n <TableCell>\n <Skeleton.Input\n active\n size=\"small\"\n style={{ width: 130 }}\n />\n </TableCell>\n <TableCell>\n <Skeleton.Input\n active\n size=\"small\"\n style={{ width: 100 }}\n />\n </TableCell>\n <TableCell>\n <Skeleton.Input\n active\n size=\"small\"\n style={{ width: 100 }}\n />\n </TableCell>\n </TableRow>\n </>\n ) : activeApiData?.length > 0 ? (\n renderTableBody(activeTab, activeApiData)\n ) : (\n <TableRow>\n <TableData colSpan={5}>No entries found.</TableData>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </CustomScrollBar>\n </TableWrapper>\n </Container>\n </MainContainer>\n </CollapsableForm>\n );\n}\n\nconst DateTimeContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: 2px;\n`;\n\nconst tabText = css`\n color: #3a3630 !important;\n font-family: 'Lato', sans-serif;\n font-size: 14px;\n font-weight: 500;\n`;\n\nconst countBadge = css`\n color: #fff;\n background: #3a3630;\n padding: 2px 5px;\n border-radius: 6px;\n font-size: 13px;\n font-family: 'Lato', sans-serif;\n height: 18px;\n display: flex;\n align-items: center;\n`;\n\nconst TabsContainer = styled.div`\n margin-bottom: 10px;\n\n .ant-tabs {\n width: 100%;\n }\n .ant-tabs-tab {\n .ant-tabs-tab-btn {\n ${tabText};\n .count {\n ${countBadge};\n }\n .passive-tab {\n display: flex;\n gap: 5px;\n align-items: center;\n opacity: 0.3;\n }\n }\n }\n .ant-tabs-tab-active {\n .ant-tabs-tab-btn {\n ${tabText};\n .count {\n ${countBadge};\n }\n .active-tab {\n display: flex;\n gap: 5px;\n align-items: center;\n }\n }\n }\n .ant-tabs-ink-bar {\n background: #feba30;\n }\n`;\n\nconst TableCell = styled.td<{ width?: string }>`\n padding: 12px 8px;\n text-align: left;\n max-width: ${({ width }) => width || 'auto'};\n`;\nconst Container = styled.div`\n height: 30vh;\n pointer-events: initial;\n @media (max-width: 1024px) {\n height: 40vh;\n }\n`;\n\nconst TableWrapper = styled.div`\n height: 100%;\n overflow-x: auto;\n scrollbar-width: thin;\n border-top-left-radius: 15px;\n border-top-right-radius: 15px;\n`;\n\nconst TableHeadData = styled.th`\n padding: 10px 5px;\n font-family: 'Roboto', sans-serif;\n font-size: 14px;\n font-weight: 500;\n line-height: 24px;\n letter-spacing: 0px;\n text-align: left;\n`;\n\nconst TableData = styled.td`\n border-spacing: 0px;\n padding: 10px 5px;\n font-family: 'Lato', sans-serif;\n font-size: 13px;\n font-weight: 400;\n line-height: 16px;\n letter-spacing: 0px;\n\n .call-recording-actions {\n display: flex;\n gap: 5px;\n align-items: center;\n }\n`;\n\nconst TableRow = styled.tr`\n border-bottom: 1px solid rgb(215, 214, 213);\n font-weight: 300;\n`;\n\nconst TableBody = styled.tbody`\n border-bottom-right-radius: 10px;\n background: rgb(255, 255, 255);\n height: 96%;\n overflow: auto;\n width: 100%;\n`;\n\nconst TableHead = styled.thead`\n position: sticky;\n top: 0px;\n z-index: 1;\n background: #f8f8f8;\n white-space: nowrap;\n`;\n\nconst Table = styled.table`\n width: 100%;\n background: rgb(255, 255, 255);\n box-shadow: 0px 4px 30px 0px #2e2d740d;\n border-collapse: collapse;\n`;\n\nconst Actions = styled.div``;\n\nconst TippyContainer = styled.div`\n display: inline-block;\n margin: 7px;\n`;\n\nconst Row = styled.div`\n gap: 10px;\n cursor: pointer;\n display: flex;\n align-items: center;\n .ImageView {\n position: relative;\n .ant-image {\n position: absolute;\n left: 0;\n top: 2px;\n opacity: 0;\n }\n }\n`;\n\nconst MainContainer = styled.div`\n .col {\n display: flex;\n align-items: center;\n color: #3a3630;\n padding: 10px 5px;\n text-align: left;\n }\n\n .col.noFlex {\n flex: 0;\n }\n\n .col.sm {\n flex: 1;\n min-width: 100px;\n }\n\n .col.md {\n flex: 2;\n justify-content: flex-start;\n min-width: 85px;\n }\n\n .col.lg {\n flex: 4;\n justify-content: flex-start;\n min-width: 180px;\n }\n\n .col.date {\n }\n\n .col.amount,\n .col.price {\n justify-content: flex-end;\n }\n\n @media screen and (max-width: 768px) {\n .mobile-table-container {\n height: auto;\n }\n .mobile-table-wrapper {\n height: auto;\n max-height: 60vh;\n overflow-x: hidden;\n overflow-y: auto;\n border-radius: 0;\n }\n .mobile-table-wrapper > div,\n .mobile-table-wrapper > div > div:first-child {\n position: static !important;\n height: auto !important;\n overflow: visible !important;\n margin: 0 !important;\n inset: auto !important;\n }\n\n table,\n thead,\n tbody {\n display: block;\n width: 100%;\n min-width: 0;\n height: auto;\n box-shadow: none;\n }\n table {\n background: transparent;\n }\n\n thead {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n\n tbody tr.data-row {\n display: block;\n width: 100%;\n box-sizing: border-box;\n margin-bottom: 12px;\n padding: 10px 12px;\n border: 1px solid #e3e3e3;\n border-radius: 12px;\n background: #fff;\n box-shadow: 0px 1px 2px 0px rgba(16, 24, 40, 0.05);\n }\n tbody tr.data-row td {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 12px;\n width: 100%;\n max-width: none;\n box-sizing: border-box;\n padding: 8px 0;\n border: 0;\n border-bottom: 1px solid #f0f2f2;\n text-align: right;\n word-break: break-word;\n }\n tbody tr.data-row td:last-child {\n border-bottom: 0;\n justify-content: flex-end;\n }\n tbody tr.data-row td:empty {\n display: none;\n }\n tbody tr.data-row td[data-label]::before {\n content: attr(data-label);\n flex: 0 0 38%;\n text-align: left;\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n color: #6a7378;\n }\n tbody tr.data-row td .cell-value {\n flex: 1;\n min-width: 0;\n }\n tbody tr.data-row td .call-recording-actions {\n justify-content: flex-end;\n }\n tbody tr.data-row td:last-child:has(.call-recording-actions:empty),\n tbody tr.data-row td:last-child:has(.call-recording-actions > div:empty) {\n display: none;\n }\n\n /* loading / empty rows */\n tbody > tr:not(.data-row),\n tbody > tr:not(.data-row) td {\n display: block;\n width: 100%;\n box-sizing: border-box;\n }\n }\n\n .TableHeadData,\n .TableData {\n padding: 10px 5px;\n text-align: left;\n white-space: nowrap;\n }\n\n .TableRow {\n display: flex;\n width: 100%;\n }\n\n .Table {\n width: 100%;\n }\n`;\n\nexport default Toolbox;\n//\n"],"names":["Toolbox","orderId","useOrderId","tomTomLoader","useAtom","skeletonTomTom","activeTab","setActiveTab","useState","zoomCallLogs","setZoomCallLogs","useZoomCallLogs","zoomCallLogsLoader","setZoomCallLogsLoader","useZoomCallLogsLoader","spinner","setSpinner","epodImages","useEpodImages","epodDataClient","setEpodDataClient","clientPortal","useClientPortal","fetchedZoomCallLogs","zoomCallLogsLoading","callLogsApi","useAxios","useEffect","fetchCallRecording","imageDataClient","pic","detectExtensionFromBlob","blob","arr","getExtensionFromMime","mimeType","handleDownload","url","filename","response","extension","contentType","downloadName","blobUrl","link","onChangeTab","key","activeLoaderState","activeApiData","updateSpinner","status","prev","item","downloadRecording","resp","pathname","id","downloadUrl","a","notification","err","renderTableBody","apiData","index","jsxs","TableRow","jsx","TableData","PrivateIcon","PublicIcon","Actions","Row","Tippy","TippyContainer","ext","ViewIcon","Image","DownloadIcon","recording","isLoading","s","DateTimeContainer","formatUtcToLocal","Fragment","Spin","CollapsableForm","CollapsedContent","TabsContainer","Tabs","MainContainer","Container","TableWrapper","CustomScrollBar","Table","TableHead","TableHeadData","TableBody","TableCell","Skeleton","styled","tabText","css","countBadge","width"],"mappings":"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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;"}
|
package/dist/components/utils.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import "date-fns";
|
|
2
|
-
const
|
|
3
|
-
let e =
|
|
2
|
+
const g = function(r) {
|
|
3
|
+
let e = r.replace(new RegExp("(?<=[a-zA-Z])'(?=[a-zA-Z ])", "g"), "__");
|
|
4
4
|
return e = e.replace(new RegExp("'", "g"), '"'), e = e.replace(new RegExp("__", "g"), "'"), e = e.replace(new RegExp("None", "g"), "null"), e = e.replace(new RegExp("False", "g"), "false"), e = e.replace(new RegExp("True", "g"), "true"), e = e.replace(new RegExp(/(\d+)\s*[a-zA-Z]/gm), "$1"), JSON.parse(e);
|
|
5
|
-
};
|
|
5
|
+
}, l = (r, e, p = "Reverse Delivery") => !r || e ? r : r.replace(/\bcollect(ion)?s?\b/gi, p);
|
|
6
6
|
export {
|
|
7
|
-
|
|
7
|
+
g as javascriptStringDumpToJSON,
|
|
8
|
+
l as toReverseDeliveryLabel
|
|
8
9
|
};
|
|
9
10
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../src/components/utils.ts"],"sourcesContent":["import { format } from 'date-fns';\n\nexport const EscalationCategory = [\n {\n label: 'Failure-Not Failure',\n value: 'Failure-Not Failure',\n },\n {\n label: 'Failure Fault',\n value: 'Failure Fault',\n },\n {\n label: 'Failure Upgrade',\n value: 'Failure Upgrade',\n },\n {\n label: 'Elite',\n value: 'Elite',\n },\n {\n label: 'New Client',\n value: 'New Client',\n },\n];\n\nexport const EscalationLevel = [\n {\n label: 'VIP4',\n value: 'VIP4',\n },\n {\n label: 'VIP3',\n value: 'VIP3',\n },\n {\n label: 'VIP2',\n value: 'VIP2',\n },\n {\n label: 'VIP1',\n value: 'VIP1',\n },\n {\n label: 'New Client',\n value: 'New Client',\n },\n];\nexport const EscalationReason = [\n {\n label: 'INBOUND / DAMAGE - ITEM UNFIT TO BE DELIVERED - by Co',\n value: 'INBOUND / DAMAGE - ITEM UNFIT TO BE DELIVERED - by Co',\n },\n {\n label: 'INBOUND / PRODUCT ISSUE - WRONG ITEM BEEN DESPATCHED - by Co',\n value: 'INBOUND / PRODUCT ISSUE - WRONG ITEM BEEN DESPATCHED - by Co',\n },\n {\n label: 'INBOUND / CANCEL - BEFORE ROUTING - by Co',\n value: 'INBOUND / CANCEL - BEFORE ROUTING - by Co',\n },\n {\n label: 'PRE-CALL / ADDRESS - WRONG ADDRESS (UNABLE TO RE-ROUTE) - by BJS',\n value: 'PRE-CALL / ADDRESS - WRONG ADDRESS (UNABLE TO RE-ROUTE) - by BJS',\n },\n {\n label: 'Predated charges PRE-CALL / DEL WINDOW - NOT SUITABLE - by CUST',\n value: 'Predated charges PRE-CALL / DEL WINDOW - NOT SUITABLE - by CUST',\n },\n {\n label: 'ON-ROUTE / ADDRESS - WRONG ADDRESS (UNABLE TO RE-ROUTE) - by BJS',\n value: 'ON-ROUTE / ADDRESS - WRONG ADDRESS (UNABLE TO RE-ROUTE) - by BJS',\n },\n {\n label: 'LOADING / STOCK RECEIPT - NO STK RECEIVED - Co',\n value: 'LOADING / STOCK RECEIPT - NO STK RECEIVED - Co',\n },\n];\nexport const EscalationStatus = [\n {\n label: 'Pending',\n value: 'Pending',\n },\n {\n label: 'Stock Check',\n value: 'Stock Check',\n },\n {\n label: 'Ready to Post Call',\n value: 'Ready to Post Call',\n },\n {\n label: 'Post Called',\n value: 'Post Called',\n },\n {\n label: 'Completed',\n value: 'Completed',\n },\n];\n\nexport const getIntegerValue = (value: number) => {\n return value ?? 0;\n};\n\nexport const getStringValue = (value: string) => {\n return value === '' ? 'N/A' : value;\n};\n\nexport const FormattedDate = ({ date }: any) => {\n const formattedDate = format(new Date(date), 'dd/MM/yyyy');\n return formattedDate;\n};\n\nexport const javascriptStringDumpToJSON = function (data: string) {\n let d = data.replace(new RegExp(`(?<=[a-zA-Z])'(?=[a-zA-Z ])`, 'g'), '__');\n d = d.replace(new RegExp(\"'\", 'g'), '\"');\n d = d.replace(new RegExp('__', 'g'), \"'\");\n d = d.replace(new RegExp('None', 'g'), 'null');\n d = d.replace(new RegExp('False', 'g'), 'false');\n d = d.replace(new RegExp('True', 'g'), 'true');\n d = d.replace(new RegExp(/(\\d+)\\s*[a-zA-Z]/gm), '$1');\n return JSON.parse(d);\n}
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../src/components/utils.ts"],"sourcesContent":["import { format } from 'date-fns';\n\nexport const EscalationCategory = [\n {\n label: 'Failure-Not Failure',\n value: 'Failure-Not Failure',\n },\n {\n label: 'Failure Fault',\n value: 'Failure Fault',\n },\n {\n label: 'Failure Upgrade',\n value: 'Failure Upgrade',\n },\n {\n label: 'Elite',\n value: 'Elite',\n },\n {\n label: 'New Client',\n value: 'New Client',\n },\n];\n\nexport const EscalationLevel = [\n {\n label: 'VIP4',\n value: 'VIP4',\n },\n {\n label: 'VIP3',\n value: 'VIP3',\n },\n {\n label: 'VIP2',\n value: 'VIP2',\n },\n {\n label: 'VIP1',\n value: 'VIP1',\n },\n {\n label: 'New Client',\n value: 'New Client',\n },\n];\nexport const EscalationReason = [\n {\n label: 'INBOUND / DAMAGE - ITEM UNFIT TO BE DELIVERED - by Co',\n value: 'INBOUND / DAMAGE - ITEM UNFIT TO BE DELIVERED - by Co',\n },\n {\n label: 'INBOUND / PRODUCT ISSUE - WRONG ITEM BEEN DESPATCHED - by Co',\n value: 'INBOUND / PRODUCT ISSUE - WRONG ITEM BEEN DESPATCHED - by Co',\n },\n {\n label: 'INBOUND / CANCEL - BEFORE ROUTING - by Co',\n value: 'INBOUND / CANCEL - BEFORE ROUTING - by Co',\n },\n {\n label: 'PRE-CALL / ADDRESS - WRONG ADDRESS (UNABLE TO RE-ROUTE) - by BJS',\n value: 'PRE-CALL / ADDRESS - WRONG ADDRESS (UNABLE TO RE-ROUTE) - by BJS',\n },\n {\n label: 'Predated charges PRE-CALL / DEL WINDOW - NOT SUITABLE - by CUST',\n value: 'Predated charges PRE-CALL / DEL WINDOW - NOT SUITABLE - by CUST',\n },\n {\n label: 'ON-ROUTE / ADDRESS - WRONG ADDRESS (UNABLE TO RE-ROUTE) - by BJS',\n value: 'ON-ROUTE / ADDRESS - WRONG ADDRESS (UNABLE TO RE-ROUTE) - by BJS',\n },\n {\n label: 'LOADING / STOCK RECEIPT - NO STK RECEIVED - Co',\n value: 'LOADING / STOCK RECEIPT - NO STK RECEIVED - Co',\n },\n];\nexport const EscalationStatus = [\n {\n label: 'Pending',\n value: 'Pending',\n },\n {\n label: 'Stock Check',\n value: 'Stock Check',\n },\n {\n label: 'Ready to Post Call',\n value: 'Ready to Post Call',\n },\n {\n label: 'Post Called',\n value: 'Post Called',\n },\n {\n label: 'Completed',\n value: 'Completed',\n },\n];\n\nexport const getIntegerValue = (value: number) => {\n return value ?? 0;\n};\n\nexport const getStringValue = (value: string) => {\n return value === '' ? 'N/A' : value;\n};\n\nexport const FormattedDate = ({ date }: any) => {\n const formattedDate = format(new Date(date), 'dd/MM/yyyy');\n return formattedDate;\n};\n\nexport const javascriptStringDumpToJSON = function (data: string) {\n let d = data.replace(new RegExp(`(?<=[a-zA-Z])'(?=[a-zA-Z ])`, 'g'), '__');\n d = d.replace(new RegExp(\"'\", 'g'), '\"');\n d = d.replace(new RegExp('__', 'g'), \"'\");\n d = d.replace(new RegExp('None', 'g'), 'null');\n d = d.replace(new RegExp('False', 'g'), 'false');\n d = d.replace(new RegExp('True', 'g'), 'true');\n d = d.replace(new RegExp(/(\\d+)\\s*[a-zA-Z]/gm), '$1');\n return JSON.parse(d);\n};\n\nexport const toReverseDeliveryLabel = <T extends string | null | undefined>(\n value: T,\n isClientPortal?: boolean,\n replacement = 'Reverse Delivery'\n): T => {\n if (!value || isClientPortal) return value;\n return value.replace(/\\bcollect(ion)?s?\\b/gi, replacement) as T;\n};\n"],"names":["javascriptStringDumpToJSON","data","d","toReverseDeliveryLabel","value","isClientPortal","replacement"],"mappings":";AAiHO,MAAMA,IAA6B,SAAUC,GAAc;AAChE,MAAIC,IAAID,EAAK,QAAQ,IAAI,OAAO,+BAA+B,GAAG,GAAG,IAAI;AACzE,SAAAC,IAAIA,EAAE,QAAQ,IAAI,OAAO,KAAK,GAAG,GAAG,GAAG,GACvCA,IAAIA,EAAE,QAAQ,IAAI,OAAO,MAAM,GAAG,GAAG,GAAG,GACxCA,IAAIA,EAAE,QAAQ,IAAI,OAAO,QAAQ,GAAG,GAAG,MAAM,GAC7CA,IAAIA,EAAE,QAAQ,IAAI,OAAO,SAAS,GAAG,GAAG,OAAO,GAC/CA,IAAIA,EAAE,QAAQ,IAAI,OAAO,QAAQ,GAAG,GAAG,MAAM,GAC7CA,IAAIA,EAAE,QAAQ,IAAI,OAAO,oBAAoB,GAAG,IAAI,GAC7C,KAAK,MAAMA,CAAC;AACrB,GAEaC,IAAyB,CACpCC,GACAC,GACAC,IAAc,uBAEV,CAACF,KAASC,IAAuBD,IAC9BA,EAAM,QAAQ,yBAAyBE,CAAW;"}
|
|
@@ -4,8 +4,7 @@ interface ActionModalProps {
|
|
|
4
4
|
showAdditionalInfo?: boolean;
|
|
5
5
|
infoText?: string;
|
|
6
6
|
headerActions?: React.ReactNode;
|
|
7
|
-
|
|
8
|
-
submitBtnTitle?: React.ReactNode;
|
|
7
|
+
submitBtnTitle?: string;
|
|
9
8
|
footerActions?: React.ReactNode;
|
|
10
9
|
children: React.ReactNode;
|
|
11
10
|
onCloseHeader: () => void;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client-portal only: responsive layer for the /return/:status pages
|
|
3
|
+
* (header + search + date pickers, title/export bar, table, pagination).
|
|
4
|
+
*
|
|
5
|
+
* It only targets markup rendered inside ReturnOverview, so the internal
|
|
6
|
+
* (non client-portal) return screens that share HeaderWrapper / StyledTable /
|
|
7
|
+
* ReturnPagination are not affected.
|
|
8
|
+
*
|
|
9
|
+
* Breakpoints (same as the host app header):
|
|
10
|
+
* <= 767px mobile -> table turns into cards
|
|
11
|
+
* 768px - 1100px tablet -> table scrolls horizontally inside its card
|
|
12
|
+
* >= 1101px desktop -> unchanged layout
|
|
13
|
+
*/
|
|
14
|
+
export declare const ClientPortalResponsive: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
15
|
+
export default ClientPortalResponsive;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export declare const DateRangePopupStyle: import('react').NamedExoticComponent<import('styled-components').ExecutionProps & object>;
|
|
1
2
|
export declare const LeftSideConatiner: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
2
3
|
export declare const FilterConatiner: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
3
4
|
export declare const FilterIconConatiner: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
@@ -5,5 +5,6 @@ interface IPROS {
|
|
|
5
5
|
locationloading: boolean;
|
|
6
6
|
}
|
|
7
7
|
declare const ReturnProductTable: (props: IPROS) => import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export declare const MobileTableRoot: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
8
9
|
export declare const NSWrapper: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
9
10
|
export default ReturnProductTable;
|
|
@@ -76,7 +76,6 @@ declare function usePrevOrderDetails(): [OrdersType, (args_0: OrdersType | ((pre
|
|
|
76
76
|
declare function useCustomerDetails(): [any, (args_0: any) => void];
|
|
77
77
|
declare function useDepotDetails(): [any, (args_0: any) => void];
|
|
78
78
|
declare function useProductDetails(): [any[], (args_0: any[] | ((prev: any[]) => any[])) => void];
|
|
79
|
-
export declare function useReturnProductDetails(): [any[], (args_0: any[] | ((prev: any[]) => any[])) => void];
|
|
80
79
|
export declare function usefetchAgain(): [boolean, (args_0: boolean | ((prev: boolean) => boolean)) => void];
|
|
81
80
|
export declare function useProductDetailsCopy(): [any, (args_0: any) => void];
|
|
82
81
|
declare function useStatusDetails(): [any, (args_0: any) => void];
|
|
@@ -130,9 +130,9 @@ export interface OrdersType {
|
|
|
130
130
|
other_instructions: string | null;
|
|
131
131
|
schedule_after?: any | null;
|
|
132
132
|
vehicle_type: string | null;
|
|
133
|
+
order_recipient: OrderRecipientType | null;
|
|
133
134
|
latitude?: string | null;
|
|
134
135
|
longitude?: string | null;
|
|
135
|
-
order_recipient: OrderRecipientType | null;
|
|
136
136
|
order_services_detail: OrderServicesDetailType | null;
|
|
137
137
|
order_services?: OrderServiceType[];
|
|
138
138
|
order_routes?: OrderRouteType | null;
|
|
@@ -18,3 +18,4 @@ export declare const getIntegerValue: (value: number) => number;
|
|
|
18
18
|
export declare const getStringValue: (value: string) => string;
|
|
19
19
|
export declare const FormattedDate: ({ date }: any) => string;
|
|
20
20
|
export declare const javascriptStringDumpToJSON: (data: string) => any;
|
|
21
|
+
export declare const toReverseDeliveryLabel: <T extends string | null | undefined>(value: T, isClientPortal?: boolean, replacement?: string) => T;
|
package/package.json
CHANGED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { jsx as L } from "react/jsx-runtime";
|
|
2
|
-
function n(o) {
|
|
3
|
-
return /* @__PURE__ */ L(
|
|
4
|
-
"svg",
|
|
5
|
-
{
|
|
6
|
-
width: "10",
|
|
7
|
-
height: "6",
|
|
8
|
-
viewBox: "0 0 10 6",
|
|
9
|
-
fill: "none",
|
|
10
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
11
|
-
...o,
|
|
12
|
-
children: /* @__PURE__ */ L(
|
|
13
|
-
"path",
|
|
14
|
-
{
|
|
15
|
-
opacity: "0.4",
|
|
16
|
-
d: "M8.99999 0C9.56799 0 9.86466 0.657333 9.52199 1.082L9.47132 1.138L5.47132 5.138C5.35653 5.25279 5.20379 5.32174 5.04178 5.33193C4.87976 5.34211 4.71959 5.29283 4.59132 5.19333L4.52866 5.138L0.528656 1.138L0.473323 1.07533L0.437323 1.024L0.401323 0.96L0.389989 0.936L0.371989 0.891333L0.350656 0.819333L0.343989 0.784L0.337323 0.744L0.334656 0.706V0.627333L0.337989 0.588667L0.343989 0.548667L0.350656 0.514L0.371989 0.442L0.389989 0.397333L0.436656 0.309333L0.479989 0.249333L0.528656 0.195333L0.591323 0.14L0.642656 0.104L0.706656 0.0680002L0.730656 0.0566667L0.775323 0.0386664L0.847322 0.0173333L0.882656 0.0106665L0.922656 0.00399971L0.960656 0.00133324L8.99999 0Z",
|
|
17
|
-
fill: "#3A3630"
|
|
18
|
-
}
|
|
19
|
-
)
|
|
20
|
-
}
|
|
21
|
-
);
|
|
22
|
-
}
|
|
23
|
-
export {
|
|
24
|
-
n as default
|
|
25
|
-
};
|
|
26
|
-
//# sourceMappingURL=ChevronDownIcon.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ChevronDownIcon.js","sources":["../../../src/assets/icons/ChevronDownIcon.tsx"],"sourcesContent":["import React from 'react';\n\nfunction ChevronDownIcon(props: any) {\n return (\n <svg\n width=\"10\"\n height=\"6\"\n viewBox=\"0 0 10 6\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n opacity=\"0.4\"\n d=\"M8.99999 0C9.56799 0 9.86466 0.657333 9.52199 1.082L9.47132 1.138L5.47132 5.138C5.35653 5.25279 5.20379 5.32174 5.04178 5.33193C4.87976 5.34211 4.71959 5.29283 4.59132 5.19333L4.52866 5.138L0.528656 1.138L0.473323 1.07533L0.437323 1.024L0.401323 0.96L0.389989 0.936L0.371989 0.891333L0.350656 0.819333L0.343989 0.784L0.337323 0.744L0.334656 0.706V0.627333L0.337989 0.588667L0.343989 0.548667L0.350656 0.514L0.371989 0.442L0.389989 0.397333L0.436656 0.309333L0.479989 0.249333L0.528656 0.195333L0.591323 0.14L0.642656 0.104L0.706656 0.0680002L0.730656 0.0566667L0.775323 0.0386664L0.847322 0.0173333L0.882656 0.0106665L0.922656 0.00399971L0.960656 0.00133324L8.99999 0Z\"\n fill=\"#3A3630\"\n />\n </svg>\n );\n}\n\nexport default ChevronDownIcon;\n"],"names":["ChevronDownIcon","props","jsx"],"mappings":";AAEA,SAASA,EAAgBC,GAAY;AACnC,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAM;AAAA,MACL,GAAGD;AAAA,MAEJ,UAAA,gBAAAC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAAQ;AAAA,UACR,GAAE;AAAA,UACF,MAAK;AAAA,QAAA;AAAA,MAAA;AAAA,IACP;AAAA,EAAA;AAGN;"}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
const i = "__no_pallet__", r = (t) => t?.pallet_info?.alias || t?.pallet_id, c = (t, a) => {
|
|
2
|
-
const o = t.createdAt ? new Date(t.createdAt).getTime() : NaN, n = a.createdAt ? new Date(a.createdAt).getTime() : NaN, e = !Number.isNaN(o), l = !Number.isNaN(n);
|
|
3
|
-
return e && l && o !== n ? o - n : e !== l ? e ? -1 : 1 : t.label.localeCompare(a.label, void 0, { numeric: !0 });
|
|
4
|
-
}, u = (t) => (t ?? []).some((a) => !!a?.pallet_id), d = (t, a, o) => {
|
|
5
|
-
const n = t ?? [], e = a ?? [];
|
|
6
|
-
return o ? n.filter((l) => !e.includes(l)) : [...n, ...e.filter((l) => !n.includes(l))];
|
|
7
|
-
}, p = (t) => {
|
|
8
|
-
const a = /* @__PURE__ */ new Map(), o = [];
|
|
9
|
-
(t ?? []).forEach((e) => {
|
|
10
|
-
const l = e?.pallet_id;
|
|
11
|
-
if (!l) {
|
|
12
|
-
o.push(e);
|
|
13
|
-
return;
|
|
14
|
-
}
|
|
15
|
-
const s = a.get(l);
|
|
16
|
-
if (s) {
|
|
17
|
-
s.items.push(e);
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
a.set(l, {
|
|
21
|
-
key: l,
|
|
22
|
-
palletId: l,
|
|
23
|
-
label: r(e),
|
|
24
|
-
depotLocation: e?.pallet_info?.depot_location ?? null,
|
|
25
|
-
createdAt: e?.pallet_info?.created_at ?? null,
|
|
26
|
-
items: [e],
|
|
27
|
-
isNoPallet: !1
|
|
28
|
-
});
|
|
29
|
-
});
|
|
30
|
-
const n = Array.from(a.values()).sort(c);
|
|
31
|
-
return o.length > 0 && n.push({
|
|
32
|
-
key: i,
|
|
33
|
-
palletId: null,
|
|
34
|
-
label: "No Pallet ID",
|
|
35
|
-
depotLocation: null,
|
|
36
|
-
createdAt: null,
|
|
37
|
-
items: o,
|
|
38
|
-
isNoPallet: !0
|
|
39
|
-
}), n;
|
|
40
|
-
};
|
|
41
|
-
export {
|
|
42
|
-
i as NO_PALLET_KEY,
|
|
43
|
-
p as groupProductsByPallet,
|
|
44
|
-
u as hasAnyPallet,
|
|
45
|
-
d as toggleGroupSelectionIds
|
|
46
|
-
};
|
|
47
|
-
//# sourceMappingURL=palletGrouping.js.map
|
package/dist/components/order-view/return-client-products/product-table/palletGrouping.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"palletGrouping.js","sources":["../../../../../src/components/order-view/return-client-products/product-table/palletGrouping.ts"],"sourcesContent":["export const NO_PALLET_KEY = '__no_pallet__';\n\nexport interface PalletGroup {\n /** Grouping key — the raw `pallet_id`, or NO_PALLET_KEY for unpalletised items. */\n key: string;\n palletId: string | null;\n /** Warehouse-facing pallet ID (`pallet_info.alias`), falling back to the raw id. */\n label: string;\n depotLocation: string | null;\n createdAt: string | null;\n items: any[];\n isNoPallet: boolean;\n}\n\n/**\n * Items are grouped by `pallet_id` (a UUID) but labelled with `pallet_info.alias`,\n * which is the short ID the warehouse prints from Toolbox and scans against.\n */\nconst palletLabel = (product: any) =>\n product?.pallet_info?.alias || product?.pallet_id;\n\n/** Scan order (`pallet_info.created_at`) reads most naturally for the warehouse. */\nconst comparePalletGroups = (a: PalletGroup, b: PalletGroup) => {\n const aTime = a.createdAt ? new Date(a.createdAt).getTime() : NaN;\n const bTime = b.createdAt ? new Date(b.createdAt).getTime() : NaN;\n const aValid = !Number.isNaN(aTime);\n const bValid = !Number.isNaN(bTime);\n\n if (aValid && bValid && aTime !== bTime) return aTime - bTime;\n // Pallets with no scan timestamp sort after those that have one.\n if (aValid !== bValid) return aValid ? -1 : 1;\n\n // `numeric` keeps numeric aliases in human order (1234 before 1235, 2 before 10).\n return a.label.localeCompare(b.label, undefined, { numeric: true });\n};\n\nexport const hasAnyPallet = (products: any[]) =>\n (products ?? []).some((product: any) => !!product?.pallet_id);\n\n/**\n * Adds or removes a whole group's item ids from the current selection. Purely a\n * shortcut for ticking each row — it carries no whole-pallet split semantics.\n */\nexport const toggleGroupSelectionIds = (\n currentSelection: any[],\n groupIds: any[],\n allSelected: boolean\n): any[] => {\n const current = currentSelection ?? [];\n const ids = groupIds ?? [];\n\n if (allSelected) {\n return current.filter((id: any) => !ids.includes(id));\n }\n\n // Union, so an already-selected item is never duplicated in the move payload.\n return [...current, ...ids.filter((id: any) => !current.includes(id))];\n};\n\n/**\n * Groups return-order products into one group per distinct pallet ID, ordered by\n * scan time, with any unpalletised items collected into a trailing group.\n */\nexport const groupProductsByPallet = (products: any[]): PalletGroup[] => {\n const groups = new Map<string, PalletGroup>();\n const unpalletised: any[] = [];\n\n (products ?? []).forEach((product: any) => {\n const palletId = product?.pallet_id;\n\n if (!palletId) {\n unpalletised.push(product);\n return;\n }\n\n const existing = groups.get(palletId);\n if (existing) {\n existing.items.push(product);\n return;\n }\n\n groups.set(palletId, {\n key: palletId,\n palletId,\n label: palletLabel(product),\n depotLocation: product?.pallet_info?.depot_location ?? null,\n createdAt: product?.pallet_info?.created_at ?? null,\n items: [product],\n isNoPallet: false,\n });\n });\n\n const ordered = Array.from(groups.values()).sort(comparePalletGroups);\n\n if (unpalletised.length > 0) {\n ordered.push({\n key: NO_PALLET_KEY,\n palletId: null,\n label: 'No Pallet ID',\n depotLocation: null,\n createdAt: null,\n items: unpalletised,\n isNoPallet: true,\n });\n }\n\n return ordered;\n};\n"],"names":["NO_PALLET_KEY","palletLabel","product","comparePalletGroups","a","b","aTime","bTime","aValid","bValid","hasAnyPallet","products","toggleGroupSelectionIds","currentSelection","groupIds","allSelected","current","ids","id","groupProductsByPallet","groups","unpalletised","palletId","existing","ordered"],"mappings":"AAAO,MAAMA,IAAgB,iBAkBvBC,IAAc,CAACC,MACnBA,GAAS,aAAa,SAASA,GAAS,WAGpCC,IAAsB,CAACC,GAAgBC,MAAmB;AAC9D,QAAMC,IAAQF,EAAE,YAAY,IAAI,KAAKA,EAAE,SAAS,EAAE,QAAA,IAAY,KACxDG,IAAQF,EAAE,YAAY,IAAI,KAAKA,EAAE,SAAS,EAAE,QAAA,IAAY,KACxDG,IAAS,CAAC,OAAO,MAAMF,CAAK,GAC5BG,IAAS,CAAC,OAAO,MAAMF,CAAK;AAElC,SAAIC,KAAUC,KAAUH,MAAUC,IAAcD,IAAQC,IAEpDC,MAAWC,IAAeD,IAAS,KAAK,IAGrCJ,EAAE,MAAM,cAAcC,EAAE,OAAO,QAAW,EAAE,SAAS,IAAM;AACpE,GAEaK,IAAe,CAACC,OAC1BA,KAAY,CAAA,GAAI,KAAK,CAACT,MAAiB,CAAC,CAACA,GAAS,SAAS,GAMjDU,IAA0B,CACrCC,GACAC,GACAC,MACU;AACV,QAAMC,IAAUH,KAAoB,CAAA,GAC9BI,IAAMH,KAAY,CAAA;AAExB,SAAIC,IACKC,EAAQ,OAAO,CAACE,MAAY,CAACD,EAAI,SAASC,CAAE,CAAC,IAI/C,CAAC,GAAGF,GAAS,GAAGC,EAAI,OAAO,CAACC,MAAY,CAACF,EAAQ,SAASE,CAAE,CAAC,CAAC;AACvE,GAMaC,IAAwB,CAACR,MAAmC;AACvE,QAAMS,wBAAa,IAAA,GACbC,IAAsB,CAAA;AAE5B,GAACV,KAAY,CAAA,GAAI,QAAQ,CAACT,MAAiB;AACzC,UAAMoB,IAAWpB,GAAS;AAE1B,QAAI,CAACoB,GAAU;AACb,MAAAD,EAAa,KAAKnB,CAAO;AACzB;AAAA,IACF;AAEA,UAAMqB,IAAWH,EAAO,IAAIE,CAAQ;AACpC,QAAIC,GAAU;AACZ,MAAAA,EAAS,MAAM,KAAKrB,CAAO;AAC3B;AAAA,IACF;AAEA,IAAAkB,EAAO,IAAIE,GAAU;AAAA,MACnB,KAAKA;AAAA,MACL,UAAAA;AAAA,MACA,OAAOrB,EAAYC,CAAO;AAAA,MAC1B,eAAeA,GAAS,aAAa,kBAAkB;AAAA,MACvD,WAAWA,GAAS,aAAa,cAAc;AAAA,MAC/C,OAAO,CAACA,CAAO;AAAA,MACf,YAAY;AAAA,IAAA,CACb;AAAA,EACH,CAAC;AAED,QAAMsB,IAAU,MAAM,KAAKJ,EAAO,QAAQ,EAAE,KAAKjB,CAAmB;AAEpE,SAAIkB,EAAa,SAAS,KACxBG,EAAQ,KAAK;AAAA,IACX,KAAKxB;AAAA,IACL,UAAU;AAAA,IACV,OAAO;AAAA,IACP,eAAe;AAAA,IACf,WAAW;AAAA,IACX,OAAOqB;AAAA,IACP,YAAY;AAAA,EAAA,CACb,GAGIG;AACT;"}
|
package/dist/types/components/order-view/return-client-products/product-table/palletGrouping.d.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
export declare const NO_PALLET_KEY = "__no_pallet__";
|
|
2
|
-
export interface PalletGroup {
|
|
3
|
-
/** Grouping key — the raw `pallet_id`, or NO_PALLET_KEY for unpalletised items. */
|
|
4
|
-
key: string;
|
|
5
|
-
palletId: string | null;
|
|
6
|
-
/** Warehouse-facing pallet ID (`pallet_info.alias`), falling back to the raw id. */
|
|
7
|
-
label: string;
|
|
8
|
-
depotLocation: string | null;
|
|
9
|
-
createdAt: string | null;
|
|
10
|
-
items: any[];
|
|
11
|
-
isNoPallet: boolean;
|
|
12
|
-
}
|
|
13
|
-
export declare const hasAnyPallet: (products: any[]) => boolean;
|
|
14
|
-
/**
|
|
15
|
-
* Adds or removes a whole group's item ids from the current selection. Purely a
|
|
16
|
-
* shortcut for ticking each row — it carries no whole-pallet split semantics.
|
|
17
|
-
*/
|
|
18
|
-
export declare const toggleGroupSelectionIds: (currentSelection: any[], groupIds: any[], allSelected: boolean) => any[];
|
|
19
|
-
/**
|
|
20
|
-
* Groups return-order products into one group per distinct pallet ID, ordered by
|
|
21
|
-
* scan time, with any unpalletised items collected into a trailing group.
|
|
22
|
-
*/
|
|
23
|
-
export declare const groupProductsByPallet: (products: any[]) => PalletGroup[];
|