mirror of
https://github.com/stoatchat/for-legacy-web.git
synced 2026-03-08 01:45:28 +00:00
feat: add changelog modal
This commit is contained in:
72
src/mobx/stores/Changelog.ts
Normal file
72
src/mobx/stores/Changelog.ts
Normal file
@@ -0,0 +1,72 @@
|
||||
import { action, makeAutoObservable, runInAction } from "mobx";
|
||||
|
||||
import { modalController } from "../../context/modals";
|
||||
|
||||
import { latestChangelog } from "../../assets/changelogs";
|
||||
import Persistent from "../interfaces/Persistent";
|
||||
import Store from "../interfaces/Store";
|
||||
import Syncable from "../interfaces/Syncable";
|
||||
|
||||
export interface Data {
|
||||
viewed?: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* Keeps track of viewed changelog items
|
||||
*/
|
||||
export default class Changelog implements Store, Persistent<Data>, Syncable {
|
||||
/**
|
||||
* Last viewed changelog ID
|
||||
*/
|
||||
private viewed: number;
|
||||
|
||||
/**
|
||||
* Construct new Layout store.
|
||||
*/
|
||||
constructor() {
|
||||
this.viewed = 0;
|
||||
makeAutoObservable(this);
|
||||
}
|
||||
|
||||
get id() {
|
||||
return "changelog";
|
||||
}
|
||||
|
||||
toJSON() {
|
||||
return {
|
||||
viewed: this.viewed,
|
||||
};
|
||||
}
|
||||
|
||||
@action hydrate(data: Data) {
|
||||
if (data.viewed) {
|
||||
this.viewed = data.viewed;
|
||||
}
|
||||
}
|
||||
|
||||
apply(_key: string, data: unknown, _revision: number): void {
|
||||
this.hydrate(data as Data);
|
||||
}
|
||||
|
||||
toSyncable(): { [key: string]: object } {
|
||||
return {
|
||||
changelog: this.toJSON(),
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether there are new updates
|
||||
*/
|
||||
checkForUpdates() {
|
||||
if (this.viewed < latestChangelog) {
|
||||
modalController.push({
|
||||
type: "changelog",
|
||||
initial: latestChangelog,
|
||||
});
|
||||
|
||||
runInAction(() => {
|
||||
this.viewed = latestChangelog;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -19,7 +19,8 @@ export type SyncKeys =
|
||||
| "appearance"
|
||||
| "locale"
|
||||
| "notifications"
|
||||
| "ordering";
|
||||
| "ordering"
|
||||
| "changelog";
|
||||
|
||||
export const SYNC_KEYS: SyncKeys[] = [
|
||||
"theme",
|
||||
@@ -27,6 +28,7 @@ export const SYNC_KEYS: SyncKeys[] = [
|
||||
"locale",
|
||||
"notifications",
|
||||
"ordering",
|
||||
"changelog",
|
||||
];
|
||||
|
||||
export interface Data {
|
||||
|
||||
Reference in New Issue
Block a user