From ae940a92409fedd14e801f665f5fc6ea06d606be Mon Sep 17 00:00:00 2001 From: "gorbenko.pavel" Date: Wed, 29 Jul 2026 15:07:09 +0500 Subject: [PATCH] =?UTF-8?q?=D1=83=D0=B4=D0=B0=D0=BB=D0=B8=D0=BB=20=D1=84?= =?UTF-8?q?=D0=B0=D0=B9=D0=BB=D1=8B=20=D0=BD=D0=B5=20=D0=BD=D1=83=D0=B6?= =?UTF-8?q?=D0=BD=D1=8B=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/.gitignore | 4 + .../inspectionProfiles/Project_Default.xml | 6 - frontend/.idea/vcs.xml | 6 - frontend/jest-output/JUnit.xml | 3 - frontend/jest-output/coverage/base.css | 224 -- .../jest-output/coverage/block-navigation.js | 87 - .../coverage/cobertura/cobertura-coverage.xml | 9 - .../coverage/coverage-summary.json | 2 - frontend/jest-output/coverage/favicon.png | Bin 445 -> 0 bytes frontend/jest-output/coverage/index.html | 101 - frontend/jest-output/coverage/prettify.css | 1 - frontend/jest-output/coverage/prettify.js | 2 - .../coverage/sort-arrow-sprite.png | Bin 138 -> 0 bytes frontend/jest-output/coverage/sorter.js | 210 -- .../styles/design-tokens.scss.css | 38 - .../approvalAdmin/ApprovalAdminWebPart.js | 81 - .../approvalAdmin/ApprovalAdminWebPart.js.map | 1 - .../ApprovalAdminWebPart.manifest.json | 31 - .../approvalAdmin/assets/welcome-dark.png | Bin 12545 -> 0 bytes .../approvalAdmin/assets/welcome-light.png | Bin 12816 -> 0 bytes .../approvalAdmin/components/ApprovalAdmin.js | 64 - .../components/ApprovalAdmin.js.map | 1 - .../components/ApprovalAdmin.module.scss.css | 52 - .../components/IApprovalAdminProps.js | 3 - .../components/IApprovalAdminProps.js.map | 1 - .../approvalAdmin/components/app/AdminApp.js | 38 - .../components/app/AdminApp.js.map | 1 - .../components/app/AdminApp.module.scss.css | 63 - .../approvalAdmin/components/app/TopNav.js | 24 - .../components/app/TopNav.js.map | 1 - .../components/app/TopNav.module.scss.css | 112 - .../approvalAdmin/components/app/types.js | 3 - .../approvalAdmin/components/app/types.js.map | 1 - .../components/screens/DashboardScreen.js | 27 - .../components/screens/DashboardScreen.js.map | 1 - .../components/screens/RequestTypesScreen.js | 106 - .../screens/RequestTypesScreen.js.map | 1 - .../components/screens/ResolveScreen.js | 78 - .../components/screens/ResolveScreen.js.map | 1 - .../components/screens/RouteStepsScreen.js | 214 -- .../screens/RouteStepsScreen.js.map | 1 - .../components/screens/RoutesScreen.js | 187 -- .../components/screens/RoutesScreen.js.map | 1 - .../approvalAdmin/components/ui/Alert.js | 16 - .../approvalAdmin/components/ui/Alert.js.map | 1 - .../components/ui/Alert.module.scss.css | 68 - .../approvalAdmin/components/ui/Badge.js | 17 - .../approvalAdmin/components/ui/Badge.js.map | 1 - .../components/ui/Badge.module.scss.css | 96 - .../approvalAdmin/components/ui/Button.js | 25 - .../approvalAdmin/components/ui/Button.js.map | 1 - .../components/ui/Button.module.scss.css | 144 - .../approvalAdmin/components/ui/Card.js | 37 - .../approvalAdmin/components/ui/Card.js.map | 1 - .../components/ui/Card.module.scss.css | 155 - .../approvalAdmin/components/ui/DataTable.js | 34 - .../components/ui/DataTable.js.map | 1 - .../components/ui/DataTable.module.scss.css | 129 - .../approvalAdmin/components/ui/FormField.js | 49 - .../components/ui/FormField.js.map | 1 - .../components/ui/FormField.module.scss.css | 170 - .../approvalAdmin/components/ui/Icon.js | 28 - .../approvalAdmin/components/ui/Icon.js.map | 1 - .../approvalAdmin/components/ui/Modal.js | 32 - .../approvalAdmin/components/ui/Modal.js.map | 1 - .../components/ui/Modal.module.scss.css | 109 - .../approvalAdmin/components/ui/PageChrome.js | 27 - .../components/ui/PageChrome.js.map | 1 - .../components/ui/PageChrome.module.scss.css | 148 - .../approvalAdmin/components/ui/index.js | 13 - .../approvalAdmin/components/ui/index.js.map | 1 - .../webparts/approvalAdmin/loc/en-us.js | 16 - .../webparts/approvalAdmin/models/index.js | 69 - .../approvalAdmin/models/index.js.map | 1 - .../webparts/approvalAdmin/services/api.js | 78 - .../approvalAdmin/services/api.js.map | 1 - .../approvalAdmin/services/httpClient.js | 172 - .../approvalAdmin/services/httpClient.js.map | 1 - frontend/release/analysis-logs/lint.sarif | 687 ---- .../release/assets/approval-admin-web-part.js | 2819 ----------------- .../assets/approval-admin-web-part.js.map | 1 - .../component-dependency-audit/frontend.json | 237 -- ...-4ff3-479e-917e-f6b04e003a82.manifest.json | 78 - 83 files changed, 4 insertions(+), 7250 deletions(-) delete mode 100644 frontend/.idea/inspectionProfiles/Project_Default.xml delete mode 100644 frontend/.idea/vcs.xml delete mode 100644 frontend/jest-output/JUnit.xml delete mode 100644 frontend/jest-output/coverage/base.css delete mode 100644 frontend/jest-output/coverage/block-navigation.js delete mode 100644 frontend/jest-output/coverage/cobertura/cobertura-coverage.xml delete mode 100644 frontend/jest-output/coverage/coverage-summary.json delete mode 100644 frontend/jest-output/coverage/favicon.png delete mode 100644 frontend/jest-output/coverage/index.html delete mode 100644 frontend/jest-output/coverage/prettify.css delete mode 100644 frontend/jest-output/coverage/prettify.js delete mode 100644 frontend/jest-output/coverage/sort-arrow-sprite.png delete mode 100644 frontend/jest-output/coverage/sorter.js delete mode 100644 frontend/lib-commonjs/styles/design-tokens.scss.css delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/ApprovalAdminWebPart.js delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/ApprovalAdminWebPart.js.map delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/ApprovalAdminWebPart.manifest.json delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/assets/welcome-dark.png delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/assets/welcome-light.png delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/ApprovalAdmin.js delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/ApprovalAdmin.js.map delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/ApprovalAdmin.module.scss.css delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/IApprovalAdminProps.js delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/IApprovalAdminProps.js.map delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/app/AdminApp.js delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/app/AdminApp.js.map delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/app/AdminApp.module.scss.css delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/app/TopNav.js delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/app/TopNav.js.map delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/app/TopNav.module.scss.css delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/app/types.js delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/app/types.js.map delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/screens/DashboardScreen.js delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/screens/DashboardScreen.js.map delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/screens/RequestTypesScreen.js delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/screens/RequestTypesScreen.js.map delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/screens/ResolveScreen.js delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/screens/ResolveScreen.js.map delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/screens/RouteStepsScreen.js delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/screens/RouteStepsScreen.js.map delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/screens/RoutesScreen.js delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/screens/RoutesScreen.js.map delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/ui/Alert.js delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/ui/Alert.js.map delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/ui/Alert.module.scss.css delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/ui/Badge.js delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/ui/Badge.js.map delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/ui/Badge.module.scss.css delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/ui/Button.js delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/ui/Button.js.map delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/ui/Button.module.scss.css delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/ui/Card.js delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/ui/Card.js.map delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/ui/Card.module.scss.css delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/ui/DataTable.js delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/ui/DataTable.js.map delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/ui/DataTable.module.scss.css delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/ui/FormField.js delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/ui/FormField.js.map delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/ui/FormField.module.scss.css delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/ui/Icon.js delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/ui/Icon.js.map delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/ui/Modal.js delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/ui/Modal.js.map delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/ui/Modal.module.scss.css delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/ui/PageChrome.js delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/ui/PageChrome.js.map delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/ui/PageChrome.module.scss.css delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/ui/index.js delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/components/ui/index.js.map delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/loc/en-us.js delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/models/index.js delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/models/index.js.map delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/services/api.js delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/services/api.js.map delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/services/httpClient.js delete mode 100644 frontend/lib-commonjs/webparts/approvalAdmin/services/httpClient.js.map delete mode 100644 frontend/release/analysis-logs/lint.sarif delete mode 100644 frontend/release/assets/approval-admin-web-part.js delete mode 100644 frontend/release/assets/approval-admin-web-part.js.map delete mode 100644 frontend/release/component-dependency-audit/frontend.json delete mode 100644 frontend/release/manifests/4825e72c-4ff3-479e-917e-f6b04e003a82.manifest.json diff --git a/frontend/.gitignore b/frontend/.gitignore index ab5ea70..3b14ac5 100644 --- a/frontend/.gitignore +++ b/frontend/.gitignore @@ -1,7 +1,11 @@ node_modules/ lib/ +lib-commonjs/ dist/ temp/ +release/ +jest-output/ *.sppkg .heft/ sharepoint/solution/ +.idea/ diff --git a/frontend/.idea/inspectionProfiles/Project_Default.xml b/frontend/.idea/inspectionProfiles/Project_Default.xml deleted file mode 100644 index 03d9549..0000000 --- a/frontend/.idea/inspectionProfiles/Project_Default.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/frontend/.idea/vcs.xml b/frontend/.idea/vcs.xml deleted file mode 100644 index 6c0b863..0000000 --- a/frontend/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/frontend/jest-output/JUnit.xml b/frontend/jest-output/JUnit.xml deleted file mode 100644 index 32f5cbc..0000000 --- a/frontend/jest-output/JUnit.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/frontend/jest-output/coverage/base.css b/frontend/jest-output/coverage/base.css deleted file mode 100644 index f418035..0000000 --- a/frontend/jest-output/coverage/base.css +++ /dev/null @@ -1,224 +0,0 @@ -body, html { - margin:0; padding: 0; - height: 100%; -} -body { - font-family: Helvetica Neue, Helvetica, Arial; - font-size: 14px; - color:#333; -} -.small { font-size: 12px; } -*, *:after, *:before { - -webkit-box-sizing:border-box; - -moz-box-sizing:border-box; - box-sizing:border-box; - } -h1 { font-size: 20px; margin: 0;} -h2 { font-size: 14px; } -pre { - font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace; - margin: 0; - padding: 0; - -moz-tab-size: 2; - -o-tab-size: 2; - tab-size: 2; -} -a { color:#0074D9; text-decoration:none; } -a:hover { text-decoration:underline; } -.strong { font-weight: bold; } -.space-top1 { padding: 10px 0 0 0; } -.pad2y { padding: 20px 0; } -.pad1y { padding: 10px 0; } -.pad2x { padding: 0 20px; } -.pad2 { padding: 20px; } -.pad1 { padding: 10px; } -.space-left2 { padding-left:55px; } -.space-right2 { padding-right:20px; } -.center { text-align:center; } -.clearfix { display:block; } -.clearfix:after { - content:''; - display:block; - height:0; - clear:both; - visibility:hidden; - } -.fl { float: left; } -@media only screen and (max-width:640px) { - .col3 { width:100%; max-width:100%; } - .hide-mobile { display:none!important; } -} - -.quiet { - color: #7f7f7f; - color: rgba(0,0,0,0.5); -} -.quiet a { opacity: 0.7; } - -.fraction { - font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; - font-size: 10px; - color: #555; - background: #E8E8E8; - padding: 4px 5px; - border-radius: 3px; - vertical-align: middle; -} - -div.path a:link, div.path a:visited { color: #333; } -table.coverage { - border-collapse: collapse; - margin: 10px 0 0 0; - padding: 0; -} - -table.coverage td { - margin: 0; - padding: 0; - vertical-align: top; -} -table.coverage td.line-count { - text-align: right; - padding: 0 5px 0 20px; -} -table.coverage td.line-coverage { - text-align: right; - padding-right: 10px; - min-width:20px; -} - -table.coverage td span.cline-any { - display: inline-block; - padding: 0 5px; - width: 100%; -} -.missing-if-branch { - display: inline-block; - margin-right: 5px; - border-radius: 3px; - position: relative; - padding: 0 4px; - background: #333; - color: yellow; -} - -.skip-if-branch { - display: none; - margin-right: 10px; - position: relative; - padding: 0 4px; - background: #ccc; - color: white; -} -.missing-if-branch .typ, .skip-if-branch .typ { - color: inherit !important; -} -.coverage-summary { - border-collapse: collapse; - width: 100%; -} -.coverage-summary tr { border-bottom: 1px solid #bbb; } -.keyline-all { border: 1px solid #ddd; } -.coverage-summary td, .coverage-summary th { padding: 10px; } -.coverage-summary tbody { border: 1px solid #bbb; } -.coverage-summary td { border-right: 1px solid #bbb; } -.coverage-summary td:last-child { border-right: none; } -.coverage-summary th { - text-align: left; - font-weight: normal; - white-space: nowrap; -} -.coverage-summary th.file { border-right: none !important; } -.coverage-summary th.pct { } -.coverage-summary th.pic, -.coverage-summary th.abs, -.coverage-summary td.pct, -.coverage-summary td.abs { text-align: right; } -.coverage-summary td.file { white-space: nowrap; } -.coverage-summary td.pic { min-width: 120px !important; } -.coverage-summary tfoot td { } - -.coverage-summary .sorter { - height: 10px; - width: 7px; - display: inline-block; - margin-left: 0.5em; - background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; -} -.coverage-summary .sorted .sorter { - background-position: 0 -20px; -} -.coverage-summary .sorted-desc .sorter { - background-position: 0 -10px; -} -.status-line { height: 10px; } -/* yellow */ -.cbranch-no { background: yellow !important; color: #111; } -/* dark red */ -.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 } -.low .chart { border:1px solid #C21F39 } -.highlighted, -.highlighted .cstat-no, .highlighted .fstat-no, .highlighted .cbranch-no{ - background: #C21F39 !important; -} -/* medium red */ -.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE } -/* light red */ -.low, .cline-no { background:#FCE1E5 } -/* light green */ -.high, .cline-yes { background:rgb(230,245,208) } -/* medium green */ -.cstat-yes { background:rgb(161,215,106) } -/* dark green */ -.status-line.high, .high .cover-fill { background:rgb(77,146,33) } -.high .chart { border:1px solid rgb(77,146,33) } -/* dark yellow (gold) */ -.status-line.medium, .medium .cover-fill { background: #f9cd0b; } -.medium .chart { border:1px solid #f9cd0b; } -/* light yellow */ -.medium { background: #fff4c2; } - -.cstat-skip { background: #ddd; color: #111; } -.fstat-skip { background: #ddd; color: #111 !important; } -.cbranch-skip { background: #ddd !important; color: #111; } - -span.cline-neutral { background: #eaeaea; } - -.coverage-summary td.empty { - opacity: .5; - padding-top: 4px; - padding-bottom: 4px; - line-height: 1; - color: #888; -} - -.cover-fill, .cover-empty { - display:inline-block; - height: 12px; -} -.chart { - line-height: 0; -} -.cover-empty { - background: white; -} -.cover-full { - border-right: none !important; -} -pre.prettyprint { - border: none !important; - padding: 0 !important; - margin: 0 !important; -} -.com { color: #999 !important; } -.ignore-none { color: #999; font-weight: normal; } - -.wrapper { - min-height: 100%; - height: auto !important; - height: 100%; - margin: 0 auto -48px; -} -.footer, .push { - height: 48px; -} diff --git a/frontend/jest-output/coverage/block-navigation.js b/frontend/jest-output/coverage/block-navigation.js deleted file mode 100644 index 530d1ed..0000000 --- a/frontend/jest-output/coverage/block-navigation.js +++ /dev/null @@ -1,87 +0,0 @@ -/* eslint-disable */ -var jumpToCode = (function init() { - // Classes of code we would like to highlight in the file view - var missingCoverageClasses = ['.cbranch-no', '.cstat-no', '.fstat-no']; - - // Elements to highlight in the file listing view - var fileListingElements = ['td.pct.low']; - - // We don't want to select elements that are direct descendants of another match - var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > ` - - // Selector that finds elements on the page to which we can jump - var selector = - fileListingElements.join(', ') + - ', ' + - notSelector + - missingCoverageClasses.join(', ' + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b` - - // The NodeList of matching elements - var missingCoverageElements = document.querySelectorAll(selector); - - var currentIndex; - - function toggleClass(index) { - missingCoverageElements - .item(currentIndex) - .classList.remove('highlighted'); - missingCoverageElements.item(index).classList.add('highlighted'); - } - - function makeCurrent(index) { - toggleClass(index); - currentIndex = index; - missingCoverageElements.item(index).scrollIntoView({ - behavior: 'smooth', - block: 'center', - inline: 'center' - }); - } - - function goToPrevious() { - var nextIndex = 0; - if (typeof currentIndex !== 'number' || currentIndex === 0) { - nextIndex = missingCoverageElements.length - 1; - } else if (missingCoverageElements.length > 1) { - nextIndex = currentIndex - 1; - } - - makeCurrent(nextIndex); - } - - function goToNext() { - var nextIndex = 0; - - if ( - typeof currentIndex === 'number' && - currentIndex < missingCoverageElements.length - 1 - ) { - nextIndex = currentIndex + 1; - } - - makeCurrent(nextIndex); - } - - return function jump(event) { - if ( - document.getElementById('fileSearch') === document.activeElement && - document.activeElement != null - ) { - // if we're currently focused on the search input, we don't want to navigate - return; - } - - switch (event.which) { - case 78: // n - case 74: // j - goToNext(); - break; - case 66: // b - case 75: // k - case 80: // p - goToPrevious(); - break; - } - }; -})(); -window.addEventListener('keydown', jumpToCode); diff --git a/frontend/jest-output/coverage/cobertura/cobertura-coverage.xml b/frontend/jest-output/coverage/cobertura/cobertura-coverage.xml deleted file mode 100644 index 3852de9..0000000 --- a/frontend/jest-output/coverage/cobertura/cobertura-coverage.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - C:\work\git\tnsu-approval-route\frontend - - - - diff --git a/frontend/jest-output/coverage/coverage-summary.json b/frontend/jest-output/coverage/coverage-summary.json deleted file mode 100644 index ef1ae37..0000000 --- a/frontend/jest-output/coverage/coverage-summary.json +++ /dev/null @@ -1,2 +0,0 @@ -{"total": {"lines":{"total":0,"covered":0,"skipped":0,"pct":"Unknown"},"statements":{"total":0,"covered":0,"skipped":0,"pct":"Unknown"},"functions":{"total":0,"covered":0,"skipped":0,"pct":"Unknown"},"branches":{"total":0,"covered":0,"skipped":0,"pct":"Unknown"},"branchesTrue":{"total":0,"covered":0,"skipped":0,"pct":"Unknown"}} -} diff --git a/frontend/jest-output/coverage/favicon.png b/frontend/jest-output/coverage/favicon.png deleted file mode 100644 index c1525b811a167671e9de1fa78aab9f5c0b61cef7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 445 zcmV;u0Yd(XP))rP{nL}Ln%S7`m{0DjX9TLF* zFCb$4Oi7vyLOydb!7n&^ItCzb-%BoB`=x@N2jll2Nj`kauio%aw_@fe&*}LqlFT43 z8doAAe))z_%=P%v^@JHp3Hjhj^6*Kr_h|g_Gr?ZAa&y>wxHE99Gk>A)2MplWz2xdG zy8VD2J|Uf#EAw*bo5O*PO_}X2Tob{%bUoO2G~T`@%S6qPyc}VkhV}UifBuRk>%5v( z)x7B{I~z*k<7dv#5tC+m{km(D087J4O%+<<;K|qwefb6@GSX45wCK}Sn*> - - - - Code coverage report for All files - - - - - - - - - -
-
-

All files

-
- -
- Unknown% - Statements - 0/0 -
- - -
- Unknown% - Branches - 0/0 -
- - -
- Unknown% - Functions - 0/0 -
- - -
- Unknown% - Lines - 0/0 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/frontend/jest-output/coverage/prettify.css b/frontend/jest-output/coverage/prettify.css deleted file mode 100644 index b317a7c..0000000 --- a/frontend/jest-output/coverage/prettify.css +++ /dev/null @@ -1 +0,0 @@ -.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/frontend/jest-output/coverage/prettify.js b/frontend/jest-output/coverage/prettify.js deleted file mode 100644 index b322523..0000000 --- a/frontend/jest-output/coverage/prettify.js +++ /dev/null @@ -1,2 +0,0 @@ -/* eslint-disable */ -window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/frontend/jest-output/coverage/sort-arrow-sprite.png b/frontend/jest-output/coverage/sort-arrow-sprite.png deleted file mode 100644 index 6ed68316eb3f65dec9063332d2f69bf3093bbfab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^>_9Bd!3HEZxJ@+%Qh}Z>jv*C{$p!i!8j}?a+@3A= zIAGwzjijN=FBi!|L1t?LM;Q;gkwn>2cAy-KV{dn nf0J1DIvEHQu*n~6U}x}qyky7vi4|9XhBJ7&`njxgN@xNA8m%nc diff --git a/frontend/jest-output/coverage/sorter.js b/frontend/jest-output/coverage/sorter.js deleted file mode 100644 index 4ed70ae..0000000 --- a/frontend/jest-output/coverage/sorter.js +++ /dev/null @@ -1,210 +0,0 @@ -/* eslint-disable */ -var addSorting = (function() { - 'use strict'; - var cols, - currentSort = { - index: 0, - desc: false - }; - - // returns the summary table element - function getTable() { - return document.querySelector('.coverage-summary'); - } - // returns the thead element of the summary table - function getTableHeader() { - return getTable().querySelector('thead tr'); - } - // returns the tbody element of the summary table - function getTableBody() { - return getTable().querySelector('tbody'); - } - // returns the th element for nth column - function getNthColumn(n) { - return getTableHeader().querySelectorAll('th')[n]; - } - - function onFilterInput() { - const searchValue = document.getElementById('fileSearch').value; - const rows = document.getElementsByTagName('tbody')[0].children; - - // Try to create a RegExp from the searchValue. If it fails (invalid regex), - // it will be treated as a plain text search - let searchRegex; - try { - searchRegex = new RegExp(searchValue, 'i'); // 'i' for case-insensitive - } catch (error) { - searchRegex = null; - } - - for (let i = 0; i < rows.length; i++) { - const row = rows[i]; - let isMatch = false; - - if (searchRegex) { - // If a valid regex was created, use it for matching - isMatch = searchRegex.test(row.textContent); - } else { - // Otherwise, fall back to the original plain text search - isMatch = row.textContent - .toLowerCase() - .includes(searchValue.toLowerCase()); - } - - row.style.display = isMatch ? '' : 'none'; - } - } - - // loads the search box - function addSearchBox() { - var template = document.getElementById('filterTemplate'); - var templateClone = template.content.cloneNode(true); - templateClone.getElementById('fileSearch').oninput = onFilterInput; - template.parentElement.appendChild(templateClone); - } - - // loads all columns - function loadColumns() { - var colNodes = getTableHeader().querySelectorAll('th'), - colNode, - cols = [], - col, - i; - - for (i = 0; i < colNodes.length; i += 1) { - colNode = colNodes[i]; - col = { - key: colNode.getAttribute('data-col'), - sortable: !colNode.getAttribute('data-nosort'), - type: colNode.getAttribute('data-type') || 'string' - }; - cols.push(col); - if (col.sortable) { - col.defaultDescSort = col.type === 'number'; - colNode.innerHTML = - colNode.innerHTML + ''; - } - } - return cols; - } - // attaches a data attribute to every tr element with an object - // of data values keyed by column name - function loadRowData(tableRow) { - var tableCols = tableRow.querySelectorAll('td'), - colNode, - col, - data = {}, - i, - val; - for (i = 0; i < tableCols.length; i += 1) { - colNode = tableCols[i]; - col = cols[i]; - val = colNode.getAttribute('data-value'); - if (col.type === 'number') { - val = Number(val); - } - data[col.key] = val; - } - return data; - } - // loads all row data - function loadData() { - var rows = getTableBody().querySelectorAll('tr'), - i; - - for (i = 0; i < rows.length; i += 1) { - rows[i].data = loadRowData(rows[i]); - } - } - // sorts the table using the data for the ith column - function sortByIndex(index, desc) { - var key = cols[index].key, - sorter = function(a, b) { - a = a.data[key]; - b = b.data[key]; - return a < b ? -1 : a > b ? 1 : 0; - }, - finalSorter = sorter, - tableBody = document.querySelector('.coverage-summary tbody'), - rowNodes = tableBody.querySelectorAll('tr'), - rows = [], - i; - - if (desc) { - finalSorter = function(a, b) { - return -1 * sorter(a, b); - }; - } - - for (i = 0; i < rowNodes.length; i += 1) { - rows.push(rowNodes[i]); - tableBody.removeChild(rowNodes[i]); - } - - rows.sort(finalSorter); - - for (i = 0; i < rows.length; i += 1) { - tableBody.appendChild(rows[i]); - } - } - // removes sort indicators for current column being sorted - function removeSortIndicators() { - var col = getNthColumn(currentSort.index), - cls = col.className; - - cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); - col.className = cls; - } - // adds sort indicators for current column being sorted - function addSortIndicators() { - getNthColumn(currentSort.index).className += currentSort.desc - ? ' sorted-desc' - : ' sorted'; - } - // adds event listeners for all sorter widgets - function enableUI() { - var i, - el, - ithSorter = function ithSorter(i) { - var col = cols[i]; - - return function() { - var desc = col.defaultDescSort; - - if (currentSort.index === i) { - desc = !currentSort.desc; - } - sortByIndex(i, desc); - removeSortIndicators(); - currentSort.index = i; - currentSort.desc = desc; - addSortIndicators(); - }; - }; - for (i = 0; i < cols.length; i += 1) { - if (cols[i].sortable) { - // add the click event handler on the th so users - // dont have to click on those tiny arrows - el = getNthColumn(i).querySelector('.sorter').parentElement; - if (el.addEventListener) { - el.addEventListener('click', ithSorter(i)); - } else { - el.attachEvent('onclick', ithSorter(i)); - } - } - } - } - // adds sorting functionality to the UI - return function() { - if (!getTable()) { - return; - } - cols = loadColumns(); - loadData(); - addSearchBox(); - addSortIndicators(); - enableUI(); - }; -})(); - -window.addEventListener('load', addSorting); diff --git a/frontend/lib-commonjs/styles/design-tokens.scss.css b/frontend/lib-commonjs/styles/design-tokens.scss.css deleted file mode 100644 index e3a1f11..0000000 --- a/frontend/lib-commonjs/styles/design-tokens.scss.css +++ /dev/null @@ -1,38 +0,0 @@ -:root { - --navy-950: #0A1B30; - --navy-900: #0F2440; - --navy-800: #1B3A5C; - --navy-700: #244B73; - --navy-600: #2D5C8A; - --navy-100: #E8EEF4; - --navy-50: #F4F7FA; - --gold-600: #B8881A; - --gold-500: #D4A01E; - --gold-400: #E5B635; - --gold-300: #F0CC5E; - --gold-100: #FDF5E0; - --gold-50: #FEFBF0; - --gray-900: #111827; - --gray-700: #374151; - --gray-500: #6B7280; - --gray-400: #9CA3AF; - --gray-300: #D1D5DB; - --gray-200: #E5E7EB; - --gray-100: #F3F4F6; - --gray-50: #F9FAFB; - --red-500: #DC2626; - --red-50: #FEF2F2; - --green-600: #15803D; - --green-50: #F0FDF4; - --blue-600: #2563EB; - --blue-50: #EFF6FF; - --amber-700: #854D0E; - --sh-1: 0 1px 2px rgba(15, 36, 64, 0.04), 0 1px 3px rgba(15, 36, 64, 0.06); - --sh-2: 0 4px 16px rgba(15, 36, 64, 0.07); - --sh-3: 0 12px 32px rgba(15, 36, 64, 0.1); - --sh-gold: 0 4px 20px rgba(212, 160, 30, 0.18); - --sh-modal: 0 24px 70px rgba(10, 27, 48, 0.25); - --r-sm: 6px; - --r-md: 10px; - --r-lg: 14px; -} \ No newline at end of file diff --git a/frontend/lib-commonjs/webparts/approvalAdmin/ApprovalAdminWebPart.js b/frontend/lib-commonjs/webparts/approvalAdmin/ApprovalAdminWebPart.js deleted file mode 100644 index 89b3d39..0000000 --- a/frontend/lib-commonjs/webparts/approvalAdmin/ApprovalAdminWebPart.js +++ /dev/null @@ -1,81 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var React = tslib_1.__importStar(require("react")); -var ReactDom = tslib_1.__importStar(require("react-dom")); -var sp_core_library_1 = require("@microsoft/sp-core-library"); -var sp_property_pane_1 = require("@microsoft/sp-property-pane"); -var sp_webpart_base_1 = require("@microsoft/sp-webpart-base"); -var ApprovalAdmin_1 = tslib_1.__importDefault(require("./components/ApprovalAdmin")); -var ApprovalAdminWebPart = /** @class */ (function (_super) { - tslib_1.__extends(ApprovalAdminWebPart, _super); - function ApprovalAdminWebPart() { - return _super !== null && _super.apply(this, arguments) || this; - } - ApprovalAdminWebPart.prototype.render = function () { - var element = React.createElement(ApprovalAdmin_1.default, { - context: this.context, - apiBaseUrl: this.properties.apiBaseUrl, - useDevAuth: this.properties.useDevAuth, - devUserEmail: this.properties.devUserEmail, - aadResourceId: this.properties.aadResourceId - }); - ReactDom.render(element, this.domElement); - }; - ApprovalAdminWebPart.prototype.onInit = function () { - var _a; - this.properties.apiBaseUrl = this.properties.apiBaseUrl || 'http://localhost:5080'; - this.properties.useDevAuth = (_a = this.properties.useDevAuth) !== null && _a !== void 0 ? _a : true; - this.properties.devUserEmail = this.properties.devUserEmail || 'dev@tnsu.kz'; - this.properties.aadResourceId = this.properties.aadResourceId || 'api://9232d9e2-9807-4753-808f-07250e5474b0'; - return Promise.resolve(); - }; - ApprovalAdminWebPart.prototype.onDispose = function () { - ReactDom.unmountComponentAtNode(this.domElement); - }; - Object.defineProperty(ApprovalAdminWebPart.prototype, "dataVersion", { - get: function () { - return sp_core_library_1.Version.parse('1.0'); - }, - enumerable: false, - configurable: true - }); - ApprovalAdminWebPart.prototype.getPropertyPaneConfiguration = function () { - return { - pages: [ - { - header: { - description: 'Подключение к Tnsu.ApprovalRoute.Api' - }, - groups: [ - { - groupName: 'API', - groupFields: [ - (0, sp_property_pane_1.PropertyPaneTextField)('apiBaseUrl', { - label: 'Api Base Url', - description: 'Например, https://localhost:5443 локально или прод-адрес API.' - }), - (0, sp_property_pane_1.PropertyPaneToggle)('useDevAuth', { - label: 'Локальный Dev-режим (без Azure AD)', - onText: 'Вкл. (заголовок X-Dev-User-Email)', - offText: 'Выкл. (AAD-токен через SPFx)' - }), - (0, sp_property_pane_1.PropertyPaneTextField)('devUserEmail', { - label: 'Dev: email пользователя', - description: 'Используется только при включённом Dev-режиме.' - }), - (0, sp_property_pane_1.PropertyPaneTextField)('aadResourceId', { - label: 'AAD Resource Id (App ID URI)', - description: 'Используется только при выключенном Dev-режиме. Должен совпадать с webApiPermissionRequests в package-solution.json.' - }) - ] - } - ] - } - ] - }; - }; - return ApprovalAdminWebPart; -}(sp_webpart_base_1.BaseClientSideWebPart)); -exports.default = ApprovalAdminWebPart; -//# sourceMappingURL=ApprovalAdminWebPart.js.map \ No newline at end of file diff --git a/frontend/lib-commonjs/webparts/approvalAdmin/ApprovalAdminWebPart.js.map b/frontend/lib-commonjs/webparts/approvalAdmin/ApprovalAdminWebPart.js.map deleted file mode 100644 index 0643ae9..0000000 --- a/frontend/lib-commonjs/webparts/approvalAdmin/ApprovalAdminWebPart.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ApprovalAdminWebPart.js","sourceRoot":"","sources":["../../../src/webparts/approvalAdmin/ApprovalAdminWebPart.ts"],"names":[],"mappings":";;;AAAA,mDAA+B;AAC/B,0DAAsC;AACtC,8DAAqD;AACrD,gEAIqC;AACrC,8DAAmE;AAEnE,qFAAuD;AAUvD;IAAkD,gDAAiD;IAAnG;;IAiEA,CAAC;IA/DQ,qCAAM,GAAb;QACE,IAAM,OAAO,GAA4C,KAAK,CAAC,aAAa,CAAC,uBAAa,EAAE;YAC1F,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU;YACtC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU;YACtC,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,YAAY;YAC1C,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa;SAC7C,CAAC,CAAC;QAEH,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC;IAES,qCAAM,GAAhB;;QACE,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,IAAI,uBAAuB,CAAC;QACnF,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,MAAA,IAAI,CAAC,UAAU,CAAC,UAAU,mCAAI,IAAI,CAAC;QAChE,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,IAAI,aAAa,CAAC;QAC7E,IAAI,CAAC,UAAU,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,IAAI,4CAA4C,CAAC;QAC9G,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAES,wCAAS,GAAnB;QACE,QAAQ,CAAC,sBAAsB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACnD,CAAC;IAED,sBAAc,6CAAW;aAAzB;YACE,OAAO,yBAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;;;OAAA;IAES,2DAA4B,GAAtC;QACE,OAAO;YACL,KAAK,EAAE;gBACL;oBACE,MAAM,EAAE;wBACN,WAAW,EAAE,sCAAsC;qBACpD;oBACD,MAAM,EAAE;wBACN;4BACE,SAAS,EAAE,KAAK;4BAChB,WAAW,EAAE;gCACX,IAAA,wCAAqB,EAAC,YAAY,EAAE;oCAClC,KAAK,EAAE,cAAc;oCACrB,WAAW,EAAE,+DAA+D;iCAC7E,CAAC;gCACF,IAAA,qCAAkB,EAAC,YAAY,EAAE;oCAC/B,KAAK,EAAE,oCAAoC;oCAC3C,MAAM,EAAE,mCAAmC;oCAC3C,OAAO,EAAE,8BAA8B;iCACxC,CAAC;gCACF,IAAA,wCAAqB,EAAC,cAAc,EAAE;oCACpC,KAAK,EAAE,yBAAyB;oCAChC,WAAW,EAAE,gDAAgD;iCAC9D,CAAC;gCACF,IAAA,wCAAqB,EAAC,eAAe,EAAE;oCACrC,KAAK,EAAE,8BAA8B;oCACrC,WAAW,EAAE,sHAAsH;iCACpI,CAAC;6BACH;yBACF;qBACF;iBACF;aACF;SACF,CAAC;IACJ,CAAC;IACH,2BAAC;AAAD,CAAC,AAjED,CAAkD,uCAAqB,GAiEtE","sourcesContent":["import * as React from 'react';\nimport * as ReactDom from 'react-dom';\nimport { Version } from '@microsoft/sp-core-library';\nimport {\n type IPropertyPaneConfiguration,\n PropertyPaneTextField,\n PropertyPaneToggle\n} from '@microsoft/sp-property-pane';\nimport { BaseClientSideWebPart } from '@microsoft/sp-webpart-base';\n\nimport ApprovalAdmin from './components/ApprovalAdmin';\nimport { IApprovalAdminProps } from './components/IApprovalAdminProps';\n\nexport interface IApprovalAdminWebPartProps {\n apiBaseUrl: string;\n useDevAuth: boolean;\n devUserEmail: string;\n aadResourceId: string;\n}\n\nexport default class ApprovalAdminWebPart extends BaseClientSideWebPart {\n\n public render(): void {\n const element: React.ReactElement = React.createElement(ApprovalAdmin, {\n context: this.context,\n apiBaseUrl: this.properties.apiBaseUrl,\n useDevAuth: this.properties.useDevAuth,\n devUserEmail: this.properties.devUserEmail,\n aadResourceId: this.properties.aadResourceId\n });\n\n ReactDom.render(element, this.domElement);\n }\n\n protected onInit(): Promise {\n this.properties.apiBaseUrl = this.properties.apiBaseUrl || 'http://localhost:5080';\n this.properties.useDevAuth = this.properties.useDevAuth ?? true;\n this.properties.devUserEmail = this.properties.devUserEmail || 'dev@tnsu.kz';\n this.properties.aadResourceId = this.properties.aadResourceId || 'api://9232d9e2-9807-4753-808f-07250e5474b0';\n return Promise.resolve();\n }\n\n protected onDispose(): void {\n ReactDom.unmountComponentAtNode(this.domElement);\n }\n\n protected get dataVersion(): Version {\n return Version.parse('1.0');\n }\n\n protected getPropertyPaneConfiguration(): IPropertyPaneConfiguration {\n return {\n pages: [\n {\n header: {\n description: 'Подключение к Tnsu.ApprovalRoute.Api'\n },\n groups: [\n {\n groupName: 'API',\n groupFields: [\n PropertyPaneTextField('apiBaseUrl', {\n label: 'Api Base Url',\n description: 'Например, https://localhost:5443 локально или прод-адрес API.'\n }),\n PropertyPaneToggle('useDevAuth', {\n label: 'Локальный Dev-режим (без Azure AD)',\n onText: 'Вкл. (заголовок X-Dev-User-Email)',\n offText: 'Выкл. (AAD-токен через SPFx)'\n }),\n PropertyPaneTextField('devUserEmail', {\n label: 'Dev: email пользователя',\n description: 'Используется только при включённом Dev-режиме.'\n }),\n PropertyPaneTextField('aadResourceId', {\n label: 'AAD Resource Id (App ID URI)',\n description: 'Используется только при выключенном Dev-режиме. Должен совпадать с webApiPermissionRequests в package-solution.json.'\n })\n ]\n }\n ]\n }\n ]\n };\n }\n}\n"]} \ No newline at end of file diff --git a/frontend/lib-commonjs/webparts/approvalAdmin/ApprovalAdminWebPart.manifest.json b/frontend/lib-commonjs/webparts/approvalAdmin/ApprovalAdminWebPart.manifest.json deleted file mode 100644 index 220b411..0000000 --- a/frontend/lib-commonjs/webparts/approvalAdmin/ApprovalAdminWebPart.manifest.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "$schema": "https://developer.microsoft.com/json-schemas/spfx/client-side-web-part-manifest.schema.json", - "id": "4825e72c-4ff3-479e-917e-f6b04e003a82", - "alias": "ApprovalAdminWebPart", - "componentType": "WebPart", - - // The "*" signifies that the version should be taken from the package.json - "version": "*", - "manifestVersion": 2, - - // If true, the component can only be installed on sites where Custom Script is allowed. - // Components that allow authors to embed arbitrary script code should set this to true. - // https://support.office.com/en-us/article/Turn-scripting-capabilities-on-or-off-1f2c515f-5d7e-448a-9fd7-835da935584f - "requiresCustomScript": false, - "supportedHosts": ["SharePointWebPart", "TeamsPersonalApp", "TeamsTab", "SharePointFullPage"], - "supportsThemeVariants": true, - - "preconfiguredEntries": [{ - "groupId": "5c03119e-3074-46fd-976b-c60198311f70", // Advanced - "group": { "default": "Advanced" }, - "title": { "default": "approval-admin" }, - "description": { "default": "approval-admin description" }, - "officeFabricIconFontName": "Page", - "properties": { - "apiBaseUrl": "http://localhost:5080", - "useDevAuth": true, - "devUserEmail": "dev@tnsu.kz", - "aadResourceId": "api://9232d9e2-9807-4753-808f-07250e5474b0" - } - }] -} diff --git a/frontend/lib-commonjs/webparts/approvalAdmin/assets/welcome-dark.png b/frontend/lib-commonjs/webparts/approvalAdmin/assets/welcome-dark.png deleted file mode 100644 index 42f0b8d24a9aa964a2be4885fe5700c1c54191a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12545 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�Gp~kbx)oU28ew4C2+WtKA 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 G`2PSf1J4)$ diff --git a/frontend/lib-commonjs/webparts/approvalAdmin/assets/welcome-light.png b/frontend/lib-commonjs/webparts/approvalAdmin/assets/welcome-light.png deleted file mode 100644 index 69eb3b48cd83031f106df4b4df127c749657e319..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12816 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 diff --git a/frontend/lib-commonjs/webparts/approvalAdmin/components/ApprovalAdmin.js b/frontend/lib-commonjs/webparts/approvalAdmin/components/ApprovalAdmin.js deleted file mode 100644 index 724d128..0000000 --- a/frontend/lib-commonjs/webparts/approvalAdmin/components/ApprovalAdmin.js +++ /dev/null @@ -1,64 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var React = tslib_1.__importStar(require("react")); -var ApprovalAdmin_module_scss_1 = tslib_1.__importDefault(require("./ApprovalAdmin.module.scss")); -var AdminApp_1 = require("./app/AdminApp"); -var api_1 = require("../services/api"); -var httpClient_1 = require("../services/httpClient"); -var FONTS_LINK_ID = 'tnsu-approval-admin-fonts'; -function ensureFontsLoaded() { - if (typeof document === 'undefined' || document.getElementById(FONTS_LINK_ID)) - return; - var link = document.createElement('link'); - link.id = FONTS_LINK_ID; - link.rel = 'stylesheet'; - link.href = 'https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Lora:wght@500;600;700&display=swap'; - document.head.appendChild(link); -} -function createHttpClient(props) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var aadClient; - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: - if (props.useDevAuth) { - return [2 /*return*/, new httpClient_1.DevApiHttpClient(props.apiBaseUrl, props.devUserEmail || 'dev@tnsu.kz')]; - } - return [4 /*yield*/, props.context.aadHttpClientFactory.getClient(props.aadResourceId)]; - case 1: - aadClient = _a.sent(); - return [2 /*return*/, new httpClient_1.AadApiHttpClient(aadClient, props.apiBaseUrl)]; - } - }); - }); -} -var ApprovalAdmin = function (props) { - var _a = React.useState(), api = _a[0], setApi = _a[1]; - var _b = React.useState(), error = _b[0], setError = _b[1]; - React.useEffect(function () { - ensureFontsLoaded(); - }, []); - React.useEffect(function () { - var cancelled = false; - setApi(undefined); - setError(undefined); - createHttpClient(props) - .then(function (client) { if (!cancelled) - setApi(new api_1.ApprovalRouteApi(client)); }) - .catch(function (e) { if (!cancelled) - setError(e.message); }); - return function () { cancelled = true; }; - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [props.useDevAuth, props.apiBaseUrl, props.devUserEmail, props.aadResourceId]); - return (React.createElement("section", { className: ApprovalAdmin_module_scss_1.default.approvalAdmin }, - error && (React.createElement("div", { className: ApprovalAdmin_module_scss_1.default.stateBox }, - "\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u044C\u0441\u044F \u043A API: ", - error, - React.createElement("br", null), - "\u041F\u0440\u043E\u0432\u0435\u0440\u044C\u0442\u0435 \u0441\u0432\u043E\u0439\u0441\u0442\u0432\u0430 \u0432\u0435\u0431-\u0447\u0430\u0441\u0442\u0438 (Api Base Url, \u0440\u0435\u0436\u0438\u043C \u0430\u0432\u0442\u043E\u0440\u0438\u0437\u0430\u0446\u0438\u0438) \u0432 \u043F\u0430\u043D\u0435\u043B\u0438 \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043A.")), - !error && !api && React.createElement("div", { className: ApprovalAdmin_module_scss_1.default.stateBox }, "\u041F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435 \u043A API..."), - api && React.createElement(AdminApp_1.AdminApp, { api: api, currentUserEmail: props.context.pageContext.user.email }))); -}; -exports.default = ApprovalAdmin; -//# sourceMappingURL=ApprovalAdmin.js.map \ No newline at end of file diff --git a/frontend/lib-commonjs/webparts/approvalAdmin/components/ApprovalAdmin.js.map b/frontend/lib-commonjs/webparts/approvalAdmin/components/ApprovalAdmin.js.map deleted file mode 100644 index 4fa7410..0000000 --- a/frontend/lib-commonjs/webparts/approvalAdmin/components/ApprovalAdmin.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ApprovalAdmin.js","sourceRoot":"","sources":["../../../../src/webparts/approvalAdmin/components/ApprovalAdmin.tsx"],"names":[],"mappings":";;;AAAA,mDAA+B;AAC/B,kGAAiD;AAEjD,2CAA0C;AAC1C,uCAAmD;AACnD,qDAAyF;AAEzF,IAAM,aAAa,GAAG,2BAA2B,CAAC;AAElD,SAAS,iBAAiB;IACxB,IAAI,OAAO,QAAQ,KAAK,WAAW,IAAI,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC;QAAE,OAAO;IACtF,IAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,CAAC,EAAE,GAAG,aAAa,CAAC;IACxB,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC;IACxB,IAAI,CAAC,IAAI,GAAG,+GAA+G,CAAC;IAC5H,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC;AAED,SAAe,gBAAgB,CAAC,KAA0B;;;;;;oBACxD,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;wBACrB,sBAAO,IAAI,6BAAgB,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,YAAY,IAAI,aAAa,CAAC,EAAC;oBACrF,CAAC;oBACiB,qBAAM,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,EAAA;;oBAAnF,SAAS,GAAG,SAAuE;oBACzF,sBAAO,IAAI,6BAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC,EAAC;;;;CAC1D;AAED,IAAM,aAAa,GAAkC,UAAA,KAAK;IAClD,IAAA,KAAgB,KAAK,CAAC,QAAQ,EAAgC,EAA7D,GAAG,QAAA,EAAE,MAAM,QAAkD,CAAC;IAC/D,IAAA,KAAoB,KAAK,CAAC,QAAQ,EAAsB,EAAvD,KAAK,QAAA,EAAE,QAAQ,QAAwC,CAAC;IAE/D,KAAK,CAAC,SAAS,CAAC;QACd,iBAAiB,EAAE,CAAC;IACtB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,KAAK,CAAC,SAAS,CAAC;QACd,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,MAAM,CAAC,SAAS,CAAC,CAAC;QAClB,QAAQ,CAAC,SAAS,CAAC,CAAC;QAEpB,gBAAgB,CAAC,KAAK,CAAC;aACpB,IAAI,CAAC,UAAA,MAAM,IAAM,IAAI,CAAC,SAAS;YAAE,MAAM,CAAC,IAAI,sBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACzE,KAAK,CAAC,UAAC,CAAQ,IAAO,IAAI,CAAC,SAAS;YAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEjE,OAAO,cAAQ,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACnC,uDAAuD;IACzD,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;IAElF,OAAO,CACL,iCAAS,SAAS,EAAE,mCAAM,CAAC,aAAa;QACrC,KAAK,IAAI,CACR,6BAAK,SAAS,EAAE,mCAAM,CAAC,QAAQ;;YACG,KAAK;YACrC,+BAAM;wXAEF,CACP;QACA,CAAC,KAAK,IAAI,CAAC,GAAG,IAAI,6BAAK,SAAS,EAAE,mCAAM,CAAC,QAAQ,uFAA4B;QAC7E,GAAG,IAAI,oBAAC,mBAAQ,IAAC,GAAG,EAAE,GAAG,EAAE,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,GAAI,CAC9E,CACX,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,aAAa,CAAC","sourcesContent":["import * as React from 'react';\nimport styles from './ApprovalAdmin.module.scss';\nimport type { IApprovalAdminProps } from './IApprovalAdminProps';\nimport { AdminApp } from './app/AdminApp';\nimport { ApprovalRouteApi } from '../services/api';\nimport { AadApiHttpClient, DevApiHttpClient, IHttpClient } from '../services/httpClient';\n\nconst FONTS_LINK_ID = 'tnsu-approval-admin-fonts';\n\nfunction ensureFontsLoaded(): void {\n if (typeof document === 'undefined' || document.getElementById(FONTS_LINK_ID)) return;\n const link = document.createElement('link');\n link.id = FONTS_LINK_ID;\n link.rel = 'stylesheet';\n link.href = 'https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Lora:wght@500;600;700&display=swap';\n document.head.appendChild(link);\n}\n\nasync function createHttpClient(props: IApprovalAdminProps): Promise {\n if (props.useDevAuth) {\n return new DevApiHttpClient(props.apiBaseUrl, props.devUserEmail || 'dev@tnsu.kz');\n }\n const aadClient = await props.context.aadHttpClientFactory.getClient(props.aadResourceId);\n return new AadApiHttpClient(aadClient, props.apiBaseUrl);\n}\n\nconst ApprovalAdmin: React.FC = props => {\n const [api, setApi] = React.useState();\n const [error, setError] = React.useState();\n\n React.useEffect(() => {\n ensureFontsLoaded();\n }, []);\n\n React.useEffect(() => {\n let cancelled = false;\n setApi(undefined);\n setError(undefined);\n\n createHttpClient(props)\n .then(client => { if (!cancelled) setApi(new ApprovalRouteApi(client)); })\n .catch((e: Error) => { if (!cancelled) setError(e.message); });\n\n return () => { cancelled = true; };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.useDevAuth, props.apiBaseUrl, props.devUserEmail, props.aadResourceId]);\n\n return (\n
\n {error && (\n
\n Не удалось подключиться к API: {error}\n
\n Проверьте свойства веб-части (Api Base Url, режим авторизации) в панели настроек.\n
\n )}\n {!error && !api &&
Подключение к API...
}\n {api && }\n
\n );\n};\n\nexport default ApprovalAdmin;\n"]} \ No newline at end of file diff --git a/frontend/lib-commonjs/webparts/approvalAdmin/components/ApprovalAdmin.module.scss.css b/frontend/lib-commonjs/webparts/approvalAdmin/components/ApprovalAdmin.module.scss.css deleted file mode 100644 index 8cab22c..0000000 --- a/frontend/lib-commonjs/webparts/approvalAdmin/components/ApprovalAdmin.module.scss.css +++ /dev/null @@ -1,52 +0,0 @@ -:root { - --navy-950: #0A1B30; - --navy-900: #0F2440; - --navy-800: #1B3A5C; - --navy-700: #244B73; - --navy-600: #2D5C8A; - --navy-100: #E8EEF4; - --navy-50: #F4F7FA; - --gold-600: #B8881A; - --gold-500: #D4A01E; - --gold-400: #E5B635; - --gold-300: #F0CC5E; - --gold-100: #FDF5E0; - --gold-50: #FEFBF0; - --gray-900: #111827; - --gray-700: #374151; - --gray-500: #6B7280; - --gray-400: #9CA3AF; - --gray-300: #D1D5DB; - --gray-200: #E5E7EB; - --gray-100: #F3F4F6; - --gray-50: #F9FAFB; - --red-500: #DC2626; - --red-50: #FEF2F2; - --green-600: #15803D; - --green-50: #F0FDF4; - --blue-600: #2563EB; - --blue-50: #EFF6FF; - --amber-700: #854D0E; - --sh-1: 0 1px 2px rgba(15, 36, 64, 0.04), 0 1px 3px rgba(15, 36, 64, 0.06); - --sh-2: 0 4px 16px rgba(15, 36, 64, 0.07); - --sh-3: 0 12px 32px rgba(15, 36, 64, 0.1); - --sh-gold: 0 4px 20px rgba(212, 160, 30, 0.18); - --sh-modal: 0 24px 70px rgba(10, 27, 48, 0.25); - --r-sm: 6px; - --r-md: 10px; - --r-lg: 14px; -} - -.approvalAdmin { - font-family: "Inter", -apple-system, "Segoe UI", sans-serif; -} - -.stateBox { - padding: 40px 24px; - text-align: center; - color: #6B7280; - font-size: 13.5px; - background: #F9FAFB; - border-radius: 14px; - border: 1px solid #E5E7EB; -} \ No newline at end of file diff --git a/frontend/lib-commonjs/webparts/approvalAdmin/components/IApprovalAdminProps.js b/frontend/lib-commonjs/webparts/approvalAdmin/components/IApprovalAdminProps.js deleted file mode 100644 index e7a823b..0000000 --- a/frontend/lib-commonjs/webparts/approvalAdmin/components/IApprovalAdminProps.js +++ /dev/null @@ -1,3 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=IApprovalAdminProps.js.map \ No newline at end of file diff --git a/frontend/lib-commonjs/webparts/approvalAdmin/components/IApprovalAdminProps.js.map b/frontend/lib-commonjs/webparts/approvalAdmin/components/IApprovalAdminProps.js.map deleted file mode 100644 index 895680b..0000000 --- a/frontend/lib-commonjs/webparts/approvalAdmin/components/IApprovalAdminProps.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"IApprovalAdminProps.js","sourceRoot":"","sources":["../../../../src/webparts/approvalAdmin/components/IApprovalAdminProps.ts"],"names":[],"mappings":"","sourcesContent":["import { WebPartContext } from '@microsoft/sp-webpart-base';\n\nexport interface IApprovalAdminProps {\n context: WebPartContext;\n apiBaseUrl: string;\n useDevAuth: boolean;\n devUserEmail: string;\n aadResourceId: string;\n}\n"]} \ No newline at end of file diff --git a/frontend/lib-commonjs/webparts/approvalAdmin/components/app/AdminApp.js b/frontend/lib-commonjs/webparts/approvalAdmin/components/app/AdminApp.js deleted file mode 100644 index ef580de..0000000 --- a/frontend/lib-commonjs/webparts/approvalAdmin/components/app/AdminApp.js +++ /dev/null @@ -1,38 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AdminApp = void 0; -var tslib_1 = require("tslib"); -var React = tslib_1.__importStar(require("react")); -var AdminApp_module_scss_1 = tslib_1.__importDefault(require("./AdminApp.module.scss")); -var TopNav_1 = require("./TopNav"); -var DashboardScreen_1 = require("../screens/DashboardScreen"); -var RequestTypesScreen_1 = require("../screens/RequestTypesScreen"); -var RoutesScreen_1 = require("../screens/RoutesScreen"); -var RouteStepsScreen_1 = require("../screens/RouteStepsScreen"); -var ResolveScreen_1 = require("../screens/ResolveScreen"); -var AdminApp = function (_a) { - var api = _a.api, currentUserEmail = _a.currentUserEmail; - var _b = React.useState('dashboard'), screen = _b[0], setScreen = _b[1]; - var _c = React.useState(), selectedRoute = _c[0], setSelectedRoute = _c[1]; - var _d = React.useState(''), selectedRequestTypeName = _d[0], setSelectedRequestTypeName = _d[1]; - var navigate = function (key) { - setScreen(key); - }; - var openSteps = function (route) { - setSelectedRoute(route); - api.requestTypes.get(route.requestTypeId) - .then(function (rt) { return setSelectedRequestTypeName(rt.name); }) - .catch(function () { return setSelectedRequestTypeName("#".concat(route.requestTypeId)); }); - setScreen('routeSteps'); - }; - return (React.createElement("div", { className: AdminApp_module_scss_1.default.shell }, - React.createElement(TopNav_1.TopNav, { active: screen, onSelect: navigate }), - React.createElement("div", { className: AdminApp_module_scss_1.default.content }, - screen === 'dashboard' && React.createElement(DashboardScreen_1.DashboardScreen, { api: api, onNavigate: navigate }), - screen === 'requestTypes' && React.createElement(RequestTypesScreen_1.RequestTypesScreen, { api: api }), - screen === 'routes' && React.createElement(RoutesScreen_1.RoutesScreen, { api: api, onOpenSteps: openSteps }), - screen === 'routeSteps' && selectedRoute && (React.createElement(RouteStepsScreen_1.RouteStepsScreen, { api: api, route: selectedRoute, requestTypeName: selectedRequestTypeName, onBack: function () { return setScreen('routes'); } })), - screen === 'resolve' && React.createElement(ResolveScreen_1.ResolveScreen, { api: api, currentUserEmail: currentUserEmail })))); -}; -exports.AdminApp = AdminApp; -//# sourceMappingURL=AdminApp.js.map \ No newline at end of file diff --git a/frontend/lib-commonjs/webparts/approvalAdmin/components/app/AdminApp.js.map b/frontend/lib-commonjs/webparts/approvalAdmin/components/app/AdminApp.js.map deleted file mode 100644 index 7ab7df6..0000000 --- a/frontend/lib-commonjs/webparts/approvalAdmin/components/app/AdminApp.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"AdminApp.js","sourceRoot":"","sources":["../../../../../src/webparts/approvalAdmin/components/app/AdminApp.tsx"],"names":[],"mappings":";;;;AAAA,mDAA+B;AAC/B,wFAA4C;AAC5C,mCAAkC;AAIlC,8DAA6D;AAC7D,oEAAmE;AACnE,wDAAuD;AACvD,gEAA+D;AAC/D,0DAAyD;AAOlD,IAAM,QAAQ,GAA6B,UAAC,EAAyB;QAAvB,GAAG,SAAA,EAAE,gBAAgB,sBAAA;IAClE,IAAA,KAAsB,KAAK,CAAC,QAAQ,CAAY,WAAW,CAAC,EAA3D,MAAM,QAAA,EAAE,SAAS,QAA0C,CAAC;IAC7D,IAAA,KAAoC,KAAK,CAAC,QAAQ,EAA6B,EAA9E,aAAa,QAAA,EAAE,gBAAgB,QAA+C,CAAC;IAChF,IAAA,KAAwD,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAzE,uBAAuB,QAAA,EAAE,0BAA0B,QAAsB,CAAC;IAEjF,IAAM,QAAQ,GAAG,UAAC,GAAc;QAC9B,SAAS,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC,CAAC;IAEF,IAAM,SAAS,GAAG,UAAC,KAAoB;QACrC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACxB,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC;aACtC,IAAI,CAAC,UAAA,EAAE,IAAI,OAAA,0BAA0B,CAAC,EAAE,CAAC,IAAI,CAAC,EAAnC,CAAmC,CAAC;aAC/C,KAAK,CAAC,cAAM,OAAA,0BAA0B,CAAC,WAAI,KAAK,CAAC,aAAa,CAAE,CAAC,EAArD,CAAqD,CAAC,CAAC;QACtE,SAAS,CAAC,YAAY,CAAC,CAAC;IAC1B,CAAC,CAAC;IAEF,OAAO,CACL,6BAAK,SAAS,EAAE,8BAAM,CAAC,KAAK;QAC1B,oBAAC,eAAM,IAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAI;QAC9C,6BAAK,SAAS,EAAE,8BAAM,CAAC,OAAO;YAC3B,MAAM,KAAK,WAAW,IAAI,oBAAC,iCAAe,IAAC,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,GAAI;YAC7E,MAAM,KAAK,cAAc,IAAI,oBAAC,uCAAkB,IAAC,GAAG,EAAE,GAAG,GAAI;YAC7D,MAAM,KAAK,QAAQ,IAAI,oBAAC,2BAAY,IAAC,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,SAAS,GAAI;YACzE,MAAM,KAAK,YAAY,IAAI,aAAa,IAAI,CAC3C,oBAAC,mCAAgB,IACf,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,aAAa,EACpB,eAAe,EAAE,uBAAuB,EACxC,MAAM,EAAE,cAAM,OAAA,SAAS,CAAC,QAAQ,CAAC,EAAnB,CAAmB,GACjC,CACH;YACA,MAAM,KAAK,SAAS,IAAI,oBAAC,6BAAa,IAAC,GAAG,EAAE,GAAG,EAAE,gBAAgB,EAAE,gBAAgB,GAAI,CACpF,CACF,CACP,CAAC;AACJ,CAAC,CAAC;AApCW,QAAA,QAAQ,YAoCnB","sourcesContent":["import * as React from 'react';\nimport styles from './AdminApp.module.scss';\nimport { TopNav } from './TopNav';\nimport { ScreenKey } from './types';\nimport { ApprovalRouteApi } from '../../services/api';\nimport { TemplateRoute } from '../../models';\nimport { DashboardScreen } from '../screens/DashboardScreen';\nimport { RequestTypesScreen } from '../screens/RequestTypesScreen';\nimport { RoutesScreen } from '../screens/RoutesScreen';\nimport { RouteStepsScreen } from '../screens/RouteStepsScreen';\nimport { ResolveScreen } from '../screens/ResolveScreen';\n\nexport interface IAdminAppProps {\n api: ApprovalRouteApi;\n currentUserEmail?: string;\n}\n\nexport const AdminApp: React.FC = ({ api, currentUserEmail }) => {\n const [screen, setScreen] = React.useState('dashboard');\n const [selectedRoute, setSelectedRoute] = React.useState();\n const [selectedRequestTypeName, setSelectedRequestTypeName] = React.useState('');\n\n const navigate = (key: ScreenKey): void => {\n setScreen(key);\n };\n\n const openSteps = (route: TemplateRoute): void => {\n setSelectedRoute(route);\n api.requestTypes.get(route.requestTypeId)\n .then(rt => setSelectedRequestTypeName(rt.name))\n .catch(() => setSelectedRequestTypeName(`#${route.requestTypeId}`));\n setScreen('routeSteps');\n };\n\n return (\n
\n \n
\n {screen === 'dashboard' && }\n {screen === 'requestTypes' && }\n {screen === 'routes' && }\n {screen === 'routeSteps' && selectedRoute && (\n setScreen('routes')}\n />\n )}\n {screen === 'resolve' && }\n
\n
\n );\n};\n"]} \ No newline at end of file diff --git a/frontend/lib-commonjs/webparts/approvalAdmin/components/app/AdminApp.module.scss.css b/frontend/lib-commonjs/webparts/approvalAdmin/components/app/AdminApp.module.scss.css deleted file mode 100644 index 39fb887..0000000 --- a/frontend/lib-commonjs/webparts/approvalAdmin/components/app/AdminApp.module.scss.css +++ /dev/null @@ -1,63 +0,0 @@ -:root { - --navy-950: #0A1B30; - --navy-900: #0F2440; - --navy-800: #1B3A5C; - --navy-700: #244B73; - --navy-600: #2D5C8A; - --navy-100: #E8EEF4; - --navy-50: #F4F7FA; - --gold-600: #B8881A; - --gold-500: #D4A01E; - --gold-400: #E5B635; - --gold-300: #F0CC5E; - --gold-100: #FDF5E0; - --gold-50: #FEFBF0; - --gray-900: #111827; - --gray-700: #374151; - --gray-500: #6B7280; - --gray-400: #9CA3AF; - --gray-300: #D1D5DB; - --gray-200: #E5E7EB; - --gray-100: #F3F4F6; - --gray-50: #F9FAFB; - --red-500: #DC2626; - --red-50: #FEF2F2; - --green-600: #15803D; - --green-50: #F0FDF4; - --blue-600: #2563EB; - --blue-50: #EFF6FF; - --amber-700: #854D0E; - --sh-1: 0 1px 2px rgba(15, 36, 64, 0.04), 0 1px 3px rgba(15, 36, 64, 0.06); - --sh-2: 0 4px 16px rgba(15, 36, 64, 0.07); - --sh-3: 0 12px 32px rgba(15, 36, 64, 0.1); - --sh-gold: 0 4px 20px rgba(212, 160, 30, 0.18); - --sh-modal: 0 24px 70px rgba(10, 27, 48, 0.25); - --r-sm: 6px; - --r-md: 10px; - --r-lg: 14px; -} - -.shell { - background: linear-gradient(180deg, #F6F8FA 0%, #EEF2F6 100%); - border-radius: 14px; - border: 1px solid #E5E7EB; - overflow: hidden; - box-shadow: 0 1px 2px rgba(15, 36, 64, 0.04), 0 1px 3px rgba(15, 36, 64, 0.06); - color: #111827; - font-family: "Inter", -apple-system, "Segoe UI", sans-serif; - font-size: 14px; - line-height: 1.55; -} - -.content { - padding: 28px 30px 36px; - max-width: 1080px; - margin: 0 auto; -} - -.centerState { - padding: 60px 30px; - text-align: center; - color: #9CA3AF; - font-size: 13.5px; -} \ No newline at end of file diff --git a/frontend/lib-commonjs/webparts/approvalAdmin/components/app/TopNav.js b/frontend/lib-commonjs/webparts/approvalAdmin/components/app/TopNav.js deleted file mode 100644 index cdba387..0000000 --- a/frontend/lib-commonjs/webparts/approvalAdmin/components/app/TopNav.js +++ /dev/null @@ -1,24 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.TopNav = void 0; -var tslib_1 = require("tslib"); -var React = tslib_1.__importStar(require("react")); -var TopNav_module_scss_1 = tslib_1.__importDefault(require("./TopNav.module.scss")); -var TABS = [ - { key: 'dashboard', label: 'Дашборд' }, - { key: 'requestTypes', label: 'Типы заявок' }, - { key: 'routes', label: 'Маршруты' }, - { key: 'resolve', label: 'Проверка маршрута' } -]; -var TopNav = function (_a) { - var active = _a.active, onSelect = _a.onSelect; - return (React.createElement("nav", { className: TopNav_module_scss_1.default.topnav }, - React.createElement("div", { className: TopNav_module_scss_1.default.brand }, - React.createElement("div", { className: TopNav_module_scss_1.default.mark }, "T"), - React.createElement("div", { className: TopNav_module_scss_1.default.brandText }, - "TNSU ", - React.createElement("em", null, "Approval Route"))), - React.createElement("div", { className: TopNav_module_scss_1.default.tabs }, TABS.map(function (tab) { return (React.createElement("button", { key: tab.key, className: "".concat(TopNav_module_scss_1.default.tab, " ").concat((active === tab.key || (active === 'routeSteps' && tab.key === 'routes')) ? TopNav_module_scss_1.default.on : ''), onClick: function () { return onSelect(tab.key); } }, tab.label)); })))); -}; -exports.TopNav = TopNav; -//# sourceMappingURL=TopNav.js.map \ No newline at end of file diff --git a/frontend/lib-commonjs/webparts/approvalAdmin/components/app/TopNav.js.map b/frontend/lib-commonjs/webparts/approvalAdmin/components/app/TopNav.js.map deleted file mode 100644 index e6b7890..0000000 --- a/frontend/lib-commonjs/webparts/approvalAdmin/components/app/TopNav.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"TopNav.js","sourceRoot":"","sources":["../../../../../src/webparts/approvalAdmin/components/app/TopNav.tsx"],"names":[],"mappings":";;;;AAAA,mDAA+B;AAC/B,oFAA0C;AAQ1C,IAAM,IAAI,GAAW;IACnB,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE;IACtC,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE;IAC7C,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE;IACpC,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,mBAAmB,EAAE;CAC/C,CAAC;AAOK,IAAM,MAAM,GAA2B,UAAC,EAAoB;QAAlB,MAAM,YAAA,EAAE,QAAQ,cAAA;IAAO,OAAA,CACtE,6BAAK,SAAS,EAAE,4BAAM,CAAC,MAAM;QAC3B,6BAAK,SAAS,EAAE,4BAAM,CAAC,KAAK;YAC1B,6BAAK,SAAS,EAAE,4BAAM,CAAC,IAAI,QAAS;YACpC,6BAAK,SAAS,EAAE,4BAAM,CAAC,SAAS;;gBAAO,iDAAuB,CAAM,CAChE;QACN,6BAAK,SAAS,EAAE,4BAAM,CAAC,IAAI,IACxB,IAAI,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,CACf,gCACE,GAAG,EAAE,GAAG,CAAC,GAAG,EACZ,SAAS,EAAE,UAAG,4BAAM,CAAC,GAAG,cAAI,CAAC,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,KAAK,YAAY,IAAI,GAAG,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,4BAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAE,EACxH,OAAO,EAAE,cAAM,OAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAjB,CAAiB,IAE/B,GAAG,CAAC,KAAK,CACH,CACV,EARgB,CAQhB,CAAC,CACE,CACF,CACP;AAlBuE,CAkBvE,CAAC;AAlBW,QAAA,MAAM,UAkBjB","sourcesContent":["import * as React from 'react';\nimport styles from './TopNav.module.scss';\nimport { ScreenKey } from './types';\n\ninterface ITab {\n key: ScreenKey;\n label: string;\n}\n\nconst TABS: ITab[] = [\n { key: 'dashboard', label: 'Дашборд' },\n { key: 'requestTypes', label: 'Типы заявок' },\n { key: 'routes', label: 'Маршруты' },\n { key: 'resolve', label: 'Проверка маршрута' }\n];\n\nexport interface ITopNavProps {\n active: ScreenKey;\n onSelect: (key: ScreenKey) => void;\n}\n\nexport const TopNav: React.FC = ({ active, onSelect }) => (\n \n);\n"]} \ No newline at end of file diff --git a/frontend/lib-commonjs/webparts/approvalAdmin/components/app/TopNav.module.scss.css b/frontend/lib-commonjs/webparts/approvalAdmin/components/app/TopNav.module.scss.css deleted file mode 100644 index 243e3b7..0000000 --- a/frontend/lib-commonjs/webparts/approvalAdmin/components/app/TopNav.module.scss.css +++ /dev/null @@ -1,112 +0,0 @@ -:root { - --navy-950: #0A1B30; - --navy-900: #0F2440; - --navy-800: #1B3A5C; - --navy-700: #244B73; - --navy-600: #2D5C8A; - --navy-100: #E8EEF4; - --navy-50: #F4F7FA; - --gold-600: #B8881A; - --gold-500: #D4A01E; - --gold-400: #E5B635; - --gold-300: #F0CC5E; - --gold-100: #FDF5E0; - --gold-50: #FEFBF0; - --gray-900: #111827; - --gray-700: #374151; - --gray-500: #6B7280; - --gray-400: #9CA3AF; - --gray-300: #D1D5DB; - --gray-200: #E5E7EB; - --gray-100: #F3F4F6; - --gray-50: #F9FAFB; - --red-500: #DC2626; - --red-50: #FEF2F2; - --green-600: #15803D; - --green-50: #F0FDF4; - --blue-600: #2563EB; - --blue-50: #EFF6FF; - --amber-700: #854D0E; - --sh-1: 0 1px 2px rgba(15, 36, 64, 0.04), 0 1px 3px rgba(15, 36, 64, 0.06); - --sh-2: 0 4px 16px rgba(15, 36, 64, 0.07); - --sh-3: 0 12px 32px rgba(15, 36, 64, 0.1); - --sh-gold: 0 4px 20px rgba(212, 160, 30, 0.18); - --sh-modal: 0 24px 70px rgba(10, 27, 48, 0.25); - --r-sm: 6px; - --r-md: 10px; - --r-lg: 14px; -} - -.topnav { - background: linear-gradient(135deg, #0A1B30 0%, #1B3A5C 85%); - padding: 0 22px; - display: flex; - align-items: center; - height: 54px; - box-shadow: 0 1px 0 rgba(212, 160, 30, 0.35); - border-radius: 10px 10px 0 0; - flex-wrap: wrap; -} - -.brand { - display: flex; - align-items: center; - gap: 10px; - margin-right: 28px; - flex-shrink: 0; -} - -.mark { - width: 30px; - height: 30px; - border-radius: 7px; - background: linear-gradient(180deg, #E5B635, #B8881A); - display: flex; - align-items: center; - justify-content: center; - color: #0A1B30; - font-weight: 800; - font-size: 13px; - font-family: "Lora", Georgia, serif; -} - -.brandText { - color: #fff; - font-weight: 600; - font-size: 13px; - letter-spacing: 0.4px; - white-space: nowrap; -} - -.brandText em { - font-style: normal; - color: #E5B635; -} - -.tabs { - display: flex; - height: 100%; - flex-wrap: wrap; -} - -.tab { - padding: 0 16px; - border: none; - background: 0; - color: rgba(255, 255, 255, 0.5); - font-size: 13px; - font-weight: 500; - cursor: pointer; - font-family: inherit; - transition: 0.18s; - height: 54px; - border-bottom: 2px solid transparent; - letter-spacing: 0.2px; -} -.tab:hover { - color: rgba(255, 255, 255, 0.85); -} -.tab.on { - color: #F0CC5E; - border-bottom-color: #E5B635; -} \ No newline at end of file diff --git a/frontend/lib-commonjs/webparts/approvalAdmin/components/app/types.js b/frontend/lib-commonjs/webparts/approvalAdmin/components/app/types.js deleted file mode 100644 index 11e638d..0000000 --- a/frontend/lib-commonjs/webparts/approvalAdmin/components/app/types.js +++ /dev/null @@ -1,3 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/frontend/lib-commonjs/webparts/approvalAdmin/components/app/types.js.map b/frontend/lib-commonjs/webparts/approvalAdmin/components/app/types.js.map deleted file mode 100644 index ce366a8..0000000 --- a/frontend/lib-commonjs/webparts/approvalAdmin/components/app/types.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/webparts/approvalAdmin/components/app/types.ts"],"names":[],"mappings":"","sourcesContent":["export type ScreenKey = 'dashboard' | 'requestTypes' | 'routes' | 'routeSteps' | 'resolve';\n"]} \ No newline at end of file diff --git a/frontend/lib-commonjs/webparts/approvalAdmin/components/screens/DashboardScreen.js b/frontend/lib-commonjs/webparts/approvalAdmin/components/screens/DashboardScreen.js deleted file mode 100644 index 5bcd906..0000000 --- a/frontend/lib-commonjs/webparts/approvalAdmin/components/screens/DashboardScreen.js +++ /dev/null @@ -1,27 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.DashboardScreen = void 0; -var tslib_1 = require("tslib"); -var React = tslib_1.__importStar(require("react")); -var ui_1 = require("../ui"); -var DashboardScreen = function (_a) { - var api = _a.api, onNavigate = _a.onNavigate; - var _b = React.useState(), requestTypesCount = _b[0], setRequestTypesCount = _b[1]; - var _c = React.useState(), routesCount = _c[0], setRoutesCount = _c[1]; - React.useEffect(function () { - api.requestTypes.list().then(function (items) { return setRequestTypesCount(items.length); }).catch(function () { return setRequestTypesCount(undefined); }); - api.templateRoutes.list().then(function (items) { return setRoutesCount(items.length); }).catch(function () { return setRoutesCount(undefined); }); - }, [api]); - return (React.createElement("div", null, - React.createElement(ui_1.StatRow, null, - React.createElement(ui_1.StatCard, { label: "\u0422\u0438\u043F\u043E\u0432 \u0437\u0430\u044F\u0432\u043E\u043A", value: requestTypesCount !== null && requestTypesCount !== void 0 ? requestTypesCount : '—' }), - React.createElement(ui_1.StatCard, { label: "\u041C\u0430\u0440\u0448\u0440\u0443\u0442\u043E\u0432 \u0441\u043E\u0433\u043B\u0430\u0441\u043E\u0432\u0430\u043D\u0438\u044F", value: routesCount !== null && routesCount !== void 0 ? routesCount : '—' })), - React.createElement("div", { style: { fontSize: 10, textTransform: 'uppercase', letterSpacing: 1.6, color: 'var(--gray-400)', fontWeight: 600, marginBottom: 12 } }, "\u0420\u0430\u0437\u0434\u0435\u043B\u044B"), - React.createElement("hr", { style: { height: 1, background: 'linear-gradient(90deg, var(--gold-400), transparent 70%)', border: 0, margin: '6px 0 22px' } }), - React.createElement(ui_1.CardGrid, null, - React.createElement(ui_1.NavCard, { icon: "clipboard", title: "\u0422\u0438\u043F\u044B \u0437\u0430\u044F\u0432\u043E\u043A", description: "\u0421\u043F\u0440\u0430\u0432\u043E\u0447\u043D\u0438\u043A \u0442\u0438\u043F\u043E\u0432 \u0437\u0430\u044F\u0432\u043E\u043A \u0438 \u0438\u0445 \u0441\u0442\u0440\u0430\u043D\u0438\u0446", onClick: function () { return onNavigate('requestTypes'); } }), - React.createElement(ui_1.NavCard, { icon: "route", title: "\u041C\u0430\u0440\u0448\u0440\u0443\u0442\u044B \u0441\u043E\u0433\u043B\u0430\u0441\u043E\u0432\u0430\u043D\u0438\u044F", description: "\u041C\u0430\u0440\u0448\u0440\u0443\u0442\u044B, \u0448\u0430\u0433\u0438 \u0438 \u0438\u0441\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u0438", onClick: function () { return onNavigate('routes'); } }), - React.createElement(ui_1.NavCard, { icon: "search", title: "\u041F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 \u043C\u0430\u0440\u0448\u0440\u0443\u0442\u0430", description: "\u041A\u0430\u043A \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u0441\u044F \u043C\u0430\u0440\u0448\u0440\u0443\u0442 \u0434\u043B\u044F \u043A\u043E\u043D\u043A\u0440\u0435\u0442\u043D\u043E\u0433\u043E \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F", onClick: function () { return onNavigate('resolve'); } })))); -}; -exports.DashboardScreen = DashboardScreen; -//# sourceMappingURL=DashboardScreen.js.map \ No newline at end of file diff --git a/frontend/lib-commonjs/webparts/approvalAdmin/components/screens/DashboardScreen.js.map b/frontend/lib-commonjs/webparts/approvalAdmin/components/screens/DashboardScreen.js.map deleted file mode 100644 index ef77334..0000000 --- a/frontend/lib-commonjs/webparts/approvalAdmin/components/screens/DashboardScreen.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"DashboardScreen.js","sourceRoot":"","sources":["../../../../../src/webparts/approvalAdmin/components/screens/DashboardScreen.tsx"],"names":[],"mappings":";;;;AAAA,mDAA+B;AAG/B,4BAA6D;AAOtD,IAAM,eAAe,GAAoC,UAAC,EAAmB;QAAjB,GAAG,SAAA,EAAE,UAAU,gBAAA;IAC1E,IAAA,KAA4C,KAAK,CAAC,QAAQ,EAAsB,EAA/E,iBAAiB,QAAA,EAAE,oBAAoB,QAAwC,CAAC;IACjF,IAAA,KAAgC,KAAK,CAAC,QAAQ,EAAsB,EAAnE,WAAW,QAAA,EAAE,cAAc,QAAwC,CAAC;IAE3E,KAAK,CAAC,SAAS,CAAC;QACd,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,UAAA,KAAK,IAAI,OAAA,oBAAoB,CAAC,KAAK,CAAC,MAAM,CAAC,EAAlC,CAAkC,CAAC,CAAC,KAAK,CAAC,cAAM,OAAA,oBAAoB,CAAC,SAAS,CAAC,EAA/B,CAA+B,CAAC,CAAC;QACvH,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,UAAA,KAAK,IAAI,OAAA,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,EAA5B,CAA4B,CAAC,CAAC,KAAK,CAAC,cAAM,OAAA,cAAc,CAAC,SAAS,CAAC,EAAzB,CAAyB,CAAC,CAAC;IAC/G,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEV,OAAO,CACL;QACE,oBAAC,YAAO;YACN,oBAAC,aAAQ,IAAC,KAAK,EAAC,qEAAc,EAAC,KAAK,EAAE,iBAAiB,aAAjB,iBAAiB,cAAjB,iBAAiB,GAAI,GAAG,GAAI;YAClE,oBAAC,aAAQ,IAAC,KAAK,EAAC,iIAAwB,EAAC,KAAK,EAAE,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,GAAG,GAAI,CAC9D;QAEV,6BAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,EAAE,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE,iDAEnI;QACN,4BAAI,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,0DAA0D,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,GAAI;QACrI,oBAAC,aAAQ;YACP,oBAAC,YAAO,IACN,IAAI,EAAC,WAAW,EAChB,KAAK,EAAC,+DAAa,EACnB,WAAW,EAAC,iMAAsC,EAClD,OAAO,EAAE,cAAM,OAAA,UAAU,CAAC,cAAc,CAAC,EAA1B,CAA0B,GACzC;YACF,oBAAC,YAAO,IACN,IAAI,EAAC,OAAO,EACZ,KAAK,EAAC,2HAAuB,EAC7B,WAAW,EAAC,sJAA8B,EAC1C,OAAO,EAAE,cAAM,OAAA,UAAU,CAAC,QAAQ,CAAC,EAApB,CAAoB,GACnC;YACF,oBAAC,YAAO,IACN,IAAI,EAAC,QAAQ,EACb,KAAK,EAAC,mGAAmB,EACzB,WAAW,EAAC,2RAAqD,EACjE,OAAO,EAAE,cAAM,OAAA,UAAU,CAAC,SAAS,CAAC,EAArB,CAAqB,GACpC,CACO,CACP,CACP,CAAC;AACJ,CAAC,CAAC;AA1CW,QAAA,eAAe,mBA0C1B","sourcesContent":["import * as React from 'react';\nimport { ApprovalRouteApi } from '../../services/api';\nimport { ScreenKey } from '../app/types';\nimport { CardGrid, NavCard, StatCard, StatRow } from '../ui';\n\nexport interface IDashboardScreenProps {\n api: ApprovalRouteApi;\n onNavigate: (key: ScreenKey) => void;\n}\n\nexport const DashboardScreen: React.FC = ({ api, onNavigate }) => {\n const [requestTypesCount, setRequestTypesCount] = React.useState();\n const [routesCount, setRoutesCount] = React.useState();\n\n React.useEffect(() => {\n api.requestTypes.list().then(items => setRequestTypesCount(items.length)).catch(() => setRequestTypesCount(undefined));\n api.templateRoutes.list().then(items => setRoutesCount(items.length)).catch(() => setRoutesCount(undefined));\n }, [api]);\n\n return (\n
\n \n \n \n \n\n
\n Разделы\n
\n
\n \n onNavigate('requestTypes')}\n />\n onNavigate('routes')}\n />\n onNavigate('resolve')}\n />\n \n
\n );\n};\n"]} \ No newline at end of file diff --git a/frontend/lib-commonjs/webparts/approvalAdmin/components/screens/RequestTypesScreen.js b/frontend/lib-commonjs/webparts/approvalAdmin/components/screens/RequestTypesScreen.js deleted file mode 100644 index cd6c094..0000000 --- a/frontend/lib-commonjs/webparts/approvalAdmin/components/screens/RequestTypesScreen.js +++ /dev/null @@ -1,106 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.RequestTypesScreen = void 0; -var tslib_1 = require("tslib"); -var React = tslib_1.__importStar(require("react")); -var ui_1 = require("../ui"); -var EMPTY_FORM = { name: '', pageUrl: '' }; -var RequestTypesScreen = function (_a) { - var api = _a.api; - var _b = React.useState([]), items = _b[0], setItems = _b[1]; - var _c = React.useState(true), loading = _c[0], setLoading = _c[1]; - var _d = React.useState(), loadError = _d[0], setLoadError = _d[1]; - var _e = React.useState(), editing = _e[0], setEditing = _e[1]; - var _f = React.useState(false), showForm = _f[0], setShowForm = _f[1]; - var _g = React.useState(EMPTY_FORM), form = _g[0], setForm = _g[1]; - var _h = React.useState(), formError = _h[0], setFormError = _h[1]; - var _j = React.useState(false), saving = _j[0], setSaving = _j[1]; - var _k = React.useState(), deleting = _k[0], setDeleting = _k[1]; - var _l = React.useState(), deleteError = _l[0], setDeleteError = _l[1]; - var _m = React.useState(false), deleteBusy = _m[0], setDeleteBusy = _m[1]; - var load = React.useCallback(function () { - setLoading(true); - setLoadError(undefined); - api.requestTypes - .list() - .then(setItems) - .catch(function (e) { return setLoadError(e.message); }) - .finally(function () { return setLoading(false); }); - }, [api]); - React.useEffect(function () { load(); }, [load]); - var openCreate = function () { - setEditing(undefined); - setForm(EMPTY_FORM); - setFormError(undefined); - setShowForm(true); - }; - var openEdit = function (item) { - setEditing(item); - setForm({ name: item.name, pageUrl: item.pageUrl }); - setFormError(undefined); - setShowForm(true); - }; - var submit = function () { - if (!form.name.trim() || !form.pageUrl.trim()) { - setFormError('Заполните имя и Url страницы.'); - return; - } - setSaving(true); - setFormError(undefined); - var request = editing - ? api.requestTypes.update(editing.id, { name: form.name.trim(), pageUrl: form.pageUrl.trim() }) - : api.requestTypes.create({ name: form.name.trim(), pageUrl: form.pageUrl.trim() }); - request - .then(function () { - setShowForm(false); - load(); - }) - .catch(function (e) { return setFormError(e.message); }) - .finally(function () { return setSaving(false); }); - }; - var confirmDelete = function () { - if (!deleting) - return; - setDeleteBusy(true); - setDeleteError(undefined); - api.requestTypes - .remove(deleting.id) - .then(function () { - setDeleting(undefined); - load(); - }) - .catch(function (e) { return setDeleteError(e.message); }) - .finally(function () { return setDeleteBusy(false); }); - }; - return (React.createElement("div", null, - React.createElement(ui_1.Breadcrumbs, { items: [{ label: 'Главная' }, { label: 'Типы заявок' }] }), - React.createElement(ui_1.PageHeader, { icon: "clipboard", subtitle: "\u0421\u043F\u0440\u0430\u0432\u043E\u0447\u043D\u0438\u043A", title: "\u0422\u0438\u043F\u044B \u0437\u0430\u044F\u0432\u043E\u043A", actions: React.createElement(ui_1.Button, { variant: "accent", icon: "plus", onClick: openCreate }, "\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0442\u0438\u043F") }), - loadError && React.createElement(ui_1.Alert, { kind: "err" }, loadError), - deleteError && React.createElement(ui_1.Alert, { kind: "err" }, deleteError), - React.createElement(ui_1.DataTable, { columns: [ - { key: 'name', header: 'Название', render: function (r) { return React.createElement(ui_1.PrimaryCell, null, r.name); } }, - { key: 'url', header: 'Url страницы', render: function (r) { return r.pageUrl; } }, - { - key: 'actions', - header: '', - width: '100px', - align: 'right', - sticky: true, - render: function (r) { return (React.createElement(ui_1.ActionsCell, null, - React.createElement(ui_1.IconButton, { icon: "edit", label: "\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C", onClick: function () { return openEdit(r); } }), - React.createElement(ui_1.IconButton, { icon: "trash", label: "\u0423\u0434\u0430\u043B\u0438\u0442\u044C", danger: true, onClick: function () { setDeleteError(undefined); setDeleting(r); } }))); } - } - ], rows: items, keyOf: function (r) { return r.id; }, emptyMessage: loading ? 'Загрузка...' : 'Типов заявок пока нет.' }), - showForm && (React.createElement(ui_1.Modal, { title: editing ? 'Редактировать тип заявки' : 'Новый тип заявки', onClose: function () { return setShowForm(false); }, footer: React.createElement(React.Fragment, null, - React.createElement(ui_1.Button, { variant: "secondary", onClick: function () { return setShowForm(false); }, disabled: saving }, "\u041E\u0442\u043C\u0435\u043D\u0430"), - React.createElement(ui_1.Button, { variant: "accent", icon: "check", onClick: submit, disabled: saving }, saving ? 'Сохранение...' : 'Сохранить')) }, - formError && React.createElement(ui_1.Alert, { kind: "err" }, formError), - React.createElement(ui_1.FormGrid, null, - React.createElement(ui_1.Field, { label: "\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435", required: true, full: true }, - React.createElement(ui_1.TextInput, { value: form.name, onChange: function (e) { return setForm(tslib_1.__assign(tslib_1.__assign({}, form), { name: e.target.value })); }, placeholder: "\u041D\u0430\u043F\u0440\u0438\u043C\u0435\u0440, \u0417\u0430\u044F\u0432\u043A\u0430 \u043D\u0430 \u043A\u043E\u043C\u0430\u043D\u0434\u0438\u0440\u043E\u0432\u043A\u0443" })), - React.createElement(ui_1.Field, { label: "Url \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B", required: true, full: true, hint: "\u0421\u0442\u0440\u0430\u043D\u0438\u0446\u0430 \u0444\u043E\u0440\u043C\u044B \u0437\u0430\u044F\u0432\u043A\u0438 \u043D\u0430 \u043F\u043E\u0440\u0442\u0430\u043B\u0435." }, - React.createElement(ui_1.TextInput, { value: form.pageUrl, onChange: function (e) { return setForm(tslib_1.__assign(tslib_1.__assign({}, form), { pageUrl: e.target.value })); }, placeholder: "/pages/business-trip" }))))), - deleting && (React.createElement(ui_1.ConfirmDialog, { title: "\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0442\u0438\u043F \u0437\u0430\u044F\u0432\u043A\u0438?", text: "\u0422\u0438\u043F \u00AB".concat(deleting.name, "\u00BB \u0431\u0443\u0434\u0435\u0442 \u0443\u0434\u0430\u043B\u0451\u043D \u0431\u0435\u0437\u0432\u043E\u0437\u0432\u0440\u0430\u0442\u043D\u043E. \u0421\u0432\u044F\u0437\u0430\u043D\u043D\u044B\u0435 \u043C\u0430\u0440\u0448\u0440\u0443\u0442\u044B \u043C\u043E\u0433\u0443\u0442 \u043F\u0435\u0440\u0435\u0441\u0442\u0430\u0442\u044C \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0442\u044C\u0441\u044F."), confirmLabel: "\u0423\u0434\u0430\u043B\u0438\u0442\u044C", busy: deleteBusy, onCancel: function () { return setDeleting(undefined); }, onConfirm: confirmDelete })))); -}; -exports.RequestTypesScreen = RequestTypesScreen; -//# sourceMappingURL=RequestTypesScreen.js.map \ No newline at end of file diff --git a/frontend/lib-commonjs/webparts/approvalAdmin/components/screens/RequestTypesScreen.js.map b/frontend/lib-commonjs/webparts/approvalAdmin/components/screens/RequestTypesScreen.js.map deleted file mode 100644 index 3daae82..0000000 --- a/frontend/lib-commonjs/webparts/approvalAdmin/components/screens/RequestTypesScreen.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"RequestTypesScreen.js","sourceRoot":"","sources":["../../../../../src/webparts/approvalAdmin/components/screens/RequestTypesScreen.tsx"],"names":[],"mappings":";;;;AAAA,mDAA+B;AAI/B,4BAce;AAWf,IAAM,UAAU,GAAe,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AAElD,IAAM,kBAAkB,GAAuC,UAAC,EAAO;QAAL,GAAG,SAAA;IACpE,IAAA,KAAoB,KAAK,CAAC,QAAQ,CAAgB,EAAE,CAAC,EAApD,KAAK,QAAA,EAAE,QAAQ,QAAqC,CAAC;IACtD,IAAA,KAAwB,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAA3C,OAAO,QAAA,EAAE,UAAU,QAAwB,CAAC;IAC7C,IAAA,KAA4B,KAAK,CAAC,QAAQ,EAAsB,EAA/D,SAAS,QAAA,EAAE,YAAY,QAAwC,CAAC;IAEjE,IAAA,KAAwB,KAAK,CAAC,QAAQ,EAA2B,EAAhE,OAAO,QAAA,EAAE,UAAU,QAA6C,CAAC;IAClE,IAAA,KAA0B,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAA9C,QAAQ,QAAA,EAAE,WAAW,QAAyB,CAAC;IAChD,IAAA,KAAkB,KAAK,CAAC,QAAQ,CAAa,UAAU,CAAC,EAAvD,IAAI,QAAA,EAAE,OAAO,QAA0C,CAAC;IACzD,IAAA,KAA4B,KAAK,CAAC,QAAQ,EAAsB,EAA/D,SAAS,QAAA,EAAE,YAAY,QAAwC,CAAC;IACjE,IAAA,KAAsB,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAA1C,MAAM,QAAA,EAAE,SAAS,QAAyB,CAAC;IAE5C,IAAA,KAA0B,KAAK,CAAC,QAAQ,EAA2B,EAAlE,QAAQ,QAAA,EAAE,WAAW,QAA6C,CAAC;IACpE,IAAA,KAAgC,KAAK,CAAC,QAAQ,EAAsB,EAAnE,WAAW,QAAA,EAAE,cAAc,QAAwC,CAAC;IACrE,IAAA,KAA8B,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAlD,UAAU,QAAA,EAAE,aAAa,QAAyB,CAAC;IAE1D,IAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC;QAC7B,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,YAAY,CAAC,SAAS,CAAC,CAAC;QACxB,GAAG,CAAC,YAAY;aACb,IAAI,EAAE;aACN,IAAI,CAAC,QAAQ,CAAC;aACd,KAAK,CAAC,UAAC,CAAiB,IAAK,OAAA,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,EAAvB,CAAuB,CAAC;aACrD,OAAO,CAAC,cAAM,OAAA,UAAU,CAAC,KAAK,CAAC,EAAjB,CAAiB,CAAC,CAAC;IACtC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEV,KAAK,CAAC,SAAS,CAAC,cAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAE3C,IAAM,UAAU,GAAG;QACjB,UAAU,CAAC,SAAS,CAAC,CAAC;QACtB,OAAO,CAAC,UAAU,CAAC,CAAC;QACpB,YAAY,CAAC,SAAS,CAAC,CAAC;QACxB,WAAW,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC,CAAC;IAEF,IAAM,QAAQ,GAAG,UAAC,IAAiB;QACjC,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACpD,YAAY,CAAC,SAAS,CAAC,CAAC;QACxB,WAAW,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC,CAAC;IAEF,IAAM,MAAM,GAAG;QACb,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YAC9C,YAAY,CAAC,+BAA+B,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;QACD,SAAS,CAAC,IAAI,CAAC,CAAC;QAChB,YAAY,CAAC,SAAS,CAAC,CAAC;QACxB,IAAM,OAAO,GAAG,OAAO;YACrB,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YAC/F,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAEtF,OAAO;aACJ,IAAI,CAAC;YACJ,WAAW,CAAC,KAAK,CAAC,CAAC;YACnB,IAAI,EAAE,CAAC;QACT,CAAC,CAAC;aACD,KAAK,CAAC,UAAC,CAAiB,IAAK,OAAA,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,EAAvB,CAAuB,CAAC;aACrD,OAAO,CAAC,cAAM,OAAA,SAAS,CAAC,KAAK,CAAC,EAAhB,CAAgB,CAAC,CAAC;IACrC,CAAC,CAAC;IAEF,IAAM,aAAa,GAAG;QACpB,IAAI,CAAC,QAAQ;YAAE,OAAO;QACtB,aAAa,CAAC,IAAI,CAAC,CAAC;QACpB,cAAc,CAAC,SAAS,CAAC,CAAC;QAC1B,GAAG,CAAC,YAAY;aACb,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;aACnB,IAAI,CAAC;YACJ,WAAW,CAAC,SAAS,CAAC,CAAC;YACvB,IAAI,EAAE,CAAC;QACT,CAAC,CAAC;aACD,KAAK,CAAC,UAAC,CAAiB,IAAK,OAAA,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,EAAzB,CAAyB,CAAC;aACvD,OAAO,CAAC,cAAM,OAAA,aAAa,CAAC,KAAK,CAAC,EAApB,CAAoB,CAAC,CAAC;IACzC,CAAC,CAAC;IAEF,OAAO,CACL;QACE,oBAAC,gBAAW,IAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,GAAI;QACxE,oBAAC,eAAU,IACT,IAAI,EAAC,WAAW,EAChB,QAAQ,EAAC,8DAAY,EACrB,KAAK,EAAC,+DAAa,EACnB,OAAO,EACL,oBAAC,WAAM,IAAC,OAAO,EAAC,QAAQ,EAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAE,UAAU,0EAAuB,GAEjF;QAED,SAAS,IAAI,oBAAC,UAAK,IAAC,IAAI,EAAC,KAAK,IAAE,SAAS,CAAS;QAClD,WAAW,IAAI,oBAAC,UAAK,IAAC,IAAI,EAAC,KAAK,IAAE,WAAW,CAAS;QAEvD,oBAAC,cAAS,IACR,OAAO,EAAE;gBACP,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAA,CAAC,IAAI,OAAA,oBAAC,gBAAW,QAAE,CAAC,CAAC,IAAI,CAAe,EAAnC,CAAmC,EAAE;gBACrF,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,OAAO,EAAT,CAAS,EAAE;gBAC9D;oBACE,GAAG,EAAE,SAAS;oBACd,MAAM,EAAE,EAAE;oBACV,KAAK,EAAE,OAAO;oBACd,KAAK,EAAE,OAAO;oBACd,MAAM,EAAE,IAAI;oBACZ,MAAM,EAAE,UAAA,CAAC,IAAI,OAAA,CACX,oBAAC,gBAAW;wBACV,oBAAC,eAAU,IAAC,IAAI,EAAC,MAAM,EAAC,KAAK,EAAC,gFAAe,EAAC,OAAO,EAAE,cAAM,OAAA,QAAQ,CAAC,CAAC,CAAC,EAAX,CAAW,GAAI;wBAC5E,oBAAC,eAAU,IAAC,IAAI,EAAC,OAAO,EAAC,KAAK,EAAC,4CAAS,EAAC,MAAM,QAAC,OAAO,EAAE,cAAQ,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAI,CACrG,CACf,EALY,CAKZ;iBACF;aACF,EACD,IAAI,EAAE,KAAK,EACX,KAAK,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,EAAE,EAAJ,CAAI,EAChB,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,wBAAwB,GAChE;QAED,QAAQ,IAAI,CACX,oBAAC,UAAK,IACJ,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,kBAAkB,EAChE,OAAO,EAAE,cAAM,OAAA,WAAW,CAAC,KAAK,CAAC,EAAlB,CAAkB,EACjC,MAAM,EACJ;gBACE,oBAAC,WAAM,IAAC,OAAO,EAAC,WAAW,EAAC,OAAO,EAAE,cAAM,OAAA,WAAW,CAAC,KAAK,CAAC,EAAlB,CAAkB,EAAE,QAAQ,EAAE,MAAM,2CAAiB;gBAChG,oBAAC,WAAM,IAAC,OAAO,EAAC,QAAQ,EAAC,IAAI,EAAC,OAAO,EAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IACpE,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,WAAW,CAChC,CACR;YAGJ,SAAS,IAAI,oBAAC,UAAK,IAAC,IAAI,EAAC,KAAK,IAAE,SAAS,CAAS;YACnD,oBAAC,aAAQ;gBACP,oBAAC,UAAK,IAAC,KAAK,EAAC,kDAAU,EAAC,QAAQ,QAAC,IAAI;oBACnC,oBAAC,cAAS,IACR,KAAK,EAAE,IAAI,CAAC,IAAI,EAChB,QAAQ,EAAE,UAAA,CAAC,IAAI,OAAA,OAAO,uCAAM,IAAI,KAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,IAAG,EAA1C,CAA0C,EACzD,WAAW,EAAC,8KAAkC,GAC9C,CACI;gBACR,oBAAC,UAAK,IAAC,KAAK,EAAC,sDAAc,EAAC,QAAQ,QAAC,IAAI,QAAC,IAAI,EAAC,+KAAmC;oBAChF,oBAAC,cAAS,IACR,KAAK,EAAE,IAAI,CAAC,OAAO,EACnB,QAAQ,EAAE,UAAA,CAAC,IAAI,OAAA,OAAO,uCAAM,IAAI,KAAE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,IAAG,EAA7C,CAA6C,EAC5D,WAAW,EAAC,sBAAsB,GAClC,CACI,CACC,CACL,CACT;QAEA,QAAQ,IAAI,CACX,oBAAC,kBAAa,IACZ,KAAK,EAAC,qGAAqB,EAC3B,IAAI,EAAE,mCAAQ,QAAQ,CAAC,IAAI,2ZAA8E,EACzG,YAAY,EAAC,4CAAS,EACtB,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,cAAM,OAAA,WAAW,CAAC,SAAS,CAAC,EAAtB,CAAsB,EACtC,SAAS,EAAE,aAAa,GACxB,CACH,CACG,CACP,CAAC;AACJ,CAAC,CAAC;AA9JW,QAAA,kBAAkB,sBA8J7B","sourcesContent":["import * as React from 'react';\nimport { ApprovalRouteApi } from '../../services/api';\nimport { ApiClientError } from '../../services/httpClient';\nimport { RequestType } from '../../models';\nimport {\n ActionsCell,\n Alert,\n Breadcrumbs,\n Button,\n DataTable,\n Field,\n FormGrid,\n IconButton,\n Modal,\n ConfirmDialog,\n PageHeader,\n PrimaryCell,\n TextInput\n} from '../ui';\n\nexport interface IRequestTypesScreenProps {\n api: ApprovalRouteApi;\n}\n\ninterface IFormState {\n name: string;\n pageUrl: string;\n}\n\nconst EMPTY_FORM: IFormState = { name: '', pageUrl: '' };\n\nexport const RequestTypesScreen: React.FC = ({ api }) => {\n const [items, setItems] = React.useState([]);\n const [loading, setLoading] = React.useState(true);\n const [loadError, setLoadError] = React.useState();\n\n const [editing, setEditing] = React.useState();\n const [showForm, setShowForm] = React.useState(false);\n const [form, setForm] = React.useState(EMPTY_FORM);\n const [formError, setFormError] = React.useState();\n const [saving, setSaving] = React.useState(false);\n\n const [deleting, setDeleting] = React.useState();\n const [deleteError, setDeleteError] = React.useState();\n const [deleteBusy, setDeleteBusy] = React.useState(false);\n\n const load = React.useCallback(() => {\n setLoading(true);\n setLoadError(undefined);\n api.requestTypes\n .list()\n .then(setItems)\n .catch((e: ApiClientError) => setLoadError(e.message))\n .finally(() => setLoading(false));\n }, [api]);\n\n React.useEffect(() => { load(); }, [load]);\n\n const openCreate = (): void => {\n setEditing(undefined);\n setForm(EMPTY_FORM);\n setFormError(undefined);\n setShowForm(true);\n };\n\n const openEdit = (item: RequestType): void => {\n setEditing(item);\n setForm({ name: item.name, pageUrl: item.pageUrl });\n setFormError(undefined);\n setShowForm(true);\n };\n\n const submit = (): void => {\n if (!form.name.trim() || !form.pageUrl.trim()) {\n setFormError('Заполните имя и Url страницы.');\n return;\n }\n setSaving(true);\n setFormError(undefined);\n const request = editing\n ? api.requestTypes.update(editing.id, { name: form.name.trim(), pageUrl: form.pageUrl.trim() })\n : api.requestTypes.create({ name: form.name.trim(), pageUrl: form.pageUrl.trim() });\n\n request\n .then(() => {\n setShowForm(false);\n load();\n })\n .catch((e: ApiClientError) => setFormError(e.message))\n .finally(() => setSaving(false));\n };\n\n const confirmDelete = (): void => {\n if (!deleting) return;\n setDeleteBusy(true);\n setDeleteError(undefined);\n api.requestTypes\n .remove(deleting.id)\n .then(() => {\n setDeleting(undefined);\n load();\n })\n .catch((e: ApiClientError) => setDeleteError(e.message))\n .finally(() => setDeleteBusy(false));\n };\n\n return (\n
\n \n Добавить тип\n }\n />\n\n {loadError && {loadError}}\n {deleteError && {deleteError}}\n\n {r.name} },\n { key: 'url', header: 'Url страницы', render: r => r.pageUrl },\n {\n key: 'actions',\n header: '',\n width: '100px',\n align: 'right',\n sticky: true,\n render: r => (\n \n openEdit(r)} />\n { setDeleteError(undefined); setDeleting(r); }} />\n \n )\n }\n ]}\n rows={items}\n keyOf={r => r.id}\n emptyMessage={loading ? 'Загрузка...' : 'Типов заявок пока нет.'}\n />\n\n {showForm && (\n setShowForm(false)}\n footer={\n <>\n \n \n \n }\n >\n {formError && {formError}}\n \n \n setForm({ ...form, name: e.target.value })}\n placeholder=\"Например, Заявка на командировку\"\n />\n \n \n setForm({ ...form, pageUrl: e.target.value })}\n placeholder=\"/pages/business-trip\"\n />\n \n \n \n )}\n\n {deleting && (\n setDeleting(undefined)}\n onConfirm={confirmDelete}\n />\n )}\n
\n );\n};\n"]} \ No newline at end of file diff --git a/frontend/lib-commonjs/webparts/approvalAdmin/components/screens/ResolveScreen.js b/frontend/lib-commonjs/webparts/approvalAdmin/components/screens/ResolveScreen.js deleted file mode 100644 index 83eebed..0000000 --- a/frontend/lib-commonjs/webparts/approvalAdmin/components/screens/ResolveScreen.js +++ /dev/null @@ -1,78 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ResolveScreen = void 0; -var tslib_1 = require("tslib"); -var React = tslib_1.__importStar(require("react")); -var models_1 = require("../../models"); -var ui_1 = require("../ui"); -var STATUS_OPTIONS = [models_1.RouteStepStatus.Approval, models_1.RouteStepStatus.Execution] - .map(function (v) { return ({ value: v, label: models_1.routeStepStatusLabels[v] }); }); -var ResolveScreen = function (_a) { - var api = _a.api, currentUserEmail = _a.currentUserEmail; - var _b = React.useState([]), requestTypes = _b[0], setRequestTypes = _b[1]; - var _c = React.useState(''), requestTypeId = _c[0], setRequestTypeId = _c[1]; - var _d = React.useState(''), userEmail = _d[0], setUserEmail = _d[1]; - var _e = React.useState(''), projectId = _e[0], setProjectId = _e[1]; - var _f = React.useState(models_1.RouteStepStatus.Approval), status = _f[0], setStatus = _f[1]; - var _g = React.useState(false), busy = _g[0], setBusy = _g[1]; - var _h = React.useState(), error = _h[0], setError = _h[1]; - var _j = React.useState(), result = _j[0], setResult = _j[1]; - React.useEffect(function () { - api.requestTypes.list().then(setRequestTypes).catch(function () { }); - }, [api]); - var run = function () { - if (!requestTypeId) { - setError('Выберите тип заявки.'); - return; - } - setBusy(true); - setError(undefined); - setResult(undefined); - api.templateRoutes - .resolve({ - requestTypeId: Number(requestTypeId), - userEmail: userEmail.trim() || undefined, - projectId: projectId.trim() || undefined, - status: status - }) - .then(setResult) - .catch(function (e) { return setError(e.message); }) - .finally(function () { return setBusy(false); }); - }; - return (React.createElement("div", null, - React.createElement(ui_1.Breadcrumbs, { items: [{ label: 'Главная' }, { label: 'Проверка маршрута' }] }), - React.createElement(ui_1.PageHeader, { icon: "search", subtitle: "\u0414\u0438\u0430\u0433\u043D\u043E\u0441\u0442\u0438\u043A\u0430", title: "\u041F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u044F \u043C\u0430\u0440\u0448\u0440\u0443\u0442\u0430" }), - React.createElement("div", { style: { background: '#fff', borderRadius: 14, padding: 26, boxShadow: 'var(--sh-1)', border: '1px solid var(--gray-200)', marginBottom: 24 } }, - React.createElement(ui_1.FormGrid, null, - React.createElement(ui_1.Field, { label: "\u0422\u0438\u043F \u0437\u0430\u044F\u0432\u043A\u0438", required: true, full: true }, - React.createElement(ui_1.Select, { options: requestTypes.map(function (rt) { return ({ value: String(rt.id), label: rt.name }); }), placeholder: "\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0442\u0438\u043F \u0437\u0430\u044F\u0432\u043A\u0438", value: requestTypeId, onChange: function (e) { return setRequestTypeId(e.target.value); } })), - React.createElement(ui_1.Field, { label: "Email \u0438\u043D\u0438\u0446\u0438\u0430\u0442\u043E\u0440\u0430", hint: currentUserEmail ? "\u041F\u0443\u0441\u0442\u043E = \u0442\u0435\u043A\u0443\u0449\u0438\u0439 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C (".concat(currentUserEmail, ").") : 'Пусто = текущий пользователь из токена.' }, - React.createElement(ui_1.TextInput, { value: userEmail, onChange: function (e) { return setUserEmail(e.target.value); }, placeholder: "user@tnsu.kz" })), - React.createElement(ui_1.Field, { label: "Id \u043F\u0440\u043E\u0435\u043A\u0442\u0430 (Guid)", hint: "\u0417\u0430\u043F\u043E\u043B\u043D\u0438\u0442\u0435, \u0435\u0441\u043B\u0438 \u043C\u0430\u0440\u0448\u0440\u0443\u0442 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043E\u0442 \u043F\u0440\u043E\u0435\u043A\u0442\u0430." }, - React.createElement(ui_1.TextInput, { value: projectId, onChange: function (e) { return setProjectId(e.target.value); }, placeholder: "\u041D\u0435\u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u043E" })), - React.createElement(ui_1.Field, { label: "\u0421\u0442\u0430\u0442\u0443\u0441", required: true }, - React.createElement(ui_1.Select, { options: STATUS_OPTIONS, value: status, onChange: function (e) { return setStatus(e.target.value); } }))), - React.createElement("div", { style: { marginTop: 18 } }, - React.createElement(ui_1.Button, { variant: "accent", icon: "search", onClick: run, disabled: busy }, busy ? 'Проверка...' : 'Проверить'))), - error && React.createElement(ui_1.Alert, { kind: "err" }, error), - result && (React.createElement(React.Fragment, null, - React.createElement(ui_1.Alert, { kind: "ok" }, - "\u041C\u0430\u0440\u0448\u0440\u0443\u0442 #", - result.routeId, - " \u00B7 ", - models_1.routeTypeLabels[result.routeType], - result.requiresControl ? ' · требуется контроль исполнения' : ''), - React.createElement(ui_1.DataTable, { columns: [ - { key: 'order', header: '№', width: '50px', render: function (r) { return r.orderNo; } }, - { key: 'executor', header: 'Исполнитель', render: function (r) { var _a; return React.createElement(ui_1.PrimaryCell, null, (_a = r.executorEmail) !== null && _a !== void 0 ? _a : '—'); } }, - { key: 'position', header: 'Должность', render: function (r) { var _a; return (_a = r.position) !== null && _a !== void 0 ? _a : '—'; } }, - { - key: 'reassign', - header: 'Переназначение', - align: 'center', - render: function (r) { return (r.allowReassignToOtherApprovers ? 'Разрешено' : 'Нет'); } - } - ], rows: result.steps, keyOf: function (r) { return r.id; }, emptyMessage: "\u041C\u0430\u0440\u0448\u0440\u0443\u0442 \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u043B\u0441\u044F \u0431\u0435\u0437 \u0448\u0430\u0433\u043E\u0432 \u0434\u043B\u044F \u044D\u0442\u043E\u0433\u043E \u0441\u0442\u0430\u0442\u0443\u0441\u0430." }))))); -}; -exports.ResolveScreen = ResolveScreen; -//# sourceMappingURL=ResolveScreen.js.map \ No newline at end of file diff --git a/frontend/lib-commonjs/webparts/approvalAdmin/components/screens/ResolveScreen.js.map b/frontend/lib-commonjs/webparts/approvalAdmin/components/screens/ResolveScreen.js.map deleted file mode 100644 index f9801c5..0000000 --- a/frontend/lib-commonjs/webparts/approvalAdmin/components/screens/ResolveScreen.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ResolveScreen.js","sourceRoot":"","sources":["../../../../../src/webparts/approvalAdmin/components/screens/ResolveScreen.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { ApprovalRouteApi } from '../../services/api';\nimport { ApiClientError } from '../../services/httpClient';\nimport {\n RequestType,\n ResolveTemplateRouteResult,\n routeStepStatusLabels,\n RouteStepStatus,\n routeTypeLabels\n} from '../../models';\nimport {\n Alert,\n Breadcrumbs,\n Button,\n DataTable,\n Field,\n FormGrid,\n PageHeader,\n PrimaryCell,\n Select,\n TextInput\n} from '../ui';\n\nexport interface IResolveScreenProps {\n api: ApprovalRouteApi;\n currentUserEmail?: string;\n}\n\nconst STATUS_OPTIONS = [RouteStepStatus.Approval, RouteStepStatus.Execution]\n .map(v => ({ value: v, label: routeStepStatusLabels[v] }));\n\nexport const ResolveScreen: React.FC = ({ api, currentUserEmail }) => {\n const [requestTypes, setRequestTypes] = React.useState([]);\n const [requestTypeId, setRequestTypeId] = React.useState('');\n const [userEmail, setUserEmail] = React.useState('');\n const [projectId, setProjectId] = React.useState('');\n const [status, setStatus] = React.useState(RouteStepStatus.Approval);\n\n const [busy, setBusy] = React.useState(false);\n const [error, setError] = React.useState();\n const [result, setResult] = React.useState();\n\n React.useEffect(() => {\n api.requestTypes.list().then(setRequestTypes).catch(() => { /* показывается при попытке проверки */ });\n }, [api]);\n\n const run = (): void => {\n if (!requestTypeId) {\n setError('Выберите тип заявки.');\n return;\n }\n setBusy(true);\n setError(undefined);\n setResult(undefined);\n api.templateRoutes\n .resolve({\n requestTypeId: Number(requestTypeId),\n userEmail: userEmail.trim() || undefined,\n projectId: projectId.trim() || undefined,\n status\n })\n .then(setResult)\n .catch((e: ApiClientError) => setError(e.message))\n .finally(() => setBusy(false));\n };\n\n return (\n
\n \n \n\n
\n \n \n ({ value: String(rt.id), label: rt.name }))}\n placeholder=\"Выберите тип заявки\"\n value={requestTypeId}\n onChange={e => setRequestTypeId(e.target.value)}\n />\n \n \n setUserEmail(e.target.value)} placeholder=\"user@tnsu.kz\" />\n \n \n setProjectId(e.target.value)} placeholder=\"Необязательно\" />\n \n \n \n);\n\nexport const Textarea: React.FC> = props => (\n