neomjs / neo

The application worker driven frontend framework
https://neomjs.com
MIT License
2.87k stars 163 forks source link

selection/RowModel.mjs onRowClick: additionally respond according to key-press properties #5102

Open gplanansky opened 10 months ago

gplanansky commented 10 months ago

proposed feature enhancement: Current selection/RowModel.mjs onClick fires select or deselect for all clicks, that is both simple clicks and and keypress click combos.

This feature enhancement provides for additional distinct actions, for clicks with alt, ctrl, meta and shift key presses, by firing 'altSelect', 'ctrlSelect', 'metaSelect' and 'shiftSelect' signals.

Motivation: the immediate motivation is to trigger a dialog to edit table row values,

proposed code

src/selection/RowModel.mjs line 121 ff

onRowClick(data) {
    let me   = this,
        node = RowModel.getRowNode(data.path),
        id   = node?.id,
        view = me.view,
        isSelected, record;

    if (! id) { return };

    record = view.store.getAt(VDomUtil.findVdomChild(view.vdom, id).index);

    if (data.altKey) {
        view.fire('altSelect', {data, record})
    } else if (data.ctrlKey ) {
        view.fire('ctrlSelect', {data, record})
    } else if (data.metaKey ) {
        view.fire('metaSelect', {data, record})
    } else if (data.shiftKey ) {
        view.fire('shiftSelect', {data, record})
    } else {
        me.toggleSelection(id);
        isSelected = me.isSelected(id);

        !isSelected && view.onDeselect?.(record);

        view.fire(isSelected ? 'select' : 'deselect', {
            record
        });
    }
}

comment It is potentially useful to include both the click event data, and the record, in the fire signal payloads. However to avoid breaking things the above code does not change the payload of the original select and deselect signals.

github-actions[bot] commented 1 month ago

This issue is stale because it has been open for 90 days with no activity.

gplanansky commented 1 month ago

I still need this. Almost a year old.