Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
Clear All
new posts

    SelectItem: row removed after sorting by DisplaynField and updateData.

    Hi isomorphic,

    I have a SelectItem with multiple rows. I noticed that a row is removed after sorting by the DisplayField and some updateData call.

    Code levels used:
    SmartClient Version: "v12.1p_2023-10-21/Pro Deployment"

    Here is the code and steps to reproduce it:
    Code:
    Code:
    public class Sandbox1 implements EntryPoint {
    
    private static final String ID = "id";
    
    private static final String VISIBILITY = "visibility";
    
    private static final String NAME = "name";
    
    
    
    
    private static final String ABC_ID = "abc_id";
    
    private static final String LMN_ID = "lmn_id";
    
    private static final String XYZ_ID = "xyz_id";
    
    
    
    
    private static final String ABC_NANE = "abc";
    
    private static final String LMN_NANE = "lmn";
    
    private static final String XYZ_NANE = "xyz";
    
    
    
    
    private static final String ABC_UPDATED_NANE = "abc - updated";
    
    private static final String LMN_UPDATED_NANE = "lmn - updated";
    
    private static final String XYZ_UPDATED_NANE = "xyz - updated";
    
    
    
    
    private ListGridRecord[] cacheData = new ListGridRecord[3];
    
    private DataSource dataSource;
    
    private SelectItem selectList;
    
    
    
    
    @Override
    
    public void onModuleLoad() {
    
    
    
    
    int i = 0;
    
    
    
    
    cacheData[i] = new ListGridRecord();
    
    cacheData[i].setAttribute(ID, ABC_ID);
    
    cacheData[i].setAttribute(NAME, ABC_NANE);
    
    cacheData[i].setAttribute(VISIBILITY, "Me");
    
    i++;
    
    cacheData[i] = new ListGridRecord();
    
    cacheData[i].setAttribute(ID, LMN_ID);
    
    cacheData[i].setAttribute(NAME, LMN_NANE);
    
    cacheData[i].setAttribute(VISIBILITY, "Group");
    
    i++;
    
    cacheData[i] = new ListGridRecord();
    
    cacheData[i].setAttribute(ID, XYZ_ID);
    
    cacheData[i].setAttribute(NAME, XYZ_NANE);
    
    cacheData[i].setAttribute(VISIBILITY, "Everyone");
    
    
    
    
    final VLayout appLayout = new VLayout();
    
    appLayout.setWidth100();
    
    appLayout.setHeight100();
    
    
    
    
    createDataSource();
    
    createSelectList();
    
    loadData();
    
    
    
    
    CheckboxItem updateAbc = new CheckboxItem("update_abc");
    
    updateAbc.addChangedHandler(event -> {
    
    ListGridRecord r = new ListGridRecord();
    
    r.setAttribute(ID, ABC_ID);
    
    r.setAttribute(NAME, ABC_UPDATED_NANE);
    
    r.setAttribute(VISIBILITY, "Me");
    
    dataSource.updateData(r);
    
    });
    
    
    
    
    CheckboxItem updateLmn = new CheckboxItem("update_lmn");
    
    updateLmn.addChangedHandler(event -> {
    
    ListGridRecord r = new ListGridRecord();
    
    r.setAttribute(ID, LMN_ID);
    
    r.setAttribute(NAME, LMN_UPDATED_NANE);
    
    r.setAttribute(VISIBILITY, "Group");
    
    dataSource.updateData(r);
    
    });
    
    
    
    
    CheckboxItem updateXyz = new CheckboxItem("update_xyz");
    
    updateXyz.addChangedHandler(event -> {
    
    ListGridRecord r = new ListGridRecord();
    
    r.setAttribute(ID, XYZ_ID);
    
    r.setAttribute(NAME, XYZ_UPDATED_NANE);
    
    r.setAttribute(VISIBILITY, "Everyone");
    
    dataSource.updateData(r);
    
    });
    
    
    
    
    appLayout.setMargin(5);
    
    appLayout.setMembersMargin(5);
    
    DynamicForm form = new DynamicForm();
    
    form.setItems(selectList, updateAbc, updateLmn, updateXyz);
    
    appLayout.addMembers(form);
    
    appLayout.draw();
    
    }
    
    
    
    
    private void createDataSource() {
    
    dataSource = new DataSource();
    
    DataSourceField filterIdField = new DataSourceField(ID, FieldType.TEXT, "ID");
    
    filterIdField.setPrimaryKey(true);
    
    DataSourceField filterNameField = new DataSourceField(NAME, FieldType.TEXT, "Name");
    
    DataSourceField visibilityField = new DataSourceField(VISIBILITY, FieldType.TEXT, "Visible To");
    
    dataSource.setFields(filterIdField, filterNameField, visibilityField);
    
    dataSource.setClientOnly(true);
    
    }
    
    
    
    
    private void createSelectList() {
    
    selectList = new SelectItem("test");
    
    selectList.setWidth(300);
    
    selectList.setAllowEmptyValue(Boolean.TRUE);
    
    selectList.setEmptyDisplayValue("-- NONE --");
    
    selectList.setEscapeHTML(Boolean.TRUE);
    
    selectList.setOptionDataSource(dataSource);
    
    selectList.setTitle("Test");
    
    
    
    
    selectList.setCachePickListResults(Boolean.FALSE);
    
    ListGridField filterNameField = new ListGridField(NAME);
    
    filterNameField.setShowHover(Boolean.TRUE);
    
    ListGridField visibilityField = new ListGridField(VISIBILITY);
    
    selectList.setPickListFields(filterNameField, visibilityField);
    
    
    
    
    ListGrid pickListProperties = new ListGrid();
    
    pickListProperties.setCanGroupBy(Boolean.FALSE);
    
    selectList.setPickListProperties(pickListProperties);
    
    
    
    
    selectList.setValueField(ID);
    
    selectList.setDisplayField(NAME);
    
    selectList.setSortField(NAME);
    
    selectList.setPrompt("Select Filter to use");
    
    selectList.setShowTitle(Boolean.FALSE);
    
    selectList.setWrapTitle(Boolean.FALSE);
    
    }
    
    
    
    
    public void loadData() {
    
    dataSource.setCacheData(cacheData);
    
    }
    
    }

    Steps:
    1. Expand the SelectItem.
    Click image for larger version

Name:	Screenshot 2024-11-04 160800.png
Views:	31
Size:	13.7 KB
ID:	274033

    2. Sort by Name.
    Click image for larger version

Name:	Screenshot 2024-11-04 161051.png
Views:	21
Size:	7.8 KB
ID:	274034

    3. Select option "xyz".

    4. Click the "update_xyz" button. >>> this will update the "xyz" option to "xyz - updated"

    5. Expand the SelectItem.
    Click image for larger version

Name:	Screenshot 2024-11-04 161328.png
Views:	21
Size:	7.8 KB
ID:	274035

    6. Sort by Name.
    Click image for larger version

Name:	Screenshot 2024-11-04 161417.png
Views:	21
Size:	8.6 KB
ID:	274036

    7. Select option "abc".

    8. Click the "update_abc" button. >>> this will update the abc option to "abc - updated"

    9. Expand the SelectItem.
    Click image for larger version

Name:	Screenshot 2024-11-04 161619.png
Views:	21
Size:	7.9 KB
ID:	274037
    There are duplicate "--NONE--"options and the "xyz - updated" option is removed from the list.

    #2
    Thank you for a the clear test case. We'll take a look and follow up when we have more information for you

    Regards
    Isomorphic Software

    Comment

    Working...
    X