????
Current Path : C:/inetpub/vhost/xaydung.gdtsolutions.vn/build/static/js/ |
Current File : C:/inetpub/vhost/xaydung.gdtsolutions.vn/build/static/js/481.40d6983c.chunk.js.map |
{"version":3,"file":"static/js/481.40d6983c.chunk.js","mappings":"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","sources":["hooks/useAsync.js","components/dialog/FullScreenDialog.js","components/dialog/BodyDialog.js","components/dialog/Dialog.js","components/dialog/HeaderDialog.js","views/quan-ly-van-ban/components/Folder.js","views/quan-ly-van-ban/components/FolderPending.js","views/quan-ly-van-ban/FolderExplorer.js","components/pagination/index.js","views/quan-ly-van-ban/components/Document.js","views/quan-ly-van-ban/DocumentExplorerHeader.js","components/pdf/PDF.Viewer.js","views/quan-ly-van-ban/components/DocumentViewer.js","views/quan-ly-van-ban/DocumentExplorer.js","views/quan-ly-van-ban/index.js","service/api/swalCallAPI.js"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from \"react\";\n\nconst useAsync = (asyncFunction, immediate = true) => {\n const [status, setStatus] = useState('idle');\n const [value, setValue] = useState(undefined);\n const [error, setError] = useState(undefined);\n const isMounted = useRef(false)\n // The execute function wraps asyncFunction and\n // handles setting state for pending, value, and error.\n // useCallback ensures the below useEffect is not called\n // on every render, but only if asyncFunction changes.\n const execute = useCallback((param) => {\n setStatus('pending');\n setError(null);\n\n return asyncFunction(param)\n .then(response => {\n if (!isMounted.current) return\n setValue(response);\n setStatus('success');\n })\n .catch(error => {\n\n // console.log('error', error)\n\n if (!isMounted.current) return\n setError(error);\n setStatus('error');\n });\n }, [asyncFunction]);\n\n // Call execute if we want to fire it right away.\n // Otherwise execute can be called later, such as\n // in an onClick handler.\n useEffect(() => {\n if (immediate) {\n execute();\n }\n }, [execute, immediate]);\n\n useEffect(() => {\n isMounted.current = true\n return () => {\n isMounted.current = false\n }\n }, [])\n\n return { execute, status, value, error, setValue, setStatus };\n};\n\nexport default useAsync\n","import React from 'react';\nimport Dialog from './Dialog';\nimport HeaderDialog from './HeaderDialog';\nimport BodyDialog from './BodyDialog';\n\nexport default function FullScreenDialog(props) {\n const { renderCustom, renderButton, children, title, onClose, open, style, className } = props;\n return (\n <Dialog open={open} onClose={onClose} style={style} className={className}>\n <HeaderDialog renderCustom={renderCustom} renderButton={renderButton} title={title} onClose={onClose} />\n <BodyDialog>{children}</BodyDialog>\n </Dialog>\n );\n}\n","import React from 'react';\nimport DialogContent from '@material-ui/core/DialogContent';\n\nexport default function HeaderDialog(props) {\n return (\n <DialogContent style={{ backgroundColor: \"#eee\", paddingTop: 20 }}>\n {props.children}\n </DialogContent>\n );\n}","import React from 'react';\nimport Dialog from '@material-ui/core/Dialog';\nimport Slide from '@material-ui/core/Slide';\n\nconst Transition = React.forwardRef((props, ref) => <Slide direction=\"up\" ref={ref} {...props} />);\n\nexport default function FullScreenDialog(props) {\n const { children, onClose, open, style, className } = props;\n return (\n <Dialog className={className} style={style} disableEnforceFocus fullScreen open={open} onClose={onClose}\n TransitionComponent={Transition}>\n {children}\n </Dialog>\n );\n}\n","import React from 'react';\nimport { createStyles, makeStyles } from '@material-ui/core/styles';\nimport AppBar from '@material-ui/core/AppBar';\nimport Toolbar from '@material-ui/core/Toolbar';\nimport Typography from '@material-ui/core/Typography';\nimport ButtonClose from '../base/Button/ButtonClose';\n\nconst useStyles = makeStyles((theme) =>\n createStyles({\n appBar: {\n position: 'relative',\n backgroundColor: '#006fca'\n },\n toolbar: {\n minHeight: 40\n },\n title: {\n marginLeft: theme.spacing(2),\n flex: 1,\n },\n }),\n);\n\nexport default function HeaderDialog(props) {\n const classes = useStyles();\n const { renderCustom, renderButton, title, onClose } = props;\n return (\n <AppBar className={classes.appBar}>\n <Toolbar className={classes.toolbar} variant=\"dense\">\n {renderCustom}\n <Typography variant=\"h6\" className={classes.title}>{title}</Typography>\n {renderButton}\n <ButtonClose onClick={onClose}>Đóng</ButtonClose>\n </Toolbar>\n </AppBar>\n );\n}\n","import React from \"react\";\n\nconst renderString = (string) => {\n if (string) return string\n return \"Không có thông tin\"\n}\n\nconst Folder = (props) => {\n\n const { onFolderClick, ...folder } = props\n const { Name, Id } = folder\n if (!Id) return null\n\n return (\n <div className={\"px-2 col-md-3\"}\n key={Id}>\n <div className={\"card shadow-none\"}\n style={{ cursor: \"pointer\" }}\n onClick={onFolderClick}>\n <div className={\"card-body d-flex\"}>\n <div className={\"mr-3\"}>\n <i className={\"fas fa-folder-open fa-4x text-warning card-img\"} />\n </div>\n <div>\n <h3 className={\"card-title\"}>{renderString(Name)}</h3>\n </div>\n </div>\n </div>\n </div>\n )\n\n}\n\nexport default Folder\n","import React from \"react\";\nimport Skeleton from \"@material-ui/lab/Skeleton\";\n\nconst FolderPending = () => <div className={\"col-md-3 p-4\"}>\n <div className={\"d-flex\"}>\n <Skeleton variant={\"rect\"} width={56} height={56}/>\n <div className={\"flex-grow-1 ml-4\"}>\n <Skeleton variant={\"rect\"} width={\"90%\"} height={16} className={\"mb-3\"}/>\n <Skeleton variant={\"rect\"} width={\"75%\"} height={16}/>\n </div>\n </div>\n</div>\n\nexport default React.memo(FolderPending)\n","import Folder from \"./components/Folder\";\nimport React from \"react\";\nimport FolderPending from \"./components/FolderPending\";\nimport \"./styles.scss\"\n\nconst PlaceHolderView = ({ children }) => (\n <div className={\"d-flex align-items-center justify-content-center flex-column m-placeholder-view\"}>\n {children}\n </div>\n)\n\nconst FolderExplorer = ({ status, reload, documentTypes }) => {\n\n if (status === \"pending\") return (\n <div className={\"row px-3\"}>\n {Array\n .from(new Array(8).keys())\n .map(k => <FolderPending key={k} />)}\n </div>\n )\n\n if (status === \"error\") return (\n <PlaceHolderView>\n <i className={\"fas fa-exclamation text-danger fa-4x mb-2\"} />\n <h4 className={\"text-danger\"}>Đã xảy ra lỗi. Vui lòng thử lại</h4>\n <button className={\"btn btn-primary\"} onClick={reload}>\n <i className={\"fas fa-sync mr-2\"} />\n Thử lại\n </button>\n </PlaceHolderView>\n )\n\n if (status === \"idle\") return null\n\n if (documentTypes.length === 0) return (\n <PlaceHolderView>\n <i className={\"fas fa-folder text-muted fa-4x mb-2\"} />\n <h4 className={\"text-muted\"}>Chưa có thư mục. Hãy tạo mới thư mục!</h4>\n </PlaceHolderView>\n )\n\n return (\n <div className={\"row px-3\"}>\n {documentTypes.map(Folder)}\n </div>\n )\n\n}\n\nexport default React.memo(FolderExplorer)\n","import React, {useCallback} from \"react\";\nimport PropTypes from \"prop-types\";\nimport \"./style.css\"\n\nconst LEFT_PAGE = \"LEFT\";\nconst RIGHT_PAGE = \"RIGHT\";\n\nconst range = (from, to, step = 1) => {\n let i = from;\n const range = [];\n\n while (i <= to) {\n range.push(i);\n i += step;\n }\n\n return range;\n};\n\n/**\n * @see https://codesandbox.io/s/l29rokm9rm?file=/src/components/Pagination.js\n */\nfunction Pagination(props) {\n\n const {currentPage, totalElements, pageLimit, pageNeighbours = 1, onPageChange} = props\n\n const pNeighbours =\n typeof pageNeighbours === \"number\"\n ? Math.max(0, Math.min(pageNeighbours, 2))\n : 0;\n\n const totalPages = Math.ceil(totalElements / pageLimit);\n\n const gotoPage = (page) => {\n const p = Math.max(0, Math.min(page, totalPages));\n onPageChange(p)\n }\n\n const handleClick = (page) => gotoPage(page)\n\n const handleMoveLeft = () => gotoPage(currentPage - pageNeighbours * 2 - 1)\n\n const handleMoveRight = () => gotoPage(currentPage + pNeighbours * 2 + 1)\n\n const fetchPageNumbers = useCallback(() => {\n const pageNeighbours = pNeighbours;\n\n const totalNumbers = pNeighbours * 2 + 3;\n const totalBlocks = totalNumbers + 2;\n\n if (totalPages > totalBlocks) {\n let pages\n\n const leftBound = currentPage - pageNeighbours;\n const rightBound = currentPage + pageNeighbours;\n const beforeLastPage = totalPages - 1;\n\n const startPage = leftBound > 2 ? leftBound : 2;\n const endPage = rightBound < beforeLastPage ? rightBound : beforeLastPage;\n\n pages = range(startPage, endPage);\n\n const pagesCount = pages.length;\n const singleSpillOffset = totalNumbers - pagesCount - 1;\n\n const leftSpill = startPage > 2;\n const rightSpill = endPage < beforeLastPage;\n\n const leftSpillPage = LEFT_PAGE;\n const rightSpillPage = RIGHT_PAGE;\n\n if (leftSpill && !rightSpill) {\n const extraPages = range(startPage - singleSpillOffset, startPage - 1);\n pages = [leftSpillPage, ...extraPages, ...pages];\n } else if (!leftSpill && rightSpill) {\n const extraPages = range(endPage + 1, endPage + singleSpillOffset);\n pages = [...pages, ...extraPages, rightSpillPage];\n } else if (leftSpill && rightSpill) {\n pages = [leftSpillPage, ...pages, rightSpillPage];\n }\n\n return [1, ...pages, totalPages];\n }\n\n return range(1, totalPages);\n }, [currentPage, pNeighbours, totalPages])\n\n\n if (!totalElements) return null;\n\n if (totalPages === 1) return null;\n\n return (\n <div className={\"btn-group\"} role={\"group\"}>\n {fetchPageNumbers().map((page, index) => {\n if (page === LEFT_PAGE)\n return (\n <button key={index}\n onClick={handleMoveLeft}\n className=\"btn btn-outline-primary\">\n <i className={\"fas fa-step-backward m-icon\"}/>\n <span className=\"sr-only\">Quay lại</span>\n </button>\n );\n\n if (page === RIGHT_PAGE)\n return (\n <button key={index}\n onClick={handleMoveRight}\n className={\"btn btn-outline-primary\"}>\n <i className={\"fas fa-step-forward m-icon\"}/>\n <span className=\"sr-only\">Tiếp theo</span>\n </button>\n );\n\n return (\n <button\n onClick={() => handleClick(page)}\n key={index}\n className={`btn ${\n currentPage === page ? \" btn-primary\" : \" btn-outline-primary\"\n }`}>\n {page}\n </button>\n );\n })}\n </div>\n );\n\n}\n\nPagination.propTypes = {\n totalElements: PropTypes.number.isRequired,\n pageLimit: PropTypes.number,\n pageNeighbours: PropTypes.number,\n onPageChange: PropTypes.func\n};\n\nexport default Pagination;\n","import React, { useCallback, useState } from \"react\";\nimport DropdownToggle from \"reactstrap/es/DropdownToggle\";\nimport DropdownMenu from \"reactstrap/es/DropdownMenu\";\nimport Dropdown from \"reactstrap/es/Dropdown\";\nimport DropdownItem from \"reactstrap/es/DropdownItem\";\nimport \"../styles.scss\"\nimport { dateUtils } from \"../../../actions/util\";\nimport styled from 'styled-components';\nimport { UncontrolledTooltip } from \"reactstrap\";\n\nconst menuItems = [\n { label: \"Tải xuống\", icon: \"fas fa-download\" },\n { label: \"Xem\", icon: \"fas fa-folder-open\" },\n // {label: \"Xóa\", icon: \"fas fa-trash\"},\n]\n\nconst DocName = styled.h5`\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 1;\n -webkit-box-orient: vertical;\n`\n\nconst renderOrganName = (organName) => {\n if (!organName) return \"Không có thông tin cán bộ\"\n return organName\n}\n\nconst FileMenuDropDown = (props) => {\n const { onOpen, onDownload, onDelete, ...dropdownProps } = props\n const { isOpen } = dropdownProps || {}\n const handleDropdownItemClick = (itemIndex) => {\n if (itemIndex === 0) return onDownload()\n if (itemIndex === 1) return onOpen()\n // onDelete()\n }\n return (\n <Dropdown {...dropdownProps} direction={\"left\"} className={\"flex-shrink-1\"}>\n <DropdownToggle\n tag=\"span\"\n data-toggle=\"dropdown\"\n aria-expanded={isOpen}>\n <i className=\"fas fa-ellipsis-h circle-icon-button\" />\n </DropdownToggle>\n <DropdownMenu>\n {menuItems.map(({ label, icon }, index) => (\n <DropdownItem className={\"pl-4 p-2\"}\n id={index}\n key={index}\n onClick={() => handleDropdownItemClick(index)}>\n <i className={`${icon} mr-3`} />\n {label}\n </DropdownItem>\n ))}\n </DropdownMenu>\n </Dropdown>\n )\n}\n\nconst Document = ({ onDownload, onOpen, onDelete, idTitle, ...doc }) => {\n\n const { Subject, Name, CreatedDate } = doc || {}\n const [dropdownOpen, setDropdownOpen] = useState(false)\n\n const toggle = useCallback(\n () => setDropdownOpen(prevState => !prevState), [])\n\n const handleOpen = useCallback(() => {\n onOpen(doc)\n }, [doc, onOpen])\n\n const handleDownload = useCallback(() => {\n onDownload(doc)\n }, [doc, onDownload])\n\n const handleDelete = useCallback(() => {\n onDelete(doc)\n }, [doc, onDelete])\n\n if (!doc) return null\n\n if (!doc.Id) return null\n\n return <div className={\"col-md-3 px-2\"}>\n <div className={\"card\"}>\n <div className={\"card-body d-flex justify-content-between\"}>\n <div className={\"d-flex flex-grow-1\"} onClick={handleDownload} style={{ cursor: \"pointer\" }}>\n <div className={\"mr-3\"}>\n <i className={\"fas fa-file-word fa-2x card-img text-primary\"} />\n </div>\n <div>\n <DocName className={\"card-title mb-0\"}>\n {Subject}\n </DocName>\n <p id={\"UncontrolledTooltipExample\" + idTitle} className={`card-text mb-0 ${Name ? `` : `text-muted`} text-pdf`}>\n {renderOrganName(Name)}\n </p>\n <UncontrolledTooltip placement=\"bottom\" target={\"UncontrolledTooltipExample\" + idTitle}>\n {renderOrganName(Name)}\n </UncontrolledTooltip>\n <p className={\"card-text\"}>Ngày đăng: {dateUtils.format(CreatedDate)}</p>\n </div>\n </div>\n <FileMenuDropDown isOpen={dropdownOpen}\n toggle={toggle}\n onOpen={handleOpen}\n onDownload={handleDownload}\n onDelete={handleDelete} />\n </div>\n </div>\n </div>\n}\n\nexport default React.memo(Document)\n","import React from \"react\";\nimport styled from \"styled-components\"\n\nconst SearchInput = styled.input`\n min-width: 200px !important;\n height: 38px;\n border: 1px solid hsl(0,0%,80%);\n`\n\nfunction useDebounce(value, delay) {\n\n const [debouncedValue, setDebouncedValue] = React.useState(value);\n\n React.useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n return () => {\n clearTimeout(handler);\n };\n }, [value, delay]);\n\n return debouncedValue;\n}\n\nfunction DocumentExplorerHeader(props) {\n\n const { onBackward, reload, disableReload, onSearchSubmit } = props\n const [search, setSearch] = React.useState(undefined)\n const { Subject = \"\" } = search || {}\n const debouncedSearch = useDebounce(search, 500)\n\n React.useEffect(() => {\n if (debouncedSearch === undefined) return\n onSearchSubmit(debouncedSearch)\n }, [debouncedSearch, onSearchSubmit])\n\n const handleSearchInputChange = ({ target: { value, name } }) => {\n setSearch(prevState => ({\n ...prevState,\n [name]: value\n }))\n }\n\n return (\n <div className={\"card\"}>\n <div className={\"card-body\"}>\n <div className={\"d-flex justify-content-between\"}>\n <div className={\"d-flex\"}>\n\n <SearchInput className={\"form-control mr-3\"}\n name={\"Subject\"}\n value={Subject}\n onChange={handleSearchInputChange}\n placeholder={\"Tìm theo tên văn bản\"} />\n\n </div>\n\n <div className={\"flex-grow-1\"}>\n <div className={\"d-flex justify-content-end\"}>\n <div className={\"d-flex\"}>\n <button className={\"btn btn-primary mr-3\"}\n disabled={disableReload}\n onClick={reload}>\n <i className={\"fas fa-sync mr-3\"} />\n Tải lại\n </button>\n <button\n onClick={onBackward}\n className={\"btn btn-primary\"}>\n <i className={\"fas fa-backward mr-3\"} />\n Quay lại\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n )\n\n}\n\nexport default React.memo(DocumentExplorerHeader)\n","import { useEffect, useState } from \"react\";\nimport { Viewer, Worker } from \"@react-pdf-viewer/core\";\nimport { defaultLayoutPlugin } from '@react-pdf-viewer/default-layout';\nimport \"@react-pdf-viewer/default-layout/lib/styles/index.css\";\nimport viVN from '@react-pdf-viewer/locales/lib/vi_VN.json';\n\n/** @type {import('react').FC<import('@react-pdf-viewer/core').ViewerProps>} */\nconst PDFViewer = ({ height = '100vh', fileUrl, ...attrs }) => {\n const [file, setFile] = useState('');\n\n const defaultLayoutInstance = defaultLayoutPlugin();\n useEffect(() => {\n setFile('');\n setFile(fileUrl)\n }, [fileUrl])\n return file && (\n <div style={{ height }}>\n <Worker workerUrl=\"/plugins/pdfjs-dist/pdf.worker.min.js\">\n <Viewer {...attrs} fileUrl={file} plugins={[defaultLayoutInstance]} />\n </Worker>\n </div >\n );\n};\n\nPDFViewer.defaultProps = {\n localization: viVN\n}\n\nexport default PDFViewer;\n","import FullScreenDialog from \"../../../components/dialog/FullScreenDialog\";\nimport React from \"react\";\nimport PDFViewer from \"../../../components/pdf/PDF.Viewer\";\nimport { VanBansEndpoint } from \"../../../service/GDTCores\";\n\nconst MS_OFFICE_VIEWER_URL = \"https://view.officeapps.live.com/op/embed.aspx?src=\"\nconst GG_DRIVE_VIEWER_URL = \"https://docs.google.com/gview?url=\"\nconst supportedDocumentExtensions = [\"pdf\", \"doc\", \"docx\"]\n\n// https://stackoverflow.com/questions/27957766/how-do-i-render-a-word-document-doc-docx-in-the-browser-using-javascript\n\nfunction DocumentViewer({ activeDoc, onClose }) {\n\n const [iframeUrl, setIframeUrl] = React.useState(MS_OFFICE_VIEWER_URL)\n\n const switchIframeUrl = () => {\n setIframeUrl(GG_DRIVE_VIEWER_URL)\n }\n\n const renderDocViewer = () => {\n let temp = activeDoc?.Name.split('.').length - 1\n let extension = activeDoc?.Name.split('.')[temp]\n\n if (!activeDoc) return null\n if (!activeDoc.Id) return null\n\n if (!supportedDocumentExtensions.includes(extension)) return (\n <div className={\"w-100 h-100 d-flex flex-column align-items-center justify-content-center\"}>\n <i className={\"fas fa-exclamation-circle text-danger fa-3x\"} />\n <h3 className={\"mt-3\"}>Định dạng văn bản không được hỗ trợ!</h3>\n <h3>Bạn chỉ có thể xem được các văn bản có định\n dạng {supportedDocumentExtensions.join(\", \")}</h3>\n </div>\n )\n\n const uri = VanBansEndpoint.getDocUrlByUuid(activeDoc.Id);\n // console.log(uri)\n const docSrc = `${MS_OFFICE_VIEWER_URL}${encodeURIComponent(uri)}`\n\n if (extension === supportedDocumentExtensions[0]) return (\n <PDFViewer fileUrl={uri} height={'100%'} />\n )\n\n return (\n <iframe\n onError={switchIframeUrl}\n id={\"doc-iframe\"}\n title={\"Xem văn bản\"}\n src={docSrc}\n width='100%'\n height='100%'\n frameBorder='0'>\n {iframeUrl === MS_OFFICE_VIEWER_URL\n ? <>This is an embedded\n <a target='_blank'\n rel=\"noreferrer\"\n href='http://office.com'>Microsoft\n Office</a> document, powered by <a rel=\"noreferrer\" target='_blank'\n href='http://office.com/webapps'>Office\n Online</a>.\n </>\n : null}\n </iframe>\n )\n }\n\n return <FullScreenDialog\n open={activeDoc !== undefined}\n onClose={onClose}>\n {renderDocViewer()}\n </FullScreenDialog>\n\n}\n\nexport default React.memo(DocumentViewer)\n","import React, { useCallback, useMemo, useState, useEffect } from \"react\";\nimport useAsync from \"../../hooks/useAsync\";\nimport FolderPending from \"./components/FolderPending\";\nimport Pagination from \"../../components/pagination\";\nimport styled from \"styled-components\";\nimport Document from \"./components/Document\";\nimport DocumentExplorerHeader from \"./DocumentExplorerHeader\";\nimport { ModalConfig } from \"../../components/alert/Alert\";\nimport swalCallAPI from \"../../service/api/swalCallAPI\";\nimport DocumentViewer from \"./components/DocumentViewer\";\n// import OdataClient from \"../../actions/OdataClient\";\nimport { VanBansEndpoint } from \"../../service/GDTCores\";\n\nconst ELEMENT_PER_PAGE = 12\n\nconst initialOdataQuery = {\n top: ELEMENT_PER_PAGE,\n skip: 0,\n count: true,\n filter: undefined,\n}\n\n// const getSubjectFilter = ({ Subject = \"\" } = {}) => `contains(Subject, '${Subject}')`\n// const getOrganNameFilter = ({ OrganName = \"\" } = {}) => `and contains(OrganName, '${OrganName}')`\nconst getStatusFiter = () => `Status eq ${true}`;\nconst getDocTypeFilter = ({ Id = \"\" } = {}) => Id ? ` and LoaiVanBanId eq ${Id}` : ``;\nconst getNameTypeFilter = ({ Subject = \"\" } = {}) => Subject ? ` and contains(Name, '${Subject}')` : ``;\nconst getFilterParam = (filter) => filter ? `filter=${getStatusFiter()}${getDocTypeFilter(filter)}${getNameTypeFilter(filter)}` : ``\nconst paramReducer = (str, [key, value], i) => {\n if (!value) return str\n return str.concat(`${i === 0 ? `?` : `&`}$${key !== \"filter\" ? `${key}=${value}` : getFilterParam(value)}`)\n}\nconst parseParams = (paramObj) => typeof paramObj === \"object\"\n ? Object\n .entries(paramObj)\n .reduce(paramReducer, \"\")\n : \"\"\n\nconst PlaceHolderView = styled.div`\n height: 48vh;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n`\nconst swal = ModalConfig()\nconst getEmptyDocSwal = (title,) => ({\n title,\n icon: \"error\",\n confirmButtonText: \"Thử lại\",\n cancelButtonText: \"Đóng\",\n cancelButtonColor: \"#d33\",\n})\nconst handleEmptyDocSwal = (callback) => ({ isConfirmed }) => {\n if (!isConfirmed) return\n callback()\n}\nconst onEmptyDoc = (callback, title = \"Không tìm thấy văn bản. Vui lòng thử lại\") => swal\n .fire(getEmptyDocSwal(title))\n .then(handleEmptyDocSwal(callback))\n\nfunction DocumentExplorer({ activeFolder, onBackward, dataDuAnVanBan, IdDuAn }) {\n\n const [odataQuery, setOdataQuery] = React.useState(initialOdataQuery)\n const [activeDoc, setActiveDoc] = React.useState(undefined)\n\n const [dataVanBan, setDataVanBan] = useState([])\n\n const { skip, filter } = odataQuery\n const { Subject, OrganName } = filter || {}\n\n // React.useEffect(() => {\n\n // const odataClient = new OdataClient()\n\n // odataClient\n // .table(\"Documents\")\n // .select(\"123123\")\n // .expand(\"321312\")\n // .orderBy(\"asd asc\")\n // .filter([\"contains(Subject, '12')\", \"asd=123\"])\n // .search(\"333\")\n // .get()\n\n // }, [])\n\n const getData = useCallback(\n () => {\n VanBansEndpoint.getVanBans()\n .then(res => setDataVanBan(res.value))\n },\n [],\n )\n\n useEffect(() => {\n getData()\n }, [getData])\n\n const loadDocuments = useCallback(() => {\n return VanBansEndpoint.getAllVanBans(parseParams({\n ...odataQuery,\n filter: {\n ...odataQuery.filter,\n Id: activeFolder?.Id\n }\n }))\n }, [odataQuery, activeFolder])\n\n const handlePageChange = useCallback((page) => {\n setOdataQuery(prevState => ({\n ...prevState,\n skip: (page - 1) * ELEMENT_PER_PAGE,\n }))\n }, [])\n\n const handleSearchSubmit = useCallback((search) => {\n setOdataQuery(prevState => ({\n ...prevState,\n filter: {\n ...prevState.filter,\n ...search,\n }\n }))\n }, [])\n\n const handleFileViewerClose = useCallback(() => {\n setActiveDoc(undefined)\n }, [])\n\n const openDocument = useCallback((doc) => {\n if (!doc) return onEmptyDoc(() => openDocument(doc))\n setActiveDoc(doc)\n }, [])\n\n const downloadDocument = useCallback((doc) => {\n if (!doc) return onEmptyDoc(() => downloadDocument(doc))\n const docName = doc.Name || ``\n const swalOptions = {\n pendingSwal: { title: `Đang tải xuống văn bản ${docName}` },\n callAPIFn: () => VanBansEndpoint.downloadVanBan(doc),\n onSuccess: { getSwal: () => `Văn bản ${docName} đã được tải xuống` },\n onError: { getSwal: `Đã xảy ra lỗi hoặc văn bản không còn tồn tại trên hệ thống` }\n }\n return swalCallAPI.didOpen(swalOptions)\n }, [])\n\n const currentPage = useMemo(() => skip / ELEMENT_PER_PAGE + 1, [skip])\n\n const {\n execute: reloadDocuments,\n status,\n // setValue,\n value: {\n \"@odata.count\": odataCount = ELEMENT_PER_PAGE,\n value: documentList = []\n } = {}\n } = useAsync(loadDocuments, false)\n\n React.useEffect(() => {\n if (!activeFolder) return\n const { Id } = activeFolder\n if (!Id) return\n reloadDocuments()\n }, [activeFolder, reloadDocuments])\n\n // const deleteDocument = useCallback((doc) => {\n // if (!doc) return onEmptyDoc(() => deleteDocument(doc))\n // const {Uuid, Subject = \"\"} = doc\n // const swalOptions = {\n // confirmSwal: {title: `Bạn có chắc muốn xóa văn bản ${Subject} ?`},\n // pendingSwal: {title: \"Đang xóa văn bản \" + Subject},\n // callAPIFn: () => DocumentsEndpoint.delete(Uuid),\n // onSuccess: {\n // getSwal: () => `Văn bản ${doc.Subject} đã được xóa`,\n // callback: () => setValue(prevState => ({\n // ...prevState,\n // value: prevState.value.filter(doc => doc.Uuid !== Uuid)\n // }))\n // }\n // }\n // return swalCallAPI.didOpen(swalOptions)\n // }, [setValue])\n //\n // const renderDocument = useCallback(\n // (doc, index) => (\n // <Document {...doc}\n // onOpen={openDocument}\n // onDownload={downloadDocument}\n // onDelete={deleteDocument}\n // key={index}/>\n // ), [openDocument, downloadDocument, deleteDocument])\n\n const renderDocument = useCallback(\n (doc, index) => {\n return (\n <Document {...doc}\n onOpen={openDocument}\n onDownload={downloadDocument}\n idTitle={index}\n key={index} />\n )\n }, [openDocument, downloadDocument])\n\n const renderEmptyView = () => {\n if (!filter) return `Không có văn bản thuộc loại ${activeFolder?.Name || `này`},\n vui lòng thử một loại văn bản khác`\n return `Không có văn bản phù hợp ${Subject ? `với từ khóa ${Subject}` : ``} \n ${OrganName ? `${OrganName && Subject ? ` và` : ` với`} tên cán bộ ${OrganName}` : ``}.\n Vui lòng thử các từ khóa hoặc tên cán bộ khác`\n }\n\n const renderDocumentList = () => {\n\n if (status === \"pending\") return <div className={\"row mb-4 mt-2\"}>\n {Array.from(new Array(ELEMENT_PER_PAGE).keys())\n .map(k => <FolderPending key={k} />)}\n </div>\n\n if (status === \"error\") return (\n <PlaceHolderView>\n <i className={\"fas fa-exclamation fa-3x text-danger\"} />\n <h4 className={\"mt-3\"}>Đã xảy ra lỗi. Vui lòng thử lại</h4>\n <button className={\"btn btn-danger\"} onClick={reloadDocuments}>Thử lại</button>\n </PlaceHolderView>\n )\n\n if (status === \"success\") {\n\n if (documentList.length === 0) return <PlaceHolderView>\n <i className={\"far fa-file-word fa-3x mb-2 text-muted\"} />\n <h4 className={\"text-muted\"}>\n {renderEmptyView()}\n </h4>\n </PlaceHolderView>\n\n return <div className={\"row my-2\"} style={{ height: 'calc(100vh - 325px)', overflow: 'auto' }}>\n {\n (IdDuAn) ? dataDuAnVanBan.length === 0 ? <PlaceHolderView style={{ width: '100%' }}>\n <i className={\"far fa-file-word fa-3x mb-2 text-muted\"} />\n <h4 className={\"text-muted\"}>\n {renderEmptyView()}\n </h4>\n </PlaceHolderView> :\n dataVanBan.filter(f => dataDuAnVanBan.filter(f2 => f2.VanBanId === f.Id && f.Name.includes(odataQuery.filter ? odataQuery.filter.Subject : '')).length).map(renderDocument) :\n documentList.map(renderDocument)\n }\n </div>\n\n }\n\n return null\n }\n\n return <>\n <DocumentExplorerHeader\n disableSearchInput={documentList.length <= 12}\n onBackward={onBackward}\n disableReload={status === \"pending\"}\n isSearched={Subject !== undefined}\n onSearchSubmit={handleSearchSubmit}\n reload={reloadDocuments} />\n\n {renderDocumentList()}\n\n <div className={\"justify-content-center d-flex align-items-center\"}>\n <Pagination\n pageLimit={ELEMENT_PER_PAGE}\n onPageChange={handlePageChange}\n currentPage={currentPage}\n totalElements={odataCount}\n />\n </div>\n <DocumentViewer activeDoc={activeDoc}\n onClose={handleFileViewerClose} />\n </>\n}\n\nexport default React.memo(DocumentExplorer)\n","import React, { useCallback } from \"react\";\nimport useAsync from \"../../hooks/useAsync\";\nimport FolderExplorer from \"./FolderExplorer\";\nimport DocumentExplorer from \"./DocumentExplorer\";\nimport { LoaiVanBansEndpoint } from \"../../service/GDTCores\";\n\nfunction DocumentManagement(props) {\n const { dataDuAnVanBan, IdDuAn } = props;\n\n const [activeFolder, setActiveFolder] = React.useState(undefined)\n\n const loadDocumentTypes = useCallback(() => {\n\n const injectOnClickHandler = ({ value }) => (\n value.map(folder => ({\n ...folder,\n onFolderClick: () => setActiveFolder(folder)\n }))\n )\n\n return LoaiVanBansEndpoint\n .getAllLoaiVanBans()\n .then(injectOnClickHandler)\n\n }, [])\n\n const handleBackward = useCallback(() => {\n setActiveFolder(undefined)\n }, [])\n\n const {\n status: loadFolderStatus,\n execute: reloadFolder,\n value: documentTypes = []\n } = useAsync(loadDocumentTypes)\n\n if (activeFolder) return (\n <DocumentExplorer\n IdDuAn={IdDuAn}\n dataDuAnVanBan={dataDuAnVanBan}\n onBackward={handleBackward}\n activeFolder={activeFolder} />\n )\n\n return (\n <FolderExplorer reload={reloadFolder}\n documentTypes={documentTypes}\n status={loadFolderStatus} />\n )\n}\n\nexport default DocumentManagement\n","import {ModalConfig} from \"../../components/alert/Alert\";\nimport merge from \"lodash.merge\"\n\n\nconst swal = ModalConfig()\n .mixin({\n cancelButtonColor: \"#d33\"\n })\n\nclass SwalCallAPI {\n\n defaultErrorSwal = {\n title: \"Đã xảy ra lỗi!\",\n text: \"Vui lòng thử lại\",\n confirmButtonText: \"Thử lại\",\n cancelButtonText: \"Đóng\",\n icon: \"error\",\n }\n\n defaultSuccessSwal = {\n icon: \"success\",\n showConfirmButton: true,\n showCancelButton: false,\n confirmButtonText: \"Xác nhận\",\n allowOutsideClick: true,\n title: \"Thành công\",\n text: \"\",\n }\n\n handleSuccess = (getSuccessSwal, successCallback) => (res) => {\n\n if (typeof successCallback === \"function\") successCallback(res)\n\n const getSwal = () => {\n if (typeof getSuccessSwal === \"string\") return {title: getSuccessSwal}\n if (typeof getSuccessSwal(res) === \"object\") return getSuccessSwal(res)\n return {title: getSuccessSwal(res)}\n }\n\n const swalOptions = getSuccessSwal !== undefined\n ? merge(this.defaultSuccessSwal, getSwal())\n : this.defaultSuccessSwal\n\n if (!swal.isVisible()) return swal.fire(swalOptions)\n return swal.update(swalOptions)\n\n }\n\n handleError = (options) => (err) => {\n\n const {\n onError: {\n getSwal: getErrorSwal,\n callback: errorCallback,\n } = {}\n } = options\n\n if (typeof errorCallback === \"function\") errorCallback(err)\n\n const getSwal = () => {\n if (typeof getErrorSwal === \"string\") return merge(this.defaultErrorSwal, {title: getErrorSwal})\n if (typeof getErrorSwal === \"function\") return merge(this.defaultErrorSwal, getErrorSwal(err))\n return this.defaultErrorSwal\n }\n\n return swal.fire({\n preConfirm: () => this.didOpen(options, true),\n ...getSwal(),\n })\n\n }\n\n didOpen = (options, isRetry) => {\n\n const {\n confirmSwal,\n pendingSwal,\n callAPIFn,\n onSuccess: {\n getSwal: getSuccessSwal,\n callback: successCallback\n } = {},\n } = options\n\n if (typeof callAPIFn !== \"function\") throw new Error(\"WTF Man\")\n\n const callAPI = () => {\n swal.showLoading()\n callAPIFn()\n .then(this.handleSuccess(getSuccessSwal, successCallback))\n .catch(this.handleError(options))\n .finally(swal.hideLoading)\n }\n\n const defaultPendingSwal = {\n icon: \"info\",\n title: \"Đang xử lý\",\n showConfirmButton: false,\n showCancelButton: false,\n allowOutsideClick: !swal.isLoading,\n didOpen: callAPI,\n }\n\n const getPendingSwal = () => {\n if (pendingSwal === undefined) return defaultPendingSwal\n if (typeof pendingSwal === \"object\") return merge(defaultPendingSwal, pendingSwal)\n if (typeof pendingSwal === \"string\") return merge(defaultPendingSwal, {title: pendingSwal})\n return defaultPendingSwal\n }\n\n const getConfirmSwal = () => {\n if (typeof confirmSwal === \"object\") return confirmSwal\n if (typeof confirmSwal === \"string\") return {title: confirmSwal}\n return {}\n }\n\n const executeRequest = () => swal.fire(getPendingSwal())\n\n const handlePreConfirm = isConfirmed => {\n if (!isConfirmed) return\n return executeRequest()\n }\n\n const defaultConfirmSwal = {\n icon: \"question\",\n confirmButtonText: \"Xác nhận\",\n cancelButtonText: \"Hủy\",\n text: \"Thao tác này không thể hoàn tác!\",\n preConfirm: handlePreConfirm,\n }\n\n if (confirmSwal) {\n if (isRetry) return executeRequest()\n return swal.fire(merge(defaultConfirmSwal, getConfirmSwal()))\n }\n\n return executeRequest()\n }\n}\n\nexport default new SwalCallAPI()\n"],"names":["asyncFunction","immediate","arguments","length","undefined","status","setStatus","useState","value","setValue","error","setError","isMounted","useRef","execute","useCallback","param","then","response","current","catch","useEffect","FullScreenDialog","props","renderCustom","renderButton","children","title","onClose","open","style","className","_jsxs","Dialog","_jsx","HeaderDialog","BodyDialog","DialogContent","backgroundColor","paddingTop","Transition","React","ref","Slide","direction","disableEnforceFocus","fullScreen","TransitionComponent","useStyles","makeStyles","theme","createStyles","appBar","position","toolbar","minHeight","marginLeft","spacing","flex","classes","AppBar","Toolbar","variant","Typography","ButtonClose","onClick","onFolderClick","folder","Name","Id","cursor","string","FolderPending","Skeleton","width","height","PlaceHolderView","_ref","FolderExplorer","_ref2","reload","documentTypes","Array","from","keys","map","k","Folder","LEFT_PAGE","RIGHT_PAGE","range","to","step","i","push","currentPage","totalElements","pageLimit","pageNeighbours","onPageChange","pNeighbours","Math","max","min","totalPages","ceil","gotoPage","page","p","handleMoveLeft","handleMoveRight","fetchPageNumbers","totalNumbers","pages","leftBound","rightBound","beforeLastPage","startPage","endPage","singleSpillOffset","leftSpill","rightSpill","leftSpillPage","rightSpillPage","extraPages","role","index","handleClick","menuItems","label","icon","DocName","styled","h5","renderOrganName","organName","FileMenuDropDown","onOpen","onDownload","onDelete","dropdownProps","isOpen","Dropdown","DropdownToggle","tag","DropdownMenu","DropdownItem","id","handleDropdownItemClick","itemIndex","Document","idTitle","doc","Subject","CreatedDate","dropdownOpen","setDropdownOpen","toggle","prevState","handleOpen","handleDownload","handleDelete","UncontrolledTooltip","placement","target","dateUtils","format","SearchInput","input","DocumentExplorerHeader","onBackward","disableReload","onSearchSubmit","search","setSearch","debouncedSearch","delay","debouncedValue","setDebouncedValue","handler","setTimeout","clearTimeout","useDebounce","name","onChange","placeholder","disabled","PDFViewer","fileUrl","attrs","file","setFile","defaultLayoutInstance","defaultLayoutPlugin","Worker","workerUrl","Viewer","plugins","defaultProps","localization","viVN","MS_OFFICE_VIEWER_URL","supportedDocumentExtensions","DocumentViewer","activeDoc","iframeUrl","setIframeUrl","switchIframeUrl","renderDocViewer","temp","split","extension","includes","join","uri","VanBansEndpoint","getDocUrlByUuid","docSrc","encodeURIComponent","onError","src","frameBorder","_Fragment","rel","href","ELEMENT_PER_PAGE","initialOdataQuery","top","skip","count","filter","paramReducer","str","key","concat","getDocTypeFilter","getNameTypeFilter","div","swal","ModalConfig","onEmptyDoc","callback","fire","confirmButtonText","cancelButtonText","cancelButtonColor","getEmptyDocSwal","isConfirmed","handleEmptyDocSwal","DocumentExplorer","_ref3","activeFolder","dataDuAnVanBan","IdDuAn","odataQuery","setOdataQuery","setActiveDoc","dataVanBan","setDataVanBan","OrganName","getData","getVanBans","res","loadDocuments","getAllVanBans","paramObj","Object","entries","reduce","handlePageChange","handleSearchSubmit","handleFileViewerClose","openDocument","downloadDocument","docName","swalOptions","pendingSwal","callAPIFn","downloadVanBan","onSuccess","getSwal","swalCallAPI","didOpen","useMemo","reloadDocuments","odataCount","documentList","useAsync","renderDocument","_createElement","renderEmptyView","disableSearchInput","isSearched","overflow","f","f2","VanBanId","Pagination","setActiveFolder","loadDocumentTypes","LoaiVanBansEndpoint","getAllLoaiVanBans","handleBackward","loadFolderStatus","reloadFolder","mixin","constructor","defaultErrorSwal","text","defaultSuccessSwal","showConfirmButton","showCancelButton","allowOutsideClick","handleSuccess","getSuccessSwal","successCallback","merge","this","isVisible","update","handleError","options","err","getErrorSwal","errorCallback","preConfirm","isRetry","confirmSwal","Error","defaultPendingSwal","isLoading","callAPI","showLoading","finally","hideLoading","executeRequest","defaultConfirmSwal"],"sourceRoot":""}