{"version":3,"file":"ToastService.mjs","sources":["../../../../src/components/Toast/ToastService.ts"],"sourcesContent":["import { v4 as uuid } from 'uuid'\n\nimport {\n  type ToastContent,\n  type ToastId,\n  type ToastOptions,\n  type ToastType,\n} from './Toast.types'\n\nconst defaultOptions: ToastOptions = {\n  autoDismiss: false,\n  rightSide: false,\n}\n\n/* ToastService를 사용하는 이유\nNotion: https://www.notion.so/channelio/Toast-bc13dfbc81314141909250d9cf02c4c7#82b94a73d2f34257ab4799cdeccbc70c\n*/\n\nclass ToastService {\n  toasts: ToastType[] = []\n\n  getToasts = () => this.toasts\n\n  setToasts = (newToasts: ToastType[]) => {\n    this.toasts = newToasts\n  }\n\n  has = (toastId: ToastId) => {\n    if (!this.toasts.length) {\n      return false\n    }\n    return this.toasts.reduce(\n      (flag, toast) => (toast.id === toastId ? true : flag),\n      false\n    )\n  }\n\n  add = (content: ToastContent, options: ToastOptions = defaultOptions) => {\n    const newId: ToastId = uuid()\n\n    if (this.has(newId)) {\n      return ''\n    }\n\n    const newToast: ToastType = {\n      id: newId,\n      content,\n      version: 0,\n      ...options,\n    }\n    const newToasts: ToastType[] = [...this.toasts, newToast]\n    this.setToasts(newToasts)\n    return newId\n  }\n\n  update = (\n    toastId: ToastId,\n    content: ToastContent,\n    options: ToastOptions = {}\n  ) => {\n    if (!this.has(toastId)) {\n      return ''\n    }\n\n    const newToasts: ToastType[] = this.toasts.map((toast) => {\n      if (toast.id === toastId) {\n        return {\n          ...toast,\n          ...options,\n          version: toast?.version != null ? toast.version + 1 : 0,\n          content,\n        }\n      }\n      return toast\n    })\n    this.setToasts(newToasts)\n    return toastId\n  }\n\n  remove = (id: ToastId): boolean => {\n    if (!this.has(id)) {\n      return false\n    }\n    const newToasts: ToastType[] = this.toasts.filter(\n      (toast) => toast.id !== id\n    )\n    this.setToasts(newToasts)\n    return true // remove success\n  }\n\n  removeAll = () => {\n    if (!this.toasts.length) {\n      return\n    }\n\n    this.setToasts([])\n  }\n}\n\nexport default ToastService\n"],"names":["defaultOptions","autoDismiss","rightSide","ToastService","toasts","getToasts","setToasts","newToasts","has","toastId","length","reduce","flag","toast","id","add","content","options","newId","uuid","newToast","version","update","map","remove","filter","removeAll"],"mappings":";;AASA,MAAMA,cAA4B,GAAG;AACnCC,EAAAA,WAAW,EAAE,KAAK;AAClBC,EAAAA,SAAS,EAAE;AACb,CAAC;;AAED;AACA;AACA;;AAEA,MAAMC,YAAY,CAAC;AACjBC,EAAAA,MAAM,GAAgB,EAAE;AAExBC,EAAAA,SAAS,GAAGA,MAAM,IAAI,CAACD,MAAM;EAE7BE,SAAS,GAAIC,SAAsB,IAAK;IACtC,IAAI,CAACH,MAAM,GAAGG,SAAS;GACxB;EAEDC,GAAG,GAAIC,OAAgB,IAAK;AAC1B,IAAA,IAAI,CAAC,IAAI,CAACL,MAAM,CAACM,MAAM,EAAE;AACvB,MAAA,OAAO,KAAK;AACd;IACA,OAAO,IAAI,CAACN,MAAM,CAACO,MAAM,CACvB,CAACC,IAAI,EAAEC,KAAK,KAAMA,KAAK,CAACC,EAAE,KAAKL,OAAO,GAAG,IAAI,GAAGG,IAAK,EACrD,KACF,CAAC;GACF;AAEDG,EAAAA,GAAG,GAAGA,CAACC,OAAqB,EAAEC,OAAqB,GAAGjB,cAAc,KAAK;AACvE,IAAA,MAAMkB,KAAc,GAAGC,EAAI,EAAE;AAE7B,IAAA,IAAI,IAAI,CAACX,GAAG,CAACU,KAAK,CAAC,EAAE;AACnB,MAAA,OAAO,EAAE;AACX;AAEA,IAAA,MAAME,QAAmB,GAAG;AAC1BN,MAAAA,EAAE,EAAEI,KAAK;MACTF,OAAO;AACPK,MAAAA,OAAO,EAAE,CAAC;MACV,GAAGJ;KACJ;IACD,MAAMV,SAAsB,GAAG,CAAC,GAAG,IAAI,CAACH,MAAM,EAAEgB,QAAQ,CAAC;AACzD,IAAA,IAAI,CAACd,SAAS,CAACC,SAAS,CAAC;AACzB,IAAA,OAAOW,KAAK;GACb;EAEDI,MAAM,GAAGA,CACPb,OAAgB,EAChBO,OAAqB,EACrBC,OAAqB,GAAG,EAAE,KACvB;AACH,IAAA,IAAI,CAAC,IAAI,CAACT,GAAG,CAACC,OAAO,CAAC,EAAE;AACtB,MAAA,OAAO,EAAE;AACX;IAEA,MAAMF,SAAsB,GAAG,IAAI,CAACH,MAAM,CAACmB,GAAG,CAAEV,KAAK,IAAK;AACxD,MAAA,IAAIA,KAAK,CAACC,EAAE,KAAKL,OAAO,EAAE;QACxB,OAAO;AACL,UAAA,GAAGI,KAAK;AACR,UAAA,GAAGI,OAAO;AACVI,UAAAA,OAAO,EAAE,CAAAR,KAAK,aAALA,KAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAALA,KAAK,CAAEQ,OAAO,KAAI,IAAI,GAAGR,KAAK,CAACQ,OAAO,GAAG,CAAC,GAAG,CAAC;AACvDL,UAAAA;SACD;AACH;AACA,MAAA,OAAOH,KAAK;AACd,KAAC,CAAC;AACF,IAAA,IAAI,CAACP,SAAS,CAACC,SAAS,CAAC;AACzB,IAAA,OAAOE,OAAO;GACf;EAEDe,MAAM,GAAIV,EAAW,IAAc;AACjC,IAAA,IAAI,CAAC,IAAI,CAACN,GAAG,CAACM,EAAE,CAAC,EAAE;AACjB,MAAA,OAAO,KAAK;AACd;AACA,IAAA,MAAMP,SAAsB,GAAG,IAAI,CAACH,MAAM,CAACqB,MAAM,CAC9CZ,KAAK,IAAKA,KAAK,CAACC,EAAE,KAAKA,EAC1B,CAAC;AACD,IAAA,IAAI,CAACR,SAAS,CAACC,SAAS,CAAC;AACzB,IAAA,OAAO,IAAI,CAAC;GACb;EAEDmB,SAAS,GAAGA,MAAM;AAChB,IAAA,IAAI,CAAC,IAAI,CAACtB,MAAM,CAACM,MAAM,EAAE;AACvB,MAAA;AACF;AAEA,IAAA,IAAI,CAACJ,SAAS,CAAC,EAAE,CAAC;GACnB;AACH;;;;"}