""" Subscription Selection Frame UI component for selecting an Azure subscription. """ import customtkinter as ctk from typing import List, Dict, Callable, Optional from ui.components import UnifiedDropdown class SubscriptionSelectionFrame(ctk.CTkFrame): """Frame for subscription selection.""" def __init__(self, parent, on_subscription_selected: Callable = None): """ Initialize the subscription selection frame. Args: parent: Parent widget on_subscription_selected: Callback function when a subscription is selected """ super().__init__(parent) self.on_subscription_selected = on_subscription_selected # Configure frame self.configure(corner_radius=10, border_width=2) # Create unified dropdown self.dropdown = UnifiedDropdown( self, title="Subscription Selection", on_selection_changed=self._on_subscription_selected, show_count=True, display_key='name', max_dropdown_height=300 ) self.dropdown.grid(row=0, column=0, sticky="ew") self.dropdown.set_placeholder("Please connect to Azure first") # Configure grid self.grid_columnconfigure(0, weight=1) def set_subscriptions(self, subscriptions: List[Dict[str, str]]): """ Set the list of subscriptions. Args: subscriptions: List of subscription dictionaries with 'id' and 'name' """ self.dropdown.set_items(subscriptions) def _on_subscription_selected(self, subscription: Dict): """ Handle subscription selection. Args: subscription: The selected subscription dictionary """ if self.on_subscription_selected: self.on_subscription_selected(subscription) def get_selected_subscription(self) -> Optional[Dict[str, str]]: """ Get the currently selected subscription. Returns: Dict: Selected subscription or None """ return self.dropdown.get_selected() def set_enabled(self, enabled: bool): """ Enable or disable the frame. Args: enabled: Whether to enable the frame """ self.dropdown.set_enabled(enabled) def set_loading(self, loading: bool): """ Set loading state. Args: loading: Whether currently loading """ self.dropdown.set_loading(loading)