@cobaltcore-dev/aurora 0.4.0 → 0.6.0

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.
Files changed (178) hide show
  1. package/README.md +73 -77
  2. package/dist/client/AuroraApp.d.ts +15 -0
  3. package/dist/client/{AuthProvider-D-5Jpa6F.mjs → AuthProvider-Co4d0WzB.mjs} +3 -3
  4. package/dist/client/{AuthProvider-D-5Jpa6F.mjs.map → AuthProvider-Co4d0WzB.mjs.map} +1 -1
  5. package/dist/client/{ContentHeader-BXZoN3B9.mjs → ContentHeader-kx1Th5Sq.mjs} +29 -29
  6. package/dist/client/{ContentHeader-BXZoN3B9.mjs.map → ContentHeader-kx1Th5Sq.mjs.map} +1 -1
  7. package/dist/client/DeleteFlavorModal-C3cb7YiJ.mjs +638 -0
  8. package/dist/client/DeleteFlavorModal-C3cb7YiJ.mjs.map +1 -0
  9. package/dist/client/{EditSecurityGroupModal-DK3WYikA.mjs → EditSecurityGroupModal-CpP54WIK.mjs} +22 -22
  10. package/dist/client/{EditSecurityGroupModal-DK3WYikA.mjs.map → EditSecurityGroupModal-CpP54WIK.mjs.map} +1 -1
  11. package/dist/client/{FiltersInput-OVeIJzIo.mjs → FiltersInput-DxcyR6Bp.mjs} +18 -18
  12. package/dist/client/{FiltersInput-OVeIJzIo.mjs.map → FiltersInput-DxcyR6Bp.mjs.map} +1 -1
  13. package/dist/client/{FloatingIpActionModals-Dok7fJss.mjs → FloatingIpActionModals-BP8RWHbu.mjs} +77 -77
  14. package/dist/client/{FloatingIpActionModals-Dok7fJss.mjs.map → FloatingIpActionModals-BP8RWHbu.mjs.map} +1 -1
  15. package/dist/client/ImageToastNotifications-TZ3EfQg-.mjs +1219 -0
  16. package/dist/client/ImageToastNotifications-TZ3EfQg-.mjs.map +1 -0
  17. package/dist/client/{RouteError-pDEWC_k7.mjs → RouteError-QSV7qOoJ.mjs} +6 -6
  18. package/dist/client/{RouteError-pDEWC_k7.mjs.map → RouteError-QSV7qOoJ.mjs.map} +1 -1
  19. package/dist/client/{SortInput-DXWSqSny.mjs → SortInput-CYv2_Pur.mjs} +6 -6
  20. package/dist/client/{SortInput-DXWSqSny.mjs.map → SortInput-CYv2_Pur.mjs.map} +1 -1
  21. package/dist/client/{_auth-CJj1Cnbm.mjs → _auth-DXJkv9QO.mjs} +3 -3
  22. package/dist/client/{_auth-CJj1Cnbm.mjs.map → _auth-DXJkv9QO.mjs.map} +1 -1
  23. package/dist/client/{_flavorId-BoNcxYmF.mjs → _flavorId-C2x43-6S.mjs} +15 -15
  24. package/dist/client/_flavorId-C2x43-6S.mjs.map +1 -0
  25. package/dist/client/_flavorId-CR8ZUI-P.mjs +194 -0
  26. package/dist/client/_flavorId-CR8ZUI-P.mjs.map +1 -0
  27. package/dist/client/{_floatingIpId-D33bOEmH.mjs → _floatingIpId-BCk41_Lb.mjs} +3 -3
  28. package/dist/client/{_floatingIpId-D33bOEmH.mjs.map → _floatingIpId-BCk41_Lb.mjs.map} +1 -1
  29. package/dist/client/{_floatingIpId-DF_BSJN6.mjs → _floatingIpId-BGrOAmPT.mjs} +48 -48
  30. package/dist/client/{_floatingIpId-DF_BSJN6.mjs.map → _floatingIpId-BGrOAmPT.mjs.map} +1 -1
  31. package/dist/client/_imageId-CvfD832b.mjs +534 -0
  32. package/dist/client/_imageId-CvfD832b.mjs.map +1 -0
  33. package/dist/client/_pcaId-BxBt5DXi.mjs +459 -0
  34. package/dist/client/_pcaId-BxBt5DXi.mjs.map +1 -0
  35. package/dist/client/{_pcaId-BYCoeK6_.mjs → _pcaId-DOHycvCf.mjs} +3 -3
  36. package/dist/client/{_pcaId-BYCoeK6_.mjs.map → _pcaId-DOHycvCf.mjs.map} +1 -1
  37. package/dist/client/_projectId-BDSWnMGj.mjs +46 -0
  38. package/dist/client/_projectId-BDSWnMGj.mjs.map +1 -0
  39. package/dist/client/{_projectId-OW2xkK43.mjs → _projectId-DOgwFiqD.mjs} +3 -3
  40. package/dist/client/{_projectId-OW2xkK43.mjs.map → _projectId-DOgwFiqD.mjs.map} +1 -1
  41. package/dist/client/_projectId-DS4nR59B.mjs +299 -0
  42. package/dist/client/_projectId-DS4nR59B.mjs.map +1 -0
  43. package/dist/client/{_projectId-BwLMEMGC.mjs → _projectId-MxcHrXW4.mjs} +21 -21
  44. package/dist/client/_projectId-MxcHrXW4.mjs.map +1 -0
  45. package/dist/client/{_securityGroupId-B-Z-CzLp.mjs → _securityGroupId-CJJanWiY.mjs} +3 -3
  46. package/dist/client/{_securityGroupId-B-Z-CzLp.mjs.map → _securityGroupId-CJJanWiY.mjs.map} +1 -1
  47. package/dist/client/{_securityGroupId-B1bOYRbX.mjs → _securityGroupId-KKw4RPdH.mjs} +445 -446
  48. package/dist/client/{_securityGroupId-B1bOYRbX.mjs.map → _securityGroupId-KKw4RPdH.mjs.map} +1 -1
  49. package/dist/client/{containers-BjWqjNOx.mjs → _storageType-4wSxI__0.mjs} +19 -16
  50. package/dist/client/_storageType-4wSxI__0.mjs.map +1 -0
  51. package/dist/client/_storageType-DYjo-6ej.mjs +3243 -0
  52. package/dist/client/_storageType-DYjo-6ej.mjs.map +1 -0
  53. package/dist/client/_storageType-zeSZe--V.mjs +7 -0
  54. package/dist/client/_storageType-zeSZe--V.mjs.map +1 -0
  55. package/dist/client/about-Bo9vxGHy.mjs +92 -0
  56. package/dist/client/{about-DLn1ShhF.mjs.map → about-Bo9vxGHy.mjs.map} +1 -1
  57. package/dist/client/aurora-DDzsst74.mjs +19 -0
  58. package/dist/client/{aurora-CRcxVUCo.mjs.map → aurora-DDzsst74.mjs.map} +1 -1
  59. package/dist/client/{build-BJDfnAyi.mjs → build-DeJcDjPi.mjs} +3802 -3376
  60. package/dist/client/build-DeJcDjPi.mjs.map +1 -0
  61. package/dist/client/{buildFilterParams-TeyosGyK.mjs → buildFilterParams-DoZzMKX9.mjs} +1 -1
  62. package/dist/client/{buildFilterParams-TeyosGyK.mjs.map → buildFilterParams-DoZzMKX9.mjs.map} +1 -1
  63. package/dist/client/{cn-C3laVXMm.mjs → cn-DM4Cy3jv.mjs} +1 -1
  64. package/dist/client/{cn-C3laVXMm.mjs.map → cn-DM4Cy3jv.mjs.map} +1 -1
  65. package/dist/client/constants-BmcGYeR-.mjs +153 -0
  66. package/dist/client/constants-BmcGYeR-.mjs.map +1 -0
  67. package/dist/client/{flavors-D8oElC2K.mjs → flavors-BxFVqgnb.mjs} +2 -2
  68. package/dist/client/{flavors-D8oElC2K.mjs.map → flavors-BxFVqgnb.mjs.map} +1 -1
  69. package/dist/client/flavors-CfdgjsZY.mjs +632 -0
  70. package/dist/client/flavors-CfdgjsZY.mjs.map +1 -0
  71. package/dist/client/{flavors-BXPYAFyQ.mjs → flavors-DWMZ6TuJ.mjs} +2 -2
  72. package/dist/client/{flavors-BXPYAFyQ.mjs.map → flavors-DWMZ6TuJ.mjs.map} +1 -1
  73. package/dist/client/{floatingips-Fa6ocNUu.mjs → floatingips-ByRb82wS.mjs} +138 -139
  74. package/dist/client/{floatingips-Fa6ocNUu.mjs.map → floatingips-ByRb82wS.mjs.map} +1 -1
  75. package/dist/client/{formatBytes-tQBEnPoL.mjs → formatBytes-CZv_XyCY.mjs} +1 -1
  76. package/dist/client/{formatBytes-tQBEnPoL.mjs.map → formatBytes-CZv_XyCY.mjs.map} +1 -1
  77. package/dist/client/{helpers--JWXi40U.mjs → helpers-1PpYf-fC.mjs} +1 -1
  78. package/dist/client/{helpers--JWXi40U.mjs.map → helpers-1PpYf-fC.mjs.map} +1 -1
  79. package/dist/client/hooks-dSArr2Ca.mjs +2 -0
  80. package/dist/client/images-CKqIXUq52.mjs +1873 -0
  81. package/dist/client/images-CKqIXUq52.mjs.map +1 -0
  82. package/dist/client/{images-tYfyOkX8.mjs → images-C_dX7nY6.mjs} +3 -3
  83. package/dist/client/{images-tYfyOkX8.mjs.map → images-C_dX7nY6.mjs.map} +1 -1
  84. package/dist/client/{images-CTLCY-yY.mjs → images-CenluYV8.mjs} +2 -2
  85. package/dist/client/{images-CTLCY-yY.mjs.map → images-CenluYV8.mjs.map} +1 -1
  86. package/dist/client/{images-DM9I8G0p.mjs → images-NBf2bV43.mjs} +2 -2
  87. package/dist/client/{images-DM9I8G0p.mjs.map → images-NBf2bV43.mjs.map} +1 -1
  88. package/dist/client/index.js +428 -477
  89. package/dist/client/index.js.map +1 -1
  90. package/dist/client/{md-BivyCkGC.mjs → md-CYTrL5dq.mjs} +58 -22
  91. package/dist/client/{md-BivyCkGC.mjs.map → md-CYTrL5dq.mjs.map} +1 -1
  92. package/dist/client/{network-rYLHyf15.mjs → network-DuZm76BZ.mjs} +2 -2
  93. package/dist/client/{network-rYLHyf15.mjs.map → network-DuZm76BZ.mjs.map} +1 -1
  94. package/dist/client/objects-BJM6YeuF.mjs +5708 -0
  95. package/dist/client/objects-BJM6YeuF.mjs.map +1 -0
  96. package/dist/client/objects-gxSjvbvF.mjs +101 -0
  97. package/dist/client/objects-gxSjvbvF.mjs.map +1 -0
  98. package/dist/client/objects-o2Cj_ndZ.mjs +8 -0
  99. package/dist/client/objects-o2Cj_ndZ.mjs.map +1 -0
  100. package/dist/client/{pca-COmKvp3J.mjs → pca-Bl8NmoVZ.mjs} +2 -2
  101. package/dist/client/{pca-COmKvp3J.mjs.map → pca-Bl8NmoVZ.mjs.map} +1 -1
  102. package/dist/client/pca-RSiWpJs9.mjs +182 -0
  103. package/dist/client/pca-RSiWpJs9.mjs.map +1 -0
  104. package/dist/client/projects-CgclWI16.mjs +105 -0
  105. package/dist/client/projects-CgclWI16.mjs.map +1 -0
  106. package/dist/client/{projects-DI_L4oDw.mjs → projects-D2iewAzu.mjs} +2 -2
  107. package/dist/client/{projects-DI_L4oDw.mjs.map → projects-D2iewAzu.mjs.map} +1 -1
  108. package/dist/client/{projects-Dl5XkXUP.mjs → projects-pe2_dCnV.mjs} +3 -3
  109. package/dist/client/{projects-Dl5XkXUP.mjs.map → projects-pe2_dCnV.mjs.map} +1 -1
  110. package/dist/client/{projects-HoQ0gE5Y.mjs → projects-yiK0HGSA.mjs} +2 -2
  111. package/dist/client/{projects-HoQ0gE5Y.mjs.map → projects-yiK0HGSA.mjs.map} +1 -1
  112. package/dist/client/{securitygroups-BjkmHk2J.mjs → securitygroups-DahZkVYQ.mjs} +139 -140
  113. package/dist/client/{securitygroups-BjkmHk2J.mjs.map → securitygroups-DahZkVYQ.mjs.map} +1 -1
  114. package/dist/client/{trpcClient-BxguzNYF.mjs → trpcClient-BzPUgiM2.mjs} +1 -1
  115. package/dist/client/{trpcClient-BxguzNYF.mjs.map → trpcClient-BzPUgiM2.mjs.map} +1 -1
  116. package/dist/client/{useErrorTranslation-TZVwIAzq.mjs → useErrorTranslation-Dc0eE8Zt.mjs} +1 -1
  117. package/dist/client/{useErrorTranslation-TZVwIAzq.mjs.map → useErrorTranslation-Dc0eE8Zt.mjs.map} +1 -1
  118. package/dist/client/useListWithFiltering-DaYcu5AB.mjs +157 -0
  119. package/dist/client/useListWithFiltering-DaYcu5AB.mjs.map +1 -0
  120. package/dist/client/{useModal-DxxlilRm.mjs → useModal-DCs1OJh7.mjs} +1 -1
  121. package/dist/client/{useModal-DxxlilRm.mjs.map → useModal-DCs1OJh7.mjs.map} +1 -1
  122. package/dist/client/{useProjectId-OQv2KBbG.mjs → useProjectId-DBc5lpoU.mjs} +1 -1
  123. package/dist/client/{useProjectId-OQv2KBbG.mjs.map → useProjectId-DBc5lpoU.mjs.map} +1 -1
  124. package/dist/server/index.js +1285 -435
  125. package/package.json +5 -4
  126. package/dist/client/DeleteFlavorModal-BusYn32r.mjs +0 -629
  127. package/dist/client/DeleteFlavorModal-BusYn32r.mjs.map +0 -1
  128. package/dist/client/ImageToastNotifications-BG9LPnXf.mjs +0 -1267
  129. package/dist/client/ImageToastNotifications-BG9LPnXf.mjs.map +0 -1
  130. package/dist/client/ListToolbar-BojRTNbo.mjs +0 -129
  131. package/dist/client/ListToolbar-BojRTNbo.mjs.map +0 -1
  132. package/dist/client/_flavorId-BRonXvCo.mjs +0 -188
  133. package/dist/client/_flavorId-BRonXvCo.mjs.map +0 -1
  134. package/dist/client/_flavorId-BoNcxYmF.mjs.map +0 -1
  135. package/dist/client/_imageId-BL0I5_pv.mjs +0 -527
  136. package/dist/client/_imageId-BL0I5_pv.mjs.map +0 -1
  137. package/dist/client/_pcaId-CbBhBrX1.mjs +0 -466
  138. package/dist/client/_pcaId-CbBhBrX1.mjs.map +0 -1
  139. package/dist/client/_projectId-5NiasyXm.mjs +0 -26
  140. package/dist/client/_projectId-5NiasyXm.mjs.map +0 -1
  141. package/dist/client/_projectId-BwLMEMGC.mjs.map +0 -1
  142. package/dist/client/_projectId-D35MN1kY.mjs +0 -316
  143. package/dist/client/_projectId-D35MN1kY.mjs.map +0 -1
  144. package/dist/client/about-DLn1ShhF.mjs +0 -92
  145. package/dist/client/aurora-CRcxVUCo.mjs +0 -19
  146. package/dist/client/build-BJDfnAyi.mjs.map +0 -1
  147. package/dist/client/constants-B-P2r5F1.mjs +0 -128
  148. package/dist/client/constants-B-P2r5F1.mjs.map +0 -1
  149. package/dist/client/containers-BjWqjNOx.mjs.map +0 -1
  150. package/dist/client/containers-DsRWc1L5.mjs +0 -7
  151. package/dist/client/containers-DsRWc1L5.mjs.map +0 -1
  152. package/dist/client/containers-J7WFA18U.mjs +0 -3120
  153. package/dist/client/containers-J7WFA18U.mjs.map +0 -1
  154. package/dist/client/flavors-qvgPSI7J.mjs +0 -613
  155. package/dist/client/flavors-qvgPSI7J.mjs.map +0 -1
  156. package/dist/client/hooks-DEjb9d1F.mjs +0 -2
  157. package/dist/client/images-CSFfefAu.mjs +0 -1901
  158. package/dist/client/images-CSFfefAu.mjs.map +0 -1
  159. package/dist/client/objects-BciXwZ00.mjs +0 -86
  160. package/dist/client/objects-BciXwZ00.mjs.map +0 -1
  161. package/dist/client/objects-Cdew99tK.mjs +0 -8
  162. package/dist/client/objects-Cdew99tK.mjs.map +0 -1
  163. package/dist/client/objects-DaElrban.mjs +0 -5340
  164. package/dist/client/objects-DaElrban.mjs.map +0 -1
  165. package/dist/client/overview-BMhjFMIV.mjs +0 -15
  166. package/dist/client/overview-BMhjFMIV.mjs.map +0 -1
  167. package/dist/client/overview-BYIRj7_X.mjs +0 -15
  168. package/dist/client/overview-BYIRj7_X.mjs.map +0 -1
  169. package/dist/client/overview-DRCKNBH2.mjs +0 -15
  170. package/dist/client/overview-DRCKNBH2.mjs.map +0 -1
  171. package/dist/client/overview-urYLOVQE.mjs +0 -173
  172. package/dist/client/overview-urYLOVQE.mjs.map +0 -1
  173. package/dist/client/pca-oc7J0_Xd.mjs +0 -167
  174. package/dist/client/pca-oc7J0_Xd.mjs.map +0 -1
  175. package/dist/client/projects-BUabCzvw.mjs +0 -95
  176. package/dist/client/projects-BUabCzvw.mjs.map +0 -1
  177. package/dist/client/useListWithFiltering-CbhHJO4V.mjs +0 -32
  178. package/dist/client/useListWithFiltering-CbhHJO4V.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"_flavorId-BRonXvCo.mjs","names":["React","Stack","DescriptionList","DescriptionTerm","DescriptionDefinition","ContentHeading","FlavorDetailsView","flavor","formatBytes","bytes","unit","direction","gap","className","alignTerms","id","name","description","vcpus","ram","disk","swap","Number","rxtx_factor","extra_specs","Object","keys","length","entries","map","key","value","Fragment","Button","ButtonRow","Stack","Spinner","PopupMenu","PopupMenuToggle","PopupMenuOptions","PopupMenuItem","useNavigate","useParams","Trans","useLingui","trpcReact","FlavorDetailsView","StatusError","useErrorTranslation","EditSpecModal","ManageAccessModal","DeleteFlavorModal","useModal","ContentHeader","Route","RouteComponent","projectId","flavorId","from","trpcClient","useRouteContext","navigate","t","translateError","isRetryableError","data","flavor","status","error","refetch","compute","getFlavorById","useQuery","project_id","permissionsData","canUser","permission","canDeleteFlavor","canManageAccess","canManageSpecs","specModalOpen","toggleSpecModal","accessModalOpen","toggleAccessModal","deleteModalOpen","toggleDeleteModal","handleBack","to","params","handleHome","handleRetry","errorCode","message","translatedError","canRetry","getStatusCode","code","includes","undefined","hasMoreActions","headerActions","name","component"],"sources":["../../src/client/routes/_auth/projects/$projectId/compute/flavors/-components/FlavorDetailsView.tsx","../../src/client/routes/_auth/projects/$projectId/compute/flavors/$flavorId.tsx?tsr-split=component"],"sourcesContent":["import React from \"react\"\nimport {\n Stack,\n DescriptionList,\n DescriptionTerm,\n DescriptionDefinition,\n ContentHeading,\n} from \"@cloudoperators/juno-ui-components/index\"\nimport { Trans } from \"@lingui/react/macro\"\nimport type { Flavor } from \"@/server/Compute/types/flavor\"\n\ninterface FlavorDetailsViewProps {\n flavor: Flavor\n}\n\nexport function FlavorDetailsView({ flavor }: FlavorDetailsViewProps) {\n const formatBytes = (bytes: number, unit: string = \"MB\") => {\n if (bytes === 0) return `0 ${unit}`\n return `${bytes} ${unit}`\n }\n\n return (\n <Stack direction=\"vertical\" gap=\"6\" className=\"mt-6\">\n <Stack direction=\"vertical\" gap=\"2\">\n <ContentHeading>\n <Trans>Basic Information</Trans>\n </ContentHeading>\n <DescriptionList alignTerms=\"right\">\n <DescriptionTerm>\n <Trans>ID</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>{flavor.id}</DescriptionDefinition>\n\n <DescriptionTerm>\n <Trans>Name</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>{flavor.name}</DescriptionDefinition>\n\n <DescriptionTerm>\n <Trans>Description</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>{flavor?.description}</DescriptionDefinition>\n\n <DescriptionTerm>\n <Trans>Public</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>\n {flavor[\"os-flavor-access:is_public\"] ? <Trans>Yes</Trans> : <Trans>No</Trans>}\n </DescriptionDefinition>\n\n <DescriptionTerm>\n <Trans>Disabled</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>\n {flavor[\"OS-FLV-DISABLED:disabled\"] ? <Trans>Yes</Trans> : <Trans>No</Trans>}\n </DescriptionDefinition>\n </DescriptionList>\n </Stack>\n\n <Stack direction=\"vertical\" gap=\"2\">\n <ContentHeading>\n <Trans>Hardware Specifications</Trans>\n </ContentHeading>\n <DescriptionList alignTerms=\"right\">\n <DescriptionTerm>\n <Trans>VCPUs</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>{flavor.vcpus}</DescriptionDefinition>\n\n <DescriptionTerm>\n <Trans>RAM</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>{formatBytes(flavor.ram, \"MiB\")}</DescriptionDefinition>\n\n <DescriptionTerm>\n <Trans>Disk</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>{formatBytes(flavor.disk, \"GiB\")}</DescriptionDefinition>\n\n <DescriptionTerm>\n <Trans>Ephemeral Disk</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>{formatBytes(flavor[\"OS-FLV-EXT-DATA:ephemeral\"] || 0, \"GiB\")}</DescriptionDefinition>\n\n <DescriptionTerm>\n <Trans>Swap</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>\n {flavor.swap === 0 || flavor.swap === \"\" ? <Trans>None</Trans> : formatBytes(Number(flavor.swap), \"MiB\")}\n </DescriptionDefinition>\n\n <DescriptionTerm>\n <Trans>RX/TX Factor</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>{flavor.rxtx_factor}</DescriptionDefinition>\n </DescriptionList>\n </Stack>\n\n {flavor.extra_specs && Object.keys(flavor.extra_specs).length > 0 && (\n <Stack direction=\"vertical\" gap=\"2\">\n <ContentHeading>\n <Trans>Extra Specs</Trans>\n </ContentHeading>\n <DescriptionList alignTerms=\"right\">\n {Object.entries(flavor.extra_specs).map(([key, value]) => (\n <React.Fragment key={key}>\n <DescriptionTerm>{key}</DescriptionTerm>\n <DescriptionDefinition>{value}</DescriptionDefinition>\n </React.Fragment>\n ))}\n </DescriptionList>\n </Stack>\n )}\n </Stack>\n )\n}\n","import {\n Button,\n ButtonRow,\n Stack,\n Spinner,\n PopupMenu,\n PopupMenuToggle,\n PopupMenuOptions,\n PopupMenuItem,\n} from \"@cloudoperators/juno-ui-components/index\"\nimport { createFileRoute, redirect, useNavigate, useParams } from \"@tanstack/react-router\"\nimport type { RouteInfo } from \"@/client/routes/routeInfo\"\nimport { Trans, useLingui } from \"@lingui/react/macro\"\nimport { getServiceIndex } from \"@/server/Authentication/helpers\"\nimport { trpcReact } from \"@/client/trpcClient\"\nimport { FlavorDetailsView } from \"./-components/FlavorDetailsView\"\nimport { StatusError } from \"@/client/components/Error/StatusError\"\nimport { useErrorTranslation } from \"@/client/utils/useErrorTranslation\"\nimport { EditSpecModal } from \"../-components/Flavors/-components/EditSpecModal\"\nimport { ManageAccessModal } from \"../-components/Flavors/-components/ManageAccessModal\"\nimport { DeleteFlavorModal } from \"../-components/Flavors/-components/DeleteFlavorModal\"\nimport { useModal } from \"@/client/utils/useModal\"\nimport { ContentHeader } from \"@/client/components/ContentHeader/ContentHeader\"\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId/compute/flavors/$flavorId\")({\n staticData: {\n section: \"compute\",\n service: \"flavors\",\n isDetail: true,\n sectionCrumb: { labelKey: \"Compute\" },\n crumb: { labelKey: \"Flavors\", to: \"/projects/$projectId/compute/flavors\" },\n } satisfies RouteInfo,\n loader: async ({ context, params }) => {\n const flavor = await context.trpcClient?.compute.getFlavorById.query({\n project_id: params.projectId,\n flavorId: params.flavorId,\n })\n return { flavorName: flavor?.name ?? null }\n },\n head: ({ loaderData }) => ({\n meta: [{ title: loaderData?.flavorName ?? \"Flavor Details\" }],\n }),\n component: RouteComponent,\n beforeLoad: async ({ context, params }) => {\n const { trpcClient } = context\n const { projectId } = params\n\n const availableServices = (await trpcClient?.auth.getAvailableServices.query()) || []\n\n const serviceIndex = getServiceIndex(availableServices)\n\n if (!serviceIndex[\"flavor\"] && !serviceIndex[\"compute\"]) {\n throw redirect({\n to: \"/projects/$projectId\",\n params: { projectId },\n })\n }\n },\n})\n\nfunction RouteComponent() {\n const { projectId, flavorId } = useParams({\n from: \"/_auth/projects/$projectId/compute/flavors/$flavorId\",\n })\n const { trpcClient } = Route.useRouteContext()\n const navigate = useNavigate()\n const { t } = useLingui()\n const { translateError, isRetryableError } = useErrorTranslation()\n\n const {\n data: flavor,\n status,\n error,\n refetch,\n } = trpcReact.compute.getFlavorById.useQuery({\n project_id: projectId,\n flavorId,\n })\n\n const { data: permissionsData } = trpcReact.compute.canUser.useQuery({\n project_id: projectId,\n permission: [\"flavors:delete\", \"flavors:list_projects\", \"flavor_specs:create\", \"flavor_specs:delete\"],\n })\n\n const canDeleteFlavor = permissionsData?.[0] ?? false\n const canManageAccess = permissionsData?.[1] ?? false\n const canManageSpecs = (permissionsData?.[2] ?? false) || (permissionsData?.[3] ?? false)\n\n const [specModalOpen, toggleSpecModal] = useModal()\n const [accessModalOpen, toggleAccessModal] = useModal()\n const [deleteModalOpen, toggleDeleteModal] = useModal()\n\n const handleBack = () => {\n navigate({\n to: \"/projects/$projectId/compute/flavors\",\n params: { projectId },\n })\n }\n\n const handleHome = () => {\n navigate({\n to: \"/projects/$projectId\",\n params: { projectId },\n })\n }\n\n const handleRetry = () => {\n refetch()\n }\n\n if (status === \"pending\") {\n return (\n <Stack className=\"fixed inset-0\" distribution=\"center\" alignment=\"center\" direction=\"vertical\">\n <Spinner variant=\"primary\" size=\"large\" className=\"mb-2\" />\n <Trans>Loading Flavor Details...</Trans>\n </Stack>\n )\n }\n\n if (status === \"error\") {\n const errorCode = error?.message || \"UNKNOWN_ERROR\"\n const translatedError = translateError(errorCode)\n const canRetry = isRetryableError(errorCode)\n\n const getStatusCode = (code: string): number | undefined => {\n if (code.includes(\"UNAUTHORIZED\")) return 401\n if (code.includes(\"FORBIDDEN\")) return 403\n if (code.includes(\"NOT_FOUND\")) return 404\n if (code.includes(\"SERVER_ERROR\")) return 500\n return undefined\n }\n\n return (\n <StatusError\n message={translatedError}\n statusCode={getStatusCode(errorCode)}\n title={t`Error Loading Flavor`}\n onBackClick={handleBack}\n onHomeClick={handleHome}\n reset={canRetry ? handleRetry : undefined}\n />\n )\n }\n\n if (!flavor) {\n return (\n <StatusError\n message={t`The requested flavor could not be found. It may have been deleted or you may not have access to it.`}\n statusCode={404}\n title={t`Flavor Not Found`}\n onBackClick={handleBack}\n onHomeClick={handleHome}\n />\n )\n }\n\n const hasMoreActions = canManageAccess || canDeleteFlavor\n\n const headerActions =\n hasMoreActions || canManageSpecs ? (\n <ButtonRow>\n {hasMoreActions && (\n <PopupMenu>\n <PopupMenuToggle as=\"div\">\n <Button icon=\"moreVert\">\n <Trans>More Actions</Trans>\n </Button>\n </PopupMenuToggle>\n <PopupMenuOptions>\n {canManageAccess && <PopupMenuItem label={t`Manage Access`} onClick={toggleAccessModal} />}\n {canDeleteFlavor && <PopupMenuItem label={t`Delete Flavor`} onClick={toggleDeleteModal} />}\n </PopupMenuOptions>\n </PopupMenu>\n )}\n {canManageSpecs && (\n <Button onClick={toggleSpecModal} variant=\"primary\">\n <Trans>Metadata</Trans>\n </Button>\n )}\n </ButtonRow>\n ) : undefined\n\n return (\n <>\n <ContentHeader title={flavor.name} projectId={projectId} actions={headerActions} />\n <Stack direction=\"vertical\">\n <FlavorDetailsView flavor={flavor} />\n </Stack>\n\n {trpcClient && (\n <>\n {specModalOpen && (\n <EditSpecModal\n client={trpcClient}\n isOpen={specModalOpen}\n onClose={toggleSpecModal}\n project={projectId}\n flavor={flavor}\n />\n )}\n\n {accessModalOpen && (\n <ManageAccessModal\n client={trpcClient}\n isOpen={accessModalOpen}\n onClose={toggleAccessModal}\n project={projectId}\n flavor={flavor}\n />\n )}\n\n {deleteModalOpen && (\n <DeleteFlavorModal\n client={trpcClient}\n isOpen={deleteModalOpen}\n onClose={toggleDeleteModal}\n project={projectId}\n flavor={flavor}\n onSuccess={handleBack}\n />\n )}\n </>\n )}\n </>\n )\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"_flavorId-BoNcxYmF.mjs","names":["Button","ButtonRow","Container","ContentHeading","StatusError","message","statusCode","onHomeClick","onBackClick","title","reset","className","div","p","onClick","variant","createFileRoute","redirect","getServiceIndex","Route","staticData","section","service","isDetail","sectionCrumb","labelKey","crumb","to","RouteInfo","loader","context","params","flavor","trpcClient","compute","getFlavorById","query","project_id","projectId","flavorId","flavorName","name","head","loaderData","meta","title","component","lazyRouteComponent","$$splitComponentImporter","beforeLoad","availableServices","auth","getAvailableServices","serviceIndex"],"sources":["../../src/client/components/Error/StatusError.tsx","../../src/client/routes/_auth/projects/$projectId/compute/flavors/$flavorId.tsx"],"sourcesContent":["import { Button, ButtonRow, Container, ContentHeading } from \"@cloudoperators/juno-ui-components/index\"\nimport { Trans } from \"@lingui/react/macro\"\n\ninterface StatusErrorProps {\n message: string\n statusCode?: number\n onHomeClick?: () => void\n onBackClick?: () => void\n title: string\n showHeader?: boolean\n reset?: () => void\n}\n\nexport function StatusError({ message, statusCode, onHomeClick, onBackClick, title, reset }: StatusErrorProps) {\n return (\n <Container className=\"mx-auto flex min-h-full max-w-3xl flex-col items-center justify-center px-6 py-12 sm:px-12 md:px-20\">\n {statusCode && <div className=\"text-theme-high text-6xl font-bold\">{statusCode}</div>}\n <ContentHeading>{title}</ContentHeading>\n <p>{message}</p>\n {(onBackClick || onHomeClick || reset) && (\n <ButtonRow className=\"mt-6\">\n {onBackClick && (\n <Button onClick={onBackClick} variant=\"primary\">\n <Trans>Back</Trans>\n </Button>\n )}\n {onHomeClick && (\n <Button onClick={onHomeClick}>\n <Trans>Home</Trans>\n </Button>\n )}\n\n {reset && (\n <Button onClick={reset}>\n <Trans>Try Again</Trans>\n </Button>\n )}\n </ButtonRow>\n )}\n </Container>\n )\n}\n","import {\n Button,\n ButtonRow,\n Stack,\n Spinner,\n PopupMenu,\n PopupMenuToggle,\n PopupMenuOptions,\n PopupMenuItem,\n} from \"@cloudoperators/juno-ui-components/index\"\nimport { createFileRoute, redirect, useNavigate, useParams } from \"@tanstack/react-router\"\nimport type { RouteInfo } from \"@/client/routes/routeInfo\"\nimport { Trans, useLingui } from \"@lingui/react/macro\"\nimport { getServiceIndex } from \"@/server/Authentication/helpers\"\nimport { trpcReact } from \"@/client/trpcClient\"\nimport { FlavorDetailsView } from \"./-components/FlavorDetailsView\"\nimport { StatusError } from \"@/client/components/Error/StatusError\"\nimport { useErrorTranslation } from \"@/client/utils/useErrorTranslation\"\nimport { EditSpecModal } from \"../-components/Flavors/-components/EditSpecModal\"\nimport { ManageAccessModal } from \"../-components/Flavors/-components/ManageAccessModal\"\nimport { DeleteFlavorModal } from \"../-components/Flavors/-components/DeleteFlavorModal\"\nimport { useModal } from \"@/client/utils/useModal\"\nimport { ContentHeader } from \"@/client/components/ContentHeader/ContentHeader\"\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId/compute/flavors/$flavorId\")({\n staticData: {\n section: \"compute\",\n service: \"flavors\",\n isDetail: true,\n sectionCrumb: { labelKey: \"Compute\" },\n crumb: { labelKey: \"Flavors\", to: \"/projects/$projectId/compute/flavors\" },\n } satisfies RouteInfo,\n loader: async ({ context, params }) => {\n const flavor = await context.trpcClient?.compute.getFlavorById.query({\n project_id: params.projectId,\n flavorId: params.flavorId,\n })\n return { flavorName: flavor?.name ?? null }\n },\n head: ({ loaderData }) => ({\n meta: [{ title: loaderData?.flavorName ?? \"Flavor Details\" }],\n }),\n component: RouteComponent,\n beforeLoad: async ({ context, params }) => {\n const { trpcClient } = context\n const { projectId } = params\n\n const availableServices = (await trpcClient?.auth.getAvailableServices.query()) || []\n\n const serviceIndex = getServiceIndex(availableServices)\n\n if (!serviceIndex[\"flavor\"] && !serviceIndex[\"compute\"]) {\n throw redirect({\n to: \"/projects/$projectId\",\n params: { projectId },\n })\n }\n },\n})\n\nfunction RouteComponent() {\n const { projectId, flavorId } = useParams({\n from: \"/_auth/projects/$projectId/compute/flavors/$flavorId\",\n })\n const { trpcClient } = Route.useRouteContext()\n const navigate = useNavigate()\n const { t } = useLingui()\n const { translateError, isRetryableError } = useErrorTranslation()\n\n const {\n data: flavor,\n status,\n error,\n refetch,\n } = trpcReact.compute.getFlavorById.useQuery({\n project_id: projectId,\n flavorId,\n })\n\n const { data: permissionsData } = trpcReact.compute.canUser.useQuery({\n project_id: projectId,\n permission: [\"flavors:delete\", \"flavors:list_projects\", \"flavor_specs:create\", \"flavor_specs:delete\"],\n })\n\n const canDeleteFlavor = permissionsData?.[0] ?? false\n const canManageAccess = permissionsData?.[1] ?? false\n const canManageSpecs = (permissionsData?.[2] ?? false) || (permissionsData?.[3] ?? false)\n\n const [specModalOpen, toggleSpecModal] = useModal()\n const [accessModalOpen, toggleAccessModal] = useModal()\n const [deleteModalOpen, toggleDeleteModal] = useModal()\n\n const handleBack = () => {\n navigate({\n to: \"/projects/$projectId/compute/flavors\",\n params: { projectId },\n })\n }\n\n const handleHome = () => {\n navigate({\n to: \"/projects/$projectId\",\n params: { projectId },\n })\n }\n\n const handleRetry = () => {\n refetch()\n }\n\n if (status === \"pending\") {\n return (\n <Stack className=\"fixed inset-0\" distribution=\"center\" alignment=\"center\" direction=\"vertical\">\n <Spinner variant=\"primary\" size=\"large\" className=\"mb-2\" />\n <Trans>Loading Flavor Details...</Trans>\n </Stack>\n )\n }\n\n if (status === \"error\") {\n const errorCode = error?.message || \"UNKNOWN_ERROR\"\n const translatedError = translateError(errorCode)\n const canRetry = isRetryableError(errorCode)\n\n const getStatusCode = (code: string): number | undefined => {\n if (code.includes(\"UNAUTHORIZED\")) return 401\n if (code.includes(\"FORBIDDEN\")) return 403\n if (code.includes(\"NOT_FOUND\")) return 404\n if (code.includes(\"SERVER_ERROR\")) return 500\n return undefined\n }\n\n return (\n <StatusError\n message={translatedError}\n statusCode={getStatusCode(errorCode)}\n title={t`Error Loading Flavor`}\n onBackClick={handleBack}\n onHomeClick={handleHome}\n reset={canRetry ? handleRetry : undefined}\n />\n )\n }\n\n if (!flavor) {\n return (\n <StatusError\n message={t`The requested flavor could not be found. It may have been deleted or you may not have access to it.`}\n statusCode={404}\n title={t`Flavor Not Found`}\n onBackClick={handleBack}\n onHomeClick={handleHome}\n />\n )\n }\n\n const hasMoreActions = canManageAccess || canDeleteFlavor\n\n const headerActions =\n hasMoreActions || canManageSpecs ? (\n <ButtonRow>\n {hasMoreActions && (\n <PopupMenu>\n <PopupMenuToggle as=\"div\">\n <Button icon=\"moreVert\">\n <Trans>More Actions</Trans>\n </Button>\n </PopupMenuToggle>\n <PopupMenuOptions>\n {canManageAccess && <PopupMenuItem label={t`Manage Access`} onClick={toggleAccessModal} />}\n {canDeleteFlavor && <PopupMenuItem label={t`Delete Flavor`} onClick={toggleDeleteModal} />}\n </PopupMenuOptions>\n </PopupMenu>\n )}\n {canManageSpecs && (\n <Button onClick={toggleSpecModal} variant=\"primary\">\n <Trans>Metadata</Trans>\n </Button>\n )}\n </ButtonRow>\n ) : undefined\n\n return (\n <>\n <ContentHeader title={flavor.name} projectId={projectId} actions={headerActions} />\n <Stack direction=\"vertical\">\n <FlavorDetailsView flavor={flavor} />\n </Stack>\n\n {trpcClient && (\n <>\n {specModalOpen && (\n <EditSpecModal\n client={trpcClient}\n isOpen={specModalOpen}\n onClose={toggleSpecModal}\n project={projectId}\n flavor={flavor}\n />\n )}\n\n {accessModalOpen && (\n <ManageAccessModal\n client={trpcClient}\n isOpen={accessModalOpen}\n onClose={toggleAccessModal}\n project={projectId}\n flavor={flavor}\n />\n )}\n\n {deleteModalOpen && (\n <DeleteFlavorModal\n client={trpcClient}\n isOpen={deleteModalOpen}\n onClose={toggleDeleteModal}\n project={projectId}\n flavor={flavor}\n onSuccess={handleBack}\n />\n )}\n </>\n )}\n </>\n )\n}\n"],"mappings":";;;;;;AAaA,SAAgBI,EAAY,EAAEC,YAASC,eAAYC,gBAAaC,gBAAaC,UAAOC,YAAyB;AAC3G,QACE,kBAACR,GAAAA;EAAUS,WAAU;;GAClBL,KAAc,kBAACM,OAAAA;IAAID,WAAU;cAAsCL;;GACpE,kBAACH,GAAAA,EAAAA,UAAgBM,GAAAA,CAAAA;GACjB,kBAACI,KAAAA,EAAAA,UAAGR,GAAAA,CAAAA;IACFG,KAAeD,KAAeG,MAC9B,kBAACT,GAAAA;IAAUU,WAAU;;KAClBH,KACC,kBAACR,GAAAA;MAAOc,SAASN;MAAaO,SAAQ;gBACpC,kBAAA,GAAA,EAAA,IAAA,UAAA,CAAA;;KAGHR,KACC,kBAACP,GAAAA;MAAOc,SAASP;gBACf,kBAAA,GAAA,EAAA,IAAA,UAAA,CAAA;;KAIHG,KACC,kBAACV,GAAAA;MAAOc,SAASJ;gBACf,kBAAA,GAAA,EAAA,IAAA,UAAA,CAAA;;;;;;;ACVd,IAAaS,IAAQH,EAAgB,uDAAA,CAAwD;CAC3FI,YAAY;EACVC,SAAS;EACTC,SAAS;EACTC,UAAU;EACVC,cAAc,EAAEC,UAAU,WAAU;EACpCC,OAAO;GAAED,UAAU;GAAWE,IAAI;GAAuC;EAC3E;CACAE,QAAQ,OAAO,EAAEC,YAASC,iBAKjB,EAAES,aAJM,MAAMV,EAAQG,YAAYC,QAAQC,cAAcC,MAAM;EACnEC,YAAYN,EAAOO;EACnBC,UAAUR,EAAOQ;EACnB,CAAA,GAC6BE,QAAQ,MAAK;CAE5CC,OAAO,EAAEC,qBAAkB,EACzBC,MAAM,CAAC,EAAEC,OAAOF,GAAYH,cAAc,kBAAiB,CAAC,EAC9D;CACAM,WAASC,4CAAA,YAAA;CACTE,YAAY,OAAO,EAAEnB,YAASC,gBAAQ;EACpC,IAAM,EAAEE,kBAAeH,GACjB,EAAEQ,iBAAcP,GAIhBsB,IAAenC,EAFK,MAAOe,GAAYkB,KAAKC,qBAAqBhB,OAAAA,IAAY,EAAE,CAEhDc;AAErC,MAAI,CAACG,EAAa,UAAa,CAACA,EAAa,QAC3C,OAAMpC,EAAS;GACbU,IAAI;GACJI,QAAQ,EAAEO,cAAU;GACtB,CAAA;;CAGN,CAAA"}
@@ -1,527 +0,0 @@
1
- import { E as e, J as t, L as n, N as r, Q as i, R as a, W as o, Y as s, b as c, c as l, et as u, h as d, j as f, nt as p, q as m, z as h } from "./build-BJDfnAyi.mjs";
2
- import { r as g } from "./trpcClient-BxguzNYF.mjs";
3
- import { t as ee } from "./ContentHeader-BXZoN3B9.mjs";
4
- import { A as _, D as te, E as ne, F as v, I as y, N as re, O as ie, P as b, T as ae, d as oe, k as se, u as ce } from "./ImageToastNotifications-BG9LPnXf.mjs";
5
- import { Fragment as x, jsx as S, jsxs as C } from "react/jsx-runtime";
6
- import w, { useState as T } from "react";
7
- import { useNavigate as le, useParams as ue, useSearch as de } from "@tanstack/react-router";
8
- import { Trans as E, useLingui as D } from "@lingui/react";
9
- //#region src/client/routes/_auth/projects/$projectId/compute/-components/Images/-components/ImageDetailsView.tsx
10
- var O = ({ image: e, myMemberData: t, canUpdateMember: n, onStatusChange: r, isLoading: i }) => {
11
- let { i18n: a, _: o } = D(), s = t.status === v.PENDING, u = t.status === v.REJECTED, f = t.status === v.ACCEPTED, p = t.created_at ? new Date(t.created_at).toLocaleString() : a._({ id: "fj5byd" }), m = t.updated_at ? new Date(t.updated_at).toLocaleString() : a._({ id: "fj5byd" }), h = e.owner ?? "";
12
- return /* @__PURE__ */ C(c, { children: [
13
- s && /* @__PURE__ */ S("p", {
14
- className: "text-theme-highest font-semibold",
15
- children: /* @__PURE__ */ S(E, { id: "/EcdUM" })
16
- }),
17
- /* @__PURE__ */ S("p", { children: /* @__PURE__ */ S(E, {
18
- id: "Uwo8Xw",
19
- values: {
20
- ownerProject: h,
21
- sharedAt: p
22
- },
23
- components: { 0: /* @__PURE__ */ S("span", { className: "font-semibold" }) }
24
- }) }),
25
- /* @__PURE__ */ C("ul", { children: [
26
- /* @__PURE__ */ C("li", { children: [
27
- /* @__PURE__ */ S("span", {
28
- className: "font-semibold",
29
- children: /* @__PURE__ */ S(E, { id: "azXlY+" })
30
- }),
31
- " ",
32
- t.status
33
- ] }),
34
- /* @__PURE__ */ C("li", { children: [
35
- /* @__PURE__ */ S("span", {
36
- className: "font-semibold",
37
- children: /* @__PURE__ */ S(E, { id: "G6AP+o" })
38
- }),
39
- " ",
40
- p
41
- ] }),
42
- /* @__PURE__ */ C("li", { children: [
43
- /* @__PURE__ */ S("span", {
44
- className: "font-semibold",
45
- children: /* @__PURE__ */ S(E, { id: "pFg+7w" })
46
- }),
47
- " ",
48
- m
49
- ] })
50
- ] }),
51
- n && /* @__PURE__ */ C(d, { children: [
52
- s && /* @__PURE__ */ S(l, {
53
- onClick: () => r(v.REJECTED),
54
- disabled: i,
55
- variant: "subdued",
56
- children: /* @__PURE__ */ S(E, { id: "1t/NnN" })
57
- }),
58
- (s || u) && /* @__PURE__ */ S(l, {
59
- onClick: () => r(v.ACCEPTED),
60
- disabled: i,
61
- variant: "primary",
62
- children: /* @__PURE__ */ S(E, { id: "g3UF2V" })
63
- }),
64
- f && /* @__PURE__ */ S(l, {
65
- onClick: () => r(v.REJECTED),
66
- disabled: i,
67
- variant: "primary-danger",
68
- children: /* @__PURE__ */ S(E, { id: "1t/NnN" })
69
- })
70
- ] })
71
- ] });
72
- }, k = ({ image: e }) => {
73
- let { i18n: t, _: i } = D();
74
- return /* @__PURE__ */ C(h, {
75
- px: !1,
76
- py: !0,
77
- children: [/* @__PURE__ */ S(f, { children: t._({ id: "nW/hX9" }) }), /* @__PURE__ */ C(o, {
78
- alignTerms: "right",
79
- children: [
80
- /* @__PURE__ */ S(r, { children: t._({ id: "S0kLOH" }) }),
81
- /* @__PURE__ */ S(n, { children: e.id }),
82
- /* @__PURE__ */ S(r, { children: t._({ id: "6YtxFj" }) }),
83
- /* @__PURE__ */ S(n, { children: e.name }),
84
- /* @__PURE__ */ S(r, { children: t._({ id: "uAQUqI" }) }),
85
- /* @__PURE__ */ S(n, { children: e.status }),
86
- /* @__PURE__ */ S(r, { children: t._({ id: "Cj2Gtd" }) }),
87
- /* @__PURE__ */ S(n, { children: /* @__PURE__ */ S(y, { size: e.size }) }),
88
- /* @__PURE__ */ S(r, { children: t._({ id: "Cxgv2U" }) }),
89
- /* @__PURE__ */ C(n, { children: [e.min_disk, " GB"] }),
90
- /* @__PURE__ */ S(r, { children: t._({ id: "B2Czeb" }) }),
91
- /* @__PURE__ */ C(n, { children: [e.min_ram, " MB"] }),
92
- /* @__PURE__ */ S(r, { children: t._({ id: "NopYGU" }) }),
93
- /* @__PURE__ */ S(n, { children: /* @__PURE__ */ S("span", {
94
- className: "uppercase",
95
- children: e.disk_format
96
- }) }),
97
- /* @__PURE__ */ S(r, { children: t._({ id: "6/xipy" }) }),
98
- /* @__PURE__ */ S(n, { children: /* @__PURE__ */ S("span", {
99
- className: "uppercase",
100
- children: e.container_format
101
- }) }),
102
- /* @__PURE__ */ S(r, { children: t._({ id: "88kg0+" }) }),
103
- /* @__PURE__ */ S(n, { children: e.created_at ? new Date(e.created_at).toLocaleDateString() : t._({ id: "fj5byd" }) }),
104
- /* @__PURE__ */ S(r, { children: t._({ id: "Llcakz" }) }),
105
- /* @__PURE__ */ S(n, { children: e.updated_at ? new Date(e.updated_at).toLocaleDateString() : t._({ id: "fj5byd" }) })
106
- ]
107
- })]
108
- });
109
- }, A = ({ image: e, currentProjectId: t }) => {
110
- let { i18n: i, _: a } = D(), s = e.visibility === "shared" && e.owner !== void 0 && e.owner !== t;
111
- return /* @__PURE__ */ C(h, {
112
- px: !1,
113
- py: !0,
114
- children: [/* @__PURE__ */ S(f, { children: i._({ id: "a3LDKx" }) }), /* @__PURE__ */ C(o, {
115
- alignTerms: "right",
116
- children: [
117
- /* @__PURE__ */ S(r, { children: s ? i._({ id: "20axE5" }) : i._({ id: "YsrbQh" }) }),
118
- /* @__PURE__ */ S(n, { children: e.owner }),
119
- /* @__PURE__ */ S(r, { children: i._({ id: "2q/Q7x" }) }),
120
- /* @__PURE__ */ S(n, { children: e.visibility }),
121
- /* @__PURE__ */ S(r, { children: i._({ id: "644xgx" }) }),
122
- /* @__PURE__ */ S(n, { children: e.protected ? i._({ id: "l75CjT" }) : i._({ id: "1UzENP" }) }),
123
- /* @__PURE__ */ S(r, { children: i._({ id: "PzgYM9" }) }),
124
- /* @__PURE__ */ S(n, { children: e?.checksum ? e.checksum : "" })
125
- ]
126
- })]
127
- });
128
- }, j = ({ image: e }) => {
129
- let { i18n: t, _: i } = D(), a = new Set([
130
- "id",
131
- "name",
132
- "status",
133
- "visibility",
134
- "size",
135
- "disk_format",
136
- "container_format",
137
- "min_disk",
138
- "min_ram",
139
- "owner",
140
- "protected",
141
- "created_at",
142
- "updated_at",
143
- "checksum"
144
- ]), s = Object.entries(e).filter(([e]) => !a.has(e)).sort(([e], [t]) => e.localeCompare(t)), c = s.length > 0;
145
- return /* @__PURE__ */ C(h, {
146
- px: !1,
147
- py: !0,
148
- children: [/* @__PURE__ */ S(f, { children: t._({ id: "bc67JN" }) }), c ? /* @__PURE__ */ S(o, {
149
- alignTerms: "right",
150
- className: "grid-cols-4",
151
- children: s.map(([e, i]) => /* @__PURE__ */ C(w.Fragment, { children: [/* @__PURE__ */ S(r, {
152
- className: "col-span-1",
153
- children: e
154
- }), /* @__PURE__ */ S(n, {
155
- className: "col-span-1",
156
- children: i == null ? /* @__PURE__ */ S("span", { children: "null" }) : typeof i == "object" ? /* @__PURE__ */ S("span", {
157
- className: "break-all",
158
- children: JSON.stringify(i)
159
- }) : typeof i == "boolean" ? i ? t._({ id: "c+xCSz" }) : t._({ id: "ocUvR+" }) : /* @__PURE__ */ S("span", {
160
- className: "break-all",
161
- children: String(i)
162
- })
163
- })] }, e))
164
- }) : /* @__PURE__ */ S("p", {
165
- className: "text-theme-light",
166
- children: t._({ id: "9v5VLp" })
167
- })]
168
- });
169
- }, M = (e) => {
170
- let t = "px-6 py-3 font-semibold border-b-2 transition-colors";
171
- return e ? `${t} border-theme-accent text-theme-highest` : `${t} border-transparent text-theme-secondary hover:text-theme-high`;
172
- }, N = ({ image: e, permissions: t, currentProjectId: n }) => {
173
- let [r, i] = T(!1), [a, o] = T(null), { data: s, isLoading: c } = g.compute.listImageMembers.useQuery({
174
- project_id: n,
175
- imageId: e.id
176
- }, { enabled: !!e.id && !!n });
177
- return /* @__PURE__ */ C(h, {
178
- px: !1,
179
- py: !0,
180
- children: [a && /* @__PURE__ */ S(m, {
181
- text: a.text,
182
- variant: a.type,
183
- onDismiss: () => o(null),
184
- className: "mb-4"
185
- }), /* @__PURE__ */ S(_, {
186
- image: e,
187
- imageMembers: s,
188
- isMembersLoading: c,
189
- canAdd: t?.canCreateMember ?? !1,
190
- canRemove: t?.canDeleteMember ?? !1,
191
- isAddingMember: r,
192
- setIsAddingMember: i,
193
- setMessage: o,
194
- projectId: n
195
- })]
196
- });
197
- }, fe = ({ image: e, currentProjectId: t, activeTab: n = "details", onTabChange: r, permissions: i, myMemberData: a, onMemberStatusChange: o, isMemberStatusChanging: s, actions: c }) => {
198
- let { i18n: l, _: u } = D(), d = e.visibility === "shared" && e.owner !== void 0 && e.owner !== t, f = e.owner === t && e.visibility === "shared";
199
- return /* @__PURE__ */ C(p, {
200
- direction: "vertical",
201
- gap: "6",
202
- children: [
203
- d && a && o && /* @__PURE__ */ S(O, {
204
- image: e,
205
- myMemberData: a,
206
- canUpdateMember: i?.canUpdateMember ?? !1,
207
- onStatusChange: o,
208
- isLoading: s ?? !1
209
- }),
210
- f && /* @__PURE__ */ S("div", {
211
- className: "border-theme-background-lvl-3 border-b",
212
- children: /* @__PURE__ */ C(p, {
213
- direction: "horizontal",
214
- gap: "0",
215
- children: [/* @__PURE__ */ S("button", {
216
- className: M(n === "details"),
217
- onClick: () => r?.("details"),
218
- children: l._({ id: "URmyfc" })
219
- }), /* @__PURE__ */ S("button", {
220
- className: M(n === "sharing"),
221
- onClick: () => r?.("sharing"),
222
- children: l._({ id: "aG9OiI" })
223
- })]
224
- })
225
- }),
226
- (n === "details" || !f) && /* @__PURE__ */ C(x, { children: [
227
- c,
228
- /* @__PURE__ */ S(k, { image: e }),
229
- /* @__PURE__ */ S(A, {
230
- image: e,
231
- currentProjectId: t
232
- }),
233
- /* @__PURE__ */ S(j, { image: e })
234
- ] }),
235
- n === "sharing" && f && /* @__PURE__ */ S(N, {
236
- image: e,
237
- permissions: i
238
- })
239
- ]
240
- });
241
- };
242
- //#endregion
243
- //#region src/client/routes/_auth/projects/$projectId/compute/images/$imageId.tsx?tsr-split=component
244
- function P() {
245
- let { projectId: n, imageId: r } = ue({ from: "/_auth/projects/$projectId/compute/images/$imageId" }), { tab: o } = de({ from: "/_auth/projects/$projectId/compute/images/$imageId" }), c = le(), { i18n: f, _: m } = D(), { data: h, status: _, error: v } = g.compute.getImageById.useQuery({
246
- project_id: n,
247
- imageId: r
248
- }), { data: y } = g.compute.canUser.useQuery({
249
- project_id: n,
250
- permission: [
251
- "images:delete",
252
- "images:update",
253
- "images:create_member",
254
- "images:delete_member",
255
- "images:update_member"
256
- ]
257
- }), w = {
258
- canDelete: y?.[0] ?? !1,
259
- canUpdate: y?.[1] ?? !1,
260
- canCreateMember: y?.[2] ?? !1,
261
- canDeleteMember: y?.[3] ?? !1,
262
- canUpdateMember: y?.[4] ?? !1
263
- }, O = g.useUtils(), [k, A] = T(!1), [j, M] = T(!1), [N, P] = T(!1), [F, I] = T(!1), [L, R] = T(!1), [z, B] = T(null), V = g.compute.updateImage.useMutation({ onSuccess: (e) => {
264
- O.compute.getImageById.setData({
265
- project_id: n,
266
- imageId: r
267
- }, e), O.compute.listImagesWithPagination.invalidate();
268
- } }), H = g.compute.deleteImage.useMutation({ onSuccess: () => {
269
- O.compute.listImagesWithPagination.invalidate();
270
- } }), U = g.compute.deactivateImage.useMutation({ onSuccess: () => {
271
- O.compute.getImageById.invalidate({
272
- project_id: n,
273
- imageId: r
274
- });
275
- } }), W = g.compute.reactivateImage.useMutation({ onSuccess: () => {
276
- O.compute.getImageById.invalidate({
277
- project_id: n,
278
- imageId: r
279
- });
280
- } }), G = g.compute.updateImageVisibility.useMutation({ onSuccess: (e) => {
281
- O.compute.getImageById.setData({
282
- project_id: n,
283
- imageId: r
284
- }, e);
285
- } }), K = h?.visibility === b.SHARED && h?.owner !== void 0 && h?.owner !== n, { data: pe } = g.compute.getImageMember.useQuery({
286
- project_id: n,
287
- imageId: r,
288
- memberId: n
289
- }, { enabled: K && !!r && !!n }), q = g.compute.updateImageMember.useMutation({ onSuccess: () => {
290
- O.compute.getImageMember.invalidate({
291
- project_id: n,
292
- imageId: r,
293
- memberId: n
294
- }), O.compute.listImageMembers.invalidate({
295
- project_id: n,
296
- imageId: r
297
- }), O.compute.listImagesWithPagination.invalidate(), O.compute.listSharedImagesByMemberStatus.invalidate();
298
- } }), me = async (e) => {
299
- try {
300
- await q.mutateAsync({
301
- project_id: n,
302
- imageId: r,
303
- memberId: n,
304
- status: e
305
- }), B(oe(e, { onDismiss: () => B(null) }));
306
- } catch (e) {
307
- let t = e?.message;
308
- B(ce(t, { onDismiss: () => B(null) }));
309
- }
310
- }, J = () => {
311
- c({
312
- to: "/projects/$projectId/compute/images",
313
- params: { projectId: n }
314
- });
315
- }, Y = V.isPending || H.isPending || U.isPending || W.isPending || G.isPending, he = (e, t) => {
316
- let n = [];
317
- return Object.entries(e).forEach(([e, r]) => {
318
- let i = `/${e}`;
319
- if (r == null) e in t && n.push({
320
- op: "remove",
321
- path: i
322
- });
323
- else {
324
- let a = e in t;
325
- n.push({
326
- op: a ? "replace" : "add",
327
- path: i,
328
- value: r
329
- });
330
- }
331
- }), n;
332
- }, X = async (e) => {
333
- if (!h) return !1;
334
- let t = he(e, h);
335
- try {
336
- return await V.mutateAsync({
337
- project_id: n,
338
- imageId: r,
339
- operations: t
340
- }), A(!1), !0;
341
- } catch {
342
- return !1;
343
- }
344
- }, ge = async (e) => {
345
- try {
346
- await H.mutateAsync({
347
- project_id: n,
348
- imageId: e.id
349
- }), P(!1), J();
350
- } catch {
351
- P(!1);
352
- }
353
- }, _e = async (e) => {
354
- try {
355
- await W.mutateAsync({
356
- project_id: n,
357
- imageId: e.id
358
- }), I(!1);
359
- } catch {
360
- I(!1);
361
- }
362
- }, ve = async (e) => {
363
- try {
364
- await U.mutateAsync({
365
- project_id: n,
366
- imageId: e.id
367
- }), R(!1);
368
- } catch {
369
- R(!1);
370
- }
371
- }, Z = async (e) => {
372
- if (h) try {
373
- await G.mutateAsync({
374
- project_id: n,
375
- imageId: h.id,
376
- visibility: e
377
- });
378
- } catch {}
379
- };
380
- if (_ === "pending") return /* @__PURE__ */ C(p, {
381
- className: "fixed inset-0",
382
- distribution: "center",
383
- alignment: "center",
384
- direction: "vertical",
385
- children: [/* @__PURE__ */ S(i, {
386
- variant: "primary",
387
- size: "large",
388
- className: "mb-2"
389
- }), /* @__PURE__ */ S(E, { id: "hH3kDo" })]
390
- });
391
- if (_ === "error") {
392
- let e = v?.message || "Unknown error";
393
- return /* @__PURE__ */ C(p, {
394
- className: "fixed inset-0",
395
- distribution: "center",
396
- alignment: "center",
397
- direction: "vertical",
398
- gap: "5",
399
- children: [
400
- /* @__PURE__ */ S("p", {
401
- className: "text-theme-error font-semibold",
402
- children: /* @__PURE__ */ S(E, { id: "Jh4rAZ" })
403
- }),
404
- /* @__PURE__ */ S("p", {
405
- className: "text-theme-highest",
406
- children: e
407
- }),
408
- /* @__PURE__ */ S(l, {
409
- onClick: J,
410
- variant: "primary",
411
- children: /* @__PURE__ */ S(E, { id: "bnql/K" })
412
- })
413
- ]
414
- });
415
- }
416
- if (!h) return /* @__PURE__ */ C(p, {
417
- className: "fixed inset-0",
418
- distribution: "center",
419
- alignment: "center",
420
- direction: "vertical",
421
- gap: "5",
422
- children: [/* @__PURE__ */ S("p", {
423
- className: "text-theme-highest",
424
- children: /* @__PURE__ */ S(E, { id: "1pdLQw" })
425
- }), /* @__PURE__ */ S(l, {
426
- onClick: J,
427
- variant: "primary",
428
- children: /* @__PURE__ */ S(E, { id: "bnql/K" })
429
- })]
430
- });
431
- let Q = h.status === re.DEACTIVATED, ye = h.visibility === b.PRIVATE, $ = !K && (w.canUpdate || w.canDelete && !h.protected), be = !K && ($ || w.canUpdate) ? /* @__PURE__ */ C(d, { children: [
432
- $ && /* @__PURE__ */ C(u, { children: [/* @__PURE__ */ S(a, {
433
- as: "div",
434
- children: /* @__PURE__ */ S(l, {
435
- icon: "moreVert",
436
- disabled: Y,
437
- children: /* @__PURE__ */ S(E, { id: "PgNNGl" })
438
- })
439
- }), /* @__PURE__ */ C(e, { children: [
440
- w.canUpdate && /* @__PURE__ */ S(s, {
441
- label: Q ? f._({ id: "FQBaXG" }) : f._({ id: "5y3O+A" }),
442
- onClick: () => Q ? I(!0) : R(!0)
443
- }),
444
- w.canUpdate && ye && /* @__PURE__ */ S(s, {
445
- label: f._({ id: "gMYsdZ" }),
446
- onClick: () => Z("shared")
447
- }),
448
- w.canDelete && !h.protected && /* @__PURE__ */ S(s, {
449
- label: f._({ id: "cnGeoo" }),
450
- onClick: () => P(!0)
451
- })
452
- ] })] }),
453
- w.canUpdate && /* @__PURE__ */ S(l, {
454
- onClick: () => M(!0),
455
- disabled: Y,
456
- children: /* @__PURE__ */ S(E, { id: "SIfYq6" })
457
- }),
458
- w.canUpdate && /* @__PURE__ */ S(l, {
459
- onClick: () => A(!0),
460
- variant: "primary",
461
- disabled: Y,
462
- children: /* @__PURE__ */ S(E, { id: "Y1YKad" })
463
- })
464
- ] }) : void 0;
465
- return /* @__PURE__ */ C(x, { children: [
466
- /* @__PURE__ */ S(ee, {
467
- title: String(h.name ?? h.id),
468
- projectId: n,
469
- actions: be
470
- }),
471
- /* @__PURE__ */ S(fe, {
472
- image: h,
473
- currentProjectId: n,
474
- activeTab: o ?? "details",
475
- onTabChange: (e) => c({ search: { tab: e === "details" ? void 0 : e } }),
476
- permissions: {
477
- canCreateMember: w.canCreateMember,
478
- canDeleteMember: w.canDeleteMember,
479
- canUpdateMember: w.canUpdateMember
480
- },
481
- myMemberData: pe,
482
- onMemberStatusChange: me,
483
- isMemberStatusChanging: q.isPending
484
- }, h.id),
485
- z && /* @__PURE__ */ S(t, { ...z }),
486
- k && /* @__PURE__ */ S(se, {
487
- image: h,
488
- isOpen: k,
489
- isLoading: V.isPending,
490
- onClose: () => A(!1),
491
- onSave: X
492
- }),
493
- j && /* @__PURE__ */ S(ie, {
494
- image: h,
495
- isOpen: j,
496
- isLoading: V.isPending,
497
- onClose: () => M(!1),
498
- onSave: X
499
- }),
500
- N && /* @__PURE__ */ S(te, {
501
- image: h,
502
- isOpen: N,
503
- isLoading: H.isPending,
504
- isDisabled: !!h.protected,
505
- onClose: () => P(!1),
506
- onDelete: ge
507
- }),
508
- F && /* @__PURE__ */ S(ne, {
509
- image: h,
510
- isOpen: F,
511
- isLoading: W.isPending,
512
- onClose: () => I(!1),
513
- onActivate: _e
514
- }),
515
- L && /* @__PURE__ */ S(ae, {
516
- image: h,
517
- isOpen: L,
518
- isLoading: U.isPending,
519
- onClose: () => R(!1),
520
- onDeactivate: ve
521
- })
522
- ] });
523
- }
524
- //#endregion
525
- export { P as component };
526
-
527
- //# sourceMappingURL=_imageId-BL0I5_pv.mjs.map