Unverified Commit f99bce80 authored by Duggan, John's avatar Duggan, John Committed by GitHub
Browse files

Merge pull request #137 from nova-model/data_selector_bugs

Fix NeutronDataSelector state reset
parents 5607ab47 81f66f8f
Loading
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
### nova-trame, 0.25.2

* NeutronDataSelector should now reset its state properly when changing the instrument or experiment (thanks to John Duggan).

### nova-trame, 0.25.1

* ExecutionButtons now supports binding to stop_btn and download_btn parameters (thanks to John Duggan).
+1 −1
Original line number Diff line number Diff line
[project]
name = "nova-trame"
version = "0.25.1"
version = "0.25.2"
description = "A Python Package for injecting curated themes and custom components into Trame applications"
authors = [
    { name = "John Duggan", email = "dugganjw@ornl.gov" },
+1 −0
Original line number Diff line number Diff line
@@ -226,6 +226,7 @@ class DataSelector(datagrid.VGrid):
        self._vm.directories_bind.connect(self._directories_name)
        self._vm.datafiles_bind.connect(self._datafiles_name)
        self._vm.reset_bind.connect(self.reset)
        self._vm.reset_grid_bind.connect(self._reset_rv_grid)

    def refresh_contents(self) -> None:
        self._vm.update_view(refresh_directories=True)
+10 −1
Original line number Diff line number Diff line
@@ -154,6 +154,7 @@ class NeutronDataSelector(DataSelector):
        self._vm.directories_bind.connect(self._directories_name)
        self._vm.datafiles_bind.connect(self._datafiles_name)
        self._vm.reset_bind.connect(self.reset)
        self._vm.reset_grid_bind.connect(self._reset_rv_grid)

        self._vm.update_view()

@@ -207,8 +208,12 @@ class NeutronDataSelector(DataSelector):
            @self.state.change(self._experiment[0].split(".")[0])
            def on_experiment_change(**kwargs: Any) -> None:
                experiment = rgetdictvalue(kwargs, self._experiment[0])
                if experiment != self._last_experiment:
                if experiment and experiment != self._last_experiment:
                    self._last_experiment = experiment
                    # See the note in the update_experiment method for why we call this twice.
                    self._vm.set_binding_parameters(
                        experiment=set_state_param(self.state, (self._selected_experiment_name,), ""),
                    )
                    self._vm.set_binding_parameters(
                        experiment=set_state_param(self.state, (self._selected_experiment_name,), experiment)
                    )
@@ -244,6 +249,10 @@ class NeutronDataSelector(DataSelector):
        self._vm.reset()

    def update_experiment(self, experiment: str) -> None:
        # Setting the experiment to an empty string forces the treeview to clear it's selection state.
        self._vm.set_binding_parameters(
            experiment=set_state_param(self.state, (self._selected_experiment_name,), ""),
        )
        self._vm.set_binding_parameters(
            experiment=set_state_param(self.state, (self._selected_experiment_name,), experiment),
        )
+24 −8
Original line number Diff line number Diff line
@@ -12,6 +12,11 @@ class RevoGrid {
    }

    updateCheckboxes() {
        // Wait for the DOM to update after the Trame state is updated.
        setTimeout(this._updateCheckboxes.bind(this), 10)
    }

    _updateCheckboxes() {
        const trameState = window.trame.state.state
        const modelValue = _.get(trameState, this.modelKey)
        const availableData = _.get(trameState, this.dataKey)
@@ -22,23 +27,34 @@ class RevoGrid {
            return
        }

        let allSelected = null
        rowCheckboxes.forEach((element) => {
            const input = element.querySelector('input')

            const rowIndex = element.dataset.rgrow
            if (availableData[rowIndex] !== undefined) {
                input.checked = modelValue.includes(availableData[rowIndex].path)
            } else {
                input.checked = false
            }

            if (allSelected === null && input.checked) {
                allSelected = true
            } else if (!input.checked) {
                allSelected = false
            }
        })

        if (modelValue.length === 0) {
            selectAllCheckbox.checked = false
            selectAllCheckbox.indeterminate = false
        } else if (modelValue.length === availableData.length) {
        } else if (allSelected === true) {
            selectAllCheckbox.checked = true
            selectAllCheckbox.indeterminate = false
        } else {
            selectAllCheckbox.checked = false
            selectAllCheckbox.indeterminate = true
        }

        rowCheckboxes.forEach((element) => {
            const input = element.querySelector('input')

            const rowIndex = element.dataset.rgrow
            input.checked = modelValue.includes(availableData[rowIndex].path)
        })
    }

    cellTemplate(createElement, props) {
Loading