Qortal-Hub/src/components/Group/useBlockUsers.tsx
2025-05-09 21:20:38 +02:00

205 lines
5.3 KiB
TypeScript

import { useCallback, useEffect, useMemo, useRef } from 'react';
export const useBlockedAddresses = () => {
const userBlockedRef = useRef({});
const userNamesBlockedRef = useRef({});
const getAllBlockedUsers = useCallback(() => {
return {
names: userNamesBlockedRef.current,
addresses: userBlockedRef.current,
};
}, []);
const isUserBlocked = useCallback((address, name) => {
try {
if (!address) return false;
if (userBlockedRef.current[address]) return true;
return false;
} catch (error) {
console.log(error);
}
}, []);
useEffect(() => {
const fetchBlockedList = async () => {
try {
const response = await new Promise((res, rej) => {
window
.sendMessage('listActions', {
type: 'get',
listName: `blockedAddresses`,
})
.then((response) => {
if (response.error) {
rej(response?.message);
return;
} else {
res(response);
}
})
.catch((error) => {
console.error('Failed qortalRequest', error);
});
});
const blockedUsers = {};
response?.forEach((item) => {
blockedUsers[item] = true;
});
userBlockedRef.current = blockedUsers;
const response2 = await new Promise((res, rej) => {
window
.sendMessage('listActions', {
type: 'get',
listName: `blockedNames`,
})
.then((response) => {
if (response.error) {
rej(response?.message);
return;
} else {
res(response);
}
})
.catch((error) => {
console.error('Failed qortalRequest', error);
});
});
const blockedUsers2 = {};
response2?.forEach((item) => {
blockedUsers2[item] = true;
});
userNamesBlockedRef.current = blockedUsers2;
} catch (error) {
console.error(error);
}
};
fetchBlockedList();
}, []);
const removeBlockFromList = useCallback(async (address, name) => {
if (name) {
await new Promise((res, rej) => {
window
.sendMessage('listActions', {
type: 'remove',
items: [name],
listName: 'blockedNames',
})
.then((response) => {
if (response.error) {
rej(response?.message);
return;
} else {
const copyObject = { ...userNamesBlockedRef.current };
delete copyObject[name];
userNamesBlockedRef.current = copyObject;
res(response);
}
})
.catch((error) => {
console.error('Failed qortalRequest', error);
});
});
}
if (address) {
await new Promise((res, rej) => {
window
.sendMessage('listActions', {
type: 'remove',
items: [address],
listName: 'blockedAddresses',
})
.then((response) => {
if (response.error) {
rej(response?.message);
return;
} else {
const copyObject = { ...userBlockedRef.current };
delete copyObject[address];
userBlockedRef.current = copyObject;
res(response);
}
})
.catch((error) => {
console.error('Failed qortalRequest', error);
});
});
}
}, []);
const addToBlockList = useCallback(async (address, name) => {
if (name) {
await new Promise((res, rej) => {
window
.sendMessage('listActions', {
type: 'add',
items: [name],
listName: 'blockedNames',
})
.then((response) => {
if (response.error) {
rej(response?.message);
return;
} else {
const copyObject = { ...userNamesBlockedRef.current };
copyObject[name] = true;
userNamesBlockedRef.current = copyObject;
res(response);
}
})
.catch((error) => {
console.error('Failed qortalRequest', error);
});
});
}
if (address) {
await new Promise((res, rej) => {
window
.sendMessage('listActions', {
type: 'add',
items: [address],
listName: 'blockedAddresses',
})
.then((response) => {
if (response.error) {
rej(response?.message);
return;
} else {
const copyObject = { ...userBlockedRef.current };
copyObject[address] = true;
userBlockedRef.current = copyObject;
res(response);
}
})
.catch((error) => {
console.error('Failed qortalRequest', error);
});
});
}
}, []);
return useMemo(
() => ({
isUserBlocked,
addToBlockList,
removeBlockFromList,
getAllBlockedUsers,
}),
[isUserBlocked, addToBlockList, removeBlockFromList, getAllBlockedUsers]
);
};