Skip to content

Instantly share code, notes, and snippets.

@kofno
Created December 14, 2018 19:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kofno/f3cafc0a677ead3ed38b51be3e2e21fc to your computer and use it in GitHub Desktop.
Save kofno/f3cafc0a677ead3ed38b51be3e2e21fc to your computer and use it in GitHub Desktop.
MobX enhanced logic for Snackbar notifications
// - 1 -
import { just, Maybe, nothing } from 'maybeasy';
import { action, computed, observable } from 'mobx';
import { Alert } from './types';
class AlertsStore {
// - 2 -
@observable
alerts: Alert[] = [];
// - 3 -
@computed
get current(): Maybe<Alert> {
return this.alerts.length === 0 ? nothing() : just(this.alerts[0]);
}
// - 4 -
@action
hide = () => {
if (this.alerts.length > 0) {
this.alerts[0].display = false;
}
};
// - 5 -
@action
process = () => {
this.alerts = this.alerts.slice(1);
};
// - 6 -
@action
push = (alert: Alert) => {
this.hide();
this.alerts.push({ ...alert, display: true });
};
}
// - 7 -
const alertsStore = new AlertsStore();
export default alertsStore;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment