@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.
- package/README.md +73 -77
- package/dist/client/AuroraApp.d.ts +15 -0
- package/dist/client/{AuthProvider-D-5Jpa6F.mjs → AuthProvider-Co4d0WzB.mjs} +3 -3
- package/dist/client/{AuthProvider-D-5Jpa6F.mjs.map → AuthProvider-Co4d0WzB.mjs.map} +1 -1
- package/dist/client/{ContentHeader-BXZoN3B9.mjs → ContentHeader-kx1Th5Sq.mjs} +29 -29
- package/dist/client/{ContentHeader-BXZoN3B9.mjs.map → ContentHeader-kx1Th5Sq.mjs.map} +1 -1
- package/dist/client/DeleteFlavorModal-C3cb7YiJ.mjs +638 -0
- package/dist/client/DeleteFlavorModal-C3cb7YiJ.mjs.map +1 -0
- package/dist/client/{EditSecurityGroupModal-DK3WYikA.mjs → EditSecurityGroupModal-CpP54WIK.mjs} +22 -22
- package/dist/client/{EditSecurityGroupModal-DK3WYikA.mjs.map → EditSecurityGroupModal-CpP54WIK.mjs.map} +1 -1
- package/dist/client/{FiltersInput-OVeIJzIo.mjs → FiltersInput-DxcyR6Bp.mjs} +18 -18
- package/dist/client/{FiltersInput-OVeIJzIo.mjs.map → FiltersInput-DxcyR6Bp.mjs.map} +1 -1
- package/dist/client/{FloatingIpActionModals-Dok7fJss.mjs → FloatingIpActionModals-BP8RWHbu.mjs} +77 -77
- package/dist/client/{FloatingIpActionModals-Dok7fJss.mjs.map → FloatingIpActionModals-BP8RWHbu.mjs.map} +1 -1
- package/dist/client/ImageToastNotifications-TZ3EfQg-.mjs +1219 -0
- package/dist/client/ImageToastNotifications-TZ3EfQg-.mjs.map +1 -0
- package/dist/client/{RouteError-pDEWC_k7.mjs → RouteError-QSV7qOoJ.mjs} +6 -6
- package/dist/client/{RouteError-pDEWC_k7.mjs.map → RouteError-QSV7qOoJ.mjs.map} +1 -1
- package/dist/client/{SortInput-DXWSqSny.mjs → SortInput-CYv2_Pur.mjs} +6 -6
- package/dist/client/{SortInput-DXWSqSny.mjs.map → SortInput-CYv2_Pur.mjs.map} +1 -1
- package/dist/client/{_auth-CJj1Cnbm.mjs → _auth-DXJkv9QO.mjs} +3 -3
- package/dist/client/{_auth-CJj1Cnbm.mjs.map → _auth-DXJkv9QO.mjs.map} +1 -1
- package/dist/client/{_flavorId-BoNcxYmF.mjs → _flavorId-C2x43-6S.mjs} +15 -15
- package/dist/client/_flavorId-C2x43-6S.mjs.map +1 -0
- package/dist/client/_flavorId-CR8ZUI-P.mjs +194 -0
- package/dist/client/_flavorId-CR8ZUI-P.mjs.map +1 -0
- package/dist/client/{_floatingIpId-D33bOEmH.mjs → _floatingIpId-BCk41_Lb.mjs} +3 -3
- package/dist/client/{_floatingIpId-D33bOEmH.mjs.map → _floatingIpId-BCk41_Lb.mjs.map} +1 -1
- package/dist/client/{_floatingIpId-DF_BSJN6.mjs → _floatingIpId-BGrOAmPT.mjs} +48 -48
- package/dist/client/{_floatingIpId-DF_BSJN6.mjs.map → _floatingIpId-BGrOAmPT.mjs.map} +1 -1
- package/dist/client/_imageId-CvfD832b.mjs +534 -0
- package/dist/client/_imageId-CvfD832b.mjs.map +1 -0
- package/dist/client/_pcaId-BxBt5DXi.mjs +459 -0
- package/dist/client/_pcaId-BxBt5DXi.mjs.map +1 -0
- package/dist/client/{_pcaId-BYCoeK6_.mjs → _pcaId-DOHycvCf.mjs} +3 -3
- package/dist/client/{_pcaId-BYCoeK6_.mjs.map → _pcaId-DOHycvCf.mjs.map} +1 -1
- package/dist/client/_projectId-BDSWnMGj.mjs +46 -0
- package/dist/client/_projectId-BDSWnMGj.mjs.map +1 -0
- package/dist/client/{_projectId-OW2xkK43.mjs → _projectId-DOgwFiqD.mjs} +3 -3
- package/dist/client/{_projectId-OW2xkK43.mjs.map → _projectId-DOgwFiqD.mjs.map} +1 -1
- package/dist/client/_projectId-DS4nR59B.mjs +299 -0
- package/dist/client/_projectId-DS4nR59B.mjs.map +1 -0
- package/dist/client/{_projectId-BwLMEMGC.mjs → _projectId-MxcHrXW4.mjs} +21 -21
- package/dist/client/_projectId-MxcHrXW4.mjs.map +1 -0
- package/dist/client/{_securityGroupId-B-Z-CzLp.mjs → _securityGroupId-CJJanWiY.mjs} +3 -3
- package/dist/client/{_securityGroupId-B-Z-CzLp.mjs.map → _securityGroupId-CJJanWiY.mjs.map} +1 -1
- package/dist/client/{_securityGroupId-B1bOYRbX.mjs → _securityGroupId-KKw4RPdH.mjs} +445 -446
- package/dist/client/{_securityGroupId-B1bOYRbX.mjs.map → _securityGroupId-KKw4RPdH.mjs.map} +1 -1
- package/dist/client/{containers-BjWqjNOx.mjs → _storageType-4wSxI__0.mjs} +19 -16
- package/dist/client/_storageType-4wSxI__0.mjs.map +1 -0
- package/dist/client/_storageType-DYjo-6ej.mjs +3243 -0
- package/dist/client/_storageType-DYjo-6ej.mjs.map +1 -0
- package/dist/client/_storageType-zeSZe--V.mjs +7 -0
- package/dist/client/_storageType-zeSZe--V.mjs.map +1 -0
- package/dist/client/about-Bo9vxGHy.mjs +92 -0
- package/dist/client/{about-DLn1ShhF.mjs.map → about-Bo9vxGHy.mjs.map} +1 -1
- package/dist/client/aurora-DDzsst74.mjs +19 -0
- package/dist/client/{aurora-CRcxVUCo.mjs.map → aurora-DDzsst74.mjs.map} +1 -1
- package/dist/client/{build-BJDfnAyi.mjs → build-DeJcDjPi.mjs} +3802 -3376
- package/dist/client/build-DeJcDjPi.mjs.map +1 -0
- package/dist/client/{buildFilterParams-TeyosGyK.mjs → buildFilterParams-DoZzMKX9.mjs} +1 -1
- package/dist/client/{buildFilterParams-TeyosGyK.mjs.map → buildFilterParams-DoZzMKX9.mjs.map} +1 -1
- package/dist/client/{cn-C3laVXMm.mjs → cn-DM4Cy3jv.mjs} +1 -1
- package/dist/client/{cn-C3laVXMm.mjs.map → cn-DM4Cy3jv.mjs.map} +1 -1
- package/dist/client/constants-BmcGYeR-.mjs +153 -0
- package/dist/client/constants-BmcGYeR-.mjs.map +1 -0
- package/dist/client/{flavors-D8oElC2K.mjs → flavors-BxFVqgnb.mjs} +2 -2
- package/dist/client/{flavors-D8oElC2K.mjs.map → flavors-BxFVqgnb.mjs.map} +1 -1
- package/dist/client/flavors-CfdgjsZY.mjs +632 -0
- package/dist/client/flavors-CfdgjsZY.mjs.map +1 -0
- package/dist/client/{flavors-BXPYAFyQ.mjs → flavors-DWMZ6TuJ.mjs} +2 -2
- package/dist/client/{flavors-BXPYAFyQ.mjs.map → flavors-DWMZ6TuJ.mjs.map} +1 -1
- package/dist/client/{floatingips-Fa6ocNUu.mjs → floatingips-ByRb82wS.mjs} +138 -139
- package/dist/client/{floatingips-Fa6ocNUu.mjs.map → floatingips-ByRb82wS.mjs.map} +1 -1
- package/dist/client/{formatBytes-tQBEnPoL.mjs → formatBytes-CZv_XyCY.mjs} +1 -1
- package/dist/client/{formatBytes-tQBEnPoL.mjs.map → formatBytes-CZv_XyCY.mjs.map} +1 -1
- package/dist/client/{helpers--JWXi40U.mjs → helpers-1PpYf-fC.mjs} +1 -1
- package/dist/client/{helpers--JWXi40U.mjs.map → helpers-1PpYf-fC.mjs.map} +1 -1
- package/dist/client/hooks-dSArr2Ca.mjs +2 -0
- package/dist/client/images-CKqIXUq52.mjs +1873 -0
- package/dist/client/images-CKqIXUq52.mjs.map +1 -0
- package/dist/client/{images-tYfyOkX8.mjs → images-C_dX7nY6.mjs} +3 -3
- package/dist/client/{images-tYfyOkX8.mjs.map → images-C_dX7nY6.mjs.map} +1 -1
- package/dist/client/{images-CTLCY-yY.mjs → images-CenluYV8.mjs} +2 -2
- package/dist/client/{images-CTLCY-yY.mjs.map → images-CenluYV8.mjs.map} +1 -1
- package/dist/client/{images-DM9I8G0p.mjs → images-NBf2bV43.mjs} +2 -2
- package/dist/client/{images-DM9I8G0p.mjs.map → images-NBf2bV43.mjs.map} +1 -1
- package/dist/client/index.js +428 -477
- package/dist/client/index.js.map +1 -1
- package/dist/client/{md-BivyCkGC.mjs → md-CYTrL5dq.mjs} +58 -22
- package/dist/client/{md-BivyCkGC.mjs.map → md-CYTrL5dq.mjs.map} +1 -1
- package/dist/client/{network-rYLHyf15.mjs → network-DuZm76BZ.mjs} +2 -2
- package/dist/client/{network-rYLHyf15.mjs.map → network-DuZm76BZ.mjs.map} +1 -1
- package/dist/client/objects-BJM6YeuF.mjs +5708 -0
- package/dist/client/objects-BJM6YeuF.mjs.map +1 -0
- package/dist/client/objects-gxSjvbvF.mjs +101 -0
- package/dist/client/objects-gxSjvbvF.mjs.map +1 -0
- package/dist/client/objects-o2Cj_ndZ.mjs +8 -0
- package/dist/client/objects-o2Cj_ndZ.mjs.map +1 -0
- package/dist/client/{pca-COmKvp3J.mjs → pca-Bl8NmoVZ.mjs} +2 -2
- package/dist/client/{pca-COmKvp3J.mjs.map → pca-Bl8NmoVZ.mjs.map} +1 -1
- package/dist/client/pca-RSiWpJs9.mjs +182 -0
- package/dist/client/pca-RSiWpJs9.mjs.map +1 -0
- package/dist/client/projects-CgclWI16.mjs +105 -0
- package/dist/client/projects-CgclWI16.mjs.map +1 -0
- package/dist/client/{projects-DI_L4oDw.mjs → projects-D2iewAzu.mjs} +2 -2
- package/dist/client/{projects-DI_L4oDw.mjs.map → projects-D2iewAzu.mjs.map} +1 -1
- package/dist/client/{projects-Dl5XkXUP.mjs → projects-pe2_dCnV.mjs} +3 -3
- package/dist/client/{projects-Dl5XkXUP.mjs.map → projects-pe2_dCnV.mjs.map} +1 -1
- package/dist/client/{projects-HoQ0gE5Y.mjs → projects-yiK0HGSA.mjs} +2 -2
- package/dist/client/{projects-HoQ0gE5Y.mjs.map → projects-yiK0HGSA.mjs.map} +1 -1
- package/dist/client/{securitygroups-BjkmHk2J.mjs → securitygroups-DahZkVYQ.mjs} +139 -140
- package/dist/client/{securitygroups-BjkmHk2J.mjs.map → securitygroups-DahZkVYQ.mjs.map} +1 -1
- package/dist/client/{trpcClient-BxguzNYF.mjs → trpcClient-BzPUgiM2.mjs} +1 -1
- package/dist/client/{trpcClient-BxguzNYF.mjs.map → trpcClient-BzPUgiM2.mjs.map} +1 -1
- package/dist/client/{useErrorTranslation-TZVwIAzq.mjs → useErrorTranslation-Dc0eE8Zt.mjs} +1 -1
- package/dist/client/{useErrorTranslation-TZVwIAzq.mjs.map → useErrorTranslation-Dc0eE8Zt.mjs.map} +1 -1
- package/dist/client/useListWithFiltering-DaYcu5AB.mjs +157 -0
- package/dist/client/useListWithFiltering-DaYcu5AB.mjs.map +1 -0
- package/dist/client/{useModal-DxxlilRm.mjs → useModal-DCs1OJh7.mjs} +1 -1
- package/dist/client/{useModal-DxxlilRm.mjs.map → useModal-DCs1OJh7.mjs.map} +1 -1
- package/dist/client/{useProjectId-OQv2KBbG.mjs → useProjectId-DBc5lpoU.mjs} +1 -1
- package/dist/client/{useProjectId-OQv2KBbG.mjs.map → useProjectId-DBc5lpoU.mjs.map} +1 -1
- package/dist/server/index.js +1285 -435
- package/package.json +5 -4
- package/dist/client/DeleteFlavorModal-BusYn32r.mjs +0 -629
- package/dist/client/DeleteFlavorModal-BusYn32r.mjs.map +0 -1
- package/dist/client/ImageToastNotifications-BG9LPnXf.mjs +0 -1267
- package/dist/client/ImageToastNotifications-BG9LPnXf.mjs.map +0 -1
- package/dist/client/ListToolbar-BojRTNbo.mjs +0 -129
- package/dist/client/ListToolbar-BojRTNbo.mjs.map +0 -1
- package/dist/client/_flavorId-BRonXvCo.mjs +0 -188
- package/dist/client/_flavorId-BRonXvCo.mjs.map +0 -1
- package/dist/client/_flavorId-BoNcxYmF.mjs.map +0 -1
- package/dist/client/_imageId-BL0I5_pv.mjs +0 -527
- package/dist/client/_imageId-BL0I5_pv.mjs.map +0 -1
- package/dist/client/_pcaId-CbBhBrX1.mjs +0 -466
- package/dist/client/_pcaId-CbBhBrX1.mjs.map +0 -1
- package/dist/client/_projectId-5NiasyXm.mjs +0 -26
- package/dist/client/_projectId-5NiasyXm.mjs.map +0 -1
- package/dist/client/_projectId-BwLMEMGC.mjs.map +0 -1
- package/dist/client/_projectId-D35MN1kY.mjs +0 -316
- package/dist/client/_projectId-D35MN1kY.mjs.map +0 -1
- package/dist/client/about-DLn1ShhF.mjs +0 -92
- package/dist/client/aurora-CRcxVUCo.mjs +0 -19
- package/dist/client/build-BJDfnAyi.mjs.map +0 -1
- package/dist/client/constants-B-P2r5F1.mjs +0 -128
- package/dist/client/constants-B-P2r5F1.mjs.map +0 -1
- package/dist/client/containers-BjWqjNOx.mjs.map +0 -1
- package/dist/client/containers-DsRWc1L5.mjs +0 -7
- package/dist/client/containers-DsRWc1L5.mjs.map +0 -1
- package/dist/client/containers-J7WFA18U.mjs +0 -3120
- package/dist/client/containers-J7WFA18U.mjs.map +0 -1
- package/dist/client/flavors-qvgPSI7J.mjs +0 -613
- package/dist/client/flavors-qvgPSI7J.mjs.map +0 -1
- package/dist/client/hooks-DEjb9d1F.mjs +0 -2
- package/dist/client/images-CSFfefAu.mjs +0 -1901
- package/dist/client/images-CSFfefAu.mjs.map +0 -1
- package/dist/client/objects-BciXwZ00.mjs +0 -86
- package/dist/client/objects-BciXwZ00.mjs.map +0 -1
- package/dist/client/objects-Cdew99tK.mjs +0 -8
- package/dist/client/objects-Cdew99tK.mjs.map +0 -1
- package/dist/client/objects-DaElrban.mjs +0 -5340
- package/dist/client/objects-DaElrban.mjs.map +0 -1
- package/dist/client/overview-BMhjFMIV.mjs +0 -15
- package/dist/client/overview-BMhjFMIV.mjs.map +0 -1
- package/dist/client/overview-BYIRj7_X.mjs +0 -15
- package/dist/client/overview-BYIRj7_X.mjs.map +0 -1
- package/dist/client/overview-DRCKNBH2.mjs +0 -15
- package/dist/client/overview-DRCKNBH2.mjs.map +0 -1
- package/dist/client/overview-urYLOVQE.mjs +0 -173
- package/dist/client/overview-urYLOVQE.mjs.map +0 -1
- package/dist/client/pca-oc7J0_Xd.mjs +0 -167
- package/dist/client/pca-oc7J0_Xd.mjs.map +0 -1
- package/dist/client/projects-BUabCzvw.mjs +0 -95
- package/dist/client/projects-BUabCzvw.mjs.map +0 -1
- package/dist/client/useListWithFiltering-CbhHJO4V.mjs +0 -32
- package/dist/client/useListWithFiltering-CbhHJO4V.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ImageToastNotifications-BG9LPnXf.mjs","names":["formatBytesDecimal","SizeDisplay","size","undefined","span","MEMBER_STATUSES","PENDING","ACCEPTED","REJECTED","ALL","IMAGE_STATUSES","QUEUED","SAVING","ACTIVE","DEACTIVATED","KILLED","DELETED","PENDING_DELETE","IMAGE_VISIBILITY","PUBLIC","PRIVATE","SHARED","COMMUNITY","DISK_FORMATS","AMI","ARI","AKI","VHD","VHDX","VMDK","RAW","QCOW2","VDI","ISO","PLOOP","CONTAINER_FORMATS","BARE","OVF","OVA","DOCKER","React","DataGridRow","DataGridCell","TextInput","ButtonRow","Button","ImageMemberFormRow","memberId","imageId","errors","isLoading","onMemberIdChange","onSave","onCancel","useLingui","className","value","onChange","e","target","placeholder","t","errortext","required","icon","onClick","variant","title","disabled","React","useState","useEffect","DataGridRow","DataGridCell","Button","Stack","Spinner","MEMBER_STATUSES","ImageMemberRow","member","isDeleting","onDelete","canDelete","useLingui","confirm","setConfirm","timer","setTimeout","clearTimeout","handleConfirmDelete","getStatusLabel","status","PENDING","t","ACCEPTED","REJECTED","getStatusVariant","deleteButton","variant","onClick","title","aria-label","data-testid","disabled","memberIdDisplay","member_id","icon","className","image_id","distribution","alignment","React","useState","DataGrid","DataGridRow","DataGridHeadCell","DataGridCell","Stack","Spinner","Button","Message","trpcReact","ImageMemberFormRow","ImageMemberRow","MembersLoadingState","colSpan","distribution","alignment","variant","ImageMembersTable","image","imageMembers","isMembersLoading","canAdd","canRemove","isAddingMember","setIsAddingMember","setMessage","projectId","useLingui","utils","useUtils","memberId","setMemberId","errors","setErrors","deletingMembers","setDeletingMembers","Set","createMemberMutation","compute","createImageMember","useMutation","onSuccess","listImageMembers","invalidate","project_id","imageId","id","deleteMemberMutation","deleteImageMember","isPublicImage","visibility","shouldShowEmptyState","length","isLoading","isPending","validateForm","trimmedMemberId","trim","newErrors","t","some","member","member_id","Object","keys","resetForm","handleAddMember","text","type","mutateAsync","error","errorMessage","message","handleRemoveMember","memberIdToRemove","prev","add","newSet","delete","handleMemberIdChange","newMemberId","undefined","columns","direction","className","label","data-testid","onClick","disabled","onMemberIdChange","onSave","onCancel","map","index","isDeleting","has","onDelete","canDelete","React","useState","Modal","Form","FormRow","FormSection","TextInput","Select","SelectOption","Checkbox","Button","Spinner","Stack","Pill","IMAGE_VISIBILITY","EditImageDetailsModal","image","isOpen","isLoading","onClose","onSave","useLingui","properties","setProperties","name","tags","visibility","PRIVATE","protected","min_disk","min_ram","tagsInput","setTagsInput","errors","setErrors","arraysEqual","a","b","length","sortedA","sort","sortedB","every","val","index","isSubmitDisabled","handleInputChange","e","value","type","checked","target","prev","newErrors","handleSelectChange","handleNumericChange","numValue","parseInt","isNaN","handleTagsInputChange","handleAddTag","trimmedTag","trim","includes","handleTagKeyPress","key","preventDefault","handleRemoveTag","tagToRemove","filter","tag","validateForm","t","Object","keys","handleSubmit","updatedProperties","handleClose","open","onCancel","size","title","onConfirm","confirmButtonLabel","cancelButtonLabel","disableConfirmButton","distribution","alignment","variant","className","id","label","onChange","required","errortext","div","gap","direction","onKeyDown","helptext","placeholder","onClick","disabled","wrap","map","closeable","pillKey","pillValue","PUBLIC","SHARED","COMMUNITY","String","React","useState","useEffect","useMemo","useProjectId","Modal","Button","Spinner","Stack","DataGrid","DataGridRow","DataGridHeadCell","DataGridCell","TextInput","trpcReact","toStrValue","value","undefined","JSON","stringify","String","buildInitialMetadata","image","excludedProperties","Object","entries","filter","key","has","toLowerCase","map","strValue","isNew","isEditing","originalKey","originalValue","EditImageMetadataModalInner","isLoading","onClose","onSave","initialMetadata","useLingui","metadata","setMetadata","errors","setErrors","isAddingNew","setIsAddingNew","newKey","setNewKey","newValue","setNewValue","confirmDeleteIndex","setConfirmDeleteIndex","timer","setTimeout","clearTimeout","isSubmitDisabled","every","entry","length","validateKey","rowIndex","normalized","trim","t","isDuplicate","some","idx","handleAddNew","keyError","handleCancelAdd","handleEdit","index","i","handleSaveEdit","e","handleCancelEdit","handleDelete","_","handleKeyChange","prev","next","handleValueChange","handleSubmit","metadataObject","removedEntries","fromEntries","item","includes","forEach","success","handleClose","open","onCancel","size","title","onConfirm","confirmButtonLabel","cancelButtonLabel","disableConfirmButton","distribution","alignment","variant","div","direction","className","label","onClick","disabled","icon","columns","minContentColumns","onChange","target","placeholder","errortext","autoFocus","gap","span","data-testid","colSpan","EditImageMetadataModal","isOpen","projectId","data","excludedPropertiesData","isLoadingExcluded","isError","isErrorExcluded","compute","getImageMetadataExcludedProperties","useQuery","project_id","enabled","Set","s","id","updated_at","React","Button","ButtonRow","DataGrid","DataGridCell","DataGridHeadCell","DataGridRow","Message","Modal","ModalFooter","Spinner","Stack","SizeDisplay","DeleteImageModal","image","isOpen","isLoading","isDisabled","onClose","onDelete","useLingui","handleDelete","e","preventDefault","onCancel","size","title","open","modalFooter","className","variant","onClick","disabled","data-testid","distribution","alignment","div","text","t","columns","name","id","status","visibility","disk_format","created_at","Date","toLocaleDateString","React","DataGrid","DataGridCell","DataGridHeadCell","DataGridRow","Modal","Spinner","Stack","SizeDisplay","ActivateImageModal","image","isOpen","isLoading","onClose","onActivate","useLingui","handleActivate","e","preventDefault","onCancel","size","title","t","open","onConfirm","confirmButtonLabel","cancelButtonLabel","disableConfirmButton","distribution","alignment","variant","div","p","className","columns","name","id","status","visibility","disk_format","dt","Date","created_at","isNaN","getTime","toLocaleDateString","React","DataGrid","DataGridCell","DataGridHeadCell","DataGridRow","Modal","Spinner","Stack","SizeDisplay","DeactivateImageModal","image","isOpen","isLoading","onClose","onDeactivate","useLingui","handleDeactivate","e","preventDefault","onCancel","size","title","t","open","onConfirm","confirmButtonLabel","cancelButtonLabel","disableConfirmButton","distribution","alignment","variant","div","p","className","columns","name","id","status","visibility","disk_format","dt","Date","created_at","isNaN","getTime","toLocaleDateString","Stack","NotificationText","title","description","direction","gap","span","className","NotificationText","getImageUpdatedToast","imageName","config","variant","children","title","description","autoDismiss","autoDismissTimeout","onDismiss","getImageUpdateErrorToast","message","getImageCreatedToast","getImageCreateErrorToast","getImageFileUploadErrorToast","fileName","getImageDeletedToast","getImageDeleteErrorToast","imageId","getImageActivatedToast","getImageDeactivatedToast","getImageActivationErrorToast","getImageDeactivationErrorToast","getBulkDeleteSuccessToast","successCount","totalCount","getBulkDeleteErrorToast","failedCount","getBulkDeletePartialToast","getBulkActivateSuccessToast","getBulkActivateErrorToast","getBulkActivatePartialToast","getBulkDeactivateSuccessToast","getBulkDeactivateErrorToast","getBulkDeactivatePartialToast","getImageAccessStatusUpdatedToast","newStatus","getImageAccessStatusErrorToast","errorMessage","getImageVisibilityUpdatedToast","visibility","getImageVisibilityUpdateErrorToast"],"sources":["../../src/client/routes/_auth/projects/$projectId/compute/-components/Images/-components/SizeDisplay.tsx","../../src/client/routes/_auth/projects/$projectId/compute/-constants/filters.ts","../../src/client/routes/_auth/projects/$projectId/compute/-components/Images/-components/ImageMemberFormRow.tsx","../../src/client/routes/_auth/projects/$projectId/compute/-components/Images/-components/ImageMemberRow.tsx","../../src/client/routes/_auth/projects/$projectId/compute/-components/Images/-components/ImageMembersTable.tsx","../../src/client/routes/_auth/projects/$projectId/compute/-components/Images/-components/EditImageDetailsModal.tsx","../../src/client/routes/_auth/projects/$projectId/compute/-components/Images/-components/EditImageMetadataModal.tsx","../../src/client/routes/_auth/projects/$projectId/compute/-components/Images/-components/DeleteImageModal.tsx","../../src/client/routes/_auth/projects/$projectId/compute/-components/Images/-components/ActivateImageModal.tsx","../../src/client/routes/_auth/projects/$projectId/compute/-components/Images/-components/DeactivateImageModal.tsx","../../src/client/routes/_auth/projects/$projectId/compute/-components/Images/-components/NotificationText.tsx","../../src/client/routes/_auth/projects/$projectId/compute/-components/Images/-components/ImageToastNotifications.tsx"],"sourcesContent":["import { formatBytesDecimal } from \"@/client/utils/formatBytes\"\n\ninterface SizeDisplayProps {\n size: number | null | undefined\n}\n\nexport function SizeDisplay({ size }: SizeDisplayProps) {\n if (size === undefined) return <span>N/A</span>\n\n return <span>{formatBytesDecimal(size)}</span>\n}\n","/**\n * OpenStack Glance image member status values\n * Reference: https://docs.openstack.org/glance/latest/user/glanceapi.html#image-sharing\n */\nexport const MEMBER_STATUSES = {\n /** Initial status when image is shared; member hasn't responded */\n PENDING: \"pending\",\n /** Member has accepted the shared image; appears in their image list */\n ACCEPTED: \"accepted\",\n /** Member has explicitly rejected the shared image; won't appear in their list */\n REJECTED: \"rejected\",\n /** Special filter value: returns members in all states (pending, accepted, rejected) */\n ALL: \"all\",\n} as const\n\n/**\n * OpenStack Glance image lifecycle states\n */\nexport const IMAGE_STATUSES = {\n /** Image metadata created, awaiting upload */\n QUEUED: \"queued\",\n /** Image data is being uploaded */\n SAVING: \"saving\",\n /** Image is ready to use */\n ACTIVE: \"active\",\n /** Image exists but is disabled for use */\n DEACTIVATED: \"deactivated\",\n /** Image upload failed or was interrupted */\n KILLED: \"killed\",\n /** Image is marked for deletion */\n DELETED: \"deleted\",\n /** Image deletion is in progress */\n PENDING_DELETE: \"pending_delete\",\n} as const\n\n/**\n * Image visibility/sharing levels\n */\nexport const IMAGE_VISIBILITY = {\n /** Visible to all users in the cloud */\n PUBLIC: \"public\",\n /** Visible only to the owner */\n PRIVATE: \"private\",\n /** Explicitly shared with specific projects */\n SHARED: \"shared\",\n /** Shared with all users, no explicit members */\n COMMUNITY: \"community\",\n /** Special filter value: returns all images accessible to the user (public, private, shared, community) */\n ALL: \"all\",\n} as const\n\n/**\n * Supported virtual disk formats\n */\nexport const DISK_FORMATS = {\n /** Amazon Machine Image */\n AMI: \"ami\",\n /** Amazon Ramdisk Image */\n ARI: \"ari\",\n /** Amazon Kernel Image */\n AKI: \"aki\",\n /** Virtual Hard Disk (Hyper-V) */\n VHD: \"vhd\",\n /** Virtual Hard Disk v2 (Hyper-V) */\n VHDX: \"vhdx\",\n /** Virtual Machine Disk (VMware) */\n VMDK: \"vmdk\",\n /** Raw unformatted disk image */\n RAW: \"raw\",\n /** QEMU Copy-On-Write v2 */\n QCOW2: \"qcow2\",\n /** Virtual Disk Image (VirtualBox) */\n VDI: \"vdi\",\n /** ISO 9660 optical disc image */\n ISO: \"iso\",\n /** Parallels Loopback Disk */\n PLOOP: \"ploop\",\n} as const\n\n/**\n * Supported container/packaging formats\n */\nexport const CONTAINER_FORMATS = {\n /** Amazon Machine Image */\n AMI: \"ami\",\n /** Amazon Ramdisk Image */\n ARI: \"ari\",\n /** Amazon Kernel Image */\n AKI: \"aki\",\n /** No container, just disk image */\n BARE: \"bare\",\n /** Open Virtualization Format */\n OVF: \"ovf\",\n /** Open Virtualization Archive (tar of OVF) */\n OVA: \"ova\",\n /** Docker container image */\n DOCKER: \"docker\",\n} as const\n\n/** Valid image member status values */\nexport type MemberStatus = (typeof MEMBER_STATUSES)[keyof typeof MEMBER_STATUSES]\n\n/** Valid image lifecycle status values */\nexport type ImageStatus = (typeof IMAGE_STATUSES)[keyof typeof IMAGE_STATUSES]\n\n/** Valid image visibility/sharing levels */\nexport type ImageVisibility = (typeof IMAGE_VISIBILITY)[keyof typeof IMAGE_VISIBILITY]\n\n/** Valid virtual disk format types */\nexport type DiskFormat = (typeof DISK_FORMATS)[keyof typeof DISK_FORMATS]\n\n/** Valid container/packaging format types */\nexport type ContainerFormat = (typeof CONTAINER_FORMATS)[keyof typeof CONTAINER_FORMATS]\n","import React from \"react\"\nimport { useLingui } from \"@lingui/react/macro\"\nimport { DataGridRow, DataGridCell, TextInput, ButtonRow, Button } from \"@cloudoperators/juno-ui-components\"\n\ninterface ImageMemberFormRowProps {\n memberId: string\n imageId: string\n errors: { memberId?: string }\n isLoading: boolean\n onMemberIdChange: (memberId: string) => void\n onSave: () => void\n onCancel: () => void\n}\n\nexport const ImageMemberFormRow: React.FC<ImageMemberFormRowProps> = ({\n memberId,\n imageId,\n errors,\n isLoading,\n onMemberIdChange,\n onSave,\n onCancel,\n}) => {\n const { t } = useLingui()\n\n return (\n <DataGridRow>\n <DataGridCell className=\"break-all\">{imageId}</DataGridCell>\n <DataGridCell className=\"pl-0\">\n <TextInput\n value={memberId}\n onChange={(e) => onMemberIdChange(e.target.value)}\n placeholder={t`Enter member ID`}\n errortext={errors.memberId}\n required\n />\n </DataGridCell>\n <DataGridCell></DataGridCell>\n <DataGridCell>\n <ButtonRow>\n <Button icon=\"check\" onClick={onSave} variant=\"primary\" title={t`Add Member`} disabled={isLoading} />\n <Button icon=\"cancel\" onClick={onCancel} title={t`Cancel`} disabled={isLoading} />\n </ButtonRow>\n </DataGridCell>\n </DataGridRow>\n )\n}\n","import React, { useState, useEffect } from \"react\"\nimport { useLingui } from \"@lingui/react/macro\"\nimport { DataGridRow, DataGridCell, Button, Stack, Spinner } from \"@cloudoperators/juno-ui-components\"\nimport { MEMBER_STATUSES } from \"../../../-constants/filters\"\n\ninterface ImageMember {\n image_id: string\n member_id: string\n status: string\n created_at: string\n updated_at: string\n}\n\ninterface ImageMemberRowProps {\n member: ImageMember\n isDeleting: boolean\n onDelete: () => void\n canDelete: boolean\n}\n\nexport const ImageMemberRow: React.FC<ImageMemberRowProps> = ({ member, isDeleting, onDelete, canDelete }) => {\n const { t } = useLingui()\n const [confirm, setConfirm] = useState(false)\n\n useEffect(() => {\n if (confirm) {\n const timer = setTimeout(() => {\n setConfirm(false)\n }, 3000)\n\n return () => clearTimeout(timer)\n }\n }, [confirm])\n\n const handleConfirmDelete = () => {\n setConfirm(false)\n onDelete()\n }\n\n const getStatusLabel = (status: string): string => {\n switch (status) {\n case MEMBER_STATUSES.PENDING:\n return t`Pending`\n case MEMBER_STATUSES.ACCEPTED:\n return t`Accepted`\n case MEMBER_STATUSES.REJECTED:\n return t`Rejected`\n default:\n return status\n }\n }\n\n const getStatusVariant = (status: string): string => {\n switch (status) {\n case MEMBER_STATUSES.PENDING:\n return \"warning\"\n case MEMBER_STATUSES.ACCEPTED:\n return \"success\"\n case MEMBER_STATUSES.REJECTED:\n return \"danger\"\n default:\n return \"default\"\n }\n }\n\n const deleteButton = () => {\n if (!canDelete) {\n return <></>\n }\n\n if (confirm) {\n return (\n <Button\n variant=\"primary-danger\"\n onClick={handleConfirmDelete}\n title={t`Remove member access`}\n aria-label={t`Remove member access`}\n data-testid=\"confirm-removal\"\n disabled={isDeleting}\n >\n {t`Remove`}\n </Button>\n )\n } else {\n const memberIdDisplay = member.member_id\n\n return (\n <Button\n icon=\"deleteForever\"\n onClick={() => setConfirm(true)}\n title={t`Remove access for ${memberIdDisplay}`}\n aria-label={t`Remove access for ${memberIdDisplay}`}\n data-testid={`remove-${memberIdDisplay}`}\n disabled={isDeleting}\n />\n )\n }\n }\n\n return (\n <DataGridRow>\n <DataGridCell className=\"break-all\">{member.image_id}</DataGridCell>\n <DataGridCell className=\"break-all\">{member.member_id}</DataGridCell>\n <DataGridCell className={`break-all text-theme-${getStatusVariant(member.status)}`}>\n {getStatusLabel(member.status)}\n </DataGridCell>\n <DataGridCell>\n {isDeleting ? (\n <Stack distribution=\"center\" alignment=\"center\">\n <Spinner variant=\"primary\" />\n </Stack>\n ) : (\n <Stack distribution=\"end\" alignment=\"end\">\n {deleteButton()}\n </Stack>\n )}\n </DataGridCell>\n </DataGridRow>\n )\n}\n","import React, { useState } from \"react\"\nimport { useLingui } from \"@lingui/react/macro\"\nimport {\n DataGrid,\n DataGridRow,\n DataGridHeadCell,\n DataGridCell,\n Stack,\n Spinner,\n Button,\n Message,\n} from \"@cloudoperators/juno-ui-components\"\nimport { GlanceImage, ImageMember } from \"@/server/Compute/types/image\"\nimport { trpcReact } from \"@/client/trpcClient\"\nimport { TRPCClientError } from \"@trpc/client\"\nimport { InferrableClientTypes } from \"@trpc/server/unstable-core-do-not-import\"\nimport { ImageMemberFormRow } from \"./ImageMemberFormRow\"\nimport { ImageMemberRow } from \"./ImageMemberRow\"\n\ninterface ImageMembersTableProps {\n image: GlanceImage\n imageMembers: ImageMember[] | undefined\n isMembersLoading: boolean\n canAdd: boolean\n canRemove: boolean\n isAddingMember: boolean\n setIsAddingMember: (adding: boolean) => void\n setMessage: (msg: { text: string; type: \"error\" | \"info\" } | null) => void\n projectId: string\n}\n\nfunction MembersLoadingState() {\n return (\n <DataGridRow>\n <DataGridCell colSpan={4}>\n <Stack distribution=\"center\" alignment=\"center\">\n <Spinner variant=\"primary\" />\n </Stack>\n </DataGridCell>\n </DataGridRow>\n )\n}\n\nexport const ImageMembersTable: React.FC<ImageMembersTableProps> = ({\n image,\n imageMembers,\n isMembersLoading,\n canAdd,\n canRemove,\n isAddingMember,\n setIsAddingMember,\n setMessage,\n projectId,\n}) => {\n const { t } = useLingui()\n const utils = trpcReact.useUtils()\n\n const [memberId, setMemberId] = useState(\"\")\n const [errors, setErrors] = useState<{ memberId?: string }>({})\n const [deletingMembers, setDeletingMembers] = useState<Set<string>>(new Set())\n\n const createMemberMutation = trpcReact.compute.createImageMember.useMutation({\n onSuccess: () => {\n utils.compute.listImageMembers.invalidate({ project_id: projectId, imageId: image.id })\n },\n })\n\n const deleteMemberMutation = trpcReact.compute.deleteImageMember.useMutation({\n onSuccess: () => {\n utils.compute.listImageMembers.invalidate({ project_id: projectId, imageId: image.id })\n },\n })\n\n const isPublicImage = image.visibility === \"public\"\n const shouldShowEmptyState = !imageMembers || imageMembers.length === 0\n const isLoading = createMemberMutation.isPending || deleteMemberMutation.isPending\n\n const validateForm = (): boolean => {\n const trimmedMemberId = memberId.trim()\n const newErrors: { memberId?: string } = {}\n\n if (!trimmedMemberId) {\n newErrors.memberId = t`Member ID (project UUID) is required.`\n } else if (imageMembers?.some((member) => member.member_id === trimmedMemberId)) {\n newErrors.memberId = t`This member already has access to this image.`\n }\n\n setErrors(newErrors)\n return Object.keys(newErrors).length === 0\n }\n\n const resetForm = () => {\n setMemberId(\"\")\n setErrors({})\n }\n\n const handleAddMember = async () => {\n if (!validateForm()) {\n setMessage({ text: t`Please fix the validation errors below.`, type: \"error\" })\n return\n }\n\n const trimmedMemberId = memberId.trim()\n\n try {\n await createMemberMutation.mutateAsync({\n project_id: projectId,\n imageId: image.id,\n member: trimmedMemberId,\n })\n\n setMessage({\n text: t`Member \"${trimmedMemberId}\" has been added successfully.`,\n type: \"info\",\n })\n resetForm()\n setIsAddingMember(false)\n } catch (error) {\n const errorMessage = (error as TRPCClientError<InferrableClientTypes>)?.message || t`Failed to add member`\n setMessage({\n text: errorMessage,\n type: \"error\",\n })\n }\n }\n\n const handleRemoveMember = async (memberIdToRemove: string) => {\n setDeletingMembers((prev) => new Set(prev).add(memberIdToRemove))\n\n try {\n await deleteMemberMutation.mutateAsync({\n project_id: projectId,\n imageId: image.id,\n memberId: memberIdToRemove,\n })\n\n setMessage({\n text: t`Member \"${memberIdToRemove}\" has been removed successfully.`,\n type: \"info\",\n })\n } catch (error) {\n const errorMessage = (error as TRPCClientError<InferrableClientTypes>)?.message || t`Failed to remove member`\n setMessage({\n text: errorMessage || t`Failed to remove member \"${memberIdToRemove}\"`,\n type: \"error\",\n })\n } finally {\n setDeletingMembers((prev) => {\n const newSet = new Set(prev)\n newSet.delete(memberIdToRemove)\n return newSet\n })\n }\n }\n\n const handleMemberIdChange = (newMemberId: string) => {\n setMemberId(newMemberId)\n if (errors.memberId) setErrors((prev) => ({ ...prev, memberId: undefined }))\n }\n\n if (isMembersLoading) {\n return (\n <DataGrid columns={4}>\n <DataGridRow>\n <DataGridHeadCell>{t`Image ID`}</DataGridHeadCell>\n <DataGridHeadCell>{t`Project ID`}</DataGridHeadCell>\n <DataGridHeadCell>{t`Status`}</DataGridHeadCell>\n <DataGridHeadCell></DataGridHeadCell>\n </DataGridRow>\n <MembersLoadingState />\n </DataGrid>\n )\n }\n\n if (isPublicImage) {\n return (\n <Message\n text={t`This is a public image. All users have access to it. Explicit sharing is not needed.`}\n variant=\"info\"\n />\n )\n }\n\n return (\n <>\n {canAdd && (\n <Stack direction=\"horizontal\" className=\"bg-theme-background-lvl-1 justify-end p-2\">\n <Button\n label={t`Add Project Access`}\n data-testid=\"addMemberButton\"\n onClick={() => setIsAddingMember(true)}\n variant=\"primary\"\n disabled={isAddingMember}\n />\n </Stack>\n )}\n\n <DataGrid columns={4}>\n <DataGridRow>\n <DataGridHeadCell>{t`Image ID`}</DataGridHeadCell>\n <DataGridHeadCell>{t`Member ID`}</DataGridHeadCell>\n <DataGridHeadCell>{t`Status`}</DataGridHeadCell>\n <DataGridHeadCell></DataGridHeadCell>\n </DataGridRow>\n\n {isAddingMember && (\n <ImageMemberFormRow\n memberId={memberId}\n imageId={image.id}\n errors={errors}\n isLoading={isLoading}\n onMemberIdChange={handleMemberIdChange}\n onSave={handleAddMember}\n onCancel={() => {\n resetForm()\n setIsAddingMember(false)\n setMessage(null)\n }}\n />\n )}\n\n {imageMembers?.map((member, index) => (\n <ImageMemberRow\n key={`${member.member_id}-${index}`}\n member={member}\n isDeleting={deletingMembers.has(member.member_id)}\n onDelete={() => handleRemoveMember(member.member_id)}\n canDelete={canRemove}\n />\n ))}\n\n {shouldShowEmptyState && !isAddingMember && (\n <DataGridRow>\n <DataGridCell colSpan={4} className=\"text-theme-default py-4 text-center\">\n {t`No projects have access to this image yet. Click \"Add Project Access\" to grant access.`}\n </DataGridCell>\n </DataGridRow>\n )}\n </DataGrid>\n </>\n )\n}\n","import React, { useState } from \"react\"\nimport { Trans, useLingui } from \"@lingui/react/macro\"\nimport {\n Modal,\n Form,\n FormRow,\n FormSection,\n TextInput,\n Select,\n SelectOption,\n Checkbox,\n Button,\n Spinner,\n Stack,\n Pill,\n} from \"@cloudoperators/juno-ui-components\"\nimport { GlanceImage } from \"@/server/Compute/types/image\"\nimport { IMAGE_VISIBILITY } from \"../../../-constants/filters\"\n\ninterface EditImageDetailsModalProps {\n image: GlanceImage\n isOpen: boolean\n isLoading?: boolean\n onClose: () => void\n onSave: (updatedProperties: Partial<GlanceImage>) => void\n}\n\ninterface ImageProperties {\n name: string\n tags: string[]\n visibility: string\n protected: boolean\n min_disk: number\n min_ram: number\n}\n\nexport const EditImageDetailsModal: React.FC<EditImageDetailsModalProps> = ({\n image,\n isOpen,\n isLoading = false,\n onClose,\n onSave,\n}) => {\n const { t } = useLingui()\n\n // Initialize local state from image prop\n const [properties, setProperties] = useState<ImageProperties>({\n name: image.name || \"\",\n tags: image.tags || [],\n visibility: image.visibility || IMAGE_VISIBILITY.PRIVATE,\n protected: image.protected || false,\n min_disk: image.min_disk || 0,\n min_ram: image.min_ram || 0,\n })\n\n const [tagsInput, setTagsInput] = useState<string>(\"\")\n const [errors, setErrors] = useState<{ [key: string]: string }>({})\n\n // Helper function to compare arrays\n const arraysEqual = (a: string[], b: string[]) => {\n if (a.length !== b.length) return false\n const sortedA = [...a].sort()\n const sortedB = [...b].sort()\n return sortedA.every((val, index) => val === sortedB[index])\n }\n\n const isSubmitDisabled =\n image.name === properties.name &&\n arraysEqual(image.tags || [], properties.tags) &&\n image.visibility === properties.visibility &&\n image.protected === properties.protected &&\n image.min_disk === properties.min_disk &&\n image.min_ram === properties.min_ram\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const { name, value, type, checked } = e.target\n\n setProperties((prev) => ({\n ...prev,\n [name]: type === \"checkbox\" ? checked : value,\n }))\n\n // Clear error for this field\n if (errors[name]) {\n setErrors((prev) => {\n const newErrors = { ...prev }\n delete newErrors[name]\n return newErrors\n })\n }\n }\n\n const handleSelectChange = (name: string, value: string | number | string[] | undefined) => {\n setProperties((prev) => ({\n ...prev,\n [name]: value,\n }))\n\n // Clear error for this field\n if (errors[name]) {\n setErrors((prev) => {\n const newErrors = { ...prev }\n delete newErrors[name]\n return newErrors\n })\n }\n }\n\n const handleNumericChange = (name: string, value: string) => {\n const numValue = value === \"\" ? 0 : parseInt(value, 10)\n\n if (!isNaN(numValue)) {\n setProperties((prev) => ({\n ...prev,\n [name]: numValue,\n }))\n\n // Clear error for this field\n if (errors[name]) {\n setErrors((prev) => {\n const newErrors = { ...prev }\n delete newErrors[name]\n return newErrors\n })\n }\n }\n }\n\n const handleTagsInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setTagsInput(e.target.value)\n }\n\n const handleAddTag = () => {\n const trimmedTag = tagsInput.trim()\n\n if (trimmedTag === \"\") return\n\n // Check if tag already exists\n if (properties.tags.includes(trimmedTag)) {\n setTagsInput(\"\")\n return\n }\n\n // Add tag to properties\n setProperties((prev) => ({\n ...prev,\n tags: [...prev.tags, trimmedTag],\n }))\n\n // Clear input\n setTagsInput(\"\")\n }\n\n const handleTagKeyPress = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n e.preventDefault()\n handleAddTag()\n }\n }\n\n const handleRemoveTag = (tagToRemove: string) => {\n setProperties((prev) => ({\n ...prev,\n tags: prev.tags.filter((tag) => tag !== tagToRemove),\n }))\n }\n\n const validateForm = (): boolean => {\n const newErrors: { [key: string]: string } = {}\n\n if (!properties.name || properties.name.trim() === \"\") {\n newErrors.name = t`Image name is required`\n }\n\n if (properties.min_disk < 0) {\n newErrors.min_disk = t`Minimum disk must be 0 or greater`\n }\n\n if (properties.min_ram < 0) {\n newErrors.min_ram = t`Minimum RAM must be 0 or greater`\n }\n\n setErrors(newErrors)\n return Object.keys(newErrors).length === 0\n }\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault()\n\n if (!validateForm()) {\n return\n }\n\n // Prepare updated properties\n const updatedProperties: Partial<GlanceImage> = {\n // Exclude entries without updates\n ...(image.name !== properties.name.trim() ? { name: properties.name.trim() } : {}),\n ...(!arraysEqual(image.tags || [], properties.tags) ? { tags: properties.tags } : {}),\n ...(image.visibility !== properties.visibility ? { visibility: properties.visibility } : {}),\n ...(image.protected !== properties.protected ? { protected: properties.protected } : {}),\n ...(image.min_disk !== properties.min_disk ? { min_disk: properties.min_disk } : {}),\n ...(image.min_ram !== properties.min_ram ? { min_ram: properties.min_ram } : {}),\n }\n\n onSave(updatedProperties)\n }\n\n const handleClose = () => {\n setErrors({})\n onClose()\n }\n\n return (\n <Modal\n open={isOpen}\n onCancel={handleClose}\n size=\"large\"\n title={t`Edit Image Details`}\n onConfirm={handleSubmit}\n confirmButtonLabel={t`Save Changes`}\n cancelButtonLabel={t`Cancel`}\n disableConfirmButton={isLoading || isSubmitDisabled}\n >\n {isLoading && (\n <Stack distribution=\"center\" alignment=\"center\">\n <Spinner variant=\"primary\" />\n </Stack>\n )}\n\n {!isLoading && (\n <Form>\n {/* Basic Metadata Section */}\n <FormSection className=\"mb-6\">\n <FormRow className=\"mb-4\">\n <TextInput\n id=\"name\"\n name=\"name\"\n label={t`Image Name`}\n value={properties.name}\n onChange={handleInputChange}\n required\n errortext={errors.name}\n />\n </FormRow>\n\n <FormRow className=\"my-6\">\n <div className=\"w-full\">\n <Stack gap=\"2\" direction=\"horizontal\" alignment=\"start\">\n <div className=\"flex-1\">\n <TextInput\n id=\"tags\"\n name=\"tags\"\n label={t`Tags`}\n value={tagsInput}\n onChange={handleTagsInputChange}\n onKeyDown={handleTagKeyPress}\n helptext={t`Enter a tag and press Enter or click Add`}\n placeholder={t`e.g., production, linux, ubuntu`}\n />\n </div>\n <Button variant=\"primary\" onClick={handleAddTag} disabled={isLoading || tagsInput.trim() === \"\"}>\n <Trans>Add</Trans>\n </Button>\n </Stack>\n\n {/* Display added tags as pills */}\n {properties.tags.length > 0 && (\n <Stack gap=\"2\" wrap={true} alignment=\"center\" className=\"mt-3\">\n {properties.tags.map((tag) => (\n <Pill key={tag} closeable pillKey=\"\" pillValue={tag} onClose={() => handleRemoveTag(tag)} />\n ))}\n </Stack>\n )}\n </div>\n </FormRow>\n\n <FormRow className=\"mb-4\">\n <Select\n id=\"visibility\"\n name=\"visibility\"\n label={t`Visibility`}\n value={properties.visibility}\n onChange={(value) => handleSelectChange(\"visibility\", value)}\n >\n <SelectOption value={IMAGE_VISIBILITY.PUBLIC} label={t`Public`} />\n <SelectOption value={IMAGE_VISIBILITY.PRIVATE} label={t`Private`} />\n <SelectOption value={IMAGE_VISIBILITY.SHARED} label={t`Shared`} />\n <SelectOption value={IMAGE_VISIBILITY.COMMUNITY} label={t`Community`} />\n </Select>\n </FormRow>\n\n <FormRow>\n <Checkbox\n id=\"protected\"\n name=\"protected\"\n label={t`Protected`}\n checked={properties.protected}\n onChange={handleInputChange}\n helptext={t`Protect this image from being deleted`}\n />\n </FormRow>\n </FormSection>\n\n {/* Resource Requirements Section */}\n <FormSection className=\"mb-6\">\n <FormRow className=\"mb-4\">\n <TextInput\n id=\"min_disk\"\n name=\"min_disk\"\n label={t`Minimum Disk (GB)`}\n type=\"number\"\n value={String(properties.min_disk)}\n onChange={(e) => handleNumericChange(\"min_disk\", e.target.value)}\n helptext={t`Minimum disk size required to boot this image`}\n errortext={errors.min_disk}\n // min={0}\n />\n </FormRow>\n\n <FormRow>\n <TextInput\n id=\"min_ram\"\n name=\"min_ram\"\n label={t`Minimum RAM (MB)`}\n type=\"number\"\n value={String(properties.min_ram)}\n onChange={(e) => handleNumericChange(\"min_ram\", e.target.value)}\n helptext={t`Minimum RAM required to boot this image`}\n errortext={errors.min_ram}\n // min={0}\n />\n </FormRow>\n </FormSection>\n </Form>\n )}\n </Modal>\n )\n}\n","import React, { useState, useEffect, useMemo } from \"react\"\nimport { useLingui } from \"@lingui/react/macro\"\nimport { useProjectId } from \"@/client/hooks\"\nimport {\n Modal,\n Button,\n Spinner,\n Stack,\n DataGrid,\n DataGridRow,\n DataGridHeadCell,\n DataGridCell,\n TextInput,\n} from \"@cloudoperators/juno-ui-components\"\nimport { GlanceImage } from \"@/server/Compute/types/image\"\nimport { trpcReact } from \"@/client/trpcClient\"\n\ninterface EditImageMetadataModalProps {\n image: GlanceImage\n isOpen: boolean\n isLoading?: boolean\n onClose: () => void\n onSave: (metadata: Record<string, string | null>) => Promise<boolean> | boolean\n}\n\ninterface MetadataEntry {\n key: string\n value: string\n isNew?: boolean\n isEditing?: boolean\n originalKey?: string\n originalValue?: string\n}\n\nfunction toStrValue(value: unknown): string {\n if (value === null || value === undefined) return \"\"\n if (typeof value === \"object\") return JSON.stringify(value)\n return String(value)\n}\n\nfunction buildInitialMetadata(image: GlanceImage, excludedProperties: Set<string>): MetadataEntry[] {\n return Object.entries(image)\n .filter(([key]) => !excludedProperties.has(key.toLowerCase()))\n .map(([key, value]) => {\n const strValue = toStrValue(value)\n return { key, value: strValue, isNew: false, isEditing: false, originalKey: key, originalValue: strValue }\n })\n}\n\n// Inner component receives already-computed initialMetadata so useState is seeded correctly\nfunction EditImageMetadataModalInner({\n isLoading,\n onClose,\n onSave,\n initialMetadata,\n excludedProperties,\n}: {\n isLoading: boolean\n onClose: () => void\n onSave: (metadata: Record<string, string | null>) => Promise<boolean> | boolean\n initialMetadata: MetadataEntry[]\n excludedProperties: Set<string>\n}) {\n const { t } = useLingui()\n\n const [metadata, setMetadata] = useState<MetadataEntry[]>(initialMetadata)\n const [errors, setErrors] = useState<{ [key: string]: string }>({})\n const [isAddingNew, setIsAddingNew] = useState(false)\n const [newKey, setNewKey] = useState(\"\")\n const [newValue, setNewValue] = useState(\"\")\n const [confirmDeleteIndex, setConfirmDeleteIndex] = useState<number | null>(null)\n\n useEffect(() => {\n if (confirmDeleteIndex !== null) {\n const timer = setTimeout(() => setConfirmDeleteIndex(null), 3000)\n return () => clearTimeout(timer)\n }\n }, [confirmDeleteIndex])\n\n const isSubmitDisabled =\n metadata.every((entry) => !entry.isNew && entry.key === entry.originalKey && entry.value === entry.originalValue) &&\n initialMetadata.length === metadata.length\n\n const validateKey = (key: string, originalKey?: string, rowIndex?: number): string | null => {\n const normalized = key?.trim().toLowerCase()\n if (!normalized) {\n return t`Key is required`\n }\n if (excludedProperties.has(normalized)) {\n return t`This property is reserved and cannot be modified`\n }\n const isDuplicate = metadata.some(\n (entry, idx) =>\n entry.key.trim().toLowerCase() === normalized && idx !== rowIndex && entry.originalKey !== originalKey\n )\n if (isDuplicate) {\n return t`A property with this key already exists`\n }\n return null\n }\n\n const handleAddNew = () => {\n const keyError = validateKey(newKey, undefined, metadata.length)\n if (keyError) {\n setErrors({ newKey: keyError })\n return\n }\n if (!newValue.trim()) {\n setErrors({ newValue: t`Value is required` })\n return\n }\n setMetadata([...metadata, { key: newKey.trim(), value: newValue.trim(), isNew: true, isEditing: false }])\n setNewKey(\"\")\n setNewValue(\"\")\n setIsAddingNew(false)\n setErrors({})\n }\n\n const handleCancelAdd = () => {\n setNewKey(\"\")\n setNewValue(\"\")\n setIsAddingNew(false)\n setErrors({})\n }\n\n const handleEdit = (index: number) => {\n setConfirmDeleteIndex(null)\n setMetadata(\n metadata.map((entry, i) => (i === index ? { ...entry, isEditing: true } : { ...entry, isEditing: false }))\n )\n setIsAddingNew(false)\n }\n\n const handleSaveEdit = (index: number) => {\n const entry = metadata[index]\n const keyError = validateKey(entry.key, entry.originalKey, index)\n if (keyError) {\n setErrors({ [`edit-${index}`]: keyError })\n return\n }\n if (!entry.value.trim()) {\n setErrors({ [`edit-${index}`]: t`Value is required` })\n return\n }\n setMetadata(\n metadata.map((e, i) => (i === index ? { ...e, isEditing: false, key: e.key.trim(), value: e.value.trim() } : e))\n )\n setErrors({})\n }\n\n const handleCancelEdit = (index: number) => {\n setMetadata(\n metadata.map((e, i) =>\n i === index ? { ...e, isEditing: false, key: e.originalKey ?? e.key, value: e.originalValue ?? e.value } : e\n )\n )\n setErrors({})\n }\n\n const handleDelete = (index: number) => {\n setMetadata(metadata.filter((_, i) => i !== index))\n setConfirmDeleteIndex(null)\n setErrors({})\n }\n\n const handleKeyChange = (index: number, value: string) => {\n setMetadata(metadata.map((entry, i) => (i === index ? { ...entry, key: value } : entry)))\n if (errors[`edit-${index}`]) {\n setErrors((prev) => {\n const next = { ...prev }\n delete next[`edit-${index}`]\n return next\n })\n }\n }\n\n const handleValueChange = (index: number, value: string) => {\n setMetadata(metadata.map((entry, i) => (i === index ? { ...entry, value } : entry)))\n if (errors[`edit-${index}`]) {\n setErrors((prev) => {\n const next = { ...prev }\n delete next[`edit-${index}`]\n return next\n })\n }\n }\n\n const handleSubmit = async () => {\n const metadataObject: Record<string, string> = {}\n const removedEntries = Object.fromEntries(\n initialMetadata\n .filter(\n (entry) =>\n !metadata.map((item) => item.originalKey).includes(entry.originalKey) ||\n !metadata.map((item) => item.key).includes(entry.key)\n )\n .map((entry) => [entry.key, null])\n )\n metadata\n .filter((entry) => entry.isNew || entry.value !== entry.originalValue || entry.key !== entry.originalKey)\n .forEach((entry) => {\n metadataObject[entry.key] = entry.value\n })\n const success = await onSave({ ...metadataObject, ...removedEntries })\n if (success) onClose()\n }\n\n const handleClose = () => {\n setMetadata(initialMetadata)\n setIsAddingNew(false)\n setNewKey(\"\")\n setNewValue(\"\")\n setErrors({})\n onClose()\n }\n\n return (\n <Modal\n open\n onCancel={handleClose}\n size=\"large\"\n title={t`Edit Image Metadata`}\n onConfirm={handleSubmit}\n confirmButtonLabel={t`Save Changes`}\n cancelButtonLabel={t`Cancel`}\n disableConfirmButton={isLoading || isAddingNew || metadata.some((e) => e.isEditing) || isSubmitDisabled}\n >\n {isLoading && (\n <Stack distribution=\"center\" alignment=\"center\">\n <Spinner variant=\"primary\" />\n </Stack>\n )}\n\n {!isLoading && (\n <div>\n <Stack direction=\"horizontal\" className=\"jn:bg-theme-background-lvl-1 mb-4 justify-end p-2\">\n <Button\n label={t`Add Property`}\n onClick={() => setIsAddingNew(true)}\n variant=\"primary\"\n disabled={isAddingNew || metadata.some((e) => e.isEditing)}\n icon=\"addCircle\"\n />\n </Stack>\n\n <DataGrid columns={3} minContentColumns={[2]} className=\"mb-6\">\n <DataGridRow>\n <DataGridHeadCell>{t`Property Key`}</DataGridHeadCell>\n <DataGridHeadCell>{t`Value`}</DataGridHeadCell>\n <DataGridHeadCell></DataGridHeadCell>\n </DataGridRow>\n\n {isAddingNew && (\n <DataGridRow>\n <DataGridCell>\n <TextInput\n value={newKey}\n onChange={(e) => {\n setNewKey(e.target.value)\n if (errors.newKey) {\n setErrors((prev) => {\n const next = { ...prev }\n delete next.newKey\n return next\n })\n }\n }}\n placeholder={t`property_key`}\n errortext={errors.newKey}\n autoFocus\n />\n </DataGridCell>\n <DataGridCell>\n <TextInput\n value={newValue}\n onChange={(e) => {\n setNewValue(e.target.value)\n if (errors.newValue) {\n setErrors((prev) => {\n const next = { ...prev }\n delete next.newValue\n return next\n })\n }\n }}\n placeholder={t`Value`}\n errortext={errors.newValue}\n />\n </DataGridCell>\n <DataGridCell>\n <Stack direction=\"horizontal\" gap=\"2\">\n <Button size=\"small\" variant=\"primary\" onClick={handleAddNew} icon=\"check\" title={t`Save`} />\n <Button size=\"small\" variant=\"subdued\" onClick={handleCancelAdd} icon=\"close\" title={t`Discard`} />\n </Stack>\n </DataGridCell>\n </DataGridRow>\n )}\n\n {metadata.map((entry, index) => (\n <DataGridRow key={`${entry.originalKey}-${index}`}>\n <DataGridCell>\n {entry.isEditing ? (\n <TextInput\n value={entry.key}\n onChange={(e) => handleKeyChange(index, e.target.value)}\n errortext={errors[`edit-${index}`]}\n />\n ) : (\n <span className=\"jn:text-theme-high block max-w-xs truncate font-mono\" title={entry.key}>\n {entry.key}\n </span>\n )}\n </DataGridCell>\n <DataGridCell>\n {entry.isEditing ? (\n <TextInput value={entry.value} onChange={(e) => handleValueChange(index, e.target.value)} />\n ) : (\n <span className=\"jn:text-theme-default block max-w-md truncate\" title={entry.value}>\n {entry.value}\n </span>\n )}\n </DataGridCell>\n <DataGridCell>\n {entry.isEditing ? (\n <Stack direction=\"horizontal\" gap=\"2\">\n <Button\n size=\"small\"\n variant=\"primary\"\n onClick={() => handleSaveEdit(index)}\n icon=\"check\"\n title={t`Save`}\n />\n <Button\n size=\"small\"\n variant=\"subdued\"\n onClick={() => handleCancelEdit(index)}\n icon=\"close\"\n title={t`Discard`}\n />\n </Stack>\n ) : (\n <Stack direction=\"horizontal\" gap=\"2\">\n {confirmDeleteIndex !== index && (\n <Button\n size=\"small\"\n variant=\"subdued\"\n onClick={() => handleEdit(index)}\n icon=\"edit\"\n data-testid={`edit-${entry.key}`}\n title={t`Edit`}\n disabled={isAddingNew || metadata.some((e) => e.isEditing)}\n />\n )}\n {confirmDeleteIndex === index ? (\n <Button\n size=\"small\"\n variant=\"primary-danger\"\n onClick={() => handleDelete(index)}\n data-testid={`confirm-delete-${entry.key}`}\n title={t`Delete`}\n disabled={isAddingNew || metadata.some((e) => e.isEditing)}\n >\n {t`Delete`}\n </Button>\n ) : (\n <Button\n size=\"small\"\n onClick={() => setConfirmDeleteIndex(index)}\n icon=\"deleteForever\"\n data-testid={`delete-${entry.key}`}\n title={t`Delete`}\n disabled={isAddingNew || metadata.some((e) => e.isEditing)}\n />\n )}\n </Stack>\n )}\n </DataGridCell>\n </DataGridRow>\n ))}\n\n {metadata.length === 0 && !isAddingNew && (\n <DataGridRow>\n <DataGridCell colSpan={3} className=\"jn:text-theme-light py-8 text-center\">\n <Stack alignment=\"center\">\n <span>{t`No custom metadata properties found. Click \"Add Property\" to create one.`}</span>\n </Stack>\n </DataGridCell>\n </DataGridRow>\n )}\n </DataGrid>\n </div>\n )}\n </Modal>\n )\n}\n\nexport const EditImageMetadataModal: React.FC<EditImageMetadataModalProps> = ({\n image,\n isOpen,\n isLoading = false,\n onClose,\n onSave,\n}) => {\n const { t } = useLingui()\n const projectId = useProjectId()\n const {\n data: excludedPropertiesData,\n isLoading: isLoadingExcluded,\n isError: isErrorExcluded,\n } = trpcReact.compute.getImageMetadataExcludedProperties.useQuery(\n { project_id: projectId },\n {\n enabled: isOpen,\n }\n )\n const excludedProperties = useMemo(\n () => new Set((excludedPropertiesData ?? []).map((s) => s.toLowerCase())),\n [excludedPropertiesData]\n )\n const initialMetadata = useMemo(\n () => buildInitialMetadata(image, excludedProperties),\n [image.id, image.updated_at, excludedProperties]\n )\n\n if (!isOpen) return null\n\n if (isLoadingExcluded) {\n return (\n <Modal open onCancel={onClose} size=\"large\" title={t`Edit Image Metadata`}>\n <Stack distribution=\"center\" alignment=\"center\">\n <Spinner variant=\"primary\" />\n </Stack>\n </Modal>\n )\n }\n\n if (isErrorExcluded) {\n return (\n <Modal open onCancel={onClose} size=\"large\" title={t`Edit Image Metadata`}>\n <Stack distribution=\"center\" alignment=\"center\">\n <span>{t`Failed to load metadata configuration.`}</span>\n </Stack>\n </Modal>\n )\n }\n\n return (\n <EditImageMetadataModalInner\n key={`${image.id}-${image.updated_at}-${excludedProperties.size}`}\n isLoading={isLoading}\n onClose={onClose}\n onSave={onSave}\n initialMetadata={initialMetadata}\n excludedProperties={excludedProperties}\n />\n )\n}\n","import React from \"react\"\nimport { Trans, useLingui } from \"@lingui/react/macro\"\nimport { GlanceImage } from \"@/server/Compute/types/image\"\nimport {\n Button,\n ButtonRow,\n DataGrid,\n DataGridCell,\n DataGridHeadCell,\n DataGridRow,\n Message,\n Modal,\n ModalFooter,\n Spinner,\n Stack,\n} from \"@cloudoperators/juno-ui-components\"\nimport { SizeDisplay } from \"./SizeDisplay\"\ninterface DeleteImageModalProps {\n image: GlanceImage\n isOpen: boolean\n isLoading: boolean\n isDisabled: boolean\n onClose: () => void\n onDelete: (updatedImage: GlanceImage) => void\n}\n\nexport const DeleteImageModal: React.FC<DeleteImageModalProps> = ({\n image,\n isOpen,\n isLoading,\n isDisabled,\n onClose,\n onDelete,\n}) => {\n if (!image) return null\n\n const { t } = useLingui()\n\n const handleDelete = (e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault()\n onDelete(image)\n }\n\n return (\n <Modal\n onCancel={onClose}\n size=\"small\"\n title=\"Delete Image\"\n open={isOpen}\n modalFooter={\n <ModalFooter className=\"flex justify-end\">\n <ButtonRow>\n <Button variant=\"default\" onClick={onClose}>\n <Trans>Cancel</Trans>\n </Button>\n <Button\n variant=\"primary-danger\"\n onClick={(e) => {\n handleDelete(e)\n onClose()\n }}\n disabled={isLoading || isDisabled}\n data-testid={`delete-image-button`}\n >\n {isLoading ? <Spinner size=\"small\" /> : <Trans>Delete</Trans>}\n </Button>\n </ButtonRow>\n </ModalFooter>\n }\n >\n {isLoading && (\n <Stack distribution=\"center\" alignment=\"center\">\n <Spinner variant=\"primary\" />\n </Stack>\n )}\n {!isLoading && (\n <div>\n <Message\n text={t`This action cannot be undone. The image will be permanently deleted.`}\n variant=\"danger\"\n className=\"mb-4\"\n />\n\n {image && (\n <DataGrid columns={2}>\n <DataGridRow>\n <DataGridHeadCell>{t`Name`}</DataGridHeadCell>\n <DataGridCell>{image.name || t`Unnamed`}</DataGridCell>\n </DataGridRow>\n <DataGridRow>\n <DataGridHeadCell>{t`Id`}</DataGridHeadCell>\n <DataGridCell>{image.id}</DataGridCell>\n </DataGridRow>\n <DataGridRow>\n <DataGridHeadCell>{t`Status`}</DataGridHeadCell>\n <DataGridCell>{image.status}</DataGridCell>\n </DataGridRow>\n <DataGridRow>\n <DataGridHeadCell>{t`Visibility`}</DataGridHeadCell>\n <DataGridCell>{image.visibility}</DataGridCell>\n </DataGridRow>\n <DataGridRow>\n <DataGridHeadCell>{t`Size`}</DataGridHeadCell>\n <DataGridCell>\n <SizeDisplay size={image.size} />\n </DataGridCell>\n </DataGridRow>\n <DataGridRow>\n <DataGridHeadCell>{t`Disk Format`}</DataGridHeadCell>\n <DataGridCell>{image.disk_format || t`N/A`}</DataGridCell>\n </DataGridRow>\n <DataGridRow>\n <DataGridHeadCell>{t`Created`}</DataGridHeadCell>\n <DataGridCell>\n {image.created_at ? new Date(image.created_at).toLocaleDateString() : t`N/A`}\n </DataGridCell>\n </DataGridRow>\n </DataGrid>\n )}\n </div>\n )}\n </Modal>\n )\n}\n","import React from \"react\"\nimport { Trans, useLingui } from \"@lingui/react/macro\"\nimport { GlanceImage } from \"@/server/Compute/types/image\"\nimport {\n DataGrid,\n DataGridCell,\n DataGridHeadCell,\n DataGridRow,\n Modal,\n Spinner,\n Stack,\n} from \"@cloudoperators/juno-ui-components\"\nimport { SizeDisplay } from \"./SizeDisplay\"\n\ninterface ActivateImageModalProps {\n image: GlanceImage\n isOpen: boolean\n isLoading: boolean\n onClose: () => void\n onActivate: (image: GlanceImage) => void\n}\n\nexport const ActivateImageModal: React.FC<ActivateImageModalProps> = ({\n image,\n isOpen,\n isLoading,\n onClose,\n onActivate,\n}) => {\n if (!image) return null\n\n const { t } = useLingui()\n\n const handleActivate = (e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault()\n onActivate(image)\n }\n\n return (\n <Modal\n onCancel={onClose}\n size=\"small\"\n title={t`Activate Image`}\n open={isOpen}\n onConfirm={handleActivate}\n confirmButtonLabel={t`Activate`}\n cancelButtonLabel={t`Cancel`}\n disableConfirmButton={isLoading}\n >\n {isLoading && (\n <Stack distribution=\"center\" alignment=\"center\">\n <Spinner variant=\"primary\" />\n </Stack>\n )}\n {!isLoading && (\n <div>\n <p className=\"mb-6\">\n <Trans>Activating this image will allow it to be used to launch new instances again.</Trans>\n </p>\n\n <DataGrid columns={2}>\n <DataGridRow>\n <DataGridHeadCell>{t`Name`}</DataGridHeadCell>\n <DataGridCell>{image.name || t`Unnamed`}</DataGridCell>\n </DataGridRow>\n <DataGridRow>\n <DataGridHeadCell>{t`Id`}</DataGridHeadCell>\n <DataGridCell>{image.id}</DataGridCell>\n </DataGridRow>\n <DataGridRow>\n <DataGridHeadCell>{t`Status`}</DataGridHeadCell>\n <DataGridCell>{image.status}</DataGridCell>\n </DataGridRow>\n <DataGridRow>\n <DataGridHeadCell>{t`Visibility`}</DataGridHeadCell>\n <DataGridCell>{image.visibility}</DataGridCell>\n </DataGridRow>\n <DataGridRow>\n <DataGridHeadCell>{t`Size`}</DataGridHeadCell>\n <DataGridCell>\n <SizeDisplay size={image.size} />\n </DataGridCell>\n </DataGridRow>\n <DataGridRow>\n <DataGridHeadCell>{t`Disk Format`}</DataGridHeadCell>\n <DataGridCell>{image.disk_format || t`N/A`}</DataGridCell>\n </DataGridRow>\n <DataGridRow>\n <DataGridHeadCell>{t`Created`}</DataGridHeadCell>\n <DataGridCell>\n {(() => {\n const dt = new Date(image.created_at ?? \"\")\n return !isNaN(dt.getTime()) ? dt.toLocaleDateString() : t`N/A`\n })()}\n </DataGridCell>\n </DataGridRow>\n </DataGrid>\n </div>\n )}\n </Modal>\n )\n}\n","import React from \"react\"\nimport { Trans, useLingui } from \"@lingui/react/macro\"\nimport { GlanceImage } from \"@/server/Compute/types/image\"\nimport {\n DataGrid,\n DataGridCell,\n DataGridHeadCell,\n DataGridRow,\n Modal,\n Spinner,\n Stack,\n} from \"@cloudoperators/juno-ui-components\"\nimport { SizeDisplay } from \"./SizeDisplay\"\n\ninterface DeactivateImageModalProps {\n image: GlanceImage\n isOpen: boolean\n isLoading: boolean\n onClose: () => void\n onDeactivate: (image: GlanceImage) => void\n}\n\nexport const DeactivateImageModal: React.FC<DeactivateImageModalProps> = ({\n image,\n isOpen,\n isLoading,\n onClose,\n onDeactivate,\n}) => {\n if (!image) return null\n\n const { t } = useLingui()\n\n const handleDeactivate = (e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault()\n onDeactivate(image)\n }\n\n return (\n <Modal\n onCancel={onClose}\n size=\"small\"\n title={t`Deactivate Image`}\n open={isOpen}\n onConfirm={handleDeactivate}\n confirmButtonLabel={t`Deactivate`}\n cancelButtonLabel={t`Cancel`}\n disableConfirmButton={isLoading}\n >\n {isLoading && (\n <Stack distribution=\"center\" alignment=\"center\">\n <Spinner variant=\"primary\" />\n </Stack>\n )}\n {!isLoading && (\n <div>\n <p className=\"mb-6\">\n <Trans>\n Deactivating this image will prevent it from being used to launch new instances. Existing instances will\n not be affected.\n </Trans>\n </p>\n\n <DataGrid columns={2}>\n <DataGridRow>\n <DataGridHeadCell>{t`Name`}</DataGridHeadCell>\n <DataGridCell>{image.name || t`Unnamed`}</DataGridCell>\n </DataGridRow>\n <DataGridRow>\n <DataGridHeadCell>{t`Id`}</DataGridHeadCell>\n <DataGridCell>{image.id}</DataGridCell>\n </DataGridRow>\n <DataGridRow>\n <DataGridHeadCell>{t`Status`}</DataGridHeadCell>\n <DataGridCell>{image.status}</DataGridCell>\n </DataGridRow>\n <DataGridRow>\n <DataGridHeadCell>{t`Visibility`}</DataGridHeadCell>\n <DataGridCell>{image.visibility}</DataGridCell>\n </DataGridRow>\n <DataGridRow>\n <DataGridHeadCell>{t`Size`}</DataGridHeadCell>\n <DataGridCell>\n <SizeDisplay size={image.size} />\n </DataGridCell>\n </DataGridRow>\n <DataGridRow>\n <DataGridHeadCell>{t`Disk Format`}</DataGridHeadCell>\n <DataGridCell>{image.disk_format || t`N/A`}</DataGridCell>\n </DataGridRow>\n <DataGridRow>\n <DataGridHeadCell>{t`Created`}</DataGridHeadCell>\n <DataGridCell>\n {(() => {\n const dt = new Date(image.created_at ?? \"\")\n return !isNaN(dt.getTime()) ? dt.toLocaleDateString() : t`N/A`\n })()}\n </DataGridCell>\n </DataGridRow>\n </DataGrid>\n </div>\n )}\n </Modal>\n )\n}\n","import { ReactNode } from \"react\"\nimport { Stack } from \"@cloudoperators/juno-ui-components/index\"\n\ninterface NotificationTextProps {\n title: ReactNode\n description: ReactNode\n}\n\nexport function NotificationText({ title, description }: NotificationTextProps) {\n return (\n <Stack direction=\"vertical\" gap=\"1.5\">\n <span>{title}</span>\n <span className=\"text-theme-light\">{description}</span>\n </Stack>\n )\n}\n","import { ToastProps } from \"@cloudoperators/juno-ui-components\"\nimport { Trans } from \"@lingui/react/macro\"\nimport { NotificationText } from \"./NotificationText\"\n\ninterface ToastConfig {\n onDismiss: () => void\n autoDismissTimeout?: number\n}\n\nexport const getImageUpdatedToast = (imageName: string, config: ToastConfig): ToastProps => ({\n variant: \"success\",\n children: (\n <NotificationText\n title={<Trans>Image Instance</Trans>}\n description={<Trans>Image instance \"{imageName}\" has been updated</Trans>}\n />\n ),\n autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 3000,\n onDismiss: config.onDismiss,\n})\n\nexport const getImageUpdateErrorToast = (imageName: string, message: string, config: ToastConfig): ToastProps => ({\n variant: \"error\",\n children: (\n <NotificationText\n title={<Trans>Unable to Update Image</Trans>}\n description={\n <>\n <Trans>The image \"{imageName}\" could not be updated: </Trans>\n {message}\n </>\n }\n />\n ),\n autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 5000,\n onDismiss: config.onDismiss,\n})\n\nexport const getImageCreatedToast = (imageName: string, config: ToastConfig): ToastProps => ({\n variant: \"success\",\n children: (\n <NotificationText\n title={<Trans>Image Instance</Trans>}\n description={<Trans>Image instance \"{imageName}\" has been created</Trans>}\n />\n ),\n autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 3000,\n onDismiss: config.onDismiss,\n})\n\nexport const getImageCreateErrorToast = (imageName: string, message: string, config: ToastConfig): ToastProps => ({\n variant: \"error\",\n children: (\n <NotificationText\n title={<Trans>Unable to Create Image</Trans>}\n description={\n <>\n <Trans>The image \"{imageName}\" could not be created: </Trans>\n {message}\n </>\n }\n />\n ),\n autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 5000,\n onDismiss: config.onDismiss,\n})\n\nexport const getImageFileUploadErrorToast = (fileName: string, message: string, config: ToastConfig): ToastProps => ({\n variant: \"error\",\n children: (\n <NotificationText\n title={<Trans>Unable to Upload Image File</Trans>}\n description={\n <>\n <Trans>Failed to upload file \"{fileName}\": </Trans>\n {message}\n </>\n }\n />\n ),\n autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 5000,\n onDismiss: config.onDismiss,\n})\n\nexport const getImageDeletedToast = (imageName: string, config: ToastConfig): ToastProps => ({\n variant: \"success\",\n children: (\n <NotificationText\n title={<Trans>Image Instance</Trans>}\n description={<Trans>Image instance \"{imageName}\" has been deleted</Trans>}\n />\n ),\n autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 3000,\n onDismiss: config.onDismiss,\n})\n\nexport const getImageDeleteErrorToast = (imageId: string, message: string, config: ToastConfig): ToastProps => ({\n variant: \"error\",\n children: (\n <NotificationText\n title={<Trans>Unable to Delete Image</Trans>}\n description={\n <Trans>\n The image \"{imageId}\" could not be deleted: {message}\n </Trans>\n }\n />\n ),\n autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 3000,\n onDismiss: config.onDismiss,\n})\n\nexport const getImageActivatedToast = (imageName: string, config: ToastConfig): ToastProps => ({\n variant: \"success\",\n children: (\n <NotificationText\n title={<Trans>Image Instance</Trans>}\n description={<Trans>Image instance \"{imageName}\" has been activated</Trans>}\n />\n ),\n autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 3000,\n onDismiss: config.onDismiss,\n})\n\nexport const getImageDeactivatedToast = (imageName: string, config: ToastConfig): ToastProps => ({\n variant: \"success\",\n children: (\n <NotificationText\n title={<Trans>Image Instance</Trans>}\n description={<Trans>Image instance \"{imageName}\" has been deactivated</Trans>}\n />\n ),\n autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 3000,\n onDismiss: config.onDismiss,\n})\n\nexport const getImageActivationErrorToast = (imageId: string, message: string, config: ToastConfig): ToastProps => ({\n variant: \"error\",\n children: (\n <NotificationText\n title={<Trans>Unable to Re-activate Image</Trans>}\n description={\n <Trans>\n The image \"{imageId}\" could not be re-activated: {message}\n </Trans>\n }\n />\n ),\n autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 3000,\n onDismiss: config.onDismiss,\n})\n\nexport const getImageDeactivationErrorToast = (imageId: string, message: string, config: ToastConfig): ToastProps => ({\n variant: \"error\",\n children: (\n <NotificationText\n title={<Trans>Unable to Deactivate Image</Trans>}\n description={\n <Trans>\n The image \"{imageId}\" could not be deactivated: {message}\n </Trans>\n }\n />\n ),\n autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 3000,\n onDismiss: config.onDismiss,\n})\n\n// Bulk operation toasts\nexport const getBulkDeleteSuccessToast = (\n successCount: number,\n totalCount: number,\n config: ToastConfig\n): ToastProps => ({\n variant: \"success\",\n children: (\n <NotificationText\n title={<Trans>Images Deleted</Trans>}\n description={\n <Trans>\n Successfully deleted {successCount} of {totalCount} image(s)\n </Trans>\n }\n />\n ),\n autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 3000,\n onDismiss: config.onDismiss,\n})\n\nexport const getBulkDeleteErrorToast = (failedCount: number, totalCount: number, config: ToastConfig): ToastProps => ({\n variant: \"error\",\n children: (\n <NotificationText\n title={<Trans>Failed to Delete Images</Trans>}\n description={\n <Trans>\n Failed to delete {failedCount} of {totalCount} image(s). Some images may be protected or in use.\n </Trans>\n }\n />\n ),\n autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 5000,\n onDismiss: config.onDismiss,\n})\n\nexport const getBulkDeletePartialToast = (\n successCount: number,\n failedCount: number,\n config: ToastConfig\n): ToastProps => ({\n variant: \"warning\",\n children: (\n <NotificationText\n title={<Trans>Partial Delete Success</Trans>}\n description={\n <Trans>\n Deleted {successCount} image(s), but {failedCount} image(s) could not be deleted.\n </Trans>\n }\n />\n ),\n autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 5000,\n onDismiss: config.onDismiss,\n})\n\nexport const getBulkActivateSuccessToast = (\n successCount: number,\n totalCount: number,\n config: ToastConfig\n): ToastProps => ({\n variant: \"success\",\n children: (\n <NotificationText\n title={<Trans>Images Activated</Trans>}\n description={\n <Trans>\n Successfully activated {successCount} of {totalCount} image(s)\n </Trans>\n }\n />\n ),\n autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 3000,\n onDismiss: config.onDismiss,\n})\n\nexport const getBulkActivateErrorToast = (\n failedCount: number,\n totalCount: number,\n config: ToastConfig\n): ToastProps => ({\n variant: \"error\",\n children: (\n <NotificationText\n title={<Trans>Failed to Activate Images</Trans>}\n description={\n <Trans>\n Failed to activate {failedCount} of {totalCount} image(s). Some images may already be active or in an invalid\n state.\n </Trans>\n }\n />\n ),\n autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 5000,\n onDismiss: config.onDismiss,\n})\n\nexport const getBulkActivatePartialToast = (\n successCount: number,\n failedCount: number,\n config: ToastConfig\n): ToastProps => ({\n variant: \"warning\",\n children: (\n <NotificationText\n title={<Trans>Partial Activation Success</Trans>}\n description={\n <Trans>\n Activated {successCount} image(s), but {failedCount} image(s) could not be activated.\n </Trans>\n }\n />\n ),\n autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 5000,\n onDismiss: config.onDismiss,\n})\n\nexport const getBulkDeactivateSuccessToast = (\n successCount: number,\n totalCount: number,\n config: ToastConfig\n): ToastProps => ({\n variant: \"success\",\n children: (\n <NotificationText\n title={<Trans>Images Deactivated</Trans>}\n description={\n <Trans>\n Successfully deactivated {successCount} of {totalCount} image(s)\n </Trans>\n }\n />\n ),\n autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 3000,\n onDismiss: config.onDismiss,\n})\n\nexport const getBulkDeactivateErrorToast = (\n failedCount: number,\n totalCount: number,\n config: ToastConfig\n): ToastProps => ({\n variant: \"error\",\n children: (\n <NotificationText\n title={<Trans>Failed to Deactivate Images</Trans>}\n description={\n <Trans>\n Failed to deactivate {failedCount} of {totalCount} image(s). Some images may already be deactivated or in an\n invalid state.\n </Trans>\n }\n />\n ),\n autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 5000,\n onDismiss: config.onDismiss,\n})\n\nexport const getBulkDeactivatePartialToast = (\n successCount: number,\n failedCount: number,\n config: ToastConfig\n): ToastProps => ({\n variant: \"warning\",\n children: (\n <NotificationText\n title={<Trans>Partial Deactivation Success</Trans>}\n description={\n <Trans>\n Deactivated {successCount} image(s), but {failedCount} image(s) could not be deactivated.\n </Trans>\n }\n />\n ),\n autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 5000,\n onDismiss: config.onDismiss,\n})\n\n// Image access toasts\nexport const getImageAccessStatusUpdatedToast = (newStatus: string, config: ToastConfig): ToastProps => ({\n variant: \"info\",\n children: (\n <NotificationText\n title={<Trans>Access Status</Trans>}\n description={<Trans>Access status updated to \"{newStatus}\".</Trans>}\n />\n ),\n autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 5000,\n onDismiss: config.onDismiss,\n})\n\nexport const getImageAccessStatusErrorToast = (errorMessage: string, config: ToastConfig): ToastProps => ({\n variant: \"error\",\n children: (\n <NotificationText\n title={<Trans>Access Status</Trans>}\n description={errorMessage || <Trans>Failed to update access status</Trans>}\n />\n ),\n autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 5000,\n onDismiss: config.onDismiss,\n})\n\n// Image visibility toasts\nexport const getImageVisibilityUpdatedToast = (\n imageName: string,\n visibility: string,\n config: ToastConfig\n): ToastProps => ({\n variant: \"success\",\n children: (\n <NotificationText\n title={<Trans>Image Visibility</Trans>}\n description={\n <Trans>\n Image \"{imageName}\" visibility updated to {visibility}\n </Trans>\n }\n />\n ),\n autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 3000,\n onDismiss: config.onDismiss,\n})\n\nexport const getImageVisibilityUpdateErrorToast = (\n imageName: string,\n message: string,\n config: ToastConfig\n): ToastProps => ({\n variant: \"error\",\n children: (\n <NotificationText\n title={<Trans>Unable to Update Image Visibility</Trans>}\n description={\n <>\n <Trans>Failed to update visibility for \"{imageName}\": </Trans>\n {message}\n </>\n }\n />\n ),\n autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 5000,\n onDismiss: config.onDismiss,\n})\n"],"mappings":"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"}
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
import { _ as e, f as t, nt as n, x as r } from "./build-BJDfnAyi.mjs";
|
|
2
|
-
import { t as i } from "./SortInput-DXWSqSny.mjs";
|
|
3
|
-
import { n as a, t as o } from "./FiltersInput-OVeIJzIo.mjs";
|
|
4
|
-
import { Fragment as s, jsx as c, jsxs as l } from "react/jsx-runtime";
|
|
5
|
-
import { useCallback as u, useEffect as d, useRef as f } from "react";
|
|
6
|
-
import { Trans as p, useLingui as m } from "@lingui/react";
|
|
7
|
-
//#region src/client/components/ListToolbar/index.tsx
|
|
8
|
-
var h = ({ filterSettings: h, onFilter: g, sortSettings: _, onSort: v, searchTerm: y, onSearch: b, searchInputProps: x = {}, actions: S, tabs: C, totalCount: w, filteredCount: T, itemName: E = "items", lastUpdated: D }) => {
|
|
9
|
-
let { i18n: O, _: k } = m(), A = f(void 0);
|
|
10
|
-
d(() => () => {
|
|
11
|
-
A.current && clearTimeout(A.current);
|
|
12
|
-
}, []);
|
|
13
|
-
let j = (e) => e ? (typeof e == "string" ? new Date(e) : e).toLocaleString() : "", M = w !== void 0 && T !== void 0, N = u((e) => {
|
|
14
|
-
!g || !h || g({
|
|
15
|
-
...h,
|
|
16
|
-
selectedFilters: h.selectedFilters?.filter((t) => !(t.name === e.name && t.value === e.value))
|
|
17
|
-
});
|
|
18
|
-
}, [h, g]), P = (e) => {
|
|
19
|
-
if (!g || !h || h.selectedFilters?.some((t) => t.name === e.name && t.value === e.value)) return;
|
|
20
|
-
let t = h.filters.find((t) => e.name === t.filterName)?.supportsMultiValue ? [...h.selectedFilters || [], e] : [...(h.selectedFilters || []).filter((t) => t.name !== e.name), e];
|
|
21
|
-
g({
|
|
22
|
-
...h,
|
|
23
|
-
selectedFilters: t
|
|
24
|
-
});
|
|
25
|
-
}, F = u((e) => {
|
|
26
|
-
let t = typeof e == "string" ? e : "";
|
|
27
|
-
A.current && clearTimeout(A.current), b?.(t);
|
|
28
|
-
}, [b]), I = u((e) => {
|
|
29
|
-
let t = e.currentTarget.value;
|
|
30
|
-
A.current && clearTimeout(A.current), A.current = window.setTimeout(() => b?.(t), 500);
|
|
31
|
-
}, [b]), L = u(() => {
|
|
32
|
-
A.current && clearTimeout(A.current), b?.("");
|
|
33
|
-
}, [b]), R = h && g ? {
|
|
34
|
-
filters: h.filters,
|
|
35
|
-
onChange: P
|
|
36
|
-
} : null, z = _ && v ? {
|
|
37
|
-
options: _.options,
|
|
38
|
-
sortBy: _.sortBy,
|
|
39
|
-
sortDirection: _.sortDirection || "asc",
|
|
40
|
-
onSortByChange: (e) => v({
|
|
41
|
-
..._,
|
|
42
|
-
sortBy: e,
|
|
43
|
-
sortDirection: _.sortDirection || "asc"
|
|
44
|
-
}),
|
|
45
|
-
onSortDirectionChange: (e) => v({
|
|
46
|
-
..._,
|
|
47
|
-
sortDirection: e
|
|
48
|
-
})
|
|
49
|
-
} : null, B = b ? {
|
|
50
|
-
placeholder: O._({ id: "YIix5Y" }),
|
|
51
|
-
"data-testid": "searchbar",
|
|
52
|
-
value: y,
|
|
53
|
-
onInput: I,
|
|
54
|
-
onClear: L,
|
|
55
|
-
onSearch: F,
|
|
56
|
-
...x
|
|
57
|
-
} : null;
|
|
58
|
-
return /* @__PURE__ */ l(s, { children: [C && /* @__PURE__ */ c("div", {
|
|
59
|
-
className: "w-full",
|
|
60
|
-
children: /* @__PURE__ */ c(e, {
|
|
61
|
-
activeItem: C.activeItem,
|
|
62
|
-
onActiveItemChange: C.onActiveItemChange,
|
|
63
|
-
children: C.items.map((e) => /* @__PURE__ */ c(r, {
|
|
64
|
-
label: e.label,
|
|
65
|
-
value: e.value
|
|
66
|
-
}, e.value))
|
|
67
|
-
})
|
|
68
|
-
}), /* @__PURE__ */ l(n, {
|
|
69
|
-
alignment: "center",
|
|
70
|
-
gap: "6",
|
|
71
|
-
className: "bg-theme-background-lvl-1 flex w-full flex-col p-4",
|
|
72
|
-
children: [
|
|
73
|
-
S && /* @__PURE__ */ c(n, {
|
|
74
|
-
direction: "horizontal",
|
|
75
|
-
className: "w-full justify-end",
|
|
76
|
-
children: S
|
|
77
|
-
}),
|
|
78
|
-
/* @__PURE__ */ l("div", {
|
|
79
|
-
className: "flex w-full flex-col items-stretch gap-4 md:flex-row md:items-center",
|
|
80
|
-
children: [
|
|
81
|
-
R && /* @__PURE__ */ c("div", {
|
|
82
|
-
className: "w-full md:w-auto md:min-w-37.5",
|
|
83
|
-
children: /* @__PURE__ */ c(o, { ...R })
|
|
84
|
-
}),
|
|
85
|
-
z && /* @__PURE__ */ c("div", {
|
|
86
|
-
className: "w-full md:w-auto md:min-w-45",
|
|
87
|
-
children: /* @__PURE__ */ c(i, { ...z })
|
|
88
|
-
}),
|
|
89
|
-
B && /* @__PURE__ */ c("div", {
|
|
90
|
-
className: "w-full md:ml-auto md:w-auto md:min-w-25",
|
|
91
|
-
children: /* @__PURE__ */ c(t, { ...B })
|
|
92
|
-
})
|
|
93
|
-
]
|
|
94
|
-
}),
|
|
95
|
-
h?.selectedFilters && h.selectedFilters.length > 0 && g && /* @__PURE__ */ c("div", {
|
|
96
|
-
className: "w-full",
|
|
97
|
-
children: /* @__PURE__ */ c(a, {
|
|
98
|
-
selectedFilters: h.selectedFilters,
|
|
99
|
-
onDelete: N,
|
|
100
|
-
onClear: () => g({
|
|
101
|
-
...h,
|
|
102
|
-
selectedFilters: []
|
|
103
|
-
})
|
|
104
|
-
})
|
|
105
|
-
}),
|
|
106
|
-
(M || D) && /* @__PURE__ */ c("div", {
|
|
107
|
-
className: "text-theme-secondary flex w-full items-center justify-between text-sm",
|
|
108
|
-
children: /* @__PURE__ */ l("div", {
|
|
109
|
-
className: "flex items-center gap-2",
|
|
110
|
-
children: [M && /* @__PURE__ */ c("span", { children: /* @__PURE__ */ c(p, {
|
|
111
|
-
id: "Vg0k6h",
|
|
112
|
-
values: {
|
|
113
|
-
filteredCount: T,
|
|
114
|
-
totalCount: w,
|
|
115
|
-
itemName: E
|
|
116
|
-
}
|
|
117
|
-
}) }), D && /* @__PURE__ */ c("span", { children: /* @__PURE__ */ c(p, {
|
|
118
|
-
id: "wlUDbB",
|
|
119
|
-
values: { formattedDate: j(D) }
|
|
120
|
-
}) })]
|
|
121
|
-
})
|
|
122
|
-
})
|
|
123
|
-
]
|
|
124
|
-
})] });
|
|
125
|
-
};
|
|
126
|
-
//#endregion
|
|
127
|
-
export { h as t };
|
|
128
|
-
|
|
129
|
-
//# sourceMappingURL=ListToolbar-BojRTNbo.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ListToolbar-BojRTNbo.mjs","names":["useCallback","useRef","useEffect","SearchInput","Stack","TabNavigation","TabNavigationItem","SelectedFilters","FiltersInput","SortInput","ListToolbar","filterSettings","onFilter","sortSettings","onSort","searchTerm","onSearch","searchInputProps","actions","tabs","totalCount","filteredCount","itemName","lastUpdated","useLingui","debounceTimerRef","undefined","current","clearTimeout","formatLastUpdated","date","dateObj","Date","toLocaleString","showCountInfo","handleFilterDelete","filterToRemove","selectedFilters","filter","name","value","handleSelect","selectedFilter","filterExists","some","supportsMultiValue","filters","find","filterName","newSelected","handleSearch","searchValue","handleSearchInput","event","currentTarget","window","setTimeout","handleSearchClear","filtersProps","onChange","sortProps","options","sortBy","sortDirection","onSortByChange","param","onSortDirectionChange","direction","searchProps","placeholder","t","onInput","onClear","div","className","activeItem","onActiveItemChange","items","map","item","label","alignment","gap","length","onDelete","span","formattedDate"],"sources":["../../src/client/components/ListToolbar/index.tsx"],"sourcesContent":["import { ReactNode, useCallback, useRef, useEffect } from \"react\"\nimport { Trans, useLingui } from \"@lingui/react/macro\"\nimport {\n SearchInput,\n SearchInputProps,\n Stack,\n TabNavigation,\n TabNavigationItem,\n} from \"@cloudoperators/juno-ui-components\"\nimport { SelectedFilters } from \"./SelectedFilters\"\nimport { FiltersInput } from \"./FiltersInput\"\nimport { SortInput } from \"./SortInput\"\nimport { FilterSettings, SelectedFilter, SortSettings } from \"./types\"\n\nexport type ListToolbarProps = {\n filterSettings?: FilterSettings\n onFilter?: (filterSettings: FilterSettings) => void\n sortSettings?: SortSettings\n onSort?: (sortSettings: SortSettings) => void\n searchTerm?: string\n onSearch?: (searchTerm: string) => void\n searchInputProps?: Omit<SearchInputProps, \"value\" | \"onSearch\" | \"onClear\" | \"onInput\">\n actions?: ReactNode\n tabs?: {\n items: Array<{ label: string; value: string }>\n activeItem: string\n onActiveItemChange: (value: ReactNode) => void\n }\n // Count information\n totalCount?: number\n itemName?: string // e.g. \"items\", \"users\", \"projects\" - used in count display\n filteredCount?: number\n // Last updated timestamp\n lastUpdated?: Date | string\n}\n\nexport const ListToolbar = ({\n filterSettings,\n onFilter,\n sortSettings,\n onSort,\n searchTerm,\n onSearch,\n searchInputProps = {},\n actions,\n tabs,\n totalCount,\n filteredCount,\n itemName = \"items\",\n lastUpdated,\n}: ListToolbarProps) => {\n const { t } = useLingui()\n\n const debounceTimerRef = useRef<number | undefined>(undefined)\n\n useEffect(() => {\n return () => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current)\n }\n }\n }, [])\n\n // Format last updated time\n const formatLastUpdated = (date: Date | string | undefined): string => {\n if (!date) return \"\"\n const dateObj = typeof date === \"string\" ? new Date(date) : date\n return dateObj.toLocaleString()\n }\n\n const showCountInfo = totalCount !== undefined && filteredCount !== undefined\n\n const handleFilterDelete = useCallback(\n (filterToRemove: SelectedFilter) => {\n if (!onFilter || !filterSettings) return\n onFilter({\n ...filterSettings,\n selectedFilters: filterSettings.selectedFilters?.filter(\n (filter) => !(filter.name === filterToRemove.name && filter.value === filterToRemove.value)\n ),\n })\n },\n [filterSettings, onFilter]\n )\n\n const handleSelect = (selectedFilter: SelectedFilter) => {\n if (!onFilter || !filterSettings) return\n const filterExists = filterSettings.selectedFilters?.some(\n (filter) => filter.name === selectedFilter.name && filter.value === selectedFilter.value\n )\n if (filterExists) return\n\n const supportsMultiValue = filterSettings.filters.find(\n (filter) => selectedFilter.name === filter.filterName\n )?.supportsMultiValue\n\n const newSelected = supportsMultiValue\n ? [...(filterSettings.selectedFilters || []), selectedFilter]\n : [\n ...(filterSettings.selectedFilters || []).filter((filter) => filter.name !== selectedFilter.name),\n selectedFilter,\n ]\n\n onFilter({ ...filterSettings, selectedFilters: newSelected })\n }\n\n const handleSearch = useCallback(\n (value: string | number | string[] | undefined) => {\n const searchValue = typeof value === \"string\" ? value : \"\"\n\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current)\n }\n\n onSearch?.(searchValue)\n },\n [onSearch]\n )\n\n const handleSearchInput = useCallback(\n (event: React.FormEvent<HTMLInputElement>) => {\n const searchValue = event.currentTarget.value\n if (debounceTimerRef.current) clearTimeout(debounceTimerRef.current)\n debounceTimerRef.current = window.setTimeout(() => onSearch?.(searchValue), 500)\n },\n [onSearch]\n )\n\n const handleSearchClear = useCallback(() => {\n if (debounceTimerRef.current) clearTimeout(debounceTimerRef.current)\n onSearch?.(\"\")\n }, [onSearch])\n\n const filtersProps = filterSettings && onFilter ? { filters: filterSettings.filters, onChange: handleSelect } : null\n const sortProps =\n sortSettings && onSort\n ? {\n options: sortSettings.options,\n sortBy: sortSettings.sortBy,\n sortDirection: sortSettings.sortDirection || \"asc\",\n onSortByChange: (param: string | number | string[] | undefined) =>\n onSort({ ...sortSettings, sortBy: param, sortDirection: sortSettings.sortDirection || \"asc\" }),\n onSortDirectionChange: (direction: \"asc\" | \"desc\") => onSort({ ...sortSettings, sortDirection: direction }),\n }\n : null\n\n const searchProps: (SearchInputProps & { \"data-testid\"?: string }) | null = onSearch\n ? {\n placeholder: t`Search...`,\n \"data-testid\": \"searchbar\",\n value: searchTerm,\n onInput: handleSearchInput,\n onClear: handleSearchClear,\n onSearch: handleSearch,\n ...searchInputProps,\n }\n : null\n\n return (\n <>\n {tabs && (\n <div className=\"w-full\">\n <TabNavigation activeItem={tabs.activeItem} onActiveItemChange={tabs.onActiveItemChange}>\n {tabs.items.map((item) => (\n <TabNavigationItem key={item.value} label={item.label} value={item.value} />\n ))}\n </TabNavigation>\n </div>\n )}\n <Stack alignment=\"center\" gap=\"6\" className=\"bg-theme-background-lvl-1 flex w-full flex-col p-4\">\n {actions && (\n <Stack direction=\"horizontal\" className=\"w-full justify-end\">\n {actions}\n </Stack>\n )}\n\n <div className=\"flex w-full flex-col items-stretch gap-4 md:flex-row md:items-center\">\n {filtersProps && (\n <div className=\"w-full md:w-auto md:min-w-37.5\">\n <FiltersInput {...filtersProps} />\n </div>\n )}\n {sortProps && (\n <div className=\"w-full md:w-auto md:min-w-45\">\n <SortInput {...sortProps} />\n </div>\n )}\n {searchProps && (\n <div className=\"w-full md:ml-auto md:w-auto md:min-w-25\">\n <SearchInput {...searchProps} />\n </div>\n )}\n </div>\n\n {filterSettings?.selectedFilters && filterSettings.selectedFilters.length > 0 && onFilter && (\n <div className=\"w-full\">\n <SelectedFilters\n selectedFilters={filterSettings.selectedFilters}\n onDelete={handleFilterDelete}\n onClear={() => onFilter({ ...filterSettings, selectedFilters: [] })}\n />\n </div>\n )}\n {/* Count and Last Updated Info */}\n {(showCountInfo || lastUpdated) && (\n <div className=\"text-theme-secondary flex w-full items-center justify-between text-sm\">\n <div className=\"flex items-center gap-2\">\n {showCountInfo && (\n <span>\n <Trans>\n Showing {filteredCount} of {totalCount} {itemName}\n </Trans>\n </span>\n )}\n {lastUpdated &&\n (() => {\n const formattedDate = formatLastUpdated(lastUpdated)\n return (\n <span>\n <Trans>Last updated: {formattedDate}</Trans>\n </span>\n )\n })()}\n </div>\n </div>\n )}\n </Stack>\n </>\n )\n}\n"],"mappings":"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"}
|
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
import { E as e, L as t, N as n, Q as r, R as i, W as a, Y as o, c as s, et as c, h as l, j as u, nt as d } from "./build-BJDfnAyi.mjs";
|
|
2
|
-
import { r as f } from "./trpcClient-BxguzNYF.mjs";
|
|
3
|
-
import { n as p, t as m } from "./_flavorId-BoNcxYmF.mjs";
|
|
4
|
-
import { t as h } from "./useErrorTranslation-TZVwIAzq.mjs";
|
|
5
|
-
import { n as g, r as _, t as v } from "./DeleteFlavorModal-BusYn32r.mjs";
|
|
6
|
-
import { t as y } from "./useModal-DxxlilRm.mjs";
|
|
7
|
-
import { t as b } from "./ContentHeader-BXZoN3B9.mjs";
|
|
8
|
-
import { Fragment as x, jsx as S, jsxs as C } from "react/jsx-runtime";
|
|
9
|
-
import w from "react";
|
|
10
|
-
import { useNavigate as T, useParams as E } from "@tanstack/react-router";
|
|
11
|
-
import { Trans as D, useLingui as O } from "@lingui/react";
|
|
12
|
-
//#region src/client/routes/_auth/projects/$projectId/compute/flavors/-components/FlavorDetailsView.tsx
|
|
13
|
-
function k({ flavor: e }) {
|
|
14
|
-
let r = (e, t = "MB") => e === 0 ? `0 ${t}` : `${e} ${t}`;
|
|
15
|
-
return /* @__PURE__ */ C(d, {
|
|
16
|
-
direction: "vertical",
|
|
17
|
-
gap: "6",
|
|
18
|
-
className: "mt-6",
|
|
19
|
-
children: [
|
|
20
|
-
/* @__PURE__ */ C(d, {
|
|
21
|
-
direction: "vertical",
|
|
22
|
-
gap: "2",
|
|
23
|
-
children: [/* @__PURE__ */ S(u, { children: /* @__PURE__ */ S(D, { id: "jIPNJG" }) }), /* @__PURE__ */ C(a, {
|
|
24
|
-
alignTerms: "right",
|
|
25
|
-
children: [
|
|
26
|
-
/* @__PURE__ */ S(n, { children: /* @__PURE__ */ S(D, { id: "S0kLOH" }) }),
|
|
27
|
-
/* @__PURE__ */ S(t, { children: e.id }),
|
|
28
|
-
/* @__PURE__ */ S(n, { children: /* @__PURE__ */ S(D, { id: "6YtxFj" }) }),
|
|
29
|
-
/* @__PURE__ */ S(t, { children: e.name }),
|
|
30
|
-
/* @__PURE__ */ S(n, { children: /* @__PURE__ */ S(D, { id: "Nu4oKW" }) }),
|
|
31
|
-
/* @__PURE__ */ S(t, { children: e?.description }),
|
|
32
|
-
/* @__PURE__ */ S(n, { children: /* @__PURE__ */ S(D, { id: "7d1a0d" }) }),
|
|
33
|
-
/* @__PURE__ */ S(t, { children: e["os-flavor-access:is_public"] ? /* @__PURE__ */ S(D, { id: "l75CjT" }) : /* @__PURE__ */ S(D, { id: "1UzENP" }) }),
|
|
34
|
-
/* @__PURE__ */ S(n, { children: /* @__PURE__ */ S(D, { id: "E/QGRL" }) }),
|
|
35
|
-
/* @__PURE__ */ S(t, { children: e["OS-FLV-DISABLED:disabled"] ? /* @__PURE__ */ S(D, { id: "l75CjT" }) : /* @__PURE__ */ S(D, { id: "1UzENP" }) })
|
|
36
|
-
]
|
|
37
|
-
})]
|
|
38
|
-
}),
|
|
39
|
-
/* @__PURE__ */ C(d, {
|
|
40
|
-
direction: "vertical",
|
|
41
|
-
gap: "2",
|
|
42
|
-
children: [/* @__PURE__ */ S(u, { children: /* @__PURE__ */ S(D, { id: "qQ1QBh" }) }), /* @__PURE__ */ C(a, {
|
|
43
|
-
alignTerms: "right",
|
|
44
|
-
children: [
|
|
45
|
-
/* @__PURE__ */ S(n, { children: /* @__PURE__ */ S(D, { id: "MZGbkp" }) }),
|
|
46
|
-
/* @__PURE__ */ S(t, { children: e.vcpus }),
|
|
47
|
-
/* @__PURE__ */ S(n, { children: /* @__PURE__ */ S(D, { id: "RGhYAo" }) }),
|
|
48
|
-
/* @__PURE__ */ S(t, { children: r(e.ram, "MiB") }),
|
|
49
|
-
/* @__PURE__ */ S(n, { children: /* @__PURE__ */ S(D, { id: "sPFHpI" }) }),
|
|
50
|
-
/* @__PURE__ */ S(t, { children: r(e.disk, "GiB") }),
|
|
51
|
-
/* @__PURE__ */ S(n, { children: /* @__PURE__ */ S(D, { id: "r9Aac8" }) }),
|
|
52
|
-
/* @__PURE__ */ S(t, { children: r(e["OS-FLV-EXT-DATA:ephemeral"] || 0, "GiB") }),
|
|
53
|
-
/* @__PURE__ */ S(n, { children: /* @__PURE__ */ S(D, { id: "vH2C/2" }) }),
|
|
54
|
-
/* @__PURE__ */ S(t, { children: e.swap === 0 || e.swap === "" ? /* @__PURE__ */ S(D, { id: "EdQY6l" }) : r(Number(e.swap), "MiB") }),
|
|
55
|
-
/* @__PURE__ */ S(n, { children: /* @__PURE__ */ S(D, { id: "u5HztT" }) }),
|
|
56
|
-
/* @__PURE__ */ S(t, { children: e.rxtx_factor })
|
|
57
|
-
]
|
|
58
|
-
})]
|
|
59
|
-
}),
|
|
60
|
-
e.extra_specs && Object.keys(e.extra_specs).length > 0 && /* @__PURE__ */ C(d, {
|
|
61
|
-
direction: "vertical",
|
|
62
|
-
gap: "2",
|
|
63
|
-
children: [/* @__PURE__ */ S(u, { children: /* @__PURE__ */ S(D, { id: "DKkOPx" }) }), /* @__PURE__ */ S(a, {
|
|
64
|
-
alignTerms: "right",
|
|
65
|
-
children: Object.entries(e.extra_specs).map(([e, r]) => /* @__PURE__ */ C(w.Fragment, { children: [/* @__PURE__ */ S(n, { children: e }), /* @__PURE__ */ S(t, { children: r })] }, e))
|
|
66
|
-
})]
|
|
67
|
-
})
|
|
68
|
-
]
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
//#endregion
|
|
72
|
-
//#region src/client/routes/_auth/projects/$projectId/compute/flavors/$flavorId.tsx?tsr-split=component
|
|
73
|
-
function A() {
|
|
74
|
-
let { projectId: t, flavorId: n } = E({ from: "/_auth/projects/$projectId/compute/flavors/$flavorId" }), { trpcClient: a } = m.useRouteContext(), u = T(), { i18n: w, _: A } = O(), { translateError: j, isRetryableError: M } = h(), { data: N, status: P, error: F, refetch: I } = f.compute.getFlavorById.useQuery({
|
|
75
|
-
project_id: t,
|
|
76
|
-
flavorId: n
|
|
77
|
-
}), { data: L } = f.compute.canUser.useQuery({
|
|
78
|
-
project_id: t,
|
|
79
|
-
permission: [
|
|
80
|
-
"flavors:delete",
|
|
81
|
-
"flavors:list_projects",
|
|
82
|
-
"flavor_specs:create",
|
|
83
|
-
"flavor_specs:delete"
|
|
84
|
-
]
|
|
85
|
-
}), R = L?.[0] ?? !1, z = L?.[1] ?? !1, B = (L?.[2] ?? !1) || (L?.[3] ?? !1), [V, H] = y(), [U, W] = y(), [G, K] = y(), q = () => {
|
|
86
|
-
u({
|
|
87
|
-
to: "/projects/$projectId/compute/flavors",
|
|
88
|
-
params: { projectId: t }
|
|
89
|
-
});
|
|
90
|
-
}, J = () => {
|
|
91
|
-
u({
|
|
92
|
-
to: "/projects/$projectId",
|
|
93
|
-
params: { projectId: t }
|
|
94
|
-
});
|
|
95
|
-
}, Y = () => {
|
|
96
|
-
I();
|
|
97
|
-
};
|
|
98
|
-
if (P === "pending") return /* @__PURE__ */ C(d, {
|
|
99
|
-
className: "fixed inset-0",
|
|
100
|
-
distribution: "center",
|
|
101
|
-
alignment: "center",
|
|
102
|
-
direction: "vertical",
|
|
103
|
-
children: [/* @__PURE__ */ S(r, {
|
|
104
|
-
variant: "primary",
|
|
105
|
-
size: "large",
|
|
106
|
-
className: "mb-2"
|
|
107
|
-
}), /* @__PURE__ */ S(D, { id: "YNgcgc" })]
|
|
108
|
-
});
|
|
109
|
-
if (P === "error") {
|
|
110
|
-
let e = F?.message || "UNKNOWN_ERROR", t = j(e), n = M(e);
|
|
111
|
-
return /* @__PURE__ */ S(p, {
|
|
112
|
-
message: t,
|
|
113
|
-
statusCode: ((e) => {
|
|
114
|
-
if (e.includes("UNAUTHORIZED")) return 401;
|
|
115
|
-
if (e.includes("FORBIDDEN")) return 403;
|
|
116
|
-
if (e.includes("NOT_FOUND")) return 404;
|
|
117
|
-
if (e.includes("SERVER_ERROR")) return 500;
|
|
118
|
-
})(e),
|
|
119
|
-
title: w._({ id: "FjONW3" }),
|
|
120
|
-
onBackClick: q,
|
|
121
|
-
onHomeClick: J,
|
|
122
|
-
reset: n ? Y : void 0
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
if (!N) return /* @__PURE__ */ S(p, {
|
|
126
|
-
message: w._({ id: "y0u86k" }),
|
|
127
|
-
statusCode: 404,
|
|
128
|
-
title: w._({ id: "bpme7e" }),
|
|
129
|
-
onBackClick: q,
|
|
130
|
-
onHomeClick: J
|
|
131
|
-
});
|
|
132
|
-
let X = z || R, Z = X || B ? /* @__PURE__ */ C(l, { children: [X && /* @__PURE__ */ C(c, { children: [/* @__PURE__ */ S(i, {
|
|
133
|
-
as: "div",
|
|
134
|
-
children: /* @__PURE__ */ S(s, {
|
|
135
|
-
icon: "moreVert",
|
|
136
|
-
children: /* @__PURE__ */ S(D, { id: "PgNNGl" })
|
|
137
|
-
})
|
|
138
|
-
}), /* @__PURE__ */ C(e, { children: [z && /* @__PURE__ */ S(o, {
|
|
139
|
-
label: w._({ id: "cWbW6w" }),
|
|
140
|
-
onClick: W
|
|
141
|
-
}), R && /* @__PURE__ */ S(o, {
|
|
142
|
-
label: w._({ id: "JT3I1g" }),
|
|
143
|
-
onClick: K
|
|
144
|
-
})] })] }), B && /* @__PURE__ */ S(s, {
|
|
145
|
-
onClick: H,
|
|
146
|
-
variant: "primary",
|
|
147
|
-
children: /* @__PURE__ */ S(D, { id: "6GBt0m" })
|
|
148
|
-
})] }) : void 0;
|
|
149
|
-
return /* @__PURE__ */ C(x, { children: [
|
|
150
|
-
/* @__PURE__ */ S(b, {
|
|
151
|
-
title: N.name,
|
|
152
|
-
projectId: t,
|
|
153
|
-
actions: Z
|
|
154
|
-
}),
|
|
155
|
-
/* @__PURE__ */ S(d, {
|
|
156
|
-
direction: "vertical",
|
|
157
|
-
children: /* @__PURE__ */ S(k, { flavor: N })
|
|
158
|
-
}),
|
|
159
|
-
a && /* @__PURE__ */ C(x, { children: [
|
|
160
|
-
V && /* @__PURE__ */ S(_, {
|
|
161
|
-
client: a,
|
|
162
|
-
isOpen: V,
|
|
163
|
-
onClose: H,
|
|
164
|
-
project: t,
|
|
165
|
-
flavor: N
|
|
166
|
-
}),
|
|
167
|
-
U && /* @__PURE__ */ S(g, {
|
|
168
|
-
client: a,
|
|
169
|
-
isOpen: U,
|
|
170
|
-
onClose: W,
|
|
171
|
-
project: t,
|
|
172
|
-
flavor: N
|
|
173
|
-
}),
|
|
174
|
-
G && /* @__PURE__ */ S(v, {
|
|
175
|
-
client: a,
|
|
176
|
-
isOpen: G,
|
|
177
|
-
onClose: K,
|
|
178
|
-
project: t,
|
|
179
|
-
flavor: N,
|
|
180
|
-
onSuccess: q
|
|
181
|
-
})
|
|
182
|
-
] })
|
|
183
|
-
] });
|
|
184
|
-
}
|
|
185
|
-
//#endregion
|
|
186
|
-
export { A as component };
|
|
187
|
-
|
|
188
|
-
//# sourceMappingURL=_flavorId-BRonXvCo.mjs.map
|