feat: schizo sorting
This commit is contained in:
		@@ -39,18 +39,7 @@ export const Board: FC<Props> = ({
 | 
				
			|||||||
        return has(obj, "deals");
 | 
					        return has(obj, "deals");
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const getDateFromDealOrGroup = (obj: GroupWithDeals | DealSummary) => {
 | 
					
 | 
				
			||||||
        // if is group get group with the delivery earliest date
 | 
					 | 
				
			||||||
        if (isGroup(obj)) {
 | 
					 | 
				
			||||||
            const dates = obj.deals.map(d => d.deliveryDate || d.createdAt).filter(Boolean);
 | 
					 | 
				
			||||||
            if (dates.length === 0) return null;
 | 
					 | 
				
			||||||
            return new Date(Math.min(...dates.map(d => {
 | 
					 | 
				
			||||||
                return new Date(d).getTime();
 | 
					 | 
				
			||||||
            })));
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        // if is deal get deal delivery date
 | 
					 | 
				
			||||||
        return new Date(obj.deliveryDate || obj.createdAt);
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
    const getDealGroups = (): GroupWithDeals[] => {
 | 
					    const getDealGroups = (): GroupWithDeals[] => {
 | 
				
			||||||
        const groups = uniq<DealGroupSchema>(summaries.filter(s => s.group).map(summary => summary.group) as DealGroupSchema[]);
 | 
					        const groups = uniq<DealGroupSchema>(summaries.filter(s => s.group).map(summary => summary.group) as DealGroupSchema[]);
 | 
				
			||||||
        if (groups.length === 0) return [];
 | 
					        if (groups.length === 0) return [];
 | 
				
			||||||
@@ -71,23 +60,45 @@ export const Board: FC<Props> = ({
 | 
				
			|||||||
            return acc;
 | 
					            return acc;
 | 
				
			||||||
        }, [] as { group: DealGroupSchema; deals: DealSummary[] }[]);
 | 
					        }, [] as { group: DealGroupSchema; deals: DealSummary[] }[]);
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const getDateFromDealOrGroup = (obj: GroupWithDeals | DealSummary) => {
 | 
				
			||||||
 | 
					        // if is group get group with the delivery earliest date
 | 
				
			||||||
 | 
					        if (isGroup(obj)) {
 | 
				
			||||||
 | 
					            const dates = obj.deals.map(d => d.deliveryDate || d.createdAt).filter(Boolean);
 | 
				
			||||||
 | 
					            if (dates.length === 0) return null;
 | 
				
			||||||
 | 
					            return new Date(Math.min(...dates.map(d => {
 | 
				
			||||||
 | 
					                return new Date(d).getTime();
 | 
				
			||||||
 | 
					            })));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        // if is deal get deal delivery date
 | 
				
			||||||
 | 
					        return new Date(obj.deliveryDate || obj.createdAt);
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const getDealsAndGroups = (): (GroupWithDeals | DealSummary)[] => {
 | 
					    const getDealsAndGroups = (): (GroupWithDeals | DealSummary)[] => {
 | 
				
			||||||
        const groups = getDealGroups();
 | 
					        const groups = getDealGroups();
 | 
				
			||||||
        const deals = summaries.filter(s => !s.group);
 | 
					        const deals = summaries.filter(s => !s.group);
 | 
				
			||||||
        const data = [...groups, ...deals];
 | 
					        const dealsWithDeliveryDate = deals.filter(d => d.deliveryDate).sort((a, b) => {
 | 
				
			||||||
        return data.sort((a, b) => {
 | 
					            if (!a.deliveryDate || !b.deliveryDate) return 0;
 | 
				
			||||||
 | 
					            return new Date(a.deliveryDate).getTime() - new Date(b.deliveryDate).getTime();
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					        const dealsWithoutDeliveryDate = deals.filter(d => !d.deliveryDate).sort((a, b) => {
 | 
				
			||||||
 | 
					            return new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime();
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					        const groupsWithDeliveryDate = groups.filter(g => g.deals.some(d => d.deliveryDate));
 | 
				
			||||||
 | 
					        const groupsWithoutDeliveryDate = groups.filter(g => g.deals.some(d => !d.deliveryDate));
 | 
				
			||||||
 | 
					        const firstRankData = [...dealsWithDeliveryDate, ...groupsWithDeliveryDate].sort((a, b) => {
 | 
				
			||||||
            const aDate = getDateFromDealOrGroup(a);
 | 
					            const aDate = getDateFromDealOrGroup(a);
 | 
				
			||||||
            const bDate = getDateFromDealOrGroup(b);
 | 
					            const bDate = getDateFromDealOrGroup(b);
 | 
				
			||||||
            if (!aDate || !bDate) return 0;
 | 
					            if (!aDate || !bDate) return 0;
 | 
				
			||||||
            return aDate.getTime() - bDate.getTime();
 | 
					            return aDate.getTime() - bDate.getTime();
 | 
				
			||||||
        }).map((obj, index) => {
 | 
					        });
 | 
				
			||||||
            if (isGroup(obj)) {
 | 
					        const secondRankData = [...dealsWithoutDeliveryDate, ...groupsWithoutDeliveryDate].sort((a, b) => {
 | 
				
			||||||
                obj.deals[0].rank = index;
 | 
					            const aDate = getDateFromDealOrGroup(a);
 | 
				
			||||||
                return obj;
 | 
					            const bDate = getDateFromDealOrGroup(b);
 | 
				
			||||||
            }
 | 
					            if (!aDate || !bDate) return 0;
 | 
				
			||||||
            obj.rank = index;
 | 
					            return aDate.getTime() - bDate.getTime();
 | 
				
			||||||
            return obj;
 | 
					        });
 | 
				
			||||||
        }) as (GroupWithDeals | DealSummary)[];
 | 
					        return [...firstRankData, ...secondRankData];
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const renderDeal = (deal: DealSummary) => {
 | 
					    const renderDeal = (deal: DealSummary) => {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user