from langflow.custom import Component from langflow.field_typing.range_spec import RangeSpec from langflow.inputs.inputs import DataInput, IntInput from langflow.io import Output from langflow.schema import Data class SelectDataComponent(Component): display_name: str = "Select Data" description: str = "Select a single data from a list of data." name: str = "SelectData" icon = "prototypes" legacy = True inputs = [ DataInput( name="data_list", display_name="Data List", info="List of data to select from.", is_list=True, # Specify that this input takes a list of Data objects ), IntInput( name="data_index", display_name="Data Index", info="Index of the data to select.", value=0, # Will be populated dynamically based on the length of data_list range_spec=RangeSpec(min=0, max=15, step=1, step_type="int"), ), ] outputs = [ Output(display_name="Selected Data", name="selected_data", method="select_data"), ] async def select_data(self) -> Data: # Retrieve the selected index from the dropdown selected_index = int(self.data_index) # Get the data list # Validate that the selected index is within bounds if selected_index < 0 or selected_index >= len(self.data_list): msg = f"Selected index {selected_index} is out of range." raise ValueError(msg) # Return the selected Data object selected_data = self.data_list[selected_index] self.status = selected_data # Update the component status to reflect the selected data return selected_data