toastListFoundation.ts 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import BaseFoundation, { DefaultAdapter } from '../base/foundation';
  2. import { ToastInstance, ToastProps } from '../toast/toastFoundation';
  3. // eslint-disable-next-line @typescript-eslint/no-empty-interface
  4. export interface ToastListProps{
  5. }
  6. export interface ToastListState{
  7. list: ToastInstance[];
  8. removedItems: ToastInstance[];
  9. }
  10. export interface ToastListAdapter extends DefaultAdapter<ToastListProps, ToastListState>{
  11. updateToast: (list: ToastListState['list'], removedItems: ToastListState['removedItems']) => void;
  12. }
  13. export default class ToastListFoundation extends BaseFoundation<ToastListAdapter> {
  14. constructor(adapter: ToastListAdapter) {
  15. super({ ...ToastListFoundation.defaultAdapter, ...adapter });
  16. }
  17. addToast(toastOpts: ToastProps) {
  18. const toastList = this._adapter.getState('list') as ToastListState['list'];
  19. // const id = getUuid('toast');
  20. // let toastOpts = { ...opts, id };
  21. // console.log(toastOpts);
  22. toastList.push(toastOpts);
  23. this._adapter.updateToast(toastList, []);
  24. // return id;
  25. }
  26. removeToast(id: string) {
  27. let toastList = this._adapter.getState('list') as ToastListState['list'];
  28. const removedItems: ToastListState['removedItems'] = [];
  29. toastList = toastList.filter(toastOpts => {
  30. if (toastOpts.id === id) {
  31. removedItems.push(toastOpts);
  32. return false;
  33. }
  34. return true;
  35. });
  36. this._adapter.updateToast(toastList, removedItems);
  37. }
  38. destroyAll() {
  39. const toastList = this._adapter.getState('list');
  40. if (toastList.length > 0) {
  41. this._adapter.updateToast([], toastList);
  42. }
  43. }
  44. }