@verdaccio/ui-components 5.0.0-next-9.19 → 5.0.0-next-9.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/api/use-data-mutation.js +1 -4
- package/build/api/use-data-mutation.js.map +1 -1
- package/build/api/use-data-mutation.mjs +1 -4
- package/build/api/use-data-mutation.mjs.map +1 -1
- package/build/api/use-data.d.ts +1 -0
- package/build/api/use-data.js +3 -2
- package/build/api/use-data.js.map +1 -1
- package/build/api/use-data.mjs +3 -3
- package/build/api/use-data.mjs.map +1 -1
- package/build/components/ActionBar/ActionBar.js +4 -2
- package/build/components/ActionBar/ActionBar.js.map +1 -1
- package/build/components/ActionBar/ActionBar.mjs +4 -2
- package/build/components/ActionBar/ActionBar.mjs.map +1 -1
- package/build/components/ActionBar/ActionBarAction.js +1 -1
- package/build/components/ActionBar/ActionBarAction.mjs +1 -1
- package/build/components/AppRoute/AppRoute.js +13 -0
- package/build/components/AppRoute/AppRoute.js.map +1 -1
- package/build/components/AppRoute/AppRoute.mjs +13 -0
- package/build/components/AppRoute/AppRoute.mjs.map +1 -1
- package/build/components/Author/Author.js +1 -1
- package/build/components/Author/Author.mjs +1 -1
- package/build/components/CopyClipboard/CopyToClipBoard.js +5 -0
- package/build/components/CopyClipboard/CopyToClipBoard.js.map +1 -1
- package/build/components/CopyClipboard/CopyToClipBoard.mjs +5 -0
- package/build/components/CopyClipboard/CopyToClipBoard.mjs.map +1 -1
- package/build/components/CopyClipboard/utils.js +14 -1
- package/build/components/CopyClipboard/utils.js.map +1 -1
- package/build/components/CopyClipboard/utils.mjs +14 -1
- package/build/components/CopyClipboard/utils.mjs.map +1 -1
- package/build/components/Dependencies/Dependencies.js +2 -1
- package/build/components/Dependencies/Dependencies.js.map +1 -1
- package/build/components/Dependencies/Dependencies.mjs +2 -1
- package/build/components/Dependencies/Dependencies.mjs.map +1 -1
- package/build/components/Dependencies/DependencyBlock.js +1 -1
- package/build/components/Dependencies/DependencyBlock.mjs +1 -1
- package/build/components/Developers/Title.js +1 -1
- package/build/components/Developers/Title.mjs +1 -1
- package/build/components/Developers/get-unique-developer-values.js +2 -1
- package/build/components/Developers/get-unique-developer-values.js.map +1 -1
- package/build/components/Developers/get-unique-developer-values.mjs +2 -1
- package/build/components/Developers/get-unique-developer-values.mjs.map +1 -1
- package/build/components/Distribution/Dist.js +3 -3
- package/build/components/Distribution/Dist.js.map +1 -1
- package/build/components/Distribution/Dist.mjs +3 -3
- package/build/components/Distribution/Dist.mjs.map +1 -1
- package/build/components/Engines/Engines.js +1 -1
- package/build/components/Engines/Engines.mjs +1 -1
- package/build/components/Forbidden/Forbidden.js +1 -1
- package/build/components/Forbidden/Forbidden.mjs +1 -1
- package/build/components/FundButton/FundButton.js +4 -3
- package/build/components/FundButton/FundButton.js.map +1 -1
- package/build/components/FundButton/FundButton.mjs +4 -3
- package/build/components/FundButton/FundButton.mjs.map +1 -1
- package/build/components/GenericError/GenericError.d.ts +3 -0
- package/build/components/GenericError/GenericError.js +60 -0
- package/build/components/GenericError/GenericError.js.map +1 -0
- package/build/components/GenericError/GenericError.mjs +54 -0
- package/build/components/GenericError/GenericError.mjs.map +1 -0
- package/build/components/GenericError/index.d.ts +1 -0
- package/build/components/GenericError/index.js +2 -0
- package/build/components/GenericError/index.mjs +2 -0
- package/build/components/Help/Help.js +1 -1
- package/build/components/Help/Help.mjs +1 -1
- package/build/components/Install/Install.js +1 -1
- package/build/components/Install/Install.mjs +1 -1
- package/build/components/Install/InstallListItem.js +2 -2
- package/build/components/Install/InstallListItem.js.map +1 -1
- package/build/components/Install/InstallListItem.mjs +2 -2
- package/build/components/Install/InstallListItem.mjs.map +1 -1
- package/build/components/Keywords/KeywordListItems.js +1 -1
- package/build/components/Keywords/KeywordListItems.js.map +1 -1
- package/build/components/Keywords/KeywordListItems.mjs +1 -1
- package/build/components/Keywords/KeywordListItems.mjs.map +1 -1
- package/build/components/Keywords/Keywords.js +2 -2
- package/build/components/Keywords/Keywords.js.map +1 -1
- package/build/components/Keywords/Keywords.mjs +2 -2
- package/build/components/Keywords/Keywords.mjs.map +1 -1
- package/build/components/LoginDialog/LoginDialogCloseButton.js +1 -1
- package/build/components/LoginDialog/LoginDialogCloseButton.mjs +1 -1
- package/build/components/LoginDialog/LoginDialogForm.js +2 -1
- package/build/components/LoginDialog/LoginDialogForm.js.map +1 -1
- package/build/components/LoginDialog/LoginDialogForm.mjs +2 -1
- package/build/components/LoginDialog/LoginDialogForm.mjs.map +1 -1
- package/build/components/LoginForm/Login.d.ts +1 -0
- package/build/components/LoginForm/Login.js +6 -4
- package/build/components/LoginForm/Login.js.map +1 -1
- package/build/components/LoginForm/Login.mjs +9 -7
- package/build/components/LoginForm/Login.mjs.map +1 -1
- package/build/components/LoginForm/PasswordField.js +4 -6
- package/build/components/LoginForm/PasswordField.js.map +1 -1
- package/build/components/LoginForm/PasswordField.mjs +4 -6
- package/build/components/LoginForm/PasswordField.mjs.map +1 -1
- package/build/components/LoginForm/UsernameField.js +4 -6
- package/build/components/LoginForm/UsernameField.js.map +1 -1
- package/build/components/LoginForm/UsernameField.mjs +4 -6
- package/build/components/LoginForm/UsernameField.mjs.map +1 -1
- package/build/components/LoginForm/styles.js +1 -1
- package/build/components/LoginForm/styles.mjs +1 -1
- package/build/components/LoginForm/useLoginForm.js +13 -3
- package/build/components/LoginForm/useLoginForm.js.map +1 -1
- package/build/components/LoginForm/useLoginForm.mjs +14 -4
- package/build/components/LoginForm/useLoginForm.mjs.map +1 -1
- package/build/components/NoItems/NoItems.js +2 -2
- package/build/components/NoItems/NoItems.mjs +1 -1
- package/build/components/NotFound/NotFound.js +1 -1
- package/build/components/NotFound/NotFound.mjs +1 -1
- package/build/components/Package/Package.d.ts +1 -1
- package/build/components/Package/Package.js +28 -29
- package/build/components/Package/Package.js.map +1 -1
- package/build/components/Package/Package.mjs +29 -30
- package/build/components/Package/Package.mjs.map +1 -1
- package/build/components/Person/Person.js +1 -1
- package/build/components/Person/Person.js.map +1 -1
- package/build/components/Person/Person.mjs +1 -1
- package/build/components/Person/Person.mjs.map +1 -1
- package/build/components/RawViewer/RawViewer.js +1 -1
- package/build/components/RawViewer/RawViewer.mjs +1 -1
- package/build/components/RegistryInfoDialog/RegistryInfoDialog.js +1 -1
- package/build/components/RegistryInfoDialog/RegistryInfoDialog.mjs +1 -1
- package/build/components/Repository/Repository.js +5 -8
- package/build/components/Repository/Repository.js.map +1 -1
- package/build/components/Repository/Repository.mjs +5 -8
- package/build/components/Repository/Repository.mjs.map +1 -1
- package/build/components/Search/AutoComplete/AutoComplete.d.ts +1 -0
- package/build/components/Search/AutoComplete/AutoComplete.js +4 -4
- package/build/components/Search/AutoComplete/AutoComplete.js.map +1 -1
- package/build/components/Search/AutoComplete/AutoComplete.mjs +4 -4
- package/build/components/Search/AutoComplete/AutoComplete.mjs.map +1 -1
- package/build/components/Search/Search.js +12 -4
- package/build/components/Search/Search.js.map +1 -1
- package/build/components/Search/Search.mjs +13 -5
- package/build/components/Search/Search.mjs.map +1 -1
- package/build/components/Search/SearchItem.js +1 -1
- package/build/components/Search/SearchItem.mjs +1 -1
- package/build/components/SettingsMenu/SettingsMenu.js +1 -1
- package/build/components/SettingsMenu/SettingsMenu.mjs +1 -1
- package/build/components/SideBarTitle/SideBarTitle.js +2 -2
- package/build/components/SideBarTitle/SideBarTitle.js.map +1 -1
- package/build/components/SideBarTitle/SideBarTitle.mjs +2 -2
- package/build/components/SideBarTitle/SideBarTitle.mjs.map +1 -1
- package/build/components/UpLinks/UpLinks.js +1 -1
- package/build/components/UpLinks/UpLinks.mjs +1 -1
- package/build/components/Versions/HistoryList.js +2 -2
- package/build/components/Versions/HistoryList.js.map +1 -1
- package/build/components/Versions/HistoryList.mjs +2 -2
- package/build/components/Versions/HistoryList.mjs.map +1 -1
- package/build/components/Versions/Versions.js +22 -21
- package/build/components/Versions/Versions.js.map +1 -1
- package/build/components/Versions/Versions.mjs +22 -21
- package/build/components/Versions/Versions.mjs.map +1 -1
- package/build/index.d.ts +1 -0
- package/build/index.js +4 -0
- package/build/index.mjs +4 -2
- package/build/pages/Stage/StageDetail.d.ts +2 -0
- package/build/pages/Stage/StageDetail.js +8 -0
- package/build/pages/Stage/StageDetail.js.map +1 -0
- package/build/pages/Stage/StageDetail.mjs +8 -0
- package/build/pages/Stage/StageDetail.mjs.map +1 -0
- package/build/pages/Stage/StageList.d.ts +2 -0
- package/build/pages/Stage/StageList.js +8 -0
- package/build/pages/Stage/StageList.js.map +1 -0
- package/build/pages/Stage/StageList.mjs +8 -0
- package/build/pages/Stage/StageList.mjs.map +1 -0
- package/build/pages/Stage/index.d.ts +2 -0
- package/build/pages/Version/Version.js +4 -1
- package/build/pages/Version/Version.js.map +1 -1
- package/build/pages/Version/Version.mjs +4 -1
- package/build/pages/Version/Version.mjs.map +1 -1
- package/build/providers/AuthProvider/AuthProvider.js +9 -7
- package/build/providers/AuthProvider/AuthProvider.js.map +1 -1
- package/build/providers/AuthProvider/AuthProvider.mjs +10 -8
- package/build/providers/AuthProvider/AuthProvider.mjs.map +1 -1
- package/build/providers/AuthProvider/utils.d.ts +12 -0
- package/build/providers/AuthProvider/utils.js +22 -0
- package/build/providers/AuthProvider/utils.js.map +1 -1
- package/build/providers/AuthProvider/utils.mjs +21 -2
- package/build/providers/AuthProvider/utils.mjs.map +1 -1
- package/build/providers/DownloadProvider/DownloadProvider.d.ts +1 -0
- package/build/providers/DownloadProvider/DownloadProvider.js +27 -4
- package/build/providers/DownloadProvider/DownloadProvider.js.map +1 -1
- package/build/providers/DownloadProvider/DownloadProvider.mjs +27 -6
- package/build/providers/DownloadProvider/DownloadProvider.mjs.map +1 -1
- package/build/providers/ManifestsProvider/ManifestsProvider.js +1 -1
- package/build/providers/ManifestsProvider/ManifestsProvider.js.map +1 -1
- package/build/providers/ManifestsProvider/ManifestsProvider.mjs +1 -1
- package/build/providers/ManifestsProvider/ManifestsProvider.mjs.map +1 -1
- package/build/providers/SearchProvider/SearchProvider.d.ts +1 -0
- package/build/providers/SearchProvider/SearchProvider.js +8 -6
- package/build/providers/SearchProvider/SearchProvider.js.map +1 -1
- package/build/providers/SearchProvider/SearchProvider.mjs +8 -6
- package/build/providers/SearchProvider/SearchProvider.mjs.map +1 -1
- package/build/providers/TranslatorProvider/TranslatorProvider.js +5 -3
- package/build/providers/TranslatorProvider/TranslatorProvider.js.map +1 -1
- package/build/providers/TranslatorProvider/TranslatorProvider.mjs +5 -3
- package/build/providers/TranslatorProvider/TranslatorProvider.mjs.map +1 -1
- package/build/providers/VersionProvider/VersionProvider.js +3 -3
- package/build/providers/VersionProvider/VersionProvider.js.map +1 -1
- package/build/providers/VersionProvider/VersionProvider.mjs +3 -3
- package/build/providers/VersionProvider/VersionProvider.mjs.map +1 -1
- package/build/sections/Detail/Tabs.js +1 -1
- package/build/sections/Detail/Tabs.mjs +1 -1
- package/build/sections/Footer/Footer.js +1 -1
- package/build/sections/Footer/Footer.mjs +1 -1
- package/build/sections/Header/Header.d.ts +0 -1
- package/build/sections/Header/Header.js +16 -14
- package/build/sections/Header/Header.js.map +1 -1
- package/build/sections/Header/Header.mjs +17 -15
- package/build/sections/Header/Header.mjs.map +1 -1
- package/build/sections/Header/HeaderGreetings.js +1 -1
- package/build/sections/Header/HeaderGreetings.mjs +1 -1
- package/build/sections/Header/HeaderMenu.js +26 -7
- package/build/sections/Header/HeaderMenu.js.map +1 -1
- package/build/sections/Header/HeaderMenu.mjs +26 -7
- package/build/sections/Header/HeaderMenu.mjs.map +1 -1
- package/build/sections/Header/HeaderRight.js +1 -1
- package/build/sections/Header/HeaderRight.mjs +1 -1
- package/build/sections/Header/HeaderSettingsDialog.js +1 -1
- package/build/sections/Header/HeaderSettingsDialog.mjs +1 -1
- package/build/sections/Header/LanguageSwitch.js +1 -1
- package/build/sections/Header/LanguageSwitch.mjs +1 -1
- package/build/sections/Header/RegistryInfoContent/RegistryInfoContent.js +1 -1
- package/build/sections/Header/RegistryInfoContent/RegistryInfoContent.mjs +1 -1
- package/build/sections/Home/Home.js +4 -3
- package/build/sections/Home/Home.js.map +1 -1
- package/build/sections/Home/Home.mjs +5 -4
- package/build/sections/Home/Home.mjs.map +1 -1
- package/build/sections/Security/AddUser.js +33 -18
- package/build/sections/Security/AddUser.js.map +1 -1
- package/build/sections/Security/AddUser.mjs +37 -22
- package/build/sections/Security/AddUser.mjs.map +1 -1
- package/build/sections/Security/ChangePassword.js +17 -15
- package/build/sections/Security/ChangePassword.js.map +1 -1
- package/build/sections/Security/ChangePassword.mjs +19 -17
- package/build/sections/Security/ChangePassword.mjs.map +1 -1
- package/build/sections/Security/Login.js +51 -35
- package/build/sections/Security/Login.js.map +1 -1
- package/build/sections/Security/Login.mjs +54 -38
- package/build/sections/Security/Login.mjs.map +1 -1
- package/build/sections/Security/Success.js +28 -24
- package/build/sections/Security/Success.js.map +1 -1
- package/build/sections/Security/Success.mjs +29 -25
- package/build/sections/Security/Success.mjs.map +1 -1
- package/build/sections/Stage/StageActions.d.ts +15 -0
- package/build/sections/Stage/StageActions.js +101 -0
- package/build/sections/Stage/StageActions.js.map +1 -0
- package/build/sections/Stage/StageActions.mjs +99 -0
- package/build/sections/Stage/StageActions.mjs.map +1 -0
- package/build/sections/Stage/StageDetail.d.ts +3 -0
- package/build/sections/Stage/StageDetail.js +110 -0
- package/build/sections/Stage/StageDetail.js.map +1 -0
- package/build/sections/Stage/StageDetail.mjs +108 -0
- package/build/sections/Stage/StageDetail.mjs.map +1 -0
- package/build/sections/Stage/StageList.d.ts +3 -0
- package/build/sections/Stage/StageList.js +153 -0
- package/build/sections/Stage/StageList.js.map +1 -0
- package/build/sections/Stage/StageList.mjs +151 -0
- package/build/sections/Stage/StageList.mjs.map +1 -0
- package/build/sections/Stage/index.d.ts +6 -0
- package/build/sections/Stage/index.js +13 -0
- package/build/sections/Stage/index.mjs +6 -0
- package/build/sections/Stage/types.d.ts +22 -0
- package/build/sections/Stage/useRequireSession.d.ts +14 -0
- package/build/sections/Stage/useRequireSession.js +33 -0
- package/build/sections/Stage/useRequireSession.js.map +1 -0
- package/build/sections/Stage/useRequireSession.mjs +33 -0
- package/build/sections/Stage/useRequireSession.mjs.map +1 -0
- package/build/sections/Stage/useStage.d.ts +34 -0
- package/build/sections/Stage/useStage.js +71 -0
- package/build/sections/Stage/useStage.js.map +1 -0
- package/build/sections/Stage/useStage.mjs +65 -0
- package/build/sections/Stage/useStage.mjs.map +1 -0
- package/build/store/api.js +7 -4
- package/build/store/api.js.map +1 -1
- package/build/store/api.mjs +7 -4
- package/build/store/api.mjs.map +1 -1
- package/build/types/packageMeta.d.ts +3 -2
- package/build/utils/cli-utils.js +2 -2
- package/build/utils/cli-utils.js.map +1 -1
- package/build/utils/cli-utils.mjs +2 -2
- package/build/utils/cli-utils.mjs.map +1 -1
- package/build/utils/index.js +1 -0
- package/build/utils/index.mjs +2 -2
- package/build/utils/routes.d.ts +5 -1
- package/build/utils/routes.js +4 -0
- package/build/utils/routes.js.map +1 -1
- package/build/utils/routes.mjs +4 -0
- package/build/utils/routes.mjs.map +1 -1
- package/build/utils/schemas.d.ts +1 -0
- package/build/utils/schemas.js +4 -4
- package/build/utils/schemas.js.map +1 -1
- package/build/utils/schemas.mjs +4 -4
- package/build/utils/schemas.mjs.map +1 -1
- package/build/utils/session-id.d.ts +8 -0
- package/build/utils/session-id.js +26 -0
- package/build/utils/session-id.js.map +1 -0
- package/build/utils/session-id.mjs +26 -0
- package/build/utils/session-id.mjs.map +1 -0
- package/build/utils/token.d.ts +1 -0
- package/build/utils/token.js +12 -8
- package/build/utils/token.js.map +1 -1
- package/build/utils/token.mjs +12 -9
- package/build/utils/token.mjs.map +1 -1
- package/build/utils/url.js +1 -1
- package/build/utils/url.js.map +1 -1
- package/build/utils/url.mjs +1 -1
- package/build/utils/url.mjs.map +1 -1
- package/build/utils/utils.d.ts +10 -0
- package/build/utils/utils.js +26 -0
- package/build/utils/utils.js.map +1 -1
- package/build/utils/utils.mjs +25 -1
- package/build/utils/utils.mjs.map +1 -1
- package/package.json +6 -6
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
const require_runtime = require("../../_virtual/_rolldown/runtime.js");
|
|
2
|
+
const require_useStage = require("./useStage.js");
|
|
3
|
+
let react = require("react");
|
|
4
|
+
react = require_runtime.__toESM(react);
|
|
5
|
+
let react_i18next = require("react-i18next");
|
|
6
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
7
|
+
let _mui_material = require("@mui/material");
|
|
8
|
+
//#region src/sections/Stage/StageActions.tsx
|
|
9
|
+
/**
|
|
10
|
+
* Approve / reject buttons with a confirmation step.
|
|
11
|
+
*
|
|
12
|
+
* Both actions are irreversible from the UI: approving publishes the version
|
|
13
|
+
* for real, rejecting deletes the staged record and its tarball.
|
|
14
|
+
*/
|
|
15
|
+
var StageActions = ({ item, onDone }) => {
|
|
16
|
+
const { t } = (0, react_i18next.useTranslation)();
|
|
17
|
+
const [pending, setPending] = (0, react.useState)(null);
|
|
18
|
+
const [isBusy, setIsBusy] = (0, react.useState)(false);
|
|
19
|
+
const [error, setError] = (0, react.useState)(null);
|
|
20
|
+
const close = (0, react.useCallback)(() => {
|
|
21
|
+
if (!isBusy) {
|
|
22
|
+
setPending(null);
|
|
23
|
+
setError(null);
|
|
24
|
+
}
|
|
25
|
+
}, [isBusy]);
|
|
26
|
+
const confirm = (0, react.useCallback)(async () => {
|
|
27
|
+
if (!pending) return;
|
|
28
|
+
setIsBusy(true);
|
|
29
|
+
setError(null);
|
|
30
|
+
try {
|
|
31
|
+
if (pending === "approve") await require_useStage.approveStagedVersion(item.id);
|
|
32
|
+
else await require_useStage.rejectStagedVersion(item.id);
|
|
33
|
+
setPending(null);
|
|
34
|
+
onDone();
|
|
35
|
+
} catch (err) {
|
|
36
|
+
setError(err?.message ?? t("stage.error.action"));
|
|
37
|
+
} finally {
|
|
38
|
+
setIsBusy(false);
|
|
39
|
+
}
|
|
40
|
+
}, [
|
|
41
|
+
item.id,
|
|
42
|
+
onDone,
|
|
43
|
+
pending,
|
|
44
|
+
t
|
|
45
|
+
]);
|
|
46
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
47
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.Button, {
|
|
48
|
+
color: "primary",
|
|
49
|
+
"data-testid": `stage-approve-${item.id}`,
|
|
50
|
+
disabled: isBusy,
|
|
51
|
+
onClick: () => setPending("approve"),
|
|
52
|
+
size: "small",
|
|
53
|
+
variant: "outlined",
|
|
54
|
+
children: t("stage.action.approve")
|
|
55
|
+
}),
|
|
56
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.Button, {
|
|
57
|
+
color: "error",
|
|
58
|
+
"data-testid": `stage-reject-${item.id}`,
|
|
59
|
+
disabled: isBusy,
|
|
60
|
+
onClick: () => setPending("reject"),
|
|
61
|
+
size: "small",
|
|
62
|
+
children: t("stage.action.reject")
|
|
63
|
+
}),
|
|
64
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mui_material.Dialog, {
|
|
65
|
+
onClose: close,
|
|
66
|
+
open: pending !== null,
|
|
67
|
+
children: [
|
|
68
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.DialogTitle, { children: pending === "approve" ? t("stage.confirm.approveTitle") : t("stage.confirm.rejectTitle") }),
|
|
69
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mui_material.DialogContent, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.DialogContentText, { children: pending === "approve" ? t("stage.confirm.approveBody", {
|
|
70
|
+
package: item.packageName,
|
|
71
|
+
version: item.version,
|
|
72
|
+
tag: item.tag
|
|
73
|
+
}) : t("stage.confirm.rejectBody", {
|
|
74
|
+
package: item.packageName,
|
|
75
|
+
version: item.version
|
|
76
|
+
}) }), error && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.Typography, {
|
|
77
|
+
color: "error",
|
|
78
|
+
marginTop: 2,
|
|
79
|
+
role: "alert",
|
|
80
|
+
children: error
|
|
81
|
+
})] }),
|
|
82
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mui_material.DialogActions, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.Button, {
|
|
83
|
+
disabled: isBusy,
|
|
84
|
+
onClick: close,
|
|
85
|
+
children: t("button.cancel")
|
|
86
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.Button, {
|
|
87
|
+
color: pending === "approve" ? "primary" : "error",
|
|
88
|
+
"data-testid": "stage-confirm",
|
|
89
|
+
disabled: isBusy,
|
|
90
|
+
onClick: confirm,
|
|
91
|
+
variant: "contained",
|
|
92
|
+
children: pending === "approve" ? t("stage.action.approve") : t("stage.action.reject")
|
|
93
|
+
})] })
|
|
94
|
+
]
|
|
95
|
+
})
|
|
96
|
+
] });
|
|
97
|
+
};
|
|
98
|
+
//#endregion
|
|
99
|
+
exports.default = StageActions;
|
|
100
|
+
|
|
101
|
+
//# sourceMappingURL=StageActions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StageActions.js","names":[],"sources":["../../../src/sections/Stage/StageActions.tsx"],"sourcesContent":["import {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n Typography,\n} from '@mui/material';\nimport React, { useCallback, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport type { StagePackageVersion } from './types';\nimport { approveStagedVersion, rejectStagedVersion } from './useStage';\n\ntype PendingAction = 'approve' | 'reject' | null;\n\ninterface Props {\n item: StagePackageVersion;\n /** Called after a successful approve/reject so the caller can refresh. */\n onDone: () => void;\n}\n\n/**\n * Approve / reject buttons with a confirmation step.\n *\n * Both actions are irreversible from the UI: approving publishes the version\n * for real, rejecting deletes the staged record and its tarball.\n */\nconst StageActions: React.FC<Props> = ({ item, onDone }) => {\n const { t } = useTranslation();\n const [pending, setPending] = useState<PendingAction>(null);\n const [isBusy, setIsBusy] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const close = useCallback(() => {\n if (!isBusy) {\n setPending(null);\n setError(null);\n }\n }, [isBusy]);\n\n const confirm = useCallback(async () => {\n if (!pending) {\n return;\n }\n setIsBusy(true);\n setError(null);\n try {\n if (pending === 'approve') {\n await approveStagedVersion(item.id);\n } else {\n await rejectStagedVersion(item.id);\n }\n setPending(null);\n onDone();\n } catch (err: any) {\n // 409 here means the version got published by another route meanwhile,\n // and the staged item is deliberately kept so it can still be inspected\n setError(err?.message ?? t('stage.error.action'));\n } finally {\n setIsBusy(false);\n }\n }, [item.id, onDone, pending, t]);\n\n return (\n <>\n <Button\n color=\"primary\"\n data-testid={`stage-approve-${item.id}`}\n disabled={isBusy}\n onClick={() => setPending('approve')}\n size=\"small\"\n variant=\"outlined\"\n >\n {t('stage.action.approve')}\n </Button>\n <Button\n color=\"error\"\n data-testid={`stage-reject-${item.id}`}\n disabled={isBusy}\n onClick={() => setPending('reject')}\n size=\"small\"\n >\n {t('stage.action.reject')}\n </Button>\n\n <Dialog onClose={close} open={pending !== null}>\n <DialogTitle>\n {pending === 'approve' ? t('stage.confirm.approveTitle') : t('stage.confirm.rejectTitle')}\n </DialogTitle>\n <DialogContent>\n <DialogContentText>\n {pending === 'approve'\n ? t('stage.confirm.approveBody', {\n package: item.packageName,\n version: item.version,\n tag: item.tag,\n })\n : t('stage.confirm.rejectBody', {\n package: item.packageName,\n version: item.version,\n })}\n </DialogContentText>\n {error && (\n <Typography color=\"error\" marginTop={2} role=\"alert\">\n {error}\n </Typography>\n )}\n </DialogContent>\n <DialogActions>\n <Button disabled={isBusy} onClick={close}>\n {t('button.cancel')}\n </Button>\n <Button\n color={pending === 'approve' ? 'primary' : 'error'}\n data-testid=\"stage-confirm\"\n disabled={isBusy}\n onClick={confirm}\n variant=\"contained\"\n >\n {pending === 'approve' ? t('stage.action.approve') : t('stage.action.reject')}\n </Button>\n </DialogActions>\n </Dialog>\n </>\n );\n};\n\nexport default StageActions;\n"],"mappings":";;;;;;;;;;;;;;AA6BA,IAAM,gBAAiC,EAAE,MAAM,aAAa;CAC1D,MAAM,EAAE,OAAA,GAAM,cAAA,eAAA,CAAe;CAC7B,MAAM,CAAC,SAAS,eAAA,GAAc,MAAA,SAAA,CAAwB,IAAI;CAC1D,MAAM,CAAC,QAAQ,cAAA,GAAa,MAAA,SAAA,CAAS,KAAK;CAC1C,MAAM,CAAC,OAAO,aAAA,GAAY,MAAA,SAAA,CAAwB,IAAI;CAEtD,MAAM,SAAA,GAAQ,MAAA,YAAA,OAAkB;EAC9B,IAAI,CAAC,QAAQ;GACX,WAAW,IAAI;GACf,SAAS,IAAI;EACf;CACF,GAAG,CAAC,MAAM,CAAC;CAEX,MAAM,WAAA,GAAU,MAAA,YAAA,CAAY,YAAY;EACtC,IAAI,CAAC,SACH;EAEF,UAAU,IAAI;EACd,SAAS,IAAI;EACb,IAAI;GACF,IAAI,YAAY,WACd,MAAM,iBAAA,qBAAqB,KAAK,EAAE;QAElC,MAAM,iBAAA,oBAAoB,KAAK,EAAE;GAEnC,WAAW,IAAI;GACf,OAAO;EACT,SAAS,KAAU;GAGjB,SAAS,KAAK,WAAW,EAAE,oBAAoB,CAAC;EAClD,UAAU;GACR,UAAU,KAAK;EACjB;CACF,GAAG;EAAC,KAAK;EAAI;EAAQ;EAAS;CAAC,CAAC;CAEhC,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAA,kBAAA,UAAA,EAAA,UAAA;EACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAA,QAAD;GACE,OAAM;GACN,eAAa,iBAAiB,KAAK;GACnC,UAAU;GACV,eAAe,WAAW,SAAS;GACnC,MAAK;GACL,SAAQ;GAEP,UAAA,EAAE,sBAAsB;EACnB,CAAA;EACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAA,QAAD;GACE,OAAM;GACN,eAAa,gBAAgB,KAAK;GAClC,UAAU;GACV,eAAe,WAAW,QAAQ;GAClC,MAAK;GAEJ,UAAA,EAAE,qBAAqB;EAClB,CAAA;EAER,iBAAA,GAAA,kBAAA,KAAA,CAAC,cAAA,QAAD;GAAQ,SAAS;GAAO,MAAM,YAAY;GAA1C,UAAA;IACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAA,aAAD,EAAA,UACG,YAAY,YAAY,EAAE,4BAA4B,IAAI,EAAE,2BAA2B,EAC7E,CAAA;IACb,iBAAA,GAAA,kBAAA,KAAA,CAAC,cAAA,eAAD,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAA,mBAAD,EAAA,UACG,YAAY,YACT,EAAE,6BAA6B;KAC7B,SAAS,KAAK;KACd,SAAS,KAAK;KACd,KAAK,KAAK;IACZ,CAAC,IACD,EAAE,4BAA4B;KAC5B,SAAS,KAAK;KACd,SAAS,KAAK;IAChB,CAAC,EACY,CAAA,GAClB,SACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAA,YAAD;KAAY,OAAM;KAAQ,WAAW;KAAG,MAAK;KAC1C,UAAA;IACS,CAAA,CAED,EAAA,CAAA;IACf,iBAAA,GAAA,kBAAA,KAAA,CAAC,cAAA,eAAD,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAA,QAAD;KAAQ,UAAU;KAAQ,SAAS;KAChC,UAAA,EAAE,eAAe;IACZ,CAAA,GACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAA,QAAD;KACE,OAAO,YAAY,YAAY,YAAY;KAC3C,eAAY;KACZ,UAAU;KACV,SAAS;KACT,SAAQ;KAEP,UAAA,YAAY,YAAY,EAAE,sBAAsB,IAAI,EAAE,qBAAqB;IACtE,CAAA,CACK,EAAA,CAAA;GACT;;CACR,EAAA,CAAA;AAEN"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { approveStagedVersion, rejectStagedVersion } from "./useStage.mjs";
|
|
2
|
+
import { useCallback, useState } from "react";
|
|
3
|
+
import { useTranslation } from "react-i18next";
|
|
4
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
import { Button, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, Typography } from "@mui/material";
|
|
6
|
+
//#region src/sections/Stage/StageActions.tsx
|
|
7
|
+
/**
|
|
8
|
+
* Approve / reject buttons with a confirmation step.
|
|
9
|
+
*
|
|
10
|
+
* Both actions are irreversible from the UI: approving publishes the version
|
|
11
|
+
* for real, rejecting deletes the staged record and its tarball.
|
|
12
|
+
*/
|
|
13
|
+
var StageActions = ({ item, onDone }) => {
|
|
14
|
+
const { t } = useTranslation();
|
|
15
|
+
const [pending, setPending] = useState(null);
|
|
16
|
+
const [isBusy, setIsBusy] = useState(false);
|
|
17
|
+
const [error, setError] = useState(null);
|
|
18
|
+
const close = useCallback(() => {
|
|
19
|
+
if (!isBusy) {
|
|
20
|
+
setPending(null);
|
|
21
|
+
setError(null);
|
|
22
|
+
}
|
|
23
|
+
}, [isBusy]);
|
|
24
|
+
const confirm = useCallback(async () => {
|
|
25
|
+
if (!pending) return;
|
|
26
|
+
setIsBusy(true);
|
|
27
|
+
setError(null);
|
|
28
|
+
try {
|
|
29
|
+
if (pending === "approve") await approveStagedVersion(item.id);
|
|
30
|
+
else await rejectStagedVersion(item.id);
|
|
31
|
+
setPending(null);
|
|
32
|
+
onDone();
|
|
33
|
+
} catch (err) {
|
|
34
|
+
setError(err?.message ?? t("stage.error.action"));
|
|
35
|
+
} finally {
|
|
36
|
+
setIsBusy(false);
|
|
37
|
+
}
|
|
38
|
+
}, [
|
|
39
|
+
item.id,
|
|
40
|
+
onDone,
|
|
41
|
+
pending,
|
|
42
|
+
t
|
|
43
|
+
]);
|
|
44
|
+
return /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
45
|
+
/* @__PURE__ */ jsx(Button, {
|
|
46
|
+
color: "primary",
|
|
47
|
+
"data-testid": `stage-approve-${item.id}`,
|
|
48
|
+
disabled: isBusy,
|
|
49
|
+
onClick: () => setPending("approve"),
|
|
50
|
+
size: "small",
|
|
51
|
+
variant: "outlined",
|
|
52
|
+
children: t("stage.action.approve")
|
|
53
|
+
}),
|
|
54
|
+
/* @__PURE__ */ jsx(Button, {
|
|
55
|
+
color: "error",
|
|
56
|
+
"data-testid": `stage-reject-${item.id}`,
|
|
57
|
+
disabled: isBusy,
|
|
58
|
+
onClick: () => setPending("reject"),
|
|
59
|
+
size: "small",
|
|
60
|
+
children: t("stage.action.reject")
|
|
61
|
+
}),
|
|
62
|
+
/* @__PURE__ */ jsxs(Dialog, {
|
|
63
|
+
onClose: close,
|
|
64
|
+
open: pending !== null,
|
|
65
|
+
children: [
|
|
66
|
+
/* @__PURE__ */ jsx(DialogTitle, { children: pending === "approve" ? t("stage.confirm.approveTitle") : t("stage.confirm.rejectTitle") }),
|
|
67
|
+
/* @__PURE__ */ jsxs(DialogContent, { children: [/* @__PURE__ */ jsx(DialogContentText, { children: pending === "approve" ? t("stage.confirm.approveBody", {
|
|
68
|
+
package: item.packageName,
|
|
69
|
+
version: item.version,
|
|
70
|
+
tag: item.tag
|
|
71
|
+
}) : t("stage.confirm.rejectBody", {
|
|
72
|
+
package: item.packageName,
|
|
73
|
+
version: item.version
|
|
74
|
+
}) }), error && /* @__PURE__ */ jsx(Typography, {
|
|
75
|
+
color: "error",
|
|
76
|
+
marginTop: 2,
|
|
77
|
+
role: "alert",
|
|
78
|
+
children: error
|
|
79
|
+
})] }),
|
|
80
|
+
/* @__PURE__ */ jsxs(DialogActions, { children: [/* @__PURE__ */ jsx(Button, {
|
|
81
|
+
disabled: isBusy,
|
|
82
|
+
onClick: close,
|
|
83
|
+
children: t("button.cancel")
|
|
84
|
+
}), /* @__PURE__ */ jsx(Button, {
|
|
85
|
+
color: pending === "approve" ? "primary" : "error",
|
|
86
|
+
"data-testid": "stage-confirm",
|
|
87
|
+
disabled: isBusy,
|
|
88
|
+
onClick: confirm,
|
|
89
|
+
variant: "contained",
|
|
90
|
+
children: pending === "approve" ? t("stage.action.approve") : t("stage.action.reject")
|
|
91
|
+
})] })
|
|
92
|
+
]
|
|
93
|
+
})
|
|
94
|
+
] });
|
|
95
|
+
};
|
|
96
|
+
//#endregion
|
|
97
|
+
export { StageActions as default };
|
|
98
|
+
|
|
99
|
+
//# sourceMappingURL=StageActions.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StageActions.mjs","names":[],"sources":["../../../src/sections/Stage/StageActions.tsx"],"sourcesContent":["import {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n Typography,\n} from '@mui/material';\nimport React, { useCallback, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport type { StagePackageVersion } from './types';\nimport { approveStagedVersion, rejectStagedVersion } from './useStage';\n\ntype PendingAction = 'approve' | 'reject' | null;\n\ninterface Props {\n item: StagePackageVersion;\n /** Called after a successful approve/reject so the caller can refresh. */\n onDone: () => void;\n}\n\n/**\n * Approve / reject buttons with a confirmation step.\n *\n * Both actions are irreversible from the UI: approving publishes the version\n * for real, rejecting deletes the staged record and its tarball.\n */\nconst StageActions: React.FC<Props> = ({ item, onDone }) => {\n const { t } = useTranslation();\n const [pending, setPending] = useState<PendingAction>(null);\n const [isBusy, setIsBusy] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const close = useCallback(() => {\n if (!isBusy) {\n setPending(null);\n setError(null);\n }\n }, [isBusy]);\n\n const confirm = useCallback(async () => {\n if (!pending) {\n return;\n }\n setIsBusy(true);\n setError(null);\n try {\n if (pending === 'approve') {\n await approveStagedVersion(item.id);\n } else {\n await rejectStagedVersion(item.id);\n }\n setPending(null);\n onDone();\n } catch (err: any) {\n // 409 here means the version got published by another route meanwhile,\n // and the staged item is deliberately kept so it can still be inspected\n setError(err?.message ?? t('stage.error.action'));\n } finally {\n setIsBusy(false);\n }\n }, [item.id, onDone, pending, t]);\n\n return (\n <>\n <Button\n color=\"primary\"\n data-testid={`stage-approve-${item.id}`}\n disabled={isBusy}\n onClick={() => setPending('approve')}\n size=\"small\"\n variant=\"outlined\"\n >\n {t('stage.action.approve')}\n </Button>\n <Button\n color=\"error\"\n data-testid={`stage-reject-${item.id}`}\n disabled={isBusy}\n onClick={() => setPending('reject')}\n size=\"small\"\n >\n {t('stage.action.reject')}\n </Button>\n\n <Dialog onClose={close} open={pending !== null}>\n <DialogTitle>\n {pending === 'approve' ? t('stage.confirm.approveTitle') : t('stage.confirm.rejectTitle')}\n </DialogTitle>\n <DialogContent>\n <DialogContentText>\n {pending === 'approve'\n ? t('stage.confirm.approveBody', {\n package: item.packageName,\n version: item.version,\n tag: item.tag,\n })\n : t('stage.confirm.rejectBody', {\n package: item.packageName,\n version: item.version,\n })}\n </DialogContentText>\n {error && (\n <Typography color=\"error\" marginTop={2} role=\"alert\">\n {error}\n </Typography>\n )}\n </DialogContent>\n <DialogActions>\n <Button disabled={isBusy} onClick={close}>\n {t('button.cancel')}\n </Button>\n <Button\n color={pending === 'approve' ? 'primary' : 'error'}\n data-testid=\"stage-confirm\"\n disabled={isBusy}\n onClick={confirm}\n variant=\"contained\"\n >\n {pending === 'approve' ? t('stage.action.approve') : t('stage.action.reject')}\n </Button>\n </DialogActions>\n </Dialog>\n </>\n );\n};\n\nexport default StageActions;\n"],"mappings":";;;;;;;;;;;;AA6BA,IAAM,gBAAiC,EAAE,MAAM,aAAa;CAC1D,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,CAAC,SAAS,cAAc,SAAwB,IAAI;CAC1D,MAAM,CAAC,QAAQ,aAAa,SAAS,KAAK;CAC1C,MAAM,CAAC,OAAO,YAAY,SAAwB,IAAI;CAEtD,MAAM,QAAQ,kBAAkB;EAC9B,IAAI,CAAC,QAAQ;GACX,WAAW,IAAI;GACf,SAAS,IAAI;EACf;CACF,GAAG,CAAC,MAAM,CAAC;CAEX,MAAM,UAAU,YAAY,YAAY;EACtC,IAAI,CAAC,SACH;EAEF,UAAU,IAAI;EACd,SAAS,IAAI;EACb,IAAI;GACF,IAAI,YAAY,WACd,MAAM,qBAAqB,KAAK,EAAE;QAElC,MAAM,oBAAoB,KAAK,EAAE;GAEnC,WAAW,IAAI;GACf,OAAO;EACT,SAAS,KAAU;GAGjB,SAAS,KAAK,WAAW,EAAE,oBAAoB,CAAC;EAClD,UAAU;GACR,UAAU,KAAK;EACjB;CACF,GAAG;EAAC,KAAK;EAAI;EAAQ;EAAS;CAAC,CAAC;CAEhC,OACE,qBAAA,YAAA,EAAA,UAAA;EACE,oBAAC,QAAD;GACE,OAAM;GACN,eAAa,iBAAiB,KAAK;GACnC,UAAU;GACV,eAAe,WAAW,SAAS;GACnC,MAAK;GACL,SAAQ;GAEP,UAAA,EAAE,sBAAsB;EACnB,CAAA;EACR,oBAAC,QAAD;GACE,OAAM;GACN,eAAa,gBAAgB,KAAK;GAClC,UAAU;GACV,eAAe,WAAW,QAAQ;GAClC,MAAK;GAEJ,UAAA,EAAE,qBAAqB;EAClB,CAAA;EAER,qBAAC,QAAD;GAAQ,SAAS;GAAO,MAAM,YAAY;GAA1C,UAAA;IACE,oBAAC,aAAD,EAAA,UACG,YAAY,YAAY,EAAE,4BAA4B,IAAI,EAAE,2BAA2B,EAC7E,CAAA;IACb,qBAAC,eAAD,EAAA,UAAA,CACE,oBAAC,mBAAD,EAAA,UACG,YAAY,YACT,EAAE,6BAA6B;KAC7B,SAAS,KAAK;KACd,SAAS,KAAK;KACd,KAAK,KAAK;IACZ,CAAC,IACD,EAAE,4BAA4B;KAC5B,SAAS,KAAK;KACd,SAAS,KAAK;IAChB,CAAC,EACY,CAAA,GAClB,SACC,oBAAC,YAAD;KAAY,OAAM;KAAQ,WAAW;KAAG,MAAK;KAC1C,UAAA;IACS,CAAA,CAED,EAAA,CAAA;IACf,qBAAC,eAAD,EAAA,UAAA,CACE,oBAAC,QAAD;KAAQ,UAAU;KAAQ,SAAS;KAChC,UAAA,EAAE,eAAe;IACZ,CAAA,GACR,oBAAC,QAAD;KACE,OAAO,YAAY,YAAY,YAAY;KAC3C,eAAY;KACZ,UAAU;KACV,SAAS;KACT,SAAQ;KAEP,UAAA,YAAY,YAAY,EAAE,sBAAsB,IAAI,EAAE,qBAAqB;IACtE,CAAA,CACK,EAAA,CAAA;GACT;;CACR,EAAA,CAAA;AAEN"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
const require_runtime = require("../../_virtual/_rolldown/runtime.js");
|
|
2
|
+
const require_routes = require("../../utils/routes.js");
|
|
3
|
+
require("../../utils/index.js");
|
|
4
|
+
const require_useStage = require("./useStage.js");
|
|
5
|
+
const require_StageActions = require("./StageActions.js");
|
|
6
|
+
const require_useRequireSession = require("./useRequireSession.js");
|
|
7
|
+
let react = require("react");
|
|
8
|
+
react = require_runtime.__toESM(react);
|
|
9
|
+
let react_i18next = require("react-i18next");
|
|
10
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
11
|
+
let react_router = require("react-router");
|
|
12
|
+
let _mui_material = require("@mui/material");
|
|
13
|
+
//#region src/sections/Stage/StageDetail.tsx
|
|
14
|
+
var StageDetail = () => {
|
|
15
|
+
const { t } = (0, react_i18next.useTranslation)();
|
|
16
|
+
const navigate = (0, react_router.useNavigate)();
|
|
17
|
+
const { stageId } = (0, react_router.useParams)();
|
|
18
|
+
const isLoggedIn = require_useRequireSession.useRequireSession();
|
|
19
|
+
const { data, error, isLoading } = require_useStage.useStageItem(stageId);
|
|
20
|
+
const handleDownload = (0, react.useCallback)(async () => {
|
|
21
|
+
if (data) await require_useStage.downloadStagedTarball(data);
|
|
22
|
+
}, [data]);
|
|
23
|
+
if (!isLoggedIn) return null;
|
|
24
|
+
if (isLoading) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.Box, {
|
|
25
|
+
display: "flex",
|
|
26
|
+
justifyContent: "center",
|
|
27
|
+
padding: 4,
|
|
28
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.CircularProgress, {})
|
|
29
|
+
});
|
|
30
|
+
if (error || !data) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.Box, {
|
|
31
|
+
padding: 2,
|
|
32
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.Typography, {
|
|
33
|
+
color: "error",
|
|
34
|
+
role: "alert",
|
|
35
|
+
children: t("stage.error.notFound")
|
|
36
|
+
})
|
|
37
|
+
});
|
|
38
|
+
const rows = [
|
|
39
|
+
[t("stage.column.package"), data.packageName],
|
|
40
|
+
[t("stage.column.version"), data.version],
|
|
41
|
+
[t("stage.column.tag"), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.Chip, {
|
|
42
|
+
label: data.tag,
|
|
43
|
+
size: "small"
|
|
44
|
+
}, "tag")],
|
|
45
|
+
[t("stage.column.stagedBy"), `${data.actor} (${data.actorType})`],
|
|
46
|
+
[t("stage.column.date"), new Date(data.createdAt).toLocaleString()],
|
|
47
|
+
[t("stage.column.access"), data.access],
|
|
48
|
+
[t("stage.column.shasum"), data.shasum]
|
|
49
|
+
];
|
|
50
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mui_material.Box, {
|
|
51
|
+
padding: 2,
|
|
52
|
+
children: [
|
|
53
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.Button, {
|
|
54
|
+
onClick: () => navigate(require_routes.Route.STAGE),
|
|
55
|
+
size: "small",
|
|
56
|
+
children: t("stage.backToList")
|
|
57
|
+
}),
|
|
58
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mui_material.Typography, {
|
|
59
|
+
component: "h1",
|
|
60
|
+
gutterBottom: true,
|
|
61
|
+
variant: "h5",
|
|
62
|
+
children: [
|
|
63
|
+
data.packageName,
|
|
64
|
+
"@",
|
|
65
|
+
data.version
|
|
66
|
+
]
|
|
67
|
+
}),
|
|
68
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.Paper, {
|
|
69
|
+
sx: {
|
|
70
|
+
marginTop: 2,
|
|
71
|
+
overflowX: "auto"
|
|
72
|
+
},
|
|
73
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.Table, {
|
|
74
|
+
"data-testid": "stage-detail",
|
|
75
|
+
size: "small",
|
|
76
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.TableBody, { children: rows.map(([label, value]) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mui_material.TableRow, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.TableCell, {
|
|
77
|
+
component: "th",
|
|
78
|
+
scope: "row",
|
|
79
|
+
sx: {
|
|
80
|
+
fontWeight: 600,
|
|
81
|
+
width: "30%"
|
|
82
|
+
},
|
|
83
|
+
children: label
|
|
84
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.TableCell, {
|
|
85
|
+
sx: { wordBreak: "break-all" },
|
|
86
|
+
children: value
|
|
87
|
+
})] }, label)) })
|
|
88
|
+
})
|
|
89
|
+
}),
|
|
90
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mui_material.Box, {
|
|
91
|
+
display: "flex",
|
|
92
|
+
gap: 1,
|
|
93
|
+
marginTop: 2,
|
|
94
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.Button, {
|
|
95
|
+
onClick: handleDownload,
|
|
96
|
+
size: "small",
|
|
97
|
+
variant: "outlined",
|
|
98
|
+
children: t("stage.action.download")
|
|
99
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_StageActions.default, {
|
|
100
|
+
item: data,
|
|
101
|
+
onDone: () => navigate(require_routes.Route.STAGE)
|
|
102
|
+
})]
|
|
103
|
+
})
|
|
104
|
+
]
|
|
105
|
+
});
|
|
106
|
+
};
|
|
107
|
+
//#endregion
|
|
108
|
+
exports.default = StageDetail;
|
|
109
|
+
|
|
110
|
+
//# sourceMappingURL=StageDetail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StageDetail.js","names":[],"sources":["../../../src/sections/Stage/StageDetail.tsx"],"sourcesContent":["import {\n Box,\n Button,\n Chip,\n CircularProgress,\n Paper,\n Table,\n TableBody,\n TableCell,\n TableRow,\n Typography,\n} from '@mui/material';\nimport React, { useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useNavigate, useParams } from 'react-router';\n\nimport { Route } from '../../utils';\nimport StageActions from './StageActions';\nimport { downloadStagedTarball, useStageItem } from './useStage';\nimport { useRequireSession } from './useRequireSession';\n\nconst StageDetail: React.FC = () => {\n const { t } = useTranslation();\n const navigate = useNavigate();\n const { stageId } = useParams<{ stageId: string }>();\n const isLoggedIn = useRequireSession();\n const { data, error, isLoading } = useStageItem(stageId);\n\n const handleDownload = useCallback(async () => {\n if (data) {\n await downloadStagedTarball(data);\n }\n }, [data]);\n\n if (!isLoggedIn) {\n return null;\n }\n\n if (isLoading) {\n return (\n <Box display=\"flex\" justifyContent=\"center\" padding={4}>\n <CircularProgress />\n </Box>\n );\n }\n\n if (error || !data) {\n return (\n <Box padding={2}>\n <Typography color=\"error\" role=\"alert\">\n {t('stage.error.notFound')}\n </Typography>\n </Box>\n );\n }\n\n const rows: [string, React.ReactNode][] = [\n [t('stage.column.package'), data.packageName],\n [t('stage.column.version'), data.version],\n [t('stage.column.tag'), <Chip key=\"tag\" label={data.tag} size=\"small\" />],\n [t('stage.column.stagedBy'), `${data.actor} (${data.actorType})`],\n [t('stage.column.date'), new Date(data.createdAt).toLocaleString()],\n [t('stage.column.access'), data.access],\n [t('stage.column.shasum'), data.shasum],\n ];\n\n return (\n <Box padding={2}>\n <Button onClick={() => navigate(Route.STAGE)} size=\"small\">\n {t('stage.backToList')}\n </Button>\n <Typography component=\"h1\" gutterBottom={true} variant=\"h5\">\n {data.packageName}@{data.version}\n </Typography>\n\n <Paper sx={{ marginTop: 2, overflowX: 'auto' }}>\n <Table data-testid=\"stage-detail\" size=\"small\">\n <TableBody>\n {rows.map(([label, value]) => (\n <TableRow key={label}>\n <TableCell component=\"th\" scope=\"row\" sx={{ fontWeight: 600, width: '30%' }}>\n {label}\n </TableCell>\n <TableCell sx={{ wordBreak: 'break-all' }}>{value}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </Paper>\n\n <Box display=\"flex\" gap={1} marginTop={2}>\n <Button onClick={handleDownload} size=\"small\" variant=\"outlined\">\n {t('stage.action.download')}\n </Button>\n <StageActions item={data} onDone={() => navigate(Route.STAGE)} />\n </Box>\n </Box>\n );\n};\n\nexport default StageDetail;\n"],"mappings":";;;;;;;;;;;;;AAqBA,IAAM,oBAA8B;CAClC,MAAM,EAAE,OAAA,GAAM,cAAA,eAAA,CAAe;CAC7B,MAAM,YAAA,GAAW,aAAA,YAAA,CAAY;CAC7B,MAAM,EAAE,aAAA,GAAY,aAAA,UAAA,CAA+B;CACnD,MAAM,aAAa,0BAAA,kBAAkB;CACrC,MAAM,EAAE,MAAM,OAAO,cAAc,iBAAA,aAAa,OAAO;CAEvD,MAAM,kBAAA,GAAiB,MAAA,YAAA,CAAY,YAAY;EAC7C,IAAI,MACF,MAAM,iBAAA,sBAAsB,IAAI;CAEpC,GAAG,CAAC,IAAI,CAAC;CAET,IAAI,CAAC,YACH,OAAO;CAGT,IAAI,WACF,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAA,KAAD;EAAK,SAAQ;EAAO,gBAAe;EAAS,SAAS;EACnD,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAA,kBAAD,CAAmB,CAAA;CAChB,CAAA;CAIT,IAAI,SAAS,CAAC,MACZ,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAA,KAAD;EAAK,SAAS;EACZ,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAA,YAAD;GAAY,OAAM;GAAQ,MAAK;GAC5B,UAAA,EAAE,sBAAsB;EACf,CAAA;CACT,CAAA;CAIT,MAAM,OAAoC;EACxC,CAAC,EAAE,sBAAsB,GAAG,KAAK,WAAW;EAC5C,CAAC,EAAE,sBAAsB,GAAG,KAAK,OAAO;EACxC,CAAC,EAAE,kBAAkB,GAAG,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAA,MAAD;GAAgB,OAAO,KAAK;GAAK,MAAK;EAAS,GAArC,KAAqC,CAAC;EACxE,CAAC,EAAE,uBAAuB,GAAG,GAAG,KAAK,MAAM,IAAI,KAAK,UAAU,EAAE;EAChE,CAAC,EAAE,mBAAmB,GAAG,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC,eAAe,CAAC;EAClE,CAAC,EAAE,qBAAqB,GAAG,KAAK,MAAM;EACtC,CAAC,EAAE,qBAAqB,GAAG,KAAK,MAAM;CACxC;CAEA,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,cAAA,KAAD;EAAK,SAAS;EAAd,UAAA;GACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAA,QAAD;IAAQ,eAAe,SAAS,eAAA,MAAM,KAAK;IAAG,MAAK;IAChD,UAAA,EAAE,kBAAkB;GACf,CAAA;GACR,iBAAA,GAAA,kBAAA,KAAA,CAAC,cAAA,YAAD;IAAY,WAAU;IAAK,cAAc;IAAM,SAAQ;IAAvD,UAAA;KACG,KAAK;KAAY;KAAE,KAAK;IACf;;GAEZ,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAA,OAAD;IAAO,IAAI;KAAE,WAAW;KAAG,WAAW;IAAO;IAC3C,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAA,OAAD;KAAO,eAAY;KAAe,MAAK;KACrC,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAA,WAAD,EAAA,UACG,KAAK,KAAK,CAAC,OAAO,WACjB,iBAAA,GAAA,kBAAA,KAAA,CAAC,cAAA,UAAD,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAA,WAAD;MAAW,WAAU;MAAK,OAAM;MAAM,IAAI;OAAE,YAAY;OAAK,OAAO;MAAM;MACvE,UAAA;KACQ,CAAA,GACX,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAA,WAAD;MAAW,IAAI,EAAE,WAAW,YAAY;MAAI,UAAA;KAAiB,CAAA,CACrD,EAAA,GALK,KAKL,CACX,EACQ,CAAA;IACN,CAAA;GACF,CAAA;GAEP,iBAAA,GAAA,kBAAA,KAAA,CAAC,cAAA,KAAD;IAAK,SAAQ;IAAO,KAAK;IAAG,WAAW;IAAvC,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAA,QAAD;KAAQ,SAAS;KAAgB,MAAK;KAAQ,SAAQ;KACnD,UAAA,EAAE,uBAAuB;IACpB,CAAA,GACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,qBAAA,SAAD;KAAc,MAAM;KAAM,cAAc,SAAS,eAAA,MAAM,KAAK;IAAI,CAAA,CAC7D;;EACF;;AAET"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { Route as Route$1 } from "../../utils/routes.mjs";
|
|
2
|
+
import "../../utils/index.mjs";
|
|
3
|
+
import { downloadStagedTarball, useStageItem } from "./useStage.mjs";
|
|
4
|
+
import StageActions from "./StageActions.mjs";
|
|
5
|
+
import { useRequireSession } from "./useRequireSession.mjs";
|
|
6
|
+
import { useCallback } from "react";
|
|
7
|
+
import { useTranslation } from "react-i18next";
|
|
8
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
|
+
import { useNavigate, useParams } from "react-router";
|
|
10
|
+
import { Box, Button, Chip, CircularProgress, Paper, Table, TableBody, TableCell, TableRow, Typography } from "@mui/material";
|
|
11
|
+
//#region src/sections/Stage/StageDetail.tsx
|
|
12
|
+
var StageDetail = () => {
|
|
13
|
+
const { t } = useTranslation();
|
|
14
|
+
const navigate = useNavigate();
|
|
15
|
+
const { stageId } = useParams();
|
|
16
|
+
const isLoggedIn = useRequireSession();
|
|
17
|
+
const { data, error, isLoading } = useStageItem(stageId);
|
|
18
|
+
const handleDownload = useCallback(async () => {
|
|
19
|
+
if (data) await downloadStagedTarball(data);
|
|
20
|
+
}, [data]);
|
|
21
|
+
if (!isLoggedIn) return null;
|
|
22
|
+
if (isLoading) return /* @__PURE__ */ jsx(Box, {
|
|
23
|
+
display: "flex",
|
|
24
|
+
justifyContent: "center",
|
|
25
|
+
padding: 4,
|
|
26
|
+
children: /* @__PURE__ */ jsx(CircularProgress, {})
|
|
27
|
+
});
|
|
28
|
+
if (error || !data) return /* @__PURE__ */ jsx(Box, {
|
|
29
|
+
padding: 2,
|
|
30
|
+
children: /* @__PURE__ */ jsx(Typography, {
|
|
31
|
+
color: "error",
|
|
32
|
+
role: "alert",
|
|
33
|
+
children: t("stage.error.notFound")
|
|
34
|
+
})
|
|
35
|
+
});
|
|
36
|
+
const rows = [
|
|
37
|
+
[t("stage.column.package"), data.packageName],
|
|
38
|
+
[t("stage.column.version"), data.version],
|
|
39
|
+
[t("stage.column.tag"), /* @__PURE__ */ jsx(Chip, {
|
|
40
|
+
label: data.tag,
|
|
41
|
+
size: "small"
|
|
42
|
+
}, "tag")],
|
|
43
|
+
[t("stage.column.stagedBy"), `${data.actor} (${data.actorType})`],
|
|
44
|
+
[t("stage.column.date"), new Date(data.createdAt).toLocaleString()],
|
|
45
|
+
[t("stage.column.access"), data.access],
|
|
46
|
+
[t("stage.column.shasum"), data.shasum]
|
|
47
|
+
];
|
|
48
|
+
return /* @__PURE__ */ jsxs(Box, {
|
|
49
|
+
padding: 2,
|
|
50
|
+
children: [
|
|
51
|
+
/* @__PURE__ */ jsx(Button, {
|
|
52
|
+
onClick: () => navigate(Route$1.STAGE),
|
|
53
|
+
size: "small",
|
|
54
|
+
children: t("stage.backToList")
|
|
55
|
+
}),
|
|
56
|
+
/* @__PURE__ */ jsxs(Typography, {
|
|
57
|
+
component: "h1",
|
|
58
|
+
gutterBottom: true,
|
|
59
|
+
variant: "h5",
|
|
60
|
+
children: [
|
|
61
|
+
data.packageName,
|
|
62
|
+
"@",
|
|
63
|
+
data.version
|
|
64
|
+
]
|
|
65
|
+
}),
|
|
66
|
+
/* @__PURE__ */ jsx(Paper, {
|
|
67
|
+
sx: {
|
|
68
|
+
marginTop: 2,
|
|
69
|
+
overflowX: "auto"
|
|
70
|
+
},
|
|
71
|
+
children: /* @__PURE__ */ jsx(Table, {
|
|
72
|
+
"data-testid": "stage-detail",
|
|
73
|
+
size: "small",
|
|
74
|
+
children: /* @__PURE__ */ jsx(TableBody, { children: rows.map(([label, value]) => /* @__PURE__ */ jsxs(TableRow, { children: [/* @__PURE__ */ jsx(TableCell, {
|
|
75
|
+
component: "th",
|
|
76
|
+
scope: "row",
|
|
77
|
+
sx: {
|
|
78
|
+
fontWeight: 600,
|
|
79
|
+
width: "30%"
|
|
80
|
+
},
|
|
81
|
+
children: label
|
|
82
|
+
}), /* @__PURE__ */ jsx(TableCell, {
|
|
83
|
+
sx: { wordBreak: "break-all" },
|
|
84
|
+
children: value
|
|
85
|
+
})] }, label)) })
|
|
86
|
+
})
|
|
87
|
+
}),
|
|
88
|
+
/* @__PURE__ */ jsxs(Box, {
|
|
89
|
+
display: "flex",
|
|
90
|
+
gap: 1,
|
|
91
|
+
marginTop: 2,
|
|
92
|
+
children: [/* @__PURE__ */ jsx(Button, {
|
|
93
|
+
onClick: handleDownload,
|
|
94
|
+
size: "small",
|
|
95
|
+
variant: "outlined",
|
|
96
|
+
children: t("stage.action.download")
|
|
97
|
+
}), /* @__PURE__ */ jsx(StageActions, {
|
|
98
|
+
item: data,
|
|
99
|
+
onDone: () => navigate(Route$1.STAGE)
|
|
100
|
+
})]
|
|
101
|
+
})
|
|
102
|
+
]
|
|
103
|
+
});
|
|
104
|
+
};
|
|
105
|
+
//#endregion
|
|
106
|
+
export { StageDetail as default };
|
|
107
|
+
|
|
108
|
+
//# sourceMappingURL=StageDetail.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StageDetail.mjs","names":[],"sources":["../../../src/sections/Stage/StageDetail.tsx"],"sourcesContent":["import {\n Box,\n Button,\n Chip,\n CircularProgress,\n Paper,\n Table,\n TableBody,\n TableCell,\n TableRow,\n Typography,\n} from '@mui/material';\nimport React, { useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useNavigate, useParams } from 'react-router';\n\nimport { Route } from '../../utils';\nimport StageActions from './StageActions';\nimport { downloadStagedTarball, useStageItem } from './useStage';\nimport { useRequireSession } from './useRequireSession';\n\nconst StageDetail: React.FC = () => {\n const { t } = useTranslation();\n const navigate = useNavigate();\n const { stageId } = useParams<{ stageId: string }>();\n const isLoggedIn = useRequireSession();\n const { data, error, isLoading } = useStageItem(stageId);\n\n const handleDownload = useCallback(async () => {\n if (data) {\n await downloadStagedTarball(data);\n }\n }, [data]);\n\n if (!isLoggedIn) {\n return null;\n }\n\n if (isLoading) {\n return (\n <Box display=\"flex\" justifyContent=\"center\" padding={4}>\n <CircularProgress />\n </Box>\n );\n }\n\n if (error || !data) {\n return (\n <Box padding={2}>\n <Typography color=\"error\" role=\"alert\">\n {t('stage.error.notFound')}\n </Typography>\n </Box>\n );\n }\n\n const rows: [string, React.ReactNode][] = [\n [t('stage.column.package'), data.packageName],\n [t('stage.column.version'), data.version],\n [t('stage.column.tag'), <Chip key=\"tag\" label={data.tag} size=\"small\" />],\n [t('stage.column.stagedBy'), `${data.actor} (${data.actorType})`],\n [t('stage.column.date'), new Date(data.createdAt).toLocaleString()],\n [t('stage.column.access'), data.access],\n [t('stage.column.shasum'), data.shasum],\n ];\n\n return (\n <Box padding={2}>\n <Button onClick={() => navigate(Route.STAGE)} size=\"small\">\n {t('stage.backToList')}\n </Button>\n <Typography component=\"h1\" gutterBottom={true} variant=\"h5\">\n {data.packageName}@{data.version}\n </Typography>\n\n <Paper sx={{ marginTop: 2, overflowX: 'auto' }}>\n <Table data-testid=\"stage-detail\" size=\"small\">\n <TableBody>\n {rows.map(([label, value]) => (\n <TableRow key={label}>\n <TableCell component=\"th\" scope=\"row\" sx={{ fontWeight: 600, width: '30%' }}>\n {label}\n </TableCell>\n <TableCell sx={{ wordBreak: 'break-all' }}>{value}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </Paper>\n\n <Box display=\"flex\" gap={1} marginTop={2}>\n <Button onClick={handleDownload} size=\"small\" variant=\"outlined\">\n {t('stage.action.download')}\n </Button>\n <StageActions item={data} onDone={() => navigate(Route.STAGE)} />\n </Box>\n </Box>\n );\n};\n\nexport default StageDetail;\n"],"mappings":";;;;;;;;;;;AAqBA,IAAM,oBAA8B;CAClC,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,WAAW,YAAY;CAC7B,MAAM,EAAE,YAAY,UAA+B;CACnD,MAAM,aAAa,kBAAkB;CACrC,MAAM,EAAE,MAAM,OAAO,cAAc,aAAa,OAAO;CAEvD,MAAM,iBAAiB,YAAY,YAAY;EAC7C,IAAI,MACF,MAAM,sBAAsB,IAAI;CAEpC,GAAG,CAAC,IAAI,CAAC;CAET,IAAI,CAAC,YACH,OAAO;CAGT,IAAI,WACF,OACE,oBAAC,KAAD;EAAK,SAAQ;EAAO,gBAAe;EAAS,SAAS;EACnD,UAAA,oBAAC,kBAAD,CAAmB,CAAA;CAChB,CAAA;CAIT,IAAI,SAAS,CAAC,MACZ,OACE,oBAAC,KAAD;EAAK,SAAS;EACZ,UAAA,oBAAC,YAAD;GAAY,OAAM;GAAQ,MAAK;GAC5B,UAAA,EAAE,sBAAsB;EACf,CAAA;CACT,CAAA;CAIT,MAAM,OAAoC;EACxC,CAAC,EAAE,sBAAsB,GAAG,KAAK,WAAW;EAC5C,CAAC,EAAE,sBAAsB,GAAG,KAAK,OAAO;EACxC,CAAC,EAAE,kBAAkB,GAAG,oBAAC,MAAD;GAAgB,OAAO,KAAK;GAAK,MAAK;EAAS,GAArC,KAAqC,CAAC;EACxE,CAAC,EAAE,uBAAuB,GAAG,GAAG,KAAK,MAAM,IAAI,KAAK,UAAU,EAAE;EAChE,CAAC,EAAE,mBAAmB,GAAG,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC,eAAe,CAAC;EAClE,CAAC,EAAE,qBAAqB,GAAG,KAAK,MAAM;EACtC,CAAC,EAAE,qBAAqB,GAAG,KAAK,MAAM;CACxC;CAEA,OACE,qBAAC,KAAD;EAAK,SAAS;EAAd,UAAA;GACE,oBAAC,QAAD;IAAQ,eAAe,SAAS,QAAM,KAAK;IAAG,MAAK;IAChD,UAAA,EAAE,kBAAkB;GACf,CAAA;GACR,qBAAC,YAAD;IAAY,WAAU;IAAK,cAAc;IAAM,SAAQ;IAAvD,UAAA;KACG,KAAK;KAAY;KAAE,KAAK;IACf;;GAEZ,oBAAC,OAAD;IAAO,IAAI;KAAE,WAAW;KAAG,WAAW;IAAO;IAC3C,UAAA,oBAAC,OAAD;KAAO,eAAY;KAAe,MAAK;KACrC,UAAA,oBAAC,WAAD,EAAA,UACG,KAAK,KAAK,CAAC,OAAO,WACjB,qBAAC,UAAD,EAAA,UAAA,CACE,oBAAC,WAAD;MAAW,WAAU;MAAK,OAAM;MAAM,IAAI;OAAE,YAAY;OAAK,OAAO;MAAM;MACvE,UAAA;KACQ,CAAA,GACX,oBAAC,WAAD;MAAW,IAAI,EAAE,WAAW,YAAY;MAAI,UAAA;KAAiB,CAAA,CACrD,EAAA,GALK,KAKL,CACX,EACQ,CAAA;IACN,CAAA;GACF,CAAA;GAEP,qBAAC,KAAD;IAAK,SAAQ;IAAO,KAAK;IAAG,WAAW;IAAvC,UAAA,CACE,oBAAC,QAAD;KAAQ,SAAS;KAAgB,MAAK;KAAQ,SAAQ;KACnD,UAAA,EAAE,uBAAuB;IACpB,CAAA,GACR,oBAAC,cAAD;KAAc,MAAM;KAAM,cAAc,SAAS,QAAM,KAAK;IAAI,CAAA,CAC7D;;EACF;;AAET"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
const require_runtime = require("../../_virtual/_rolldown/runtime.js");
|
|
2
|
+
const require_routes = require("../../utils/routes.js");
|
|
3
|
+
require("../../utils/index.js");
|
|
4
|
+
const require_useStage = require("./useStage.js");
|
|
5
|
+
const require_StageActions = require("./StageActions.js");
|
|
6
|
+
const require_useRequireSession = require("./useRequireSession.js");
|
|
7
|
+
let react = require("react");
|
|
8
|
+
react = require_runtime.__toESM(react);
|
|
9
|
+
let react_i18next = require("react-i18next");
|
|
10
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
11
|
+
let react_router = require("react-router");
|
|
12
|
+
let _mui_material = require("@mui/material");
|
|
13
|
+
//#region src/sections/Stage/StageList.tsx
|
|
14
|
+
var StageList = () => {
|
|
15
|
+
const { t } = (0, react_i18next.useTranslation)();
|
|
16
|
+
const navigate = (0, react_router.useNavigate)();
|
|
17
|
+
const isLoggedIn = require_useRequireSession.useRequireSession();
|
|
18
|
+
const [page, setPage] = (0, react.useState)(0);
|
|
19
|
+
const [perPage, setPerPage] = (0, react.useState)(10);
|
|
20
|
+
const [actionError, setActionError] = (0, react.useState)(false);
|
|
21
|
+
const { data, error, isLoading, mutate } = require_useStage.useStageList(page, perPage);
|
|
22
|
+
const handleDownload = (0, react.useCallback)(async (item) => {
|
|
23
|
+
try {
|
|
24
|
+
setActionError(false);
|
|
25
|
+
await require_useStage.downloadStagedTarball(item);
|
|
26
|
+
} catch (err) {
|
|
27
|
+
console.error("Error downloading staged tarball:", err);
|
|
28
|
+
setActionError(true);
|
|
29
|
+
}
|
|
30
|
+
}, []);
|
|
31
|
+
if (!isLoggedIn) return null;
|
|
32
|
+
if (isLoading) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.Box, {
|
|
33
|
+
display: "flex",
|
|
34
|
+
justifyContent: "center",
|
|
35
|
+
padding: 4,
|
|
36
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.CircularProgress, {})
|
|
37
|
+
});
|
|
38
|
+
if (error) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.Box, {
|
|
39
|
+
padding: 2,
|
|
40
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.Typography, {
|
|
41
|
+
color: "error",
|
|
42
|
+
role: "alert",
|
|
43
|
+
children: t("stage.error.list")
|
|
44
|
+
})
|
|
45
|
+
});
|
|
46
|
+
const items = data?.items ?? [];
|
|
47
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mui_material.Box, {
|
|
48
|
+
padding: 2,
|
|
49
|
+
children: [
|
|
50
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.Typography, {
|
|
51
|
+
component: "h1",
|
|
52
|
+
gutterBottom: true,
|
|
53
|
+
variant: "h5",
|
|
54
|
+
children: t("stage.title")
|
|
55
|
+
}),
|
|
56
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.Typography, {
|
|
57
|
+
color: "text.secondary",
|
|
58
|
+
gutterBottom: true,
|
|
59
|
+
variant: "body2",
|
|
60
|
+
children: t("stage.description")
|
|
61
|
+
}),
|
|
62
|
+
actionError && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.Typography, {
|
|
63
|
+
color: "error",
|
|
64
|
+
role: "alert",
|
|
65
|
+
variant: "body2",
|
|
66
|
+
children: t("stage.error.action")
|
|
67
|
+
}),
|
|
68
|
+
items.length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.Typography, {
|
|
69
|
+
color: "text.secondary",
|
|
70
|
+
marginTop: 2,
|
|
71
|
+
children: t("stage.empty")
|
|
72
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mui_material.TableContainer, {
|
|
73
|
+
component: _mui_material.Paper,
|
|
74
|
+
sx: {
|
|
75
|
+
marginTop: 2,
|
|
76
|
+
overflowX: "auto"
|
|
77
|
+
},
|
|
78
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mui_material.Table, {
|
|
79
|
+
"aria-label": t("stage.title"),
|
|
80
|
+
"data-testid": "stage-table",
|
|
81
|
+
size: "small",
|
|
82
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.TableHead, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mui_material.TableRow, { children: [
|
|
83
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.TableCell, { children: t("stage.column.package") }),
|
|
84
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.TableCell, { children: t("stage.column.version") }),
|
|
85
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.TableCell, { children: t("stage.column.tag") }),
|
|
86
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.TableCell, { children: t("stage.column.stagedBy") }),
|
|
87
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.TableCell, { children: t("stage.column.date") }),
|
|
88
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.TableCell, {
|
|
89
|
+
align: "right",
|
|
90
|
+
children: t("stage.column.actions")
|
|
91
|
+
})
|
|
92
|
+
] }) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.TableBody, { children: items.map((item) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mui_material.TableRow, {
|
|
93
|
+
"data-testid": `stage-row-${item.id}`,
|
|
94
|
+
hover: true,
|
|
95
|
+
children: [
|
|
96
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.TableCell, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.Button, {
|
|
97
|
+
onClick: () => navigate(require_routes.Route.STAGE_DETAIL.replace(":stageId", item.id)),
|
|
98
|
+
size: "small",
|
|
99
|
+
sx: { textTransform: "none" },
|
|
100
|
+
children: item.packageName
|
|
101
|
+
}) }),
|
|
102
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.TableCell, { children: item.version }),
|
|
103
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.TableCell, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.Chip, {
|
|
104
|
+
label: item.tag,
|
|
105
|
+
size: "small"
|
|
106
|
+
}) }),
|
|
107
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.TableCell, { children: item.actor }),
|
|
108
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.TableCell, { children: new Date(item.createdAt).toLocaleString() }),
|
|
109
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.TableCell, {
|
|
110
|
+
align: "right",
|
|
111
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mui_material.Box, {
|
|
112
|
+
alignItems: "center",
|
|
113
|
+
display: "flex",
|
|
114
|
+
gap: 1,
|
|
115
|
+
justifyContent: "flex-end",
|
|
116
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.Button, {
|
|
117
|
+
"data-testid": `stage-download-${item.id}`,
|
|
118
|
+
onClick: () => handleDownload(item),
|
|
119
|
+
size: "small",
|
|
120
|
+
children: t("stage.action.download")
|
|
121
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_StageActions.default, {
|
|
122
|
+
item,
|
|
123
|
+
onDone: () => mutate()
|
|
124
|
+
})]
|
|
125
|
+
})
|
|
126
|
+
})
|
|
127
|
+
]
|
|
128
|
+
}, item.id)) })]
|
|
129
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material.TablePagination, {
|
|
130
|
+
component: "div",
|
|
131
|
+
count: data?.total ?? 0,
|
|
132
|
+
onPageChange: (_event, nextPage) => setPage(nextPage),
|
|
133
|
+
onRowsPerPageChange: (event) => {
|
|
134
|
+
setPerPage(Number.parseInt(event.target.value, 10));
|
|
135
|
+
setPage(0);
|
|
136
|
+
},
|
|
137
|
+
page,
|
|
138
|
+
rowsPerPage: perPage,
|
|
139
|
+
rowsPerPageOptions: [
|
|
140
|
+
10,
|
|
141
|
+
25,
|
|
142
|
+
50,
|
|
143
|
+
100
|
|
144
|
+
]
|
|
145
|
+
})]
|
|
146
|
+
})
|
|
147
|
+
]
|
|
148
|
+
});
|
|
149
|
+
};
|
|
150
|
+
//#endregion
|
|
151
|
+
exports.default = StageList;
|
|
152
|
+
|
|
153
|
+
//# sourceMappingURL=StageList.js.map
|