fileStorageUpload for selected row in listView

I want to upload file for the select row in the datagrid within a listView. Is there any way we can set FileStorageUploadField to be like a “list_itemTracking” so that the fileUpload field is activate only when the user has selected a row in the dataGrid?

Greetings,

As i understand you need DataGrid with ItemDetails and there you can place your fileUploadField. We have ui sample for it:

If you need more specific way to edit, probably we can create column renderer and if current row is selected instead of returning text in column renderer we can return something like fileUploadField

Best regards,
Dmitry

Hi
Not item details but I need to update to ListView

Maybe you need solution like this?

2025-04-1812-51-22-ezgif.com-video-to-gif-converter

Code:

@Route(value = "new-entities", layout = MainView.class)
@ViewController(id = "NewEntity.list")
@ViewDescriptor(path = "new-entity-list-view.xml")
@LookupComponent("newEntitiesDataGrid")
@DialogMode(width = "64em")
public class NewEntityListView extends StandardListView<NewEntity> {
    @Autowired
    protected UiComponents uiComponents;
    @ViewComponent
    private DataGrid<NewEntity> newEntitiesDataGrid;

    @Supply(to = "newEntitiesDataGrid.fileField", subject = "renderer")
    private Renderer<NewEntity> newEntitiesDataGridFileFieldRenderer() {
        return new ComponentRenderer<>(e -> {
            NewEntity selected;

            if (newEntitiesDataGrid.getSelectedItems().isEmpty()) {
                selected = null;
            } else {
                selected = newEntitiesDataGrid.getSelectedItems().iterator().next();
            }


            if (e.equals(selected)) {
                var fileUploadField = uiComponents.create(FileStorageUploadField.class);
                fileUploadField.addFileUploadSucceededListener(event -> e.setFile(fileUploadField.getValue()));
                return fileUploadField;
            } else {
                return new Span(e.getFile() == null ? "" : e.getFile().toString());
            }
        });
    }
    // no need
    @Subscribe
    public void onBeforeShow(final BeforeShowEvent event) {
        newEntitiesDataGrid.asSingleSelect().addValueChangeListener(e -> {
            NewEntity oldItem = e.getOldValue();
            NewEntity newItem = e.getValue();
            if (oldItem != null) {
                newEntitiesDataGrid.getDataProvider().refreshItem(oldItem);
            }
            if (newItem != null) {
                newEntitiesDataGrid.getDataProvider().refreshItem(newItem);
            }
        });
    }

    @Subscribe("newEntitiesDataGrid")
    public void onNewEntitiesDataGridSelection(final SelectionEvent<DataGrid<NewEntity>, NewEntity> event) {
        // fireing update event to force refresh single item render
        event.getFirstSelectedItem().ifPresent(entity -> {
            newEntitiesDataGrid.getDataProvider().refreshItem(entity);
        });
    }


}