feat: Implement delete VM action in list view actions popover

This commit is contained in:
2025-04-01 13:57:56 +10:30
parent ad97c1bcad
commit cfb479a180
+47 -10
View File
@@ -206,11 +206,43 @@ def render_list():
with col2:
st.text(f"ID: {VirtualMachine['id']}")
with col3:
if st.button("View Details", key=f"view_{VirtualMachine['id']}"):
st.session_state.selected_resource = VirtualMachine
st.session_state.view_type = 'detail'
st.session_state.selected_resource_type = 'VirtualMachine'
st.rerun()
# Initialize confirmation state for this VM if not already present
confirm_key = f"confirm_delete_{VirtualMachine['id']}"
if confirm_key not in st.session_state:
st.session_state[confirm_key] = False
with st.popover("Actions", use_container_width=True):
# View Details Button
if st.button("View Details", key=f"popover_view_{VirtualMachine['id']}", use_container_width=True):
st.session_state.selected_resource = VirtualMachine
st.session_state.view_type = 'detail'
st.session_state.selected_resource_type = 'VirtualMachine' # Ensure correct type
st.rerun()
st.markdown("---") # Separator
# Delete Button / Confirmation
if st.session_state[confirm_key]:
st.warning("Are you sure?")
col_confirm, col_cancel = st.columns(2)
with col_confirm:
if st.button("Confirm Delete", key=f"popover_confirm_delete_{VirtualMachine['id']}", use_container_width=True):
result = st.session_state.client.delete_virtual_machine(VirtualMachine['id'])
if result:
st.success(f"VM {VirtualMachine['name']} deleted.")
else:
st.error(f"Failed to delete VM {VirtualMachine['name']}.")
st.session_state[confirm_key] = False # Reset confirmation state
st.rerun()
with col_cancel:
if st.button("Cancel", key=f"popover_cancel_delete_{VirtualMachine['id']}", use_container_width=True):
st.session_state[confirm_key] = False # Reset confirmation state
st.rerun()
else:
if st.button("Delete VM", key=f"popover_delete_{VirtualMachine['id']}", type="primary", use_container_width=True):
st.session_state[confirm_key] = True # Set confirmation state
st.rerun()
else:
st.info("No VirtualMachine workloads found.")
@@ -260,12 +292,17 @@ def render_detail():
})
if result:
st.success("VM workload updated successfully!")
st.session_state.selected_resource = vm
st.session_state.view_type = 'detail'
st.session_state.selected_resource_type = 'VirtualMachine'
# Re-fetch the updated VM data to ensure consistency
updated_vm = st.session_state.client.get_virtual_machine(VirtualMachine['id'])
if updated_vm:
st.session_state.selected_resource = updated_vm
else: # Handle case where VM might not be found after update (unlikely but possible)
st.session_state.selected_resource = None
st.session_state.view_type = 'list' # Go back to list if VM disappears
st.session_state.selected_resource_type = 'virtual_machine' # Corrected resource type
st.rerun()
# Delete VM Workload Button
# Delete VM Workload Button (Now redundant with popover action, consider removing)
if st.button("Delete VM Workload"):
result = st.session_state.client.delete_virtual_machine(VirtualMachine['id'])
if result:
@@ -282,4 +319,4 @@ def render_detail():
if st.session_state.view_type == 'detail' and st.session_state.selected_resource_type=='VirtualMachine':
render_detail()
else:
render_list()
render_list()