bugfixing filter system

This commit is contained in:
MuslemRahimi 2024-09-12 15:55:53 +02:00
parent 949f5e0bc1
commit a61ce7613a
2 changed files with 19 additions and 44 deletions

View File

@ -15,6 +15,8 @@
let ruleOfList = [];
let displayRules = [];
let filterQuery = '';
let syncWorker: Worker | undefined;
let ruleName = '';
let shouldLoadWorker = writable(false);
@ -47,11 +49,7 @@ Object.keys(allRules).forEach(ruleName => {
valueMappings[ruleName] = allRules[ruleName].defaultValue;
});
// Update ruleCondition and valueMappings based on existing rules
ruleOfList.forEach(rule => {
ruleCondition[rule.name] = rule.condition || allRules[rule.name].defaultCondition;
valueMappings[rule.name] = rule.value || allRules[rule.name].defaultValue;
});
async function handleDeleteRule(state) {
@ -81,6 +79,7 @@ async function handleResetAll() {
ruleOfList = [];
ruleOfList = [...ruleOfList];
ruleName = '';
filterQuery = '';
checkedItems = new Set();
Object.keys(allRules).forEach(ruleName => {
ruleCondition[ruleName] = allRules[ruleName].defaultCondition;
@ -158,7 +157,7 @@ async function handleRule(newRule) {
}
const loadWorker = async () => {
syncWorker.postMessage({ rawData, ruleOfList });
syncWorker.postMessage({ rawData, ruleOfList, filterQuery });
};
const handleMessage = (event) => {
@ -280,7 +279,6 @@ const nyseDate = new Date(data?.getOptionsFlowFeed?.at(0)?.date ?? null)?.toLoca
let muted = true;
let newIncomingData = false;
let socket;
let filterQuery = '';
let previousCallVolume = 0; //This is needed to play the sound only if it changes.
let notFound = false;
let isLoaded = false;
@ -372,25 +370,11 @@ function handleViewData(optionData) {
}
rawData = [...newData];
// Apply current filters to the new rawData
let filteredData = rawData;
// Apply filterQuery if it exists
if (filterQuery?.length !== 0) {
filteredData = filteredData.filter(item => item?.ticker === filterQuery?.toUpperCase());
if(ruleOfList?.length !== 0 || filterQuery?.length !== 0) {
shouldLoadWorker.set(true)
console.log('yes')
}
if (filteredData.length !== 0) {
notFound = false;
} else {
notFound = true;
}
// Update displayedData instead of rawData
displayedData = filteredData;
calculateStats(displayedData);
if (previousCallVolume !== displayCallVolume && !muted) {
audio?.play();
}
@ -605,23 +589,7 @@ function calculateStats(data) {
filterQuery = event.target.value;
setTimeout(() => {
let filteredData = rawData;
if (filterQuery?.length !== 0) {
filteredData = rawData.filter(item => item?.ticker === filterQuery?.toUpperCase());
}
if (filteredData.length !== 0) {
notFound = false;
} else {
notFound = true;
}
// Update a separate variable for displayed data, not rawData itself
displayedData = filteredData;
calculateStats(displayedData);
shouldLoadWorker.set(true)
}, 200);
}

View File

@ -91,8 +91,15 @@ function isDateWithinRange(dateString: string, range: string): boolean {
}
}
async function filterRawData(rawData, ruleOfList) {
async function filterRawData(rawData, ruleOfList, filterQuery) {
return rawData?.filter((item) => {
if (
filterQuery?.length !== 0 &&
item.ticker !== filterQuery.toUpperCase()
) {
return false; // Exclude if the ticker doesn't match the filterQuery
}
return ruleOfList.every((rule) => {
const itemValue = item[rule.name];
const ruleValue = convertUnitToValue(rule.value);
@ -132,8 +139,8 @@ async function filterRawData(rawData, ruleOfList) {
}
onmessage = async (event: MessageEvent) => {
const { rawData, ruleOfList } = event.data || {};
const filteredData = await filterRawData(rawData, ruleOfList);
const { rawData, ruleOfList, filterQuery } = event.data || {};
const filteredData = await filterRawData(rawData, ruleOfList, filterQuery);
postMessage({ message: "success", filteredData });
console.log(filteredData);
};