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

Use RevoGrid to select datafiles

parent 2025b0ac
Loading
Loading
Loading
Loading
Loading
+17 −1
Original line number Diff line number Diff line
@@ -1558,6 +1558,22 @@ pyspark = ["pyspark (>=3.5.0)"]
pyspark-connect = ["pyspark[connect] (>=3.5.0)"]
sqlframe = ["sqlframe (>=3.22.0)"]

[[package]]
name = "natsort"
version = "8.4.0"
description = "Simple yet flexible natural sorting in Python."
optional = false
python-versions = ">=3.7"
groups = ["main"]
files = [
    {file = "natsort-8.4.0-py3-none-any.whl", hash = "sha256:4732914fb471f56b5cce04d7bae6f164a592c7712e1c85f9ef585e197299521c"},
    {file = "natsort-8.4.0.tar.gz", hash = "sha256:45312c4a0e5507593da193dedd04abb1469253b601ecaf63445ad80f0a1ea581"},
]

[package.extras]
fast = ["fastnumbers (>=2.0.0)"]
icu = ["PyICU (>=1.0.0)"]

[[package]]
name = "nodeenv"
version = "1.9.1"
@@ -3382,4 +3398,4 @@ propcache = ">=0.2.1"
[metadata]
lock-version = "2.1"
python-versions = ">=3.10,<4.0"
content-hash = "928d2f9b4435bebdc59a8b590ec2afb95379253c8b28d9ba5f5bad75b4fb0f3d"
content-hash = "91e8e1d24d36005c14cd33cb029fdb422626ec28ab50005ff22ca07f642ae839"
+2 −1
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@ Changelog = "https://code.ornl.gov/ndip/public-packages/nova-trame/blob/main/CHA

[tool.poetry]
name = "nova-trame"
version = "0.20.1"
version = "0.20.2"
description = "A Python Package for injecting curated themes and custom components into Trame applications"
authors = ["Duggan, John <dugganjw@ornl.gov>"]
readme = "README.md"
@@ -30,6 +30,7 @@ nova-mvvm = "*"
pydantic = "*"
nova-common = ">=0.2.0"
blinker = "^1.9.0"
natsort = "^8.4.0"

[build-system]
requires = ["poetry-core"]
+7 −6
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@ from pathlib import Path
from typing import Any, List, Optional
from warnings import warn

from natsort import natsorted
from pydantic import BaseModel, Field, field_validator, model_validator
from typing_extensions import Self

@@ -116,13 +117,13 @@ class DataSelectorModel:
        self.state.show_user_directories = show_user_directories

    def get_facilities(self) -> List[str]:
        return sorted(self.state.get_facilities())
        return natsorted(self.state.get_facilities())

    def get_instrument_dir(self) -> str:
        return INSTRUMENTS.get(self.state.facility, {}).get(self.state.instrument, "")

    def get_instruments(self) -> List[str]:
        return sorted(self.state.get_instruments())
        return natsorted(self.state.get_instruments())

    def get_experiments(self) -> List[str]:
        experiments = []
@@ -135,11 +136,11 @@ class DataSelectorModel:
        except OSError:
            pass

        return sorted(experiments)
        return natsorted(experiments)

    def sort_directories(self, directories: List[Any]) -> List[Any]:
        # Sort the current level of dictionaries
        sorted_dirs = sorted(directories, key=lambda x: x["title"])
        sorted_dirs = natsorted(directories, key=lambda x: x["title"])

        # Process each sorted item to sort their children
        for item in sorted_dirs:
@@ -158,7 +159,7 @@ class DataSelectorModel:
        if not self.state.user_directory:
            return None

        return Path("/SNS/users") / self.state.user_directory
        return Path("/SNS/users") / self.state.user_directory / "nova"

    def get_directories(self) -> List[str]:
        if self.state.facility == "User Directory":
@@ -224,7 +225,7 @@ class DataSelectorModel:
        except OSError:
            pass

        return sorted(datafiles)
        return natsorted(datafiles)

    def set_directory(self, directory_path: str) -> None:
        self.state.directory = directory_path
+18 −10
Original line number Diff line number Diff line
@@ -4,7 +4,7 @@ from typing import Any, List, Optional, cast
from warnings import warn

from trame.app import get_server
from trame.widgets import client, html
from trame.widgets import client, datagrid, html
from trame.widgets import vuetify3 as vuetify

from nova.mvvm.trame_binding import TrameBinding
@@ -17,7 +17,7 @@ from .input_field import InputField
vuetify.enable_lab()


class DataSelector(vuetify.VDataTableVirtual):
class DataSelector(datagrid.VGrid):
    """Allows the user to select datafiles from an IPTS experiment."""

    def __init__(
@@ -137,18 +137,26 @@ class DataSelector(vuetify.VDataTableVirtual):

                super().__init__(
                    v_model=self._v_model,
                    classes="h-100 overflow-y-auto",
                    fixed_header=True,
                    headers=("[{ align: 'left', key: 'title', title: 'Available Datafiles' }]",),
                    item_title="title",
                    item_value="path",
                    select_strategy=self._select_strategy,
                    show_select=True,
                    can_focus=False,
                    columns=(
                        "[{"
                        "    cellTemplate: (createElement, props) => window.rvCellTemplate(createElement, props),"
                        "    columnTemplate: (createElement, props) => window.rvColumnTemplate(createElement, props),"
                        f"   datafiles_key: '{self._datafiles_name}',"
                        f"   model_key: '{self._v_model}',"
                        "    name: 'Available Datafiles',"
                        "    prop: 'title'"
                        "}]",
                    ),
                    hide_attribution=True,
                    readonly=True,
                    stretch=True,
                    source=(self._datafiles_name,),
                    theme="compact",
                    **kwargs,
                )
                if self._label:
                    self.label = self._label
                self.items = (self._datafiles_name,)
                if "update_modelValue" not in kwargs:
                    self.update_modelValue = self._flush_state

+23 −0
Original line number Diff line number Diff line
@@ -16,6 +16,29 @@ html {
    display: none !important;
}

.nova-data-selector revo-grid {
    font-size: 0.75rem !important;
    overflow-x: hidden;

    .header-content, .rgCell label {
        align-items: center;
        display: flex;

        input {
            cursor: pointer;
            margin-right: 0.25em;
        }
    }

    .header-content {
        height: 40px;
    }

    .inner-content-table {
        width: 100% !important;
    }
}

.nova-mpl * {
    resize: none !important;
}
Loading