Commit 8dd04abe authored by Duggan, John's avatar Duggan, John
Browse files

Use the refresh_file_list method on a timer and in a button

parent 30211a89
Loading
Loading
Loading
Loading
Loading
+37 −20
Original line number Diff line number Diff line
"""View Implementation for DataSelector."""

from asyncio import ensure_future, sleep
from typing import Any, List, Optional, cast
from warnings import warn

@@ -9,7 +10,7 @@ from trame.widgets import vuetify3 as vuetify

from nova.mvvm.trame_binding import TrameBinding
from nova.trame.model.data_selector import CUSTOM_DIRECTORIES_LABEL, DataSelectorModel
from nova.trame.view.layouts import GridLayout, VBoxLayout
from nova.trame.view.layouts import GridLayout, HBoxLayout, VBoxLayout
from nova.trame.view_model.data_selector import DataSelectorViewModel

from .input_field import InputField
@@ -20,6 +21,8 @@ vuetify.enable_lab()
class DataSelector(datagrid.VGrid):
    """Allows the user to select datafiles from an IPTS experiment."""

    REFRESH_RATE = 30

    def __init__(
        self,
        v_model: str,
@@ -98,9 +101,12 @@ class DataSelector(datagrid.VGrid):

        self.create_ui(facility, instrument, **kwargs)

        ensure_future(self._refresh_loop())

    def create_ui(self, facility: str, instrument: str, **kwargs: Any) -> None:
        with VBoxLayout(classes="nova-data-selector", height="100%"):
            with GridLayout(columns=3):
            with HBoxLayout(valign="center"):
                with GridLayout(classes="flex-1-1", columns=3):
                    columns = 3
                    if facility == "":
                        columns -= 1
@@ -123,6 +129,11 @@ class DataSelector(datagrid.VGrid):
                        type="autocomplete",
                    )
                    InputField(v_else=True, v_model=f"{self._state_name}.custom_directory", column_span=2)
                with vuetify.VBtn(
                    classes="mx-1", density="compact", icon=True, variant="text", click=self.refresh_file_list
                ):
                    vuetify.VIcon("mdi-refresh")
                    vuetify.VTooltip("Refresh file list", activator="parent")

            with GridLayout(columns=2, classes="flex-1-0 h-0", valign="start"):
                if not self._prefix:
@@ -248,3 +259,9 @@ class DataSelector(datagrid.VGrid):
        None
        """
        self._vm.set_state(facility, instrument, experiment)

    async def _refresh_loop(self) -> None:
        while True:
            await sleep(self.REFRESH_RATE)
            self.refresh_file_list()
            self.state.dirty(self._datafiles_name)