{"version":3,"file":"NotificationReducer.cjs","sources":["../../../../src/lib/Notification/NotificationReducer.ts"],"sourcesContent":["import {without} from '@/internal/utils/without.ts';\n\n/**\n * Action names collection\n * @example\n * import { Actions } from './NotificationReducer';\n * dispatch({ type: Notification.NOTIFICATION_CLOSE})\n * dispatch({ type: Notification.NOTIFICATION_OPEN})\n * */\nexport enum Actions {\n    NOTIFICATION_CLOSE = 'NOTIFICATION_CLOSE',\n    NOTIFICATION_OPEN = 'NOTIFICATION_OPEN',\n    NOTIFICATION_REGISTER = 'NOTIFICATION_REGISTER',\n    NOTIFICATION_RE_OPEN = 'NOTIFICATION_RE_OPEN',\n}\n\n/** Dialog ID type */\nexport type Id = string;\n\nexport type NotificationProps = {\n    /**\n     * Defines a title for the notification, which is shown at the top of the notification window\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/Notification/Notification#title\n     */\n    title: string;\n    /**\n     * URL of an image to be displayed in the notification\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/Notification/Notification#icon\n     */\n    icon?: string;\n    /**\n     * Body text of the notification, which is displayed below the title\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/Notification/Notification#body\n     */\n    body?: string;\n    /**\n     * Indicates that a notification should remain active until the user clicks or dismisses it, rather than closing automatically.\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/Notification/Notification#requireinteraction\n     */\n    requireInteraction?: boolean;\n};\n\n/** Dialog state type */\nexport type NotificationState = {\n    /** List of open modals' IDs */\n    open: Id[];\n    props: Record<Id, NotificationProps>;\n    instances: Record<Id, Notification>;\n};\n\nexport const initialState = {\n    open: [],\n    props: {},\n    instances: {},\n} as NotificationState;\n\ntype CloseAction = {\n    /** ID of target Dialog */\n    id: Id;\n    /** Action name */\n    type: Actions.NOTIFICATION_CLOSE;\n};\n\ntype OpenAction = {\n    /** ID of target Dialog */\n    id: Id;\n    /** Action name */\n    type: Actions.NOTIFICATION_OPEN;\n    instance: Notification;\n};\n\ntype RegisterAction = {\n    /** ID of target Dialog */\n    id: Id;\n    /** Action name */\n    type: Actions.NOTIFICATION_REGISTER;\n    props: NotificationProps;\n};\n\nexport type NotificationAction = CloseAction | OpenAction | RegisterAction;\n\nconst omit = <TObject extends Record<string, unknown>>(obj: TObject, key: keyof TObject) => {\n    const nextObject = {...obj};\n    delete nextObject[key];\n    return nextObject;\n};\n\nexport const NotificationReducer = (\n    state = initialState,\n    action: NotificationAction\n): NotificationState => {\n    switch (action.type) {\n        case Actions.NOTIFICATION_CLOSE: {\n            const {id} = action;\n            const nextOpen = without(id, state.open);\n            const nextInstances = omit(state.instances, id);\n            return {\n                ...state,\n                open: nextOpen,\n                instances: nextInstances,\n            };\n        }\n        case Actions.NOTIFICATION_REGISTER: {\n            const {id, props} = action;\n            return {\n                ...state,\n                props: {\n                    ...state.props,\n                    [id]: props,\n                },\n            };\n        }\n        case Actions.NOTIFICATION_OPEN: {\n            const {id, instance} = action;\n            return {\n                ...state,\n                open: [...without(id, state.open), id],\n                instances: {\n                    ...state.instances,\n                    [id]: instance,\n                },\n            };\n        }\n        default:\n            return state;\n    }\n};\n"],"names":["Actions","initialState","omit","obj","key","nextObject","NotificationReducer","state","action","id","nextOpen","without","nextInstances","props","instance"],"mappings":"iJASO,IAAKA,GAAAA,IACRA,EAAA,mBAAqB,qBACrBA,EAAA,kBAAoB,oBACpBA,EAAA,sBAAwB,wBACxBA,EAAA,qBAAuB,uBAJfA,IAAAA,GAAA,CAAA,CAAA,EAyCL,MAAMC,EAAe,CACxB,KAAM,CAAA,EACN,MAAO,CAAA,EACP,UAAW,CAAA,CACf,EA2BMC,EAAO,CAA0CC,EAAcC,IAAuB,CACxF,MAAMC,EAAa,CAAC,GAAGF,CAAA,EACvB,cAAOE,EAAWD,CAAG,EACdC,CACX,EAEaC,EAAsB,CAC/BC,EAAQN,EACRO,IACoB,CACpB,OAAQA,EAAO,KAAA,CACX,IAAK,qBAA4B,CAC7B,KAAM,CAAC,GAAAC,GAAMD,EACPE,EAAWC,EAAAA,QAAQF,EAAIF,EAAM,IAAI,EACjCK,EAAgBV,EAAKK,EAAM,UAAWE,CAAE,EAC9C,MAAO,CACH,GAAGF,EACH,KAAMG,EACN,UAAWE,CAAA,CAEnB,CACA,IAAK,wBAA+B,CAChC,KAAM,CAAC,GAAAH,EAAI,MAAAI,CAAA,EAASL,EACpB,MAAO,CACH,GAAGD,EACH,MAAO,CACH,GAAGA,EAAM,MACT,CAACE,CAAE,EAAGI,CAAA,CACV,CAER,CACA,IAAK,oBAA2B,CAC5B,KAAM,CAAC,GAAAJ,EAAI,SAAAK,CAAA,EAAYN,EACvB,MAAO,CACH,GAAGD,EACH,KAAM,CAAC,GAAGI,UAAQF,EAAIF,EAAM,IAAI,EAAGE,CAAE,EACrC,UAAW,CACP,GAAGF,EAAM,UACT,CAACE,CAAE,EAAGK,CAAA,CACV,CAER,CACA,QACI,OAAOP,CAAA,CAEnB"}