perf: project-wide optimization pass + UI/theme fixes

Optimization (audited across src/, typecheck green):
- Crash guards: PurchaseAuction data?.result + stray text-node, AuctionItemDetail
  length>0, LiveAuction user?.contractorId, KYC params guard
- Hoisted render-defined components: Login MinimalInput (keyboard-focus bug),
  TenderFullDetail Section/InfoBox (subtree remount)
- Memoized hot paths: Spreadsheet ColumnHeaderRow/DataRow, list makeStyles,
  shared infinite-query select (stops per-render flatMap)
- Removed hot-path/in-list console logs; SkeletonList 10->1 shimmer

UI/theme: themed AppToast, redesigned sidebar drawer, list empty states,
KYC WebView cleanup

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Abin Toppo
2026-07-24 11:14:23 +05:30
co-authored by Claude Opus 4.8
parent 7853bab639
commit 95d8e0a925
51 changed files with 1659 additions and 679 deletions
+11 -3
View File
@@ -7,7 +7,7 @@ import PurchaseTenderTile from './PurchaseTenderTile';
import { useDispatch } from 'react-redux';
import { setTender } from '../../Redux/Slices/SelectedTender';
import { SearchInput } from '../../components/SearchInput';
import { Skeleton } from '../../components';
import { Skeleton, EmptyState } from '../../components';
import { allBooleanProps } from './types/types';
import FilterModal from './Modal/FilterModal';
import colors from '../../Constant/Color';
@@ -118,12 +118,14 @@ const PurchaseTenderAllList = () => {
data={data?.result ?? []}
keyExtractor={(item) => String(item.tenderId || item.id)}
showsVerticalScrollIndicator={false}
contentContainerStyle={{ paddingBottom: 200, paddingHorizontal: 10 }}
contentContainerStyle={{ flexGrow: 1, paddingBottom: 200, paddingHorizontal: 10 }}
renderItem={({ item }) => (
<PurchaseTenderTile
item={item}
onPressDetails={() => {
navigation.navigate('TenderDetail', { item, onAddToPurchase: () => { }, routeFrom: 'PurchasedTender' });
// LiveTenderDetail reads a flat tender object from route.params
// (route.params.tenderId / .tenderStatus), same as LiveTenderTile.
navigation.navigate(NavigationString.LiveTenderDetail, item);
}}
onStartBidding={() => {
Dispatch(setTender(item))
@@ -136,6 +138,12 @@ const PurchaseTenderAllList = () => {
onEndReached={loadMore}
onEndReachedThreshold={0.6}
ListFooterComponent={renderFooter}
ListEmptyComponent={
<EmptyState
title="No purchased tenders found"
subtitle="Tenders you purchase will appear here."
/>
}
refreshing={isRefetching}
onRefresh={refetch}
/>}