{"version":3,"file":"static/chunks/6842.ebafbf1332268e78.js","mappings":"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","sources":["webpack://_N_E/./src/components/molecules/Toast/Toast.tsx","webpack://_N_E/./src/components/organisms/ToastHandler/ToastHandler.tsx","webpack://_N_E/./src/lib/hooks/toasts/Toast.tsx","webpack://_N_E/./src/lib/hooks/toasts/ToastStorage.ts","webpack://_N_E/<anon>"],"sourcesContent":["import { ColorShade } from '@/components/atoms/Colors/Colors';\nimport Icon, { IconType } from '@/components/atoms/Icon/Icon';\nimport Paragraph from '@/components/atoms/Paragraph/Paragraph';\nimport { ToastType } from '@/lib/hooks/toasts/Toast';\nimport { ReactNode } from 'react';\n\n/**\n * Styling Map Holds all the classes for the particular types of Toast Messages\n *\n * @constant\n */\nconst stylingMap = {\n  success: 'bg-success-200 text-neutral-100',\n  error: 'bg-error-200 text-neutral-100',\n  warning: 'bg-warning-200 text-neutral-100',\n  info: 'bg-info-200 text-neutral-100',\n};\n\n/**\n * Icon Map Hold all of the mappings for particular icons and statuses\n *\n * @constant\n */\nconst iconMap: {\n  [key: string]: {\n    /** The Icon to use */\n    icon: IconType;\n    /** The Color Shade to use with the Icon */\n    colorShade: ColorShade;\n  };\n} = {\n  success: {\n    icon: 'checkCircle',\n    colorShade: 100,\n  },\n  error: {\n    icon: 'exclamationCircle',\n    colorShade: 100,\n  },\n  info: {\n    icon: 'infoOutline',\n    colorShade: 100,\n  },\n  warning: {\n    icon: 'exclamationTriangle',\n    colorShade: 100,\n  },\n};\n\n/** Screen Sizing Holds all the specific Styles for each of the screen sizes */\nconst mobileSizing = 'right-6 top-16 left-6 max-w-[328px]';\nconst tabletSizing = 'sm:right-8 sm:top-20 sm:left-8 sm:max-w-[680px]';\nconst desktopSizing = 'md:right-8 md:top-24 md:left-8 md:max-w-[896px]';\n\n/**\n * IToast Toast Interface\n *\n * @interface IToast\n */\nexport interface IToast {\n  /**\n   * Type of Toast to Display\n   *\n   * @memberof IToast\n   * @member {ToastType} type\n   */\n  type: ToastType;\n  /**\n   * Should we show the Icon or Not?\n   *\n   * @memberof IToast\n   * @member {boolean} [showIcon]\n   */\n  showIcon?: boolean;\n  /**\n   * Close Click Handler\n   *\n   * @memberof IToast\n   * @member {() => void} closeClick\n   */\n  closeClick: () => void;\n  /**\n   * Children to be displayed in the Toast\n   *\n   * @memberof IToast\n   * @member {ReactNode} children\n   */\n  children: ReactNode;\n}\n\n/**\n * Toast Toast Component\n *\n * @param {IToast} props - The props for the Toast component\n * @returns {React.FC<IToast>} Toast Component\n */\nconst Toast: React.FC<IToast> = ({\n  type,\n  children,\n  closeClick,\n  showIcon,\n}: IToast) => {\n  const baseToastClasses = `fixed inline-flex items-center m-auto py-3 inset-x-0 rounded min-h-[48px] z-30 ${mobileSizing} ${tabletSizing} ${desktopSizing}`;\n  const toastClasses = `${baseToastClasses} ${stylingMap[type]}`;\n  return (\n    <div data-testid=\"toast\" className={toastClasses}>\n      <div className=\"inline-flex w-full h-full justify-center items-center\">\n        {showIcon ? (\n          <div className=\"ml-[18px]\" data-testid=\"toast-icon\">\n            <Icon\n              icon={iconMap[type].icon}\n              size={20}\n              colorShade={iconMap[type].colorShade}\n              colorType=\"neutral\"\n            />\n          </div>\n        ) : null}\n        <div className=\"ml-[18px]\">\n          <Paragraph className=\"text-neutral-100\" size=\"body4\" styling=\"bold\">\n            {children}\n          </Paragraph>\n        </div>\n        <div className=\"mx-4 ml-auto flex items-center\">\n          <button data-testid=\"toast-delete\" onClick={() => closeClick()}>\n            <span className=\"sr-only\">Dismiss</span>\n            <Icon\n              icon=\"close\"\n              size={25}\n              colorShade={iconMap[type].colorShade}\n              colorType=\"neutral\"\n            />\n          </button>\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport default Toast;\n","import Toast from '@/components/molecules/Toast/Toast';\nimport { IToastAction, useToastContext } from '@/lib/hooks/toasts/Toast';\nimport { useCheckAndDispatchToastFromStorage } from '@/lib/hooks/toasts/ToastStorage';\nimport { useEffect } from 'react';\n\n/**\n * IToastHandler\n *\n * @interface IToastHandler\n */\nexport interface IToastHandler {\n  /**\n   * An Initial Toast to Show when rendering\n   *\n   * @memberof IToastHandler\n   * @member {IToastAction} [initialToast]\n   */\n  initialToast?: IToastAction;\n  /**\n   * How long to show a non persistent toast.\n   *\n   * @memberof IToastHandler\n   * @default 2000\n   * @member {number} [timeToShow]\n   */\n  timeToShow?: number;\n}\n\n/**\n * Toast Handler Handles Displaying Toast Messages\n *\n * @param {IToastHandler} props - The props for the Toast Handler component\n * @returns {React.FC<IToastHandler>} Toast Handler Component\n */\nconst ToastHandler: React.FC<IToastHandler> = ({\n  initialToast,\n  timeToShow = 3000,\n}: IToastHandler) => {\n  const toastContext = useToastContext();\n  const toastDispatch = toastContext.dispatch;\n  const toastState = toastContext.state;\n\n  /** If Initial Toast Action Create an Initial Toast */\n  useEffect(() => {\n    if (initialToast) {\n      toastDispatch(initialToast);\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  useCheckAndDispatchToastFromStorage();\n\n  /** Close Toast Dispatches a Delete Toast action when we close the Toast */\n  const closeToast = () => {\n    const currentToast = toastState.toasts[0];\n    toastDispatch({\n      type: 'DELETE_TOAST',\n      toast: {\n        type: currentToast.type,\n        message: currentToast.message,\n        id: currentToast.id,\n        persistent: currentToast.persistent,\n      },\n    });\n  };\n\n  if (toastState.toasts.length > 0) {\n    if (!toastState.toasts[0].persistent) {\n      setTimeout(() => {\n        closeToast();\n      }, timeToShow);\n    }\n  }\n\n  return (\n    <div data-testid=\"toast-handler\">\n      {toastState.toasts.length > 0 ? (\n        <Toast {...toastState.toasts[0]} closeClick={closeToast}>\n          {toastState.toasts[0].message}\n        </Toast>\n      ) : null}\n    </div>\n  );\n};\n\nexport default ToastHandler;\n","import { createContext, ReactNode, useContext, useReducer } from 'react';\n\n/**\n * Toast Type Types of Toasts Allowed\n *\n * @typedef {ToastType}\n */\nexport type ToastType = 'success' | 'error' | 'info' | 'warning';\n\n/** Toast Action Types Actions Allowed for Toast */\nexport type ToastActionType = 'ADD_TOAST' | 'DELETE_TOAST';\n\n/**\n * Toast Toast Type\n *\n * @typedef {Toast}\n */\nexport type Toast = {\n  /** Id of Toast */\n  id: string;\n  /** Message to Display */\n  message?: string;\n  /** If the Toast is Persistent */\n  persistent?: boolean;\n  /** If the Toast should show an Icon */\n  showIcon?: boolean;\n  /** Type of Toast */\n  type: ToastType;\n};\n\n/**\n * Toast State State of the Toasts\n *\n * @interface\n */\ninterface IToastState {\n  /** Array of Toasts */\n  toasts: Toast[];\n}\n\n/**\n * Toast Initial State Value\n *\n * @constant\n */\nexport const toastInitialValue: IToastState = {\n  toasts: [],\n};\n\n/**\n * Toast Init Config\n *\n * @param {IToastState} state - The State to Init the Config with\n * @returns {object} - The Initial Config\n */\nexport const initConfig = (state: IToastState) => ({\n  ...toastInitialValue,\n  ...state,\n});\n\n/**\n * IToastAction Interface for Toast Actions\n *\n * @interface\n */\nexport interface IToastAction {\n  /** Type of Action */\n  type: ToastActionType;\n  /** Toast to Add or Delete */\n  toast: Toast;\n}\n\n/**\n * Toast Context Used for creating the Context Object for the useToastContext\n * Function\n *\n * @constant\n */\nexport const ToastContext = createContext<{\n  /** The State of the Toasts */\n  state: IToastState;\n  /** The Dispatch Function for the Toasts */\n  dispatch: React.Dispatch<IToastAction>;\n}>({\n  state: toastInitialValue,\n  /** @returns {null} - Null */\n  dispatch: () => null,\n});\n\n/**\n * Toast Reducer Reducer for adding and removing Toasts\n *\n * @param {IToastState} state - The State of the Toasts\n * @param {IToastAction} action - The Action to Perform on the Toasts\n * @returns {object} - The Updated State\n */\nexport function ToastReducer(state: IToastState, action: IToastAction) {\n  switch (action.type) {\n    case 'ADD_TOAST': {\n      return {\n        ...state,\n        toasts: [...state.toasts, action.toast],\n      };\n    }\n    case 'DELETE_TOAST': {\n      const updatedToasts = state.toasts.filter((e) => e.id != action.toast.id);\n      return {\n        ...state,\n        toasts: updatedToasts,\n      };\n    }\n  }\n}\n\n/**\n * IToast Provider The Interface for what the Toast Provider will be expecting\n *\n * @interface\n */\nexport interface IToastProvider {\n  /** The Children to Provide Context to */\n  children: ReactNode;\n}\n\n/**\n * Toast Provider Used to provide the ability to use Toasts to any children of\n * the provider.\n *\n * @param {IToastProvider} children - The children this will be providing\n *   Context to.\n * @returns {Element} ToastContext\n */\nexport function ToastProvider({ children }: IToastProvider): JSX.Element {\n  const [state, dispatch] = useReducer(ToastReducer, toastInitialValue);\n\n  return (\n    <ToastContext.Provider value={{ state, dispatch }}>\n      {children}\n    </ToastContext.Provider>\n  );\n}\n\n/**\n * Use Toast Context Used to allow components to interact with the Toast Context\n *\n * @returns {ToastContext} ToastContext\n */\nexport const useToastContext = () => useContext(ToastContext);\n","import { tomorrow } from '@/lib/utils/helpers/dateHelpers/dates';\nimport LocalStorage from '@/lib/utils/storage/local-storage';\nimport { useEffect } from 'react';\nimport { Toast, ToastType, useToastContext } from './Toast';\n\n/** Props for the buildToastPayload fn */\ntype BuildToastPayloadProps = {\n  /** Toast id */\n  id?: string;\n  /** Toast type */\n  type: ToastType;\n  /** Toast message */\n  message: string;\n};\n\n/**\n * Generates a toast payload for the local storage\n *\n * @param {object} param - Function params\n * @param {string} [param.id] - The toast id\n * @param {ToastType} param.type - The toast type\n * @param {string} param.message - The toast message\n * @returns {object} - The built toast payload\n */\nconst buildToastPayload = ({\n  id = '1',\n  type,\n  message,\n}: BuildToastPayloadProps) => {\n  return {\n    id,\n    type: type,\n    message: message,\n    persistent: false,\n    showIcon: true,\n  };\n};\n\nconst STORAGE_TOAST_KEY = 'toast';\n\n/**\n * Saves the toast payload to local storage\n *\n * @returns {Function} A function to save toast info into the local storage\n */\nexport const useSaveToastToStorage = () => {\n  const storage = new LocalStorage();\n\n  return (type: ToastType, message: string, id?: string) =>\n    storage.set(STORAGE_TOAST_KEY, buildToastPayload({ id, type, message }), {\n      expires: tomorrow,\n    });\n};\n\n/**\n * Looks for the STORAGE_TOAST_KEY in local storage and dispatches a new toast\n * if that's the case.\n */\nexport const useCheckAndDispatchToastFromStorage = () => {\n  const storage = new LocalStorage();\n  const toast = storage.get(STORAGE_TOAST_KEY) as Toast | null;\n\n  const { dispatch } = useToastContext();\n\n  useEffect(() => {\n    if (toast) {\n      dispatch({\n        type: 'ADD_TOAST',\n        toast,\n      });\n\n      storage.delete('toast');\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [JSON.stringify(toast)]);\n};\n"],"names":["stylingMap","success","error","warning","info","iconMap","icon","colorShade","Toast_Toast","type","children","closeClick","showIcon","param","baseToastClasses","tabletSizing","desktopSizing","concat","toastClasses","jsx_runtime","jsx","div","className","jsxs","Icon","size","colorType","Paragraph","styling","button","onClick","span","ToastHandler_ToastHandler","initialToast","timeToShow","toastContext","useToastContext","toastDispatch","dispatch","toastState","state","useEffect","useCheckAndDispatchToastFromStorage","closeToast","currentToast","toasts","toast","message","id","persistent","length","setTimeout","Toast","toastInitialValue","ToastContext","createContext","ToastReducer","action","updatedToasts","filter","e","ToastProvider","useReducer","react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__","Provider","value","useContext","buildToastPayload","STORAGE_TOAST_KEY","useSaveToastToStorage","storage","LocalStorage","set","expires","tomorrow","get","delete","JSON","stringify"],"sourceRoot":""}