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