mirror of
https://github.com/BetterSEQTA/BetterSEQTA-Plus.git
synced 2026-06-05 19:24:39 +00:00
53 lines
1.5 KiB
TypeScript
53 lines
1.5 KiB
TypeScript
import { settingsState } from "../listeners/SettingsState";
|
|
import { OpenWhatsNewPopup } from "./OpenWhatsNewPopup";
|
|
import {
|
|
shouldShowEngageParentsAnnouncement,
|
|
showEngageParentsToast,
|
|
} from "./OpenEngageParentsAnnouncement";
|
|
import {
|
|
fetchThemeOfTheMonth,
|
|
OpenThemeOfTheMonthPopup,
|
|
shouldShowThemeOfTheMonth,
|
|
} from "./OpenThemeOfTheMonthPopup";
|
|
import { syncApiBaseToBackground } from "../DevApiBase";
|
|
|
|
type QueueStep = (goNext: () => void) => void;
|
|
|
|
/**
|
|
* Runs startup modals in order: What's New (if the extension just updated),
|
|
* Theme of the Month (when a new monthly entry hasn't been seen), then shows
|
|
* the SEQTA Engage toast (once, non-blocking).
|
|
*/
|
|
export async function runStartupPopupQueue() {
|
|
// Make sure the background script knows about any dev-mode API override
|
|
// before we start firing requests.
|
|
syncApiBaseToBackground();
|
|
|
|
const steps: QueueStep[] = [];
|
|
|
|
if (settingsState.justupdated) {
|
|
steps.push((goNext) => OpenWhatsNewPopup(goNext));
|
|
}
|
|
|
|
// Fetch the Theme of the Month before queueing so we don't show an empty
|
|
// popup if the network or server is unavailable.
|
|
const themeOfTheMonth = await fetchThemeOfTheMonth();
|
|
if (shouldShowThemeOfTheMonth(themeOfTheMonth)) {
|
|
steps.push((goNext) => {
|
|
void OpenThemeOfTheMonthPopup(themeOfTheMonth!, goNext);
|
|
});
|
|
}
|
|
|
|
function runNext() {
|
|
const step = steps.shift();
|
|
if (step) step(runNext);
|
|
else {
|
|
if (shouldShowEngageParentsAnnouncement()) {
|
|
showEngageParentsToast();
|
|
}
|
|
}
|
|
}
|
|
|
|
runNext();
|
|
}
|