????

Your IP : 216.73.216.152


Current Path : C:/inetpub/vhost/xaydung.gdtsolutions.vn/build/static/js/
Upload File :
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":""}