feat: add a way to toggle offline users list

This commit is contained in:
Paul Makles
2022-01-10 23:40:47 +00:00
parent c6cc1f3672
commit 8fcda5a6de
3 changed files with 59 additions and 24 deletions

View File

@@ -1,23 +1,21 @@
import {
action,
autorun,
computed,
makeAutoObservable,
ObservableSet,
} from "mobx";
import { action, computed, makeAutoObservable, ObservableSet } from "mobx";
import {
setOfflineSkipEnabled,
resetMemberSidebarFetched,
} from "../../components/navigation/right/MemberSidebar";
import Persistent from "../interfaces/Persistent";
import Store from "../interfaces/Store";
/**
* Union type of available experiments.
*/
export type Experiment = "dummy";
export type Experiment = "dummy" | "offline_users";
/**
* Currently active experiments.
*/
export const AVAILABLE_EXPERIMENTS: Experiment[] = ["dummy"];
export const AVAILABLE_EXPERIMENTS: Experiment[] = ["dummy", "offline_users"];
/**
* Definitions for experiments listed by {@link Experiment}.
@@ -29,6 +27,11 @@ export const EXPERIMENTS: {
title: "Dummy Experiment",
description: "This is a dummy experiment.",
},
offline_users: {
title: "Re-enable offline users in large servers (>10k members)",
description:
"If you can take the performance hit (for example, you're on desktop), you can re-enable offline users for big servers such as Revolt Lounge.",
},
};
export interface Data {
@@ -62,7 +65,7 @@ export default class Experiments implements Store, Persistent<Data> {
@action hydrate(data: Data) {
if (data.enabled) {
for (const experiment of data.enabled) {
this.enabled.add(experiment as Experiment);
this.enable(experiment as Experiment);
}
}
}
@@ -80,6 +83,11 @@ export default class Experiments implements Store, Persistent<Data> {
* @param experiment Experiment
*/
@action enable(experiment: Experiment) {
if (experiment === "offline_users") {
setOfflineSkipEnabled(false);
resetMemberSidebarFetched();
}
this.enabled.add(experiment);
}
@@ -88,6 +96,8 @@ export default class Experiments implements Store, Persistent<Data> {
* @param experiment Experiment
*/
@action disable(experiment: Experiment) {
if (experiment === "offline_users") setOfflineSkipEnabled(true);
this.enabled.delete(experiment);
}