doFetchModBlockedList: don't block ui thread #7674
1 changed files with 66 additions and 53 deletions
|
@ -1143,6 +1143,9 @@ export function doCommentModUnBlockAsModerator(commenterUri: string, creatorUri:
|
||||||
|
|
||||||
export function doFetchModBlockedList() {
|
export function doFetchModBlockedList() {
|
||||||
return async (dispatch: Dispatch, getState: GetState) => {
|
return async (dispatch: Dispatch, getState: GetState) => {
|
||||||
|
const LOOP_CHUNK_SIZE = 1;
|
||||||
|
const yieldThread = () => new Promise((resolve) => setTimeout(resolve));
|
||||||
|
|
||||||
const state = getState();
|
const state = getState();
|
||||||
const myChannels = selectMyChannelClaims(state);
|
const myChannels = selectMyChannelClaims(state);
|
||||||
if (!myChannels) {
|
if (!myChannels) {
|
||||||
|
@ -1172,7 +1175,7 @@ export function doFetchModBlockedList() {
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
.then((res) => {
|
.then(async (res) => {
|
||||||
let personalBlockList = [];
|
let personalBlockList = [];
|
||||||
let adminBlockList = [];
|
let adminBlockList = [];
|
||||||
let moderatorBlockList = [];
|
let moderatorBlockList = [];
|
||||||
|
@ -1185,66 +1188,76 @@ export function doFetchModBlockedList() {
|
||||||
const adminTimeoutMap = {};
|
const adminTimeoutMap = {};
|
||||||
const moderatorTimeoutMap = {};
|
const moderatorTimeoutMap = {};
|
||||||
|
|
||||||
const blockListsPerChannel = res.map((r) => r.value);
|
const blockListsPerChannel = [];
|
||||||
blockListsPerChannel
|
for (let i = 0; i < res.length; ++i) {
|
||||||
.sort((a, b) => {
|
blockListsPerChannel.push(res[i].value);
|
||||||
return 1;
|
if (i % 2 === 0) {
|
||||||
})
|
await yieldThread();
|
||||||
.forEach((channelBlockLists) => {
|
}
|
||||||
const storeList = (fetchedList, blockedList, timeoutMap, blockedByMap) => {
|
}
|
||||||
if (fetchedList) {
|
for (let i = 0; i < blockListsPerChannel.length; ++i) {
|
||||||
fetchedList.forEach((blockedChannel) => {
|
const storeList = async (fetchedList, blockedList, timeoutMap, blockedByMap) => {
|
||||||
if (blockedChannel.blocked_channel_name) {
|
if (fetchedList) {
|
||||||
const channelUri = buildURI({
|
for (let j = 0; j < fetchedList.length; ++j) {
|
||||||
channelName: blockedChannel.blocked_channel_name,
|
const blockedChannel = fetchedList[j];
|
||||||
channelClaimId: blockedChannel.blocked_channel_id,
|
if (j > 0 && i % LOOP_CHUNK_SIZE === 0) {
|
||||||
});
|
await yieldThread();
|
||||||
|
}
|
||||||
|
if (blockedChannel.blocked_channel_name) {
|
||||||
|
const channelUri = buildURI({
|
||||||
|
channelName: blockedChannel.blocked_channel_name,
|
||||||
|
channelClaimId: blockedChannel.blocked_channel_id,
|
||||||
|
});
|
||||||
|
|
||||||
if (!blockedList.find((blockedChannel) => isURIEqual(blockedChannel.channelUri, channelUri))) {
|
if (!blockedList.find((blockedChannel) => isURIEqual(blockedChannel.channelUri, channelUri))) {
|
||||||
blockedList.push({ channelUri, blockedAt: blockedChannel.blocked_at });
|
blockedList.push({ channelUri, blockedAt: blockedChannel.blocked_at });
|
||||||
|
|
||||||
if (blockedChannel.banned_for) {
|
if (blockedChannel.banned_for) {
|
||||||
timeoutMap[channelUri] = {
|
timeoutMap[channelUri] = {
|
||||||
blockedAt: blockedChannel.blocked_at,
|
blockedAt: blockedChannel.blocked_at,
|
||||||
bannedFor: blockedChannel.banned_for,
|
bannedFor: blockedChannel.banned_for,
|
||||||
banRemaining: blockedChannel.ban_remaining,
|
banRemaining: blockedChannel.ban_remaining,
|
||||||
};
|
};
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (blockedByMap !== undefined) {
|
|
||||||
const blockedByChannelUri = buildURI({
|
|
||||||
channelName: blockedChannel.blocked_by_channel_name,
|
|
||||||
channelClaimId: blockedChannel.blocked_by_channel_id,
|
|
||||||
});
|
|
||||||
|
|
||||||
if (blockedByMap[channelUri]) {
|
|
||||||
if (!blockedByMap[channelUri].includes(blockedByChannelUri)) {
|
|
||||||
blockedByMap[channelUri].push(blockedByChannelUri);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
blockedByMap[channelUri] = [blockedByChannelUri];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
if (blockedByMap !== undefined) {
|
||||||
|
const blockedByChannelUri = buildURI({
|
||||||
|
channelName: blockedChannel.blocked_by_channel_name,
|
||||||
|
channelClaimId: blockedChannel.blocked_by_channel_id,
|
||||||
|
});
|
||||||
|
|
||||||
|
if (blockedByMap[channelUri]) {
|
||||||
|
if (!blockedByMap[channelUri].includes(blockedByChannelUri)) {
|
||||||
|
blockedByMap[channelUri].push(blockedByChannelUri);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
blockedByMap[channelUri] = [blockedByChannelUri];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const blocked_channels = channelBlockLists && channelBlockLists.blocked_channels;
|
const channelBlockLists = blockListsPerChannel[i];
|
||||||
const globally_blocked_channels = channelBlockLists && channelBlockLists.globally_blocked_channels;
|
const blocked_channels = channelBlockLists && channelBlockLists.blocked_channels;
|
||||||
const delegated_blocked_channels = channelBlockLists && channelBlockLists.delegated_blocked_channels;
|
const globally_blocked_channels = channelBlockLists && channelBlockLists.globally_blocked_channels;
|
||||||
|
const delegated_blocked_channels = channelBlockLists && channelBlockLists.delegated_blocked_channels;
|
||||||
|
|
||||||
storeList(blocked_channels, personalBlockList, personalTimeoutMap);
|
if (i > 0 && i % LOOP_CHUNK_SIZE === 0) {
|
||||||
storeList(globally_blocked_channels, adminBlockList, adminTimeoutMap);
|
await yieldThread();
|
||||||
storeList(
|
}
|
||||||
delegated_blocked_channels,
|
|
||||||
moderatorBlockList,
|
|
||||||
moderatorTimeoutMap,
|
|
||||||
moderatorBlockListDelegatorsMap
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
|
await storeList(blocked_channels, personalBlockList, personalTimeoutMap);
|
||||||
|
await storeList(globally_blocked_channels, adminBlockList, adminTimeoutMap);
|
||||||
|
await storeList(
|
||||||
|
delegated_blocked_channels,
|
||||||
|
moderatorBlockList,
|
||||||
|
moderatorTimeoutMap,
|
||||||
|
moderatorBlockListDelegatorsMap
|
||||||
|
);
|
||||||
|
}
|
||||||
dispatch({
|
dispatch({
|
||||||
type: ACTIONS.COMMENT_MODERATION_BLOCK_LIST_COMPLETED,
|
type: ACTIONS.COMMENT_MODERATION_BLOCK_LIST_COMPLETED,
|
||||||
data: {
|
data: {
|
||||||
|
|
Loading…
Reference in a new issue