48 lines
2.3 KiB
TypeScript
48 lines
2.3 KiB
TypeScript
// Metro module 8331 (f8332).
|
|
import { useState, useEffect, useMemo } from "react";
|
|
import GuildScheduledEventStore from "./GuildScheduledEventStore";
|
|
import { useStateFromStores } from "../../_bundle/Module589";
|
|
import usePrevValue from "../../hooks/usePrevValue";
|
|
import { generateNextRecurrences, getRRule, MAX_YEARS_AHEAD_RECURRING_EVENT } from "./utils/ScheduleUtils";
|
|
import Module12 from "../../_bundle/Module12";
|
|
import SnowflakeUtils from "../../utils/SnowflakeUtils";
|
|
import Durations from "../../utils/Durations";
|
|
import GuildScheduledEventManager from "./GuildScheduledEventManager";
|
|
export default function useGuildEventRecurrences(a0, a1, a2) {
|
|
let c16508_4;
|
|
const stateFromStores = useStateFromStores([GuildScheduledEventStore], () => GuildScheduledEventStore.getGuildScheduledEvent(a0));
|
|
const prevValue = usePrevValue(a2);
|
|
c16508_4 = prevValue;
|
|
const [state, setState] = useState(a2 != null && stateFromStores != null ? generateNextRecurrences(4, getRRule(a2), new Date(stateFromStores.scheduled_start_time)) : []);
|
|
useEffect(() => {
|
|
if (c16508_4 != null) {
|
|
if (a2 != null && stateFromStores != null && !Module12.isEqual(c16508_4, a2)) {
|
|
setState(generateNextRecurrences(state.length, getRRule(a2), new Date(stateFromStores.scheduled_start_time)));
|
|
}
|
|
}
|
|
}, [a2, state.length, stateFromStores, prevValue]);
|
|
useEffect(() => {
|
|
if (a1 != null) {
|
|
GuildScheduledEventManager.getGuildEventUserCounts(a1, a0, state.map((item) => SnowflakeUtils.fromTimestamp(Math.floor(item.getTime() / Durations.Millis.SECOND) * Durations.Millis.SECOND)));
|
|
}
|
|
}, [a0, a1, state]);
|
|
return {
|
|
recurrenceStartTimes: state,
|
|
canViewMoreRecurrences: useMemo(() => {
|
|
if (a2 != null && state.length !== 0 && stateFromStores?.scheduled_start_time != null) {
|
|
const date = new Date();
|
|
date.setFullYear(date.getFullYear() + MAX_YEARS_AHEAD_RECURRING_EVENT);
|
|
const r31 = state[state.length - 1];
|
|
const r37 = getRRule(a2).after(r31);
|
|
return r37 != null && r37 <= date;
|
|
}
|
|
return false;
|
|
}, [a2, state, stateFromStores?.scheduled_start_time]),
|
|
updateRecurrenceStartTimes: function updateRecurrenceStartTimes() {
|
|
if (a2 != null && stateFromStores != null) {
|
|
setState([...state, ...generateNextRecurrences(4, getRRule(a2), state[state.length - 1], true)]);
|
|
}
|
|
}
|
|
};
|
|
};
|