@sonhero/sapp-notification 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/assets/icons/index.tsx","../src/common/base/SappDrawer.tsx","../src/constants/index.tsx","../src/utils/index.tsx","../src/components/notification/NotifyDetail.tsx","../src/common/base/SappTabs.tsx","../src/common/base/FooterDrawer.tsx","../src/common/base/NoData.tsx","../src/components/notification/MarkNotification.tsx","../src/components/notification/ItemNotification.tsx","../src/index.tsx"],"sourcesContent":["import React, { FC } from 'react'\n\nconst CloseIconV2: FC<React.SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M18 18L6 6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M6 18L18 6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )\n}\n\nconst ArrowLeftIcon: FC<React.SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M15.4881 4.43057C15.8026 4.70014 15.839 5.17361 15.5694 5.48811L9.98781 12L15.5694 18.5119C15.839 18.8264 15.8026 19.2999 15.4881 19.5695C15.1736 19.839 14.7001 19.8026 14.4306 19.4881L8.43056 12.4881C8.18981 12.2072 8.18981 11.7928 8.43056 11.5119L14.4306 4.51192C14.7001 4.19743 15.1736 4.161 15.4881 4.43057Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n}\n\n\nconst MarkIconV2: FC<React.SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg\n xmlns='http://www.w3.org/2000/svg'\n width='24'\n height='24'\n fill='none'\n {...props}\n >\n <path\n fill='#EF5941'\n fillRule='evenodd'\n d='M19 2.75a2.25 2.25 0 1 0 0 4.5 2.25 2.25 0 0 0 0-4.5ZM15.25 5a3.75 3.75 0 1 1 7.5 0 3.75 3.75 0 0 1-7.5 0ZM9.944 3.25H13a.75.75 0 0 1 0 1.5h-3c-1.907 0-3.261.002-4.29.14-1.005.135-1.585.389-2.008.812-.423.423-.677 1.003-.812 2.009-.138 1.028-.14 2.382-.14 4.289 0 1.907.002 3.261.14 4.29.135 1.005.389 1.585.812 2.008.423.423 1.003.677 2.009.812 1.028.138 2.382.14 4.289.14h4c1.907 0 3.262-.002 4.29-.14 1.005-.135 1.585-.389 2.008-.812.423-.423.677-1.003.812-2.009.138-1.028.14-2.382.14-4.289 0-.373.003-.645.005-.88.004-.379.007-.658-.005-1.1a.75.75 0 0 1 1.5-.04c.012.467.009.785.005 1.187-.002.234-.005.497-.005.833v.056c0 1.838 0 3.294-.153 4.433-.158 1.172-.49 2.121-1.238 2.87-.749.748-1.698 1.08-2.87 1.238-1.14.153-2.595.153-4.433.153H9.944c-1.838 0-3.294 0-4.433-.153-1.172-.158-2.121-.49-2.87-1.238-.748-.749-1.08-1.698-1.238-2.87-.153-1.14-.153-2.595-.153-4.433v-.112c0-1.838 0-3.294.153-4.433.158-1.172.49-2.121 1.238-2.87.749-.748 1.698-1.08 2.87-1.238 1.14-.153 2.595-.153 4.433-.153Zm-4.52 4.27a.75.75 0 0 1 1.056-.096L8.64 9.223c.933.777 1.58 1.315 2.128 1.667.529.34.888.455 1.233.455.345 0 .704-.114 1.233-.455.547-.352 1.195-.89 2.128-1.667a.75.75 0 1 1 .96 1.152l-.037.032c-.887.738-1.605 1.337-2.24 1.745-.66.425-1.303.693-2.044.693-.741 0-1.384-.269-2.045-.693-.634-.408-1.352-1.007-2.239-1.745L5.52 8.577a.75.75 0 0 1-.096-1.057Z'\n clipRule='evenodd'\n />\n </svg>\n )\n}\n\nconst NotificationDots: FC<React.SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M7 12C7 13.1046 6.10457 14 5 14C3.89543 14 3 13.1046 3 12C3 10.8954 3.89543 10 5 10C6.10457 10 7 10.8954 7 12Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M14 12C14 13.1046 13.1046 14 12 14C10.8954 14 10 13.1046 10 12C10 10.8954 10.8954 10 12 10C13.1046 10 14 10.8954 14 12Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M21 12C21 13.1046 20.1046 14 19 14C17.8954 14 17 13.1046 17 12C17 10.8954 17.8954 10 19 10C20.1046 10 21 10.8954 21 12Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n}\n\nconst MarkIcon: FC<React.SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M15.8346 2.29199C14.7991 2.29199 13.9596 3.13146 13.9596 4.16699C13.9596 5.20253 14.7991 6.04199 15.8346 6.04199C16.8702 6.04199 17.7096 5.20253 17.7096 4.16699C17.7096 3.13146 16.8702 2.29199 15.8346 2.29199ZM12.7096 4.16699C12.7096 2.4411 14.1087 1.04199 15.8346 1.04199C17.5605 1.04199 18.9596 2.4411 18.9596 4.16699C18.9596 5.89288 17.5605 7.29199 15.8346 7.29199C14.1087 7.29199 12.7096 5.89288 12.7096 4.16699ZM8.28762 2.70866L10.8346 2.70866C11.1798 2.70866 11.4596 2.98848 11.4596 3.33366C11.4596 3.67884 11.1798 3.95866 10.8346 3.95866H8.33464C6.74562 3.95866 5.61673 3.95999 4.76034 4.07512C3.92194 4.18785 3.4389 4.39924 3.08622 4.75191C2.73355 5.10459 2.52216 5.58762 2.40943 6.42603C2.2943 7.28242 2.29297 8.41131 2.29297 10.0003C2.29297 11.5893 2.2943 12.7182 2.40943 13.5746C2.52216 14.413 2.73355 14.8961 3.08622 15.2487C3.4389 15.6014 3.92194 15.8128 4.76034 15.9255C5.61673 16.0407 6.74562 16.042 8.33464 16.042H11.668C13.257 16.042 14.3859 16.0407 15.2423 15.9255C16.0807 15.8128 16.5637 15.6014 16.9164 15.2487C17.2691 14.8961 17.4804 14.413 17.5932 13.5746C17.7083 12.7182 17.7096 11.5893 17.7096 10.0003C17.7096 9.68954 17.7119 9.46252 17.7138 9.26736C17.7169 8.95133 17.7192 8.71884 17.7098 8.34954C17.7011 8.00447 17.9737 7.71763 18.3188 7.70886C18.6638 7.70009 18.9507 7.97271 18.9594 8.31778C18.9693 8.70619 18.9668 8.9713 18.9636 9.30636C18.9617 9.50131 18.9596 9.71995 18.9596 10.0003V10.0473C18.9596 11.5788 18.9597 12.7918 18.832 13.7412C18.7007 14.7182 18.4239 15.509 17.8003 16.1326C17.1766 16.7563 16.3858 17.033 15.4088 17.1644C14.4595 17.292 13.2464 17.292 11.715 17.292H8.28763C6.75616 17.292 5.54313 17.292 4.59378 17.1644C3.61676 17.033 2.82597 16.7563 2.20234 16.1326C1.5787 15.509 1.30194 14.7182 1.17058 13.7412C1.04295 12.7918 1.04296 11.5788 1.04297 10.0473V9.95331C1.04296 8.42184 1.04295 7.20882 1.17058 6.25947C1.30194 5.28245 1.5787 4.49166 2.20234 3.86803C2.82597 3.24439 3.61677 2.96763 4.59378 2.83627C5.54313 2.70863 6.75616 2.70865 8.28762 2.70866ZM4.52116 6.26688C4.74214 6.0017 5.13624 5.96588 5.40142 6.18685L7.2005 7.68609C7.97796 8.33397 8.51774 8.78234 8.97345 9.07543C9.41459 9.35915 9.71374 9.45439 10.0013 9.45439C10.2889 9.45439 10.588 9.35915 11.0292 9.07543C11.4849 8.78234 12.0246 8.33397 12.8021 7.68609C13.0673 7.46511 13.4614 7.50094 13.6824 7.76611C13.9033 8.03128 13.8675 8.42538 13.6023 8.64636L13.571 8.67246C12.8324 9.28801 12.2337 9.78692 11.7053 10.1268C11.1549 10.4808 10.6189 10.7044 10.0013 10.7044C9.38374 10.7044 8.8477 10.4808 8.29728 10.1268C7.7689 9.78693 7.17024 9.28802 6.43161 8.67248L4.60119 7.14713C4.33601 6.92615 4.30019 6.53205 4.52116 6.26688Z\"\n fill=\"white\"\n />\n </svg>\n\n )\n}\n\nconst EllipseIcon: FC<React.SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <circle cx=\"4\" cy=\"4\" r=\"4\" fill=\"#EF5941\"/>\n </svg>\n )\n}\n\nconst DotIcon: FC<React.SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg width=\"5\" height=\"6\" viewBox=\"0 0 5 6\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n<circle cx=\"2.5\" cy=\"3\" r=\"2.5\" fill=\"#9CA3AF\"/>\n</svg>\n )\n}\n\nconst NoDataIcon: FC<React.SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"203\"\n height=\"203\"\n viewBox=\"0 0 203 203\"\n fill=\"none\"\n {...props}\n >\n <path\n d=\"M107.681 165.699C143.206 165.699 172.007 136.898 172.007 101.246C172.007 65.5946 143.206 36.7939 107.681 36.7939C72.1561 36.7939 43.3555 65.5946 43.3555 101.246C43.3555 136.898 72.1561 165.699 107.681 165.699Z\"\n fill=\"#F1F3FA\"\n />\n <g filter=\"url(#filter0_d_3282_84073)\">\n <path\n d=\"M167.31 75.4912H57.3098C54.8992 75.4912 52.9961 73.5881 52.9961 71.1774V46.4368C52.9961 44.0262 54.8992 42.123 57.3098 42.123H167.184C169.594 42.123 171.497 44.0262 171.497 46.4368V71.1774C171.624 73.5881 169.594 75.4912 167.31 75.4912Z\"\n fill=\"white\"\n />\n </g>\n <path\n d=\"M79.6406 58.7441C79.6406 61.5354 78.3719 64.0729 76.4687 65.8491C74.8194 67.3716 72.5356 68.2598 70.125 68.2598C67.7144 68.2598 65.4306 67.3716 63.7813 65.8491C61.7513 64.0729 60.6094 61.5354 60.6094 58.7441C60.6094 53.5423 64.9231 49.2285 70.125 49.2285C75.3269 49.2285 79.6406 53.5423 79.6406 58.7441Z\"\n fill=\"#D5DAE5\"\n />\n <path\n d=\"M110.852 55.9519H86.4916C85.8572 55.9519 85.4766 55.4444 85.4766 54.9369V51.765C85.4766 51.1306 85.9841 50.75 86.4916 50.75H110.852C111.486 50.75 111.867 51.2575 111.867 51.765V54.9369C111.867 55.5713 111.486 55.9519 110.852 55.9519Z\"\n fill=\"#D5DAE5\"\n />\n <path\n d=\"M139.779 66.7361H86.4916C85.8572 66.7361 85.4766 66.2286 85.4766 65.7211V62.5492C85.4766 61.9148 85.9841 61.5342 86.4916 61.5342H139.779C140.413 61.5342 140.794 62.0417 140.794 62.5492V65.7211C140.794 66.3554 140.287 66.7361 139.779 66.7361Z\"\n fill=\"#D5DAE5\"\n />\n <g filter=\"url(#filter1_d_3282_84073)\">\n <path\n d=\"M167.31 158.721H57.3098C54.8992 158.721 52.9961 156.818 52.9961 154.407V129.666C52.9961 127.256 54.8992 125.353 57.3098 125.353H167.184C169.594 125.353 171.497 127.256 171.497 129.666V154.407C171.624 156.818 169.594 158.721 167.31 158.721Z\"\n fill=\"white\"\n />\n </g>\n <path\n d=\"M79.6406 141.974C79.6406 144.765 78.3719 147.302 76.4687 149.079C74.8194 150.601 72.5356 151.489 70.125 151.489C67.7144 151.489 65.4306 150.601 63.7813 149.079C61.7513 147.302 60.6094 144.765 60.6094 141.974C60.6094 136.772 64.9231 132.458 70.125 132.458C75.3269 132.458 79.6406 136.772 79.6406 141.974Z\"\n fill=\"#D5DAE5\"\n />\n <path\n d=\"M110.852 139.308H86.4916C85.8572 139.308 85.4766 138.801 85.4766 138.293V135.121C85.4766 134.487 85.9841 134.106 86.4916 134.106H110.852C111.486 134.106 111.867 134.614 111.867 135.121V138.293C111.867 138.801 111.486 139.308 110.852 139.308Z\"\n fill=\"#D5DAE5\"\n />\n <path\n d=\"M139.779 150.093H86.4916C85.8572 150.093 85.4766 149.585 85.4766 149.078V145.906C85.4766 145.271 85.9841 144.891 86.4916 144.891H139.779C140.413 144.891 140.794 145.398 140.794 145.906V149.078C140.794 149.585 140.287 150.093 139.779 150.093Z\"\n fill=\"#D5DAE5\"\n />\n <g filter=\"url(#filter2_d_3282_84073)\">\n <path\n d=\"M148.66 117.105H38.7864C36.3758 117.105 34.4727 115.202 34.4727 112.792V88.0511C34.4727 85.6404 36.3758 83.7373 38.7864 83.7373H148.66C151.071 83.7373 152.974 85.6404 152.974 88.0511V112.792C153.101 115.202 151.071 117.105 148.66 117.105Z\"\n fill=\"white\"\n />\n </g>\n <path\n d=\"M92.3281 97.5671H67.9681C67.3337 97.5671 66.9531 97.0596 66.9531 96.5521V93.3802C66.9531 92.7459 67.4606 92.3652 67.9681 92.3652H92.3281C92.9625 92.3652 93.3431 92.8727 93.3431 93.3802V96.5521C93.3431 97.1865 92.9625 97.5671 92.3281 97.5671Z\"\n fill=\"#D5DAE5\"\n />\n <path\n d=\"M121.256 108.478H67.9681C67.3337 108.478 66.9531 107.971 66.9531 107.463V104.291C66.9531 103.657 67.4606 103.276 67.9681 103.276H121.129C121.763 103.276 122.144 103.784 122.144 104.291V107.463C122.271 107.971 121.763 108.478 121.256 108.478Z\"\n fill=\"#D5DAE5\"\n />\n <path\n d=\"M61.2441 100.358C61.2441 103.023 60.1022 105.433 58.3259 107.21C58.1991 107.337 58.1991 107.337 58.0722 107.463C56.4228 108.986 54.1391 109.874 51.7284 109.874C49.3178 109.874 47.1609 108.986 45.5116 107.59C45.5116 107.59 45.5116 107.59 45.3847 107.59C43.3547 105.814 42.0859 103.277 42.0859 100.358C42.0859 95.1565 46.3997 90.8428 51.6016 90.8428C56.9303 90.8428 61.2441 95.1565 61.2441 100.358Z\"\n fill=\"#D5DAE5\"\n />\n <defs>\n <filter\n id=\"filter0_d_3282_84073\"\n x=\"43.9961\"\n y=\"38.123\"\n width=\"136.508\"\n height=\"51.3682\"\n filterUnits=\"userSpaceOnUse\"\n color-interpolation-filters=\"sRGB\"\n >\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feOffset dy=\"5\" />\n <feGaussianBlur stdDeviation=\"4.5\" />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 0.397708 0 0 0 0 0.47749 0 0 0 0 0.575 0 0 0 0.17 0\"\n />\n <feBlend\n mode=\"normal\"\n in2=\"BackgroundImageFix\"\n result=\"effect1_dropShadow_3282_84073\"\n />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2=\"effect1_dropShadow_3282_84073\"\n result=\"shape\"\n />\n </filter>\n <filter\n id=\"filter1_d_3282_84073\"\n x=\"43.9961\"\n y=\"121.353\"\n width=\"136.508\"\n height=\"51.3682\"\n filterUnits=\"userSpaceOnUse\"\n color-interpolation-filters=\"sRGB\"\n >\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feOffset dy=\"5\" />\n <feGaussianBlur stdDeviation=\"4.5\" />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 0.397708 0 0 0 0 0.47749 0 0 0 0 0.575 0 0 0 0.17 0\"\n />\n <feBlend\n mode=\"normal\"\n in2=\"BackgroundImageFix\"\n result=\"effect1_dropShadow_3282_84073\"\n />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2=\"effect1_dropShadow_3282_84073\"\n result=\"shape\"\n />\n </filter>\n <filter\n id=\"filter2_d_3282_84073\"\n x=\"25.4727\"\n y=\"79.7373\"\n width=\"136.508\"\n height=\"51.3682\"\n filterUnits=\"userSpaceOnUse\"\n color-interpolation-filters=\"sRGB\"\n >\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feOffset dy=\"5\" />\n <feGaussianBlur stdDeviation=\"4.5\" />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 0.397708 0 0 0 0 0.47749 0 0 0 0 0.575 0 0 0 0.17 0\"\n />\n <feBlend\n mode=\"normal\"\n in2=\"BackgroundImageFix\"\n result=\"effect1_dropShadow_3282_84073\"\n />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2=\"effect1_dropShadow_3282_84073\"\n result=\"shape\"\n />\n </filter>\n </defs>\n </svg>\n )\n}\n\nexport { ArrowLeftIcon, EllipseIcon, CloseIconV2, MarkIcon, MarkIconV2, NotificationDots, DotIcon, NoDataIcon }\n","import { Drawer, DrawerProps } from 'antd'\r\nimport React, { ReactNode } from 'react'\r\nimport { ArrowLeftIcon } from '../../assets/icons'\r\nimport { CloseIconV2 } from '../../assets/icons'\r\nimport styles from '../../styles/drawer.module.css'\r\nimport clsx from 'clsx'\r\n\r\ninterface IProps extends DrawerProps {\r\n open: boolean\r\n handleCancel?: () => void\r\n handleBack?: () => void\r\n width?: number | string\r\n title: string\r\n isShowBtnClose?: boolean\r\n isShowFooter?: boolean\r\n children: ReactNode\r\n loading?: boolean\r\n isDesktopView?: boolean\r\n}\r\n\r\nconst SappDrawer = ({\r\n open,\r\n handleBack,\r\n handleCancel,\r\n width = '30%',\r\n title,\r\n children,\r\n isShowBtnClose = true,\r\n isShowFooter = false,\r\n loading = false,\r\n className,\r\n isDesktopView,\r\n ...props\r\n}: IProps) => {\r\n const widthDrawer = !isDesktopView ? '100%' : width\r\n const rootClassName = isDesktopView ? styles.drawer : styles.drawerResponsive\r\n const isShowBtnCloseDrawer = !isShowBtnClose || !isDesktopView\r\n\r\n return (\r\n <Drawer\r\n open={open}\r\n title={undefined}\r\n onClose={handleCancel}\r\n width={widthDrawer}\r\n closeIcon={false}\r\n loading={loading}\r\n rootClassName={rootClassName}\r\n {...props}\r\n >\r\n <div\r\n className={clsx(\r\n 'sapp-notification-h-full sapp-notification-w-full sapp-notification-bg-white sapp-notification-pl-4 md:sapp-notification-pl-8',\r\n {\r\n 'sapp-notification-py-8': isDesktopView,\r\n 'sapp-notification-pt-4': !isDesktopView,\r\n }\r\n )}\r\n >\r\n <div className=\"sapp-notification-mb-4 md:sapp-notification-mb-8 sapp-notification-flex sapp-notification-items-center sapp-notification-justify-between sapp-notification-pr-8\">\r\n <div className=\"sapp-notification-flex sapp-notification-items-center sapp-notification-gap-2\">\r\n {isShowBtnCloseDrawer && (\r\n <div onClick={handleBack} className=\"sapp-notification-cursor-pointer\">\r\n <ArrowLeftIcon />\r\n </div>\r\n )}\r\n <div className=\"sapp-notification-text-xl md:sapp-notification-text-2xl sapp-notification-font-semibold sapp-notification-leading-loose\">\r\n {title}\r\n </div>\r\n </div>\r\n {isShowBtnClose && isDesktopView && (\r\n <div className=\"sapp-notification-cursor-pointer\" onClick={handleCancel}>\r\n <CloseIconV2 />\r\n </div>\r\n )}\r\n </div>\r\n <div>{children}</div>\r\n </div>\r\n </Drawer>\r\n )\r\n}\r\n\r\nexport default SappDrawer\r\n","export const ANIMATION_NOTIFICATION = {\r\n DURATION: 500,\r\n DATA_AOS: 'fade-left'\r\n}\r\n\r\nexport enum DATE_FORMAT {\r\n DATE_TIME = 'HH:mm | DD/MM/YYYY',\r\n DATE_TIME_DASH = 'HH:mm - DD/MM/YYYY',\r\n DATE = 'DD/MM/YYYY',\r\n}\r\n\r\nexport const ANIMATION = {\r\n DURATION: 500,\r\n DATA_AOS: 'fade-up',\r\n}","import dayjs from \"dayjs\"\r\nimport utc from 'dayjs/plugin/utc'\r\nimport { DATE_FORMAT } from \"../constants\"\r\n\r\ndayjs.extend(utc)\r\n\r\nexport const formatNotificationHTML = (input: string): string => {\r\n return input.replace(\r\n /<strong\\s+data-time\\s*=\\s*[\"']([^\"']+)[\"']\\s*><\\/strong>/g,\r\n (_match, dateTime) => {\r\n const formattedDate = dayjs.utc(dateTime).local().format(DATE_FORMAT.DATE)\r\n return `<strong>${formattedDate}</strong>`\r\n }\r\n )\r\n}\r\n\r\nexport const containsKeyword = (input: unknown, keyword?: string): boolean => {\r\n if (typeof input !== 'string') return false\r\n return input.includes(keyword || 'data-time=')\r\n}\r\n\r\nexport const calculateTimeAgo = (date: string): string => {\r\n if (!date) {\r\n return ''\r\n }\r\n\r\n const currentDateTime: Date = new Date()\r\n const updatedDateTime: Date = new Date(date)\r\n\r\n const currentUtcTime: number = Date.UTC(\r\n currentDateTime.getUTCFullYear(),\r\n currentDateTime.getUTCMonth(),\r\n currentDateTime.getUTCDate(),\r\n currentDateTime.getUTCHours(),\r\n currentDateTime.getUTCMinutes(),\r\n currentDateTime.getUTCSeconds(),\r\n currentDateTime.getUTCMilliseconds()\r\n )\r\n\r\n const timeDifference: number = currentUtcTime - updatedDateTime.getTime()\r\n\r\n const secondsAgo = Math.floor(timeDifference / 1000)\r\n if (secondsAgo < 60) {\r\n return secondsAgo <= 0 ? 'just now' : `${secondsAgo} seconds ago`\r\n }\r\n\r\n const minutesAgo = Math.floor(secondsAgo / 60)\r\n if (minutesAgo < 60) {\r\n return minutesAgo === 1 ? '1 min ago' : `${minutesAgo} mins ago`\r\n }\r\n\r\n const hoursAgo = Math.floor(minutesAgo / 60)\r\n if (hoursAgo < 24) {\r\n return hoursAgo === 1 ? '1 hour ago' : `${hoursAgo} hours ago`\r\n }\r\n\r\n const daysAgo = Math.floor(hoursAgo / 24)\r\n if (daysAgo >= 1) {\r\n const formatter = new Intl.DateTimeFormat('en-GB', {\r\n day: 'numeric',\r\n month: 'numeric',\r\n year: 'numeric'\r\n })\r\n return `${formatter.format(updatedDateTime)}`\r\n }\r\n return ''\r\n}\r\n","import {\n formatNotificationHTML,\n containsKeyword,\n calculateTimeAgo\n} from '../../utils/index'\nimport React, { memo } from 'react'\nimport { ANIMATION_NOTIFICATION } from '../../constants/index'\nimport { Image } from 'antd'\nimport { NotificationState } from '../../types/Notification'\n\ninterface NotifyDetailProps {\n notifyDetail: NotificationState\n isMobileView: boolean\n}\n\ninterface AvatarProps {\n avatar: NotificationState['avatar']\n isMobileView: boolean\n}\n\ninterface SenderInfoProps {\n createdBy: boolean\n nameUser: string\n updatedAt: string\n}\n\nconst DEFAULT_AVATAR = 'https://cdn.sapp.edu.vn/icons/logo-sapp-circle.png'\n\nconst Avatar: React.FC<AvatarProps> = memo(({ avatar, isMobileView }) => (\n <div className=\"sapp-notification-flex sapp-notification-items-center sapp-notification-justify-center sapp-notification-rounded-full sapp-notification-bg-graysapp-3\">\n <Image\n src={avatar?.ORIGIN ? (avatar['52x52'] || avatar.ORIGIN) : DEFAULT_AVATAR}\n className=\"sapp-notification-rounded-full\"\n alt=\"avatar\"\n width={isMobileView ? 40 : 52}\n height={isMobileView ? 40 : 52}\n preview={false}\n />\n </div>\n))\n\nconst SenderInfo: React.FC<SenderInfoProps> = memo(({ createdBy, nameUser, updatedAt }) => (\n <div className=\"sapp-notification-inline-flex sapp-notification-flex-col sapp-notification-items-start sapp-notification-gap-1 sapp-notification-self-stretch\">\n <div className=\"sapp-notification-text-base sapp-notification-font-medium sapp-notification-leading-normal\">\n {createdBy ? nameUser : 'UpBase System'}\n </div>\n <div className=\"sapp-notification-justify-center sapp-notification-text-sm sapp-notification-font-normal sapp-notification-leading-snug sapp-notification-text-graysapp-4\">\n {calculateTimeAgo(updatedAt)}\n </div>\n </div>\n))\n\nconst NotifyDetail: React.FC<NotifyDetailProps> = memo(({ notifyDetail, isMobileView }) => {\n const nameUser = notifyDetail?.title?.match(/<strong>(.*?)<\\/strong>/)?.[1] || ''\n const content = notifyDetail?.content || ''\n const title = notifyDetail?.title || ''\n const renderContent = () => {\n if (notifyDetail?.created_by) {\n return title\n }\n return containsKeyword(content) ? formatNotificationHTML(content) : content\n }\n\n return (\n <div\n className=\"sapp-notification-mr-8 sapp-notification-flex sapp-notification-flex-col\"\n data-aos={ANIMATION_NOTIFICATION.DATA_AOS}\n >\n <div\n className=\"sapp-notification-w-full sapp-notification-text-sm md:sapp-notification-text-base sapp-notification-font-normal\"\n dangerouslySetInnerHTML={{ __html: renderContent() }}\n />\n <div className=\"sapp-notification-h-line sapp-notification-w-full sapp-notification-bg-graysapp-2 sapp-notification-my-6\" />\n <div className=\"sapp-notification-mb-2 sapp-notification-self-stretch sapp-notification-text-base sapp-notification-font-semibold sapp-notification-leading-normal\">\n Sent by\n </div>\n <div className=\"sapp-notification-flex sapp-notification-items-start sapp-notification-gap-2\">\n <Avatar avatar={notifyDetail?.avatar} isMobileView={isMobileView} />\n <SenderInfo\n createdBy={!!notifyDetail?.created_by}\n nameUser={nameUser}\n updatedAt={notifyDetail?.updated_at}\n />\n </div>\n </div>\n )\n})\n\nNotifyDetail.displayName = 'NotifyDetail'\nAvatar.displayName = 'Avatar'\nSenderInfo.displayName = 'SenderInfo'\n\nexport default NotifyDetail\n","import React from 'react'\r\nimport clsx from 'clsx'\r\n\r\ninterface ITabsTeacher {\r\n id: number\r\n title: string\r\n}\r\n\r\ninterface SappTabsProps {\r\n tabs: ITabsTeacher[]\r\n selected: number\r\n setSelected: React.Dispatch<React.SetStateAction<number>>\r\n bordered?: boolean\r\n}\r\n\r\nconst SappTabs: React.FC<SappTabsProps> = ({\r\n tabs,\r\n selected,\r\n setSelected,\r\n bordered = false,\r\n}) => {\r\n return (\r\n <ul\r\n className={clsx(\r\n 'sapp-notification-flex sapp-notification-mb-2 md:sapp-notification-mb-6',\r\n bordered && 'sapp-notification-border-b sapp-notification-border-gray-100'\r\n )}\r\n >\r\n {tabs.map((tab) => {\r\n const isActive = tab.id === selected\r\n\r\n return (\r\n <li\r\n key={tab.id}\r\n className=\"sapp-notification-relative sapp-notification-pr-10\"\r\n onClick={() => setSelected(tab.id)}\r\n aria-selected={isActive}\r\n role=\"tab\"\r\n >\r\n <div\r\n className={clsx(\r\n 'sapp-notification-inline-flex sapp-notification-justify-start sapp-notification-items-center sapp-notification-gap-2',\r\n isActive && 'sapp-notification-border-b-2 sapp-notification-border-primary'\r\n )}\r\n >\r\n <div\r\n className={clsx(\r\n 'sapp-notification-relative sapp-notification-inline-block sapp-notification-w-fit sapp-notification-cursor-pointer sapp-notification-pb-3 md:sapp-notification-pb-4 sapp-notification-text-sm md:sapp-notification-text-base sapp-notification-font-normal sapp-notification-transition-colors',\r\n 'sapp-notification-justify-center sapp-notification-text-base sapp-notification-leading-snug',\r\n isActive &&\r\n 'sapp-notification-text-primary sapp-notification-font-semibold'\r\n )}\r\n >\r\n {tab.title}\r\n </div>\r\n </div>\r\n </li>\r\n )\r\n })}\r\n </ul>\r\n )\r\n}\r\n\r\nexport default SappTabs\r\n","import clsx from 'clsx'\r\nimport React, { ReactNode } from 'react'\r\n\r\ninterface IProps {\r\n content: ReactNode\r\n icon: ReactNode\r\n action: () => void\r\n classNameText?: string\r\n classNameBg?: string\r\n}\r\n\r\nconst FooterDrawer = ({\r\n content,\r\n icon,\r\n action,\r\n classNameText,\r\n classNameBg,\r\n}: IProps) => (\r\n <div\r\n className={clsx(\r\n 'sapp-notification-flex sapp-notification-justify-between sapp-notification-items-center sapp-notification-rounded-lg sapp-notification-px-4 sapp-notification-py-3 sapp-notification-cursor-pointer sapp-notification-w-full',\r\n classNameBg\r\n )}\r\n onClick={(e) => {\r\n e.stopPropagation()\r\n action()\r\n }}\r\n >\r\n <div\r\n className={clsx(\r\n 'sapp-notification-text-base sapp-notification-font-medium sapp-notification-leading-normal',\r\n classNameText\r\n )}\r\n >\r\n {content}\r\n </div>\r\n <div>{icon}</div>\r\n </div>\r\n)\r\n\r\nexport default FooterDrawer\r\n","import React from 'react'\r\nimport { NoDataIcon } from '../../assets/icons'\r\nimport { ANIMATION } from '../../constants'\r\n\r\nconst NoData = () => {\r\n return (\r\n <div data-aos={ANIMATION.DATA_AOS} className=\"sapp-notification-flex sapp-notification-flex-col sapp-notification-items-center sapp-notification-justify-center\">\r\n <NoDataIcon />\r\n <div className=\"sapp-notification-text-lg sapp-notification-font-medium sapp-notification-text-graysapp-1\">\r\n No data founded...\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default NoData\r\n","import { MarkIcon, NotificationDots } from '../../assets/icons'\r\nimport { Tooltip } from 'antd'\r\nimport React, { useState, useCallback, memo } from 'react'\r\nimport { INotifications } from '../../types/Notification'\r\n\r\ninterface MarkNotificationProps {\r\n notifyItem: INotifications\r\n handleMarkById: (ids: string[]) => void\r\n handleUnMarkById: (ids: string[]) => void\r\n colorBgTooltip?: string\r\n}\r\n\r\nconst MarkNotification: React.FC<MarkNotificationProps> = memo(({\r\n colorBgTooltip,\r\n notifyItem,\r\n handleMarkById,\r\n handleUnMarkById,\r\n}) => {\r\n const [tooltipOpenId, setTooltipOpenId] = useState<string>('')\r\n const isRead = notifyItem?.notification_user_instances?.is_read ?? false\r\n const notificationId = notifyItem?.id ?? ''\r\n\r\n const handleMarkClick = useCallback((e: React.MouseEvent) => {\r\n e.stopPropagation()\r\n setTooltipOpenId('')\r\n if (notificationId) {\r\n isRead ? handleUnMarkById([notificationId]) : handleMarkById([notificationId])\r\n }\r\n }, [isRead, notificationId, handleMarkById, handleUnMarkById])\r\n\r\n const handleTooltipClick = useCallback((e: React.MouseEvent) => {\r\n e.stopPropagation()\r\n setTooltipOpenId((prevId) =>\r\n prevId === notificationId ? '' : notificationId\r\n )\r\n }, [notificationId])\r\n\r\n const handleTooltipOpenChange = useCallback((open: boolean) => {\r\n if (!open) {\r\n setTooltipOpenId('')\r\n }\r\n }, [])\r\n\r\n const tooltipTitle = (\r\n <div\r\n className=\"sapp-notification-flex sapp-notification-cursor-pointer sapp-notification-items-center sapp-notification-gap-2 sapp-notification-text-white sapp-notification-text-sm\"\r\n onClick={handleMarkClick}\r\n role=\"button\"\r\n aria-label={isRead ? 'Mark as Unread' : 'Mark as Read'}\r\n >\r\n <MarkIcon />\r\n {isRead ? 'Mark as Unread' : 'Mark as Read'}\r\n </div>\r\n )\r\n \r\n return (\r\n <Tooltip\r\n title={tooltipTitle}\r\n color={colorBgTooltip === '#1F2937' ? '#404041' : colorBgTooltip}\r\n placement=\"left\"\r\n open={tooltipOpenId === notificationId}\r\n onOpenChange={handleTooltipOpenChange}\r\n >\r\n <div\r\n className=\"sapp-notification-cursor-pointer sapp-notification-relative\"\r\n onClick={handleTooltipClick}\r\n role=\"button\"\r\n aria-label=\"Notification options\"\r\n >\r\n <div className='sapp-notification-absolute sapp-notification-top-0 sapp-notification-right-6 sapp-notification-w-4 sapp-notification-h-8'></div>\r\n <NotificationDots />\r\n </div>\r\n </Tooltip>\r\n )\r\n \r\n})\r\n\r\nMarkNotification.displayName = 'MarkNotification'\r\n\r\nexport default MarkNotification\r\n","import React, { memo, useCallback, useMemo } from 'react'\nimport { EllipseIcon, DotIcon } from '../../assets/icons'\nimport { Image } from 'antd'\nimport NoData from '../../common/base/NoData'\nimport {\n formatNotificationHTML,\n containsKeyword,\n calculateTimeAgo,\n} from '../../utils/index'\nimport clsx from 'clsx'\nimport MarkNotification from './MarkNotification'\nimport { INotifications } from '../../types/Notification'\nimport { ANIMATION } from '../../constants'\n\ninterface IProps {\n notifyLists: INotifications[]\n notificationUnread: number\n handleViewDetail: (\n id: string,\n redirect: string,\n content: string,\n tag: string,\n ) => Promise<void>\n handleMarkById: (ids: string[]) => void\n handleUnMarkById: (ids: string[]) => void\n scrollRef: React.RefObject<HTMLDivElement>\n handleViewNotification: (link: string) => void\n isDesktopView?: boolean\n currentTabKey?: string | number\n isLoading?: boolean\n isFirstLoad?: boolean\n textMainColor?: string\n isMobileView?: boolean\n}\n\ninterface ContentItemNotificationProps {\n notifyItem: INotifications\n index: number\n readStatus: boolean\n onViewDetail: (e: React.MouseEvent<HTMLElement>, link: string) => void\n onMarkById: (ids: string[]) => void\n onUnMarkById: (ids: string[]) => void\n isDesktopView?: boolean\n textMainColor?: string\n isMobileView?: boolean\n}\n\nconst DEFAULT_AVATAR =\n 'data:image/png;base64,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'\n\nconst ContentItemNotification = memo(\n ({\n notifyItem,\n index,\n readStatus,\n onViewDetail,\n onMarkById,\n onUnMarkById,\n textMainColor,\n isMobileView,\n }: ContentItemNotificationProps) => {\n const nameUser = useMemo(\n () =>\n notifyItem?.title?.match(/<strong>(.*?)<\\/strong>/)?.[1] ?? '',\n [notifyItem?.title]\n )\n\n const avatarUrl = useMemo(\n () =>\n notifyItem?.avatar?.['52x52'] || notifyItem?.avatar?.ORIGIN,\n [notifyItem?.avatar]\n )\n\n const isAdminResource = useMemo(\n () => !notifyItem?.created_by,\n [notifyItem?.created_by]\n )\n\n const notificationContent = useMemo(() => {\n if (notifyItem?.created_by) {\n return notifyItem?.title\n }\n if (containsKeyword(notifyItem?.content ?? '')) {\n return formatNotificationHTML(notifyItem?.content ?? '')\n }\n return notifyItem?.content\n }, [notifyItem?.created_by, notifyItem?.title, notifyItem?.content])\n\n //format delete br\n const sanitizedContent = useMemo(() => {\n const html = notificationContent ?? ''\n return html\n .replace(/(?:<br\\s*\\/?>\\s*){2,}/gi, '<br/>')\n }, [notificationContent])\n\n const parser = new DOMParser()\n const doc = parser.parseFromString(sanitizedContent ?? '', 'text/html')\n const link = doc.querySelector('a')?.getAttribute('href') ?? ''\n\n const timeAgo = useMemo(\n () => calculateTimeAgo(notifyItem?.updated_at ?? ''),\n [notifyItem?.updated_at]\n )\n\n const containerClassName = useMemo(\n () =>\n clsx(\n 'sapp-notification-rounded-lg sapp-notification-flex sapp-notification-w-full sapp-notification-cursor-pointer sapp-notification-items-start sapp-notification-gap-4 sapp-notification-bg-white md:sapp-notification-px-4 md:sapp-notification-pt-4 md:sapp-notification-py-4 sapp-notification-py-3 lg:hover:sapp-notification-bg-orangesapp-3',\n\n ),\n [index]\n )\n\n return (\n <div className={containerClassName} onClick={e => onViewDetail(e, link)}>\n <div className=\"sapp-notification-flex sapp-notification-items-center sapp-notification-gap-2\">\n {!readStatus ? <EllipseIcon className='sapp-notification-h-1.5 sapp-notification-w-1.5 md:sapp-notification-h-2 md:sapp-notification-w-2'/> : <div className=\"sapp-notification-h-1.5 sapp-notification-w-1.5 md:sapp-notification-h-2 md:sapp-notification-w-2\" />}\n <div className=\"sapp-notification-flex sapp-notification-items-center sapp-notification-justify-center sapp-notification-rounded-full sapp-notification-bg-graysapp-3\">\n <Image\n src={avatarUrl || DEFAULT_AVATAR}\n className=\"sapp-notification-rounded-full\"\n alt=\"avatar\"\n width={isMobileView ? 40 : 52}\n height={isMobileView ? 40 : 52}\n preview={false}\n />\n </div>\n </div>\n <div className=\"sapp-notification-flex sapp-notification-w-full sapp-notification-flex-col\">\n {isAdminResource && (\n <div className=\"sapp-notification-flex sapp-notification-justify-between\">\n <div className=\"sapp-notification-flex sapp-notification-justify-between\">\n <div className=\"sapp-notification-flex sapp-notification-items-center sapp-notification-gap-2\">\n <span className=\"sapp-notification-text-sm md:sapp-notification-text-base sapp-notification-font-semibold\">\n {notifyItem?.created_by ? nameUser : 'UpBase System'}\n </span>\n <span><DotIcon /></span>\n <span className=\"sapp-notification-text-sm sapp-notification-font-normal sapp-notification-text-gray-500\">\n {timeAgo}\n </span>\n </div>\n {!isAdminResource && (\n <MarkNotification\n colorBgTooltip={textMainColor}\n notifyItem={notifyItem}\n handleMarkById={onMarkById}\n handleUnMarkById={onUnMarkById}\n />\n )}\n </div>\n <MarkNotification\n colorBgTooltip={textMainColor}\n notifyItem={notifyItem}\n handleMarkById={onMarkById}\n handleUnMarkById={onUnMarkById}\n />\n </div>\n )}\n <div\n className=\"sapp-notification-text-sm md:sapp-notification-text-base lg:sapp-notification-text-sm sapp-notification-font-normal sapp-notification-line-clamp-2 sapp-notification-mt-1.5\"\n style={{ width: '93%' }}\n dangerouslySetInnerHTML={{ __html: sanitizedContent ?? '' }}\n />\n </div>\n </div>\n )\n }\n)\n\nContentItemNotification.displayName = 'ContentItemNotification'\n\nconst ItemNotification = memo(\n ({\n notifyLists,\n notificationUnread,\n handleViewDetail,\n handleMarkById,\n handleUnMarkById,\n scrollRef,\n handleViewNotification,\n isDesktopView,\n currentTabKey,\n isLoading,\n isFirstLoad,\n textMainColor,\n isMobileView,\n }: IProps) => {\n const handleItemClick = useCallback(\n (\n e: React.MouseEvent<HTMLElement>,\n notifyItem: INotifications\n ) => {\n e.stopPropagation()\n handleViewDetail(\n notifyItem?.id ?? '',\n notifyItem?.created_by ?? '',\n notifyItem?.content ?? '',\n (e?.target as HTMLElement)?.tagName\n )\n },\n [handleViewDetail]\n )\n const handleNotification = (\n e: React.MouseEvent<HTMLElement>,\n link: string,\n notifyItem: INotifications\n ) => {\n if (link) {\n handleMarkById([notifyItem?.id ?? ''])\n handleViewNotification(link)\n } else {\n handleItemClick(e, notifyItem)\n }\n }\n const renderContent = useCallback(() => {\n if (isLoading && isFirstLoad) {\n return (\n <div className=\"sapp-notification-w-full sapp-notification-flex sapp-notification-justify-center sapp-notification-pt-6 md:sapp-notification-pt-40\" style={{ minHeight: `calc(100vh - ${isDesktopView ? '14.1rem' : '8rem'})`, width: '100%' }}>\n <div className=\"sapp-notification-animate-spin sapp-notification-rounded-full sapp-notification-h-8 sapp-notification-w-8 sapp-notification-border-b-2 sapp-notification-border-orangesapp-2\"></div>\n </div>\n )\n }\n\n if (notifyLists?.length > 0 || notificationUnread > 0) {\n return (\n <div data-aos={ANIMATION.DATA_AOS} key={`tab-${currentTabKey}`}>\n {\n notifyLists?.map((notifyItem, index) => (\n <ContentItemNotification\n key={notifyItem?.id}\n notifyItem={notifyItem}\n index={index}\n readStatus={notifyItem?.notification_user_instances?.is_read ?? false}\n onViewDetail={(e, link) => handleNotification(e, link, notifyItem)}\n onMarkById={handleMarkById}\n onUnMarkById={handleUnMarkById}\n isDesktopView={isDesktopView}\n textMainColor={textMainColor}\n isMobileView={isMobileView}\n />\n ))\n }\n </div>\n )\n }\n return (\n <div key={`no-data-${currentTabKey}`}>\n <NoData />\n </div>\n )\n }, [\n notifyLists,\n notificationUnread,\n handleItemClick,\n handleMarkById,\n handleUnMarkById,\n isDesktopView,\n currentTabKey,\n isLoading,\n isFirstLoad,\n isMobileView,\n ])\n\n return (\n <div\n ref={scrollRef}\n className={clsx(\n 'sapp-notification-flex sapp-notification-overflow-auto',\n !notifyLists?.length && !notificationUnread && 'sapp-notification-justify-center sapp-notification-items-center sapp-notification-h-screen'\n )}\n style={{\n height: `calc(100vh - ${isDesktopView ? '14.1rem' : '8rem'})`,\n }}\n >\n <div className=\"sapp-notification-w-full\">{renderContent()}</div>\n </div>\n )\n }\n)\n\nItemNotification.displayName = 'ItemNotification'\n\nexport default ItemNotification\n","import React, { Fragment, memo, useCallback, useMemo, useState, useEffect } from 'react';\r\nimport './styles/global.css';\r\nimport SappDrawer from './common/base/SappDrawer';\r\nimport NotifyDetail from './components/notification/NotifyDetail';\r\nimport SappTabs from './common/base/SappTabs';\r\nimport FooterDrawer from './common/base/FooterDrawer';\r\nimport ItemNotification from './components/notification/ItemNotification';\r\nimport { MarkIconV2 } from './assets/icons';\r\nimport { NotificationState, INotifications } from './types/Notification';\r\n\r\ninterface Tab {\r\n id: number;\r\n title: string;\r\n}\r\n\r\ninterface IProps {\r\n notifyDetail: NotificationState;\r\n tabs: Tab[];\r\n selectedTab: number;\r\n setSelectedTab: (tab: number) => void;\r\n handleMarkAll: () => void;\r\n handleMarkById: (ids: string[]) => void;\r\n handleUnMarkById: (ids: string[]) => void;\r\n handleBack: () => void;\r\n isViewDetail: boolean;\r\n setOpenNotification: (value: boolean) => void;\r\n openNotification: boolean;\r\n handleViewDetail: (id: string, redirect?: string, content?: string, tag?: string) => Promise<void>;\r\n notifyLists: INotifications[];\r\n notificationUnread: number;\r\n scrollRef: React.RefObject<HTMLDivElement>;\r\n handleViewNotification: (link: string) => void;\r\n isDesktopView?: boolean;\r\n isLoading?: boolean;\r\n textMainColor?: string;\r\n}\r\n\r\nconst SappNotificationComponent: React.FC<IProps> = memo(({\r\n notifyDetail,\r\n tabs,\r\n selectedTab,\r\n setSelectedTab,\r\n handleMarkAll,\r\n notifyLists,\r\n notificationUnread,\r\n handleViewDetail,\r\n handleMarkById,\r\n handleUnMarkById,\r\n setOpenNotification,\r\n openNotification,\r\n isViewDetail,\r\n handleBack,\r\n scrollRef,\r\n handleViewNotification,\r\n isDesktopView = false,\r\n isLoading = false,\r\n textMainColor = '#1F2937',\r\n}) => {\r\n const [isFirstLoad, setIsFirstLoad] = useState(false);\r\n const [previousTab, setPreviousTab] = useState(selectedTab);\r\n\r\n // Theo dõi khi chuyển tab để set isFirstLoad = true\r\n useEffect(() => {\r\n if (selectedTab !== previousTab) {\r\n setIsFirstLoad(true);\r\n setPreviousTab(selectedTab);\r\n }\r\n }, [selectedTab, previousTab]);\r\n\r\n // Set isFirstLoad = false khi loading xong\r\n useEffect(() => {\r\n if (!isLoading && isFirstLoad) {\r\n setIsFirstLoad(false);\r\n }\r\n }, [isLoading, isFirstLoad]);\r\n\r\n const handleDrawerClose = useCallback(() => {\r\n setOpenNotification(false);\r\n }, [setOpenNotification]);\r\n\r\n const notificationProps = useMemo(() => ({\r\n notifyLists,\r\n notificationUnread,\r\n handleViewDetail,\r\n handleMarkById,\r\n handleUnMarkById,\r\n scrollRef,\r\n handleViewNotification,\r\n isDesktopView,\r\n currentTabKey: selectedTab, // Thêm selectedTab làm key để trigger animation\r\n isLoading,\r\n isFirstLoad,\r\n textMainColor,\r\n }), [\r\n notifyLists,\r\n notificationUnread,\r\n handleViewDetail,\r\n handleMarkById,\r\n handleUnMarkById,\r\n scrollRef,\r\n handleViewNotification,\r\n isDesktopView,\r\n selectedTab, // Thêm selectedTab vào dependency array\r\n isLoading,\r\n isFirstLoad,\r\n textMainColor,\r\n ]);\r\n const isMobileView = useMemo(() => window.innerWidth < 768, [])\r\n const renderNotificationContent = useCallback(() => {\r\n if (isViewDetail) {\r\n return <NotifyDetail notifyDetail={notifyDetail} isMobileView={isMobileView} />;\r\n }\r\n\r\n return (\r\n <div>\r\n <SappTabs\r\n tabs={tabs}\r\n setSelected={setSelectedTab}\r\n selected={selectedTab}\r\n />\r\n <ItemNotification key={`list-${selectedTab}-back`} {...notificationProps} isMobileView={isMobileView} />\r\n </div>\r\n );\r\n }, [isViewDetail, notifyDetail, tabs, setSelectedTab, selectedTab, notificationProps, isDesktopView, isMobileView]);\r\n\r\n const renderFooter = useCallback(() => {\r\n if (!notificationUnread) return null;\r\n\r\n return (\r\n <div className=\"sapp-notification-absolute sapp-notification-bottom-0 sapp-notification-left-0 sapp-notification-right-0 sapp-notification-px-4 md:sapp-notification-px-8 sapp-notification-pb-4 md:sapp-notification-pb-8\">\r\n <FooterDrawer\r\n content=\"Mark all as Read\"\r\n icon={<MarkIconV2 />}\r\n classNameBg=\"sapp-notification-bg-orangesapp-1\"\r\n classNameText=\"sapp-notification-text-orangesapp-2\"\r\n action={handleMarkAll}\r\n />\r\n </div>\r\n \r\n );\r\n }, [notificationUnread, handleMarkAll]);\r\n \r\n return (\r\n <Fragment>\r\n <SappDrawer\r\n style={{ color: textMainColor }}\r\n open={openNotification}\r\n handleCancel={handleDrawerClose}\r\n title={isViewDetail ? 'Notification Detail' : 'Notification'}\r\n isShowBtnClose={!isViewDetail}\r\n handleBack={handleBack}\r\n isDesktopView={isDesktopView}\r\n >\r\n {renderNotificationContent()}\r\n {renderFooter()}\r\n </SappDrawer>\r\n </Fragment>\r\n );\r\n});\r\n\r\nSappNotificationComponent.displayName = 'SappNotificationComponent';\r\n\r\nexport default SappNotificationComponent;\r\n"],"names":["CloseIconV2","props","React","width","height","viewBox","fill","xmlns","d","stroke","strokeWidth","strokeLinecap","strokeLinejoin","ArrowLeftIcon","fillRule","clipRule","MarkIconV2","NotificationDots","MarkIcon","EllipseIcon","cx","cy","r","DotIcon","NoDataIcon","filter","id","x","y","filterUnits","result","type","values","dy","stdDeviation","mode","in2","SappDrawer","_ref","open","handleBack","handleCancel","_ref$width","title","children","_ref$isShowBtnClose","isShowBtnClose","_ref$isShowFooter","_ref$loading","loading","className","isDesktopView","_objectWithoutPropertiesLoose","_excluded","widthDrawer","rootClassName","styles","drawer","drawerResponsive","isShowBtnCloseDrawer","Drawer","undefined","onClose","closeIcon","clsx","onClick","ANIMATION_NOTIFICATION","DURATION","DATA_AOS","DATE_FORMAT","ANIMATION","dayjs","extend","utc","formatNotificationHTML","input","replace","_match","dateTime","formattedDate","local","format","DATE","containsKeyword","keyword","includes","calculateTimeAgo","date","currentDateTime","Date","updatedDateTime","currentUtcTime","UTC","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","timeDifference","getTime","secondsAgo","Math","floor","minutesAgo","hoursAgo","daysAgo","formatter","Intl","DateTimeFormat","day","month","year","DEFAULT_AVATAR","Avatar","memo","avatar","isMobileView","Image","src","ORIGIN","alt","preview","SenderInfo","_ref2","createdBy","nameUser","updatedAt","NotifyDetail","_ref3","notifyDetail","_notifyDetail$title","_notifyDetail$title$m","match","content","renderContent","created_by","dangerouslySetInnerHTML","__html","updated_at","displayName","SappTabs","tabs","selected","setSelected","_ref$bordered","bordered","map","tab","isActive","key","role","FooterDrawer","icon","action","classNameText","classNameBg","e","stopPropagation","NoData","MarkNotification","colorBgTooltip","notifyItem","handleMarkById","handleUnMarkById","_useState","useState","tooltipOpenId","setTooltipOpenId","isRead","_notifyItem$notificat","_notifyItem$notificat2","notification_user_instances","is_read","notificationId","_notifyItem$id","handleMarkClick","useCallback","handleTooltipClick","prevId","handleTooltipOpenChange","tooltipTitle","Tooltip","color","placement","onOpenChange","ContentItemNotification","index","readStatus","onViewDetail","onMarkById","onUnMarkById","textMainColor","useMemo","_notifyItem$title$mat","_notifyItem$title","_notifyItem$title$mat2","avatarUrl","_notifyItem$avatar","_notifyItem$avatar2","isAdminResource","notificationContent","_notifyItem$content","_notifyItem$content2","sanitizedContent","html","parser","DOMParser","doc","parseFromString","link","_doc$querySelector$ge","_doc$querySelector","querySelector","getAttribute","timeAgo","_notifyItem$updated_a","containerClassName","style","ItemNotification","notifyLists","notificationUnread","handleViewDetail","scrollRef","handleViewNotification","currentTabKey","isLoading","isFirstLoad","handleItemClick","_notifyItem$created_b","_notifyItem$content3","_e$target","target","tagName","handleNotification","_notifyItem$id2","minHeight","length","ref","SappNotificationComponent","selectedTab","setSelectedTab","handleMarkAll","setOpenNotification","openNotification","isViewDetail","_ref$isDesktopView","_ref$isLoading","_ref$textMainColor","setIsFirstLoad","_useState2","previousTab","setPreviousTab","useEffect","handleDrawerClose","notificationProps","window","innerWidth","renderNotificationContent","renderFooter","Fragment"],"mappings":"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"}