update sorting algorithm
This commit is contained in:
parent
4c3f2d2cfd
commit
aa576406a6
@ -844,124 +844,92 @@ function sortData(key) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Cycle through 'none', 'asc', 'desc' for the clicked key
|
// Cycle through 'none', 'asc', 'desc' for the clicked key
|
||||||
if (key === 'time') {
|
const orderCycle = ['none', 'asc', 'desc'];
|
||||||
// Only cycle between 'asc' and 'desc' for the 'time' key
|
const currentOrderIndex = orderCycle.indexOf(sortOrders[key]);
|
||||||
if (sortOrders[key] === 'asc') {
|
sortOrders[key] = orderCycle[(currentOrderIndex + 1) % orderCycle.length];
|
||||||
sortOrders[key] = 'desc';
|
|
||||||
} else {
|
|
||||||
sortOrders[key] = 'asc';
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Cycle through 'none', 'asc', 'desc' for other keys
|
|
||||||
if (sortOrders[key] === 'none') {
|
|
||||||
sortOrders[key] = 'asc';
|
|
||||||
} else if (sortOrders[key] === 'asc') {
|
|
||||||
sortOrders[key] = 'desc';
|
|
||||||
} else {
|
|
||||||
sortOrders[key] = 'none';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const sortOrder = sortOrders[key];
|
const sortOrder = sortOrders[key];
|
||||||
const originalData = filteredData?.length !==0 ? [...filteredData] : [...rawData];
|
const originalData = filteredData?.length !== 0 ? [...filteredData] : [...rawData];
|
||||||
if (sortOrder === 'none') {
|
|
||||||
// Reset to original data when 'none'
|
// Reset to original data when 'none'
|
||||||
|
if (sortOrder === 'none') {
|
||||||
displayedData = originalData;
|
displayedData = originalData;
|
||||||
} else {
|
return;
|
||||||
displayedData = [...originalData]?.sort((a, b) => {
|
}
|
||||||
if (key === 'time') {
|
|
||||||
// Handle time comparison
|
const compareFunctions = {
|
||||||
|
time: (a, b) => {
|
||||||
const timeA = new Date('1970-01-01T' + a.time).getTime();
|
const timeA = new Date('1970-01-01T' + a.time).getTime();
|
||||||
const timeB = new Date('1970-01-01T' + b.time).getTime();
|
const timeB = new Date('1970-01-01T' + b.time).getTime();
|
||||||
return sortOrder === 'asc' ? timeA - timeB : timeB - timeA;
|
return sortOrder === 'asc' ? timeA - timeB : timeB - timeA;
|
||||||
} else if (key === 'ticker') {
|
},
|
||||||
// Handle alphabetical comparison for symbol
|
ticker: (a, b) => {
|
||||||
const tickerA = a.ticker.toUpperCase();
|
const tickerA = a.ticker.toUpperCase();
|
||||||
const tickerB = b.ticker.toUpperCase();
|
const tickerB = b.ticker.toUpperCase();
|
||||||
if (sortOrder === 'asc') {
|
return sortOrder === 'asc' ? tickerA.localeCompare(tickerB) : tickerB.localeCompare(tickerA);
|
||||||
return tickerA > tickerB ? 1 : -1;
|
},
|
||||||
} else {
|
expiry: (a, b) => {
|
||||||
return tickerA < tickerB ? 1 : -1;
|
const timeA = new Date(a.date_expiration);
|
||||||
}
|
const timeB = new Date(b.date_expiration);
|
||||||
} else if (key === 'expiry' || key==='dte') {
|
|
||||||
// Handle alphabetical comparison for symbol
|
|
||||||
const timeA = new Date (a?.date_expiration);
|
|
||||||
const timeB = new Date (b?.date_expiration);
|
|
||||||
return sortOrder === 'asc' ? timeA - timeB : timeB - timeA;
|
return sortOrder === 'asc' ? timeA - timeB : timeB - timeA;
|
||||||
} else if (key === 'strike') {
|
},
|
||||||
// Handle numeric comparison for strike
|
dte: (a, b) => {
|
||||||
const strikeA = parseFloat(a.strike_price); // Convert to float for comparison
|
const timeA = new Date(a.date_expiration);
|
||||||
|
const timeB = new Date(b.date_expiration);
|
||||||
|
return sortOrder === 'asc' ? timeA - timeB : timeB - timeA;
|
||||||
|
},
|
||||||
|
strike: (a, b) => {
|
||||||
|
const strikeA = parseFloat(a.strike_price);
|
||||||
const strikeB = parseFloat(b.strike_price);
|
const strikeB = parseFloat(b.strike_price);
|
||||||
return sortOrder === 'asc' ? strikeA - strikeB : strikeB - strikeA;
|
return sortOrder === 'asc' ? strikeA - strikeB : strikeB - strikeA;
|
||||||
|
},
|
||||||
} else if (key === 'spot') {
|
spot: (a, b) => {
|
||||||
// Handle numeric comparison for strike
|
const spotA = parseFloat(a.underlying_price);
|
||||||
const strikeA = parseFloat(a.underlying_price); // Convert to float for comparison
|
const spotB = parseFloat(b.underlying_price);
|
||||||
const strikeB = parseFloat(b.underlying_price);
|
return sortOrder === 'asc' ? spotA - spotB : spotB - spotA;
|
||||||
return sortOrder === 'asc' ? strikeA - strikeB : strikeB - strikeA;
|
},
|
||||||
} else if (key === 'price') {
|
price: (a, b) => {
|
||||||
// Handle numeric comparison for strike
|
const priceA = parseFloat(a.price);
|
||||||
const strikeA = parseFloat(a?.price); // Convert to float for comparison
|
const priceB = parseFloat(b.price);
|
||||||
const strikeB = parseFloat(b?.price);
|
return sortOrder === 'asc' ? priceA - priceB : priceB - priceA;
|
||||||
return sortOrder === 'asc' ? strikeA - strikeB : strikeB - strikeA;
|
},
|
||||||
} else if (key === 'premium') {
|
premium: (a, b) => {
|
||||||
// Handle numeric comparison for strike
|
const premiumA = parseFloat(a.cost_basis);
|
||||||
const strikeA = parseFloat(a.cost_basis); // Convert to float for comparison
|
const premiumB = parseFloat(b.cost_basis);
|
||||||
const strikeB = parseFloat(b.cost_basis);
|
return sortOrder === 'asc' ? premiumA - premiumB : premiumB - premiumA;
|
||||||
return sortOrder === 'asc' ? strikeA - strikeB : strikeB - strikeA;
|
},
|
||||||
} else if (key === 'vol') {
|
vol: (a, b) => {
|
||||||
// Handle numeric comparison for strike
|
const volA = parseFloat(a.volume);
|
||||||
const strikeA = parseFloat(a.volume); // Convert to float for comparison
|
const volB = parseFloat(b.volume);
|
||||||
const strikeB = parseFloat(b.volume);
|
return sortOrder === 'asc' ? volA - volB : volB - volA;
|
||||||
return sortOrder === 'asc' ? strikeA - strikeB : strikeB - strikeA;
|
},
|
||||||
} else if (key === 'oi') {
|
oi: (a, b) => {
|
||||||
// Handle numeric comparison for strike
|
const oiA = parseFloat(a.open_interest);
|
||||||
const strikeA = parseFloat(a.open_interest); // Convert to float for comparison
|
const oiB = parseFloat(b.open_interest);
|
||||||
const strikeB = parseFloat(b.open_interest);
|
return sortOrder === 'asc' ? oiA - oiB : oiB - oiA;
|
||||||
return sortOrder === 'asc' ? strikeA - strikeB : strikeB - strikeA;
|
},
|
||||||
} else if (key === 'callPut') {
|
callPut: (a, b) => {
|
||||||
// Handle Call/Put sorting
|
const callPutA = a.put_call?.toUpperCase();
|
||||||
const callPutA = a?.put_call?.toUpperCase(); // Normalize to uppercase
|
const callPutB = b.put_call?.toUpperCase();
|
||||||
const callPutB = b?.put_call?.toUpperCase();
|
return sortOrder === 'asc' ? callPutA.localeCompare(callPutB) : callPutB.localeCompare(callPutA);
|
||||||
if (sortOrder === 'asc') {
|
},
|
||||||
return callPutA > callPutB ? 1 : -1;
|
sentiment: (a, b) => {
|
||||||
} else {
|
const sentimentOrder = { 'BULLISH': 1, 'NEUTRAL': 2, 'BEARISH': 3 };
|
||||||
return callPutA < callPutB ? 1 : -1;
|
const sentimentA = sentimentOrder[a.sentiment?.toUpperCase()] || 4;
|
||||||
}
|
|
||||||
} else if (key === 'sentiment') {
|
|
||||||
// Handle sentiment sorting
|
|
||||||
const sentimentOrder = {
|
|
||||||
'BULLISH': 1,
|
|
||||||
'NEUTRAL': 2,
|
|
||||||
'BEARISH': 3,
|
|
||||||
};
|
|
||||||
const sentimentA = sentimentOrder[a.sentiment?.toUpperCase()] || 4; // Fallback for undefined values
|
|
||||||
const sentimentB = sentimentOrder[b.sentiment?.toUpperCase()] || 4;
|
const sentimentB = sentimentOrder[b.sentiment?.toUpperCase()] || 4;
|
||||||
|
return sortOrder === 'asc' ? sentimentA - sentimentB : sentimentB - sentimentA;
|
||||||
if (sortOrder === 'asc') {
|
},
|
||||||
return sentimentA - sentimentB; // Ascending order
|
type: (a, b) => {
|
||||||
} else {
|
const typeOrder = { 'SWEEP': 1, 'TRADE': 2 };
|
||||||
return sentimentB - sentimentA; // Descending order
|
const typeA = typeOrder[a.option_activity_type?.toUpperCase()] || 3;
|
||||||
}
|
const typeB = typeOrder[b.option_activity_type?.toUpperCase()] || 3;
|
||||||
} else if (key === 'type') {
|
return sortOrder === 'asc' ? typeA - typeB : typeB - typeA;
|
||||||
// Handle sentiment sorting
|
},
|
||||||
const sentimentOrder = {
|
|
||||||
'SWEEP': 1,
|
|
||||||
'TRADE': 2,
|
|
||||||
};
|
};
|
||||||
const sentimentA = sentimentOrder[a?.option_activity_type?.toUpperCase()] || 3; // Fallback for undefined values
|
|
||||||
const sentimentB = sentimentOrder[b?.option_activity_type?.toUpperCase()] || 3;
|
|
||||||
|
|
||||||
if (sortOrder === 'asc') {
|
// Sort using the appropriate comparison function
|
||||||
return sentimentA - sentimentB; // Ascending order
|
displayedData = originalData.sort(compareFunctions[key]);
|
||||||
} else {
|
}
|
||||||
return sentimentB - sentimentA; // Descending order
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user