Files
discord-decomp/modules/notification_center/useNotificationCenterItemsLoader.tsx
T
2026-11-01 12:12:55 +02:00

167 lines
5.6 KiB
TypeScript

// Metro module 15283 (f15284).
import _slicedToArray from "../../_bundle/_slicedToArray";
import { useRef, useState, useEffect, useCallback } from "react";
import RecentMentionsStore from "../inbox/RecentMentionsStore";
import NotificationCenterItemsStore from "./NotificationCenterItemsStore";
import NotificationCenterStore from "./NotificationCenterStore";
import { ReadStateTypes } from "../read_states/ReadStateConstants";
import { useStateFromStores, useStateFromStoresObject } from "../../_bundle/Module589";
import { setNotificationCenterActive, resetNotificationCenter, fetchNotificationCenterItems } from "./NotificationCenterItemsActions";
import { ackUserFeature } from "../../actions/ReadStateActionCreators";
import useGetIsMounted from "../../hooks/useGetIsMounted";
let env10860 = {};
export const PAGE_SIZE_WITH_MENTIONS = 8;
export const PAGE_SIZE = 20;
export function useNotificationCenterItemsLoader(a0) {
let env21842 = {
$parent: env10860
};
const isFocused = a0.isFocused;
env21842[0] = isFocused;
const navigatedAway = a0.navigatedAway;
env21842[1] = navigatedAway;
const isDesktop = a0.isDesktop;
env21842[2] = isDesktop;
let withMentions = a0.withMentions;
if (withMentions === void 0) {
withMentions = false;
}
let c21843_0;
env21842[3] = withMentions;
const initialPageSize = a0.initialPageSize;
env21842[4] = initialPageSize;
env21842[5] = void 0;
env21842[6] = void 0;
env21842[7] = void 0;
env21842[8] = void 0;
env21842[9] = void 0;
env21842[10] = void 0;
env21842[11] = void 0;
env21842[12] = void 0;
env21842[13] = void 0;
env21842[14] = void 0;
env21842[15] = void 0;
const stateFromStores = useStateFromStores([NotificationCenterStore], () => NotificationCenterStore.shouldReload());
env21842[5] = stateFromStores;
env21842[6] = useRef(false);
const r33 = _slicedToArray(useState(false), 2);
const loadingMore = r33[0];
env21842[7] = r33[1];
const stateFromStoresObject = useStateFromStoresObject([NotificationCenterItemsStore], () => ({
initialized: NotificationCenterItemsStore.initialized,
loading: NotificationCenterItemsStore.loading,
items: NotificationCenterItemsStore.items,
hasMore: NotificationCenterItemsStore.hasMore,
cursor: NotificationCenterItemsStore.cursor,
errored: NotificationCenterItemsStore.errored
}));
const initialized = stateFromStoresObject.initialized;
env21842[8] = initialized;
const { loading, items } = stateFromStoresObject;
env21842[9] = items;
const hasMore = stateFromStoresObject.hasMore;
env21842[10] = hasMore;
const cursor = stateFromStoresObject.cursor;
env21842[11] = cursor;
const errored = stateFromStoresObject.errored;
env21842[12] = errored;
const stateFromStoresObject2 = useStateFromStoresObject([RecentMentionsStore], () => ({
everyoneFilter: RecentMentionsStore.everyoneFilter,
roleFilter: RecentMentionsStore.roleFilter
}));
const roleFilter = stateFromStoresObject2.roleFilter;
env21842[13] = roleFilter;
const everyoneFilter = stateFromStoresObject2.everyoneFilter;
env21842[14] = everyoneFilter;
useEffect(() => {
setNotificationCenterActive(true);
return () => setNotificationCenterActive(false);
}, []);
useEffect(() => {
if (env21842[8] && env21842[0]) {
ackUserFeature(ReadStateTypes.NOTIFICATION_CENTER);
}
}, [isFocused, initialized]);
const getIsMounted = useGetIsMounted();
env21842[15] = getIsMounted;
useEffect(() => () => {
if (env21842[2]) {
const r17 = (0, env21842[15])();
if (r17 ? !r17 : env21842[12] || env21842[9].length > 100) {
resetNotificationCenter();
}
} else if (env21842[1] && env21842[9].length > 100) {
resetNotificationCenter();
}
}, [navigatedAway, items, isDesktop, getIsMounted, errored]);
useEffect(() => {
const r4 = env21842[8];
if (r4 ? env21842[5] && env21842[0] : !r4) {
let limit = env21842[4];
if (limit == null) {
limit = env21842[3] ? 8 : 20;
}
fetchNotificationCenterItems({
limit,
with_mentions: env21842[3],
roles_filter: env21842[13],
everyone_filter: env21842[14]
});
}
}, [initialized, stateFromStores, isFocused, withMentions, roleFilter, everyoneFilter, initialPageSize]);
c21843_0 = void 0;
c21843_0 = async (c30857_0) => {
let r47;
let c30857_1;
L26: {
c30857_1 = void 0;
const r10 = env21842[6];
if (r10.current || !env21842[8] || !env21842[10] || env21842[11] == null || (c30857_0 ? !c30857_0 : env21842[12])) {
break L26;
}
r10.current = true;
(0, env21842[7])(true);
const after = env21842[11];
const with_mentions = env21842[3];
const r42 = {
after,
with_mentions,
roles_filter: env21842[13],
everyone_filter: env21842[14],
limit: null
};
const limit = 20;
if (!with_mentions) {
r42.limit = limit;
r47 = fetchNotificationCenterItems(r42, () => {
env21842[6].current = false;
});
} else {
r42.limit = 8;
r47 = fetchNotificationCenterItems(r42, () => {
env21842[6].current = false;
});
}
await r47;
(0, env21842[7])(false);
return void 0;
}
};
return {
initialized,
loading,
items,
hasMore,
loadMore: useCallback(function() {
return c21843_0.apply(this, arguments);
}, [initialized, hasMore, cursor, errored, withMentions, roleFilter, everyoneFilter]),
loadingMore,
setReadNotifItemToAcked: function setReadNotifItemToAcked(a0) {
if (!a0.acked) {
a0.acked = true;
}
},
errored
};
}