Commit 79660235 authored by Duggan, John's avatar Duggan, John
Browse files

Fix bindings not updating DataSelector properly

parent c7ec135a
Loading
Loading
Loading
Loading
Loading
+43 −22
Original line number Diff line number Diff line
@@ -101,9 +101,13 @@ class DataSelector(datagrid.VGrid):
            self._v_model_name_in_state = v_model.split(".")[0]
        else:
            self._v_model_name_in_state = v_model[0].split(".")[0]

        self._directory = directory
        self._last_directory = self._directory
        self._extensions = extensions if extensions is not None else []
        self._last_extensions = self._extensions
        self._prefix = prefix
        self._last_prefix = self._prefix
        self._refresh_rate = refresh_rate
        self._select_strategy = select_strategy

@@ -267,8 +271,11 @@ class DataSelector(datagrid.VGrid):

        if isinstance(self._directory, tuple):

            @self.state.change(self._directory[0])
            def on_directory_change(*args: Any, **kwargs: Any) -> None:
            @self.state.change(self._directory[0].split(".")[0])
            def on_directory_change(**kwargs: Any) -> None:
                directory = rgetdictvalue(kwargs, self._directory[0])
                if directory != self._last_directory:
                    self._last_directory = directory
                    self._vm.set_binding_parameters(
                        get_state_param(self.state, self._directory),
                        get_state_param(self.state, self._extensions),
@@ -277,8 +284,11 @@ class DataSelector(datagrid.VGrid):

        if isinstance(self._extensions, tuple):

            @self.state.change(self._extensions[0])
            def on_extensions_change(*args: Any, **kwargs: Any) -> None:
            @self.state.change(self._extensions[0].split(".")[0])
            def on_extensions_change(**kwargs: Any) -> None:
                extensions = rgetdictvalue(kwargs, self._extensions[0])
                if extensions != self._last_extensions:
                    self._last_extensions = extensions
                    self._vm.set_binding_parameters(
                        get_state_param(self.state, self._directory),
                        get_state_param(self.state, self._extensions),
@@ -287,8 +297,11 @@ class DataSelector(datagrid.VGrid):

        if isinstance(self._prefix, tuple):

            @self.state.change(self._prefix[0])
            def on_prefix_change(*args: Any, **kwargs: Any) -> None:
            @self.state.change(self._prefix[0].split(".")[0])
            def on_prefix_change(**kwargs: Any) -> None:
                prefix = rgetdictvalue(kwargs, self._prefix)
                if prefix != self._last_prefix:
                    self._last_prefix = prefix
                    self._vm.set_binding_parameters(
                        get_state_param(self.state, self._directory),
                        get_state_param(self.state, self._extensions),
@@ -297,12 +310,20 @@ class DataSelector(datagrid.VGrid):

    async def _refresh_loop(self) -> None:
        refresh_rate: int = set_state_param(self.state, self._refresh_rate)
        skip = False

        if refresh_rate > 0:
            while True:
                await sleep(refresh_rate)
                if skip:
                    continue

                self.refresh_contents()
                self.state.dirty(self._datafiles_name)

                refresh_rate = get_state_param(self.state, self._refresh_rate)
                try:
                    refresh_rate = int(get_state_param(self.state, self._refresh_rate))
                    skip = False
                except TypeError:
                    refresh_rate = 1
                    skip = True
+2 −1
Original line number Diff line number Diff line
@@ -8,7 +8,8 @@ from pydantic import BaseModel, Field
class DataSelectorBindingTest(BaseModel):
    """Model for testing binding parameters for DataSelector."""

    prefix: str = Field(default="")
    directory: str = Field(default="")
    refresh_rate: int = Field(default=0)


class DataSelectorState(BaseModel):
+1 −2
Original line number Diff line number Diff line
@@ -17,8 +17,7 @@ class DataSelectorVM:
        self.parameter_bind = binding.new_bind(self.binding_test, callback_after_update=self.on_parameter_update)

    def on_update(self, data: Dict[str, Any]) -> None:
        print("selected files:", self.model.selected_files)
        print("selected neutron datafiles:", self.model.selected_neutron_files)
        print(data, self.model)

    def on_parameter_update(self, data: Dict[str, Any]) -> None:
        print(data, self.binding_test)
+6 −4
Original line number Diff line number Diff line
@@ -343,20 +343,22 @@ class App(ThemedApp):
                                vuetify.VBtn("Tooltip", v_bind="props")

                    vuetify.VCardTitle("Navigation Components")
                    with GridLayout(classes="mb-4", columns=1, halign="center", valign="center"):
                    with GridLayout(classes="mb-4", columns=1, valign="center"):
                        with vuetify.VTabs():
                            vuetify.VTab("Tab 1")
                            vuetify.VTab("Tab 2")
                            vuetify.VTab("Tab 3")

                    vuetify.VCardTitle("Data Selection Widgets")
                    with GridLayout(classes="mb-1", columns=2, valign="center", width=600):
                        InputField(v_model="ds_params.directory")
                        InputField(v_model="ds_params.refresh_rate")
                    with html.Div(classes="border-md text-left", style="height: 650px; width: 600px;"):
                        DataSelector(
                            v_model="data_selector.selected_files",
                            chips=True,
                            directory="/",
                            prefix=("ds_params.prefix",),
                            refresh_rate=0,
                            directory=("ds_params.directory", "/"),
                            refresh_rate=("ds_params.refresh_rate", 15),
                        )
                    with html.Div(classes="border-md text-left", style="height: 650px; width: 600px;"):
                        pass