SpeedLimitSection/hooks/useUpdateReviewTable.tsx
src/ui/components/widgets/SpeedLimitSection/hooks/useUpdateReviewTable.tsxunknown
typescript
6 months ago
5.1 kB
5
Indexable
import React, { useMemo } from 'react' import { useSelector } from 'react-redux' import { speedLimitItemType, StatusTypes, StatusUpdate } from '../types' import { LoadingSpinner } from '@Shared' import { Icons } from '@Assets/icons/Icons' const useUpdateReviewTable = () => { const lang = useSelector((state: any) => state.language) const customFields = useMemo(() => { const fields = [ { key: 'type', label: 'Type', _style: { background: 'white', textAlign: 'center', display: 'none', verticalAlign: 'middle' } }, { key: 'data', label: 'data', _style: { background: 'white', textAlign: 'center', display: 'none' } }, { key: 'status_update', label: 'Status update', _style: { background: 'white', textAlign: 'center', display: 'none' } } ] return fields }, [lang]) const renderCustomCells = () => { const renderType = (status: StatusTypes) => { switch (status) { case StatusTypes.NewAdded: return ( <span className="text-sm text-green-400 font-semibold">Added</span> ) case StatusTypes.Edited: return ( <span className="text-sm text-yellow-500 font-semibold"> Modified </span> ) case StatusTypes.Delete: return ( <span className="text-sm text-red-400 font-semibold">Deleted</span> ) } } return { type: (item: speedLimitItemType, index: number) => { return ( <td className={`p-0 text-center w-[15%] align-middle border-none`}> {renderType(item?.status!)} </td> ) }, data: (item: speedLimitItemType, index: number) => { return ( <td className={` p-0 text-center w-[70%] align-middle border-none`}> <div className="flex items-center justify-center gap-2 my-2"> <span>{item.type}</span> <span>|</span> <span> {item?.new_subdivision && item.new_subdivision != item?.subdivision ? ( <> <span className="line-through">{item?.subdivision}</span> <span className="font-bold"> → {item.new_subdivision}</span> </> ) : ( item?.subdivision )} </span> <span>|</span> <span> {item?.new_speed_limit_mph && Number(item?.new_speed_limit_mph) !== Number(item?.speed_limit_mph) ? ( <> <span className="line-through"> {item?.speed_limit_mph} </span> <span className="font-bold"> → {item?.new_speed_limit_mph} </span>{' '} mph </> ) : ( <span> {item?.speed_limit_mph} mph</span> )} </span> <span>|</span> <span> From{' '} {item?.new_start_mile && item?.new_start_mile != item?.start_mile ? ( <> <span className="line-through">{item?.start_mile}</span> <span className="font-bold">→ {item?.new_start_mile}</span> </> ) : ( item?.start_mile )} </span> <span> to{' '} {item?.new_end_mile && item?.new_end_mile != item?.end_mile ? ( <> <span className="line-through">{item?.end_mile}</span> <span className="font-bold">→ {item?.new_end_mile}</span> </> ) : ( item?.end_mile )} </span> </div> </td> ) }, status_update: (item: speedLimitItemType, index: number) => { const renderContent = () => { switch (item?.statusUpdate) { case StatusUpdate.Success: return <Icons.Success width={20} height={20} /> case StatusUpdate.Failure: return <Icons.Error width={20} height={20} /> case StatusUpdate.Loading: return <LoadingSpinner height={25} width={25} /> default: return <></> } } return ( <td className="w-15% align-middle text-center border-none py-1"> {renderContent()} </td> ) } } } return { fields: customFields, customCells: renderCustomCells() } } export default useUpdateReviewTable
Editor is loading...
Leave a Comment