From 1dc387e350c6437f968b2400107101021b25d1f0 Mon Sep 17 00:00:00 2001 From: Yash Raj Singh Date: Wed, 16 Apr 2025 19:02:48 +0200 Subject: [PATCH 1/8] added some misc dependencies --- Project.toml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Project.toml b/Project.toml index 8e4ca8e..b31dd59 100644 --- a/Project.toml +++ b/Project.toml @@ -4,8 +4,10 @@ authors = ["Benjamin Lungwitz and contributors"] version = "0.1.2" [deps] +CSV = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" HypertextLiteral = "ac1192a8-f4b3-4bfe-ba22-af5b92cd3ab2" +Revise = "295af30f-e4ad-537b-8983-00126c2a3abe" Tables = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" [compat] From aaaee5ea3c50ce5f3996fe6427ffd5507d18d672 Mon Sep 17 00:00:00 2001 From: Yash Raj Singh Date: Wed, 16 Apr 2025 19:03:05 +0200 Subject: [PATCH 2/8] Update PlutoGrid.jl selection functionality --- src/PlutoGrid.jl | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/src/PlutoGrid.jl b/src/PlutoGrid.jl index ac6c868..6951ce4 100644 --- a/src/PlutoGrid.jl +++ b/src/PlutoGrid.jl @@ -29,10 +29,10 @@ Shows a non-editable table in Pluto. `height`: vertical size of the table in Pluto in pixel (default: 600) """ -function readonly_table(df:: DataFrame; filterable:: Bool=true, kwargs...) +function readonly_table(df:: DataFrame; filterable:: Bool=true, selectable_rows::Bool = false, kwargs...) column_defs = _make_col_defs(df; filterable) data = _prepare_data(df) - return _create_table(column_defs, data; filterable, kwargs...) + return _create_table(column_defs, data; filterable, selectable_rows, kwargs...) end readonly_table(df; kwargs...) = readonly_table(DataFrame(df); kwargs...) @@ -57,10 +57,10 @@ Shows an editable table in Pluto. In case of user edits in the table, `height`: vertical size of the table in Pluto in pixel (default: 600) """ -function editable_table(df:: DataFrame, editable_cols:: AbstractVector{<: AbstractString}=collect(names(df)); filterable:: Bool=true, return_only_modified:: Bool=false, kwargs...) +function editable_table(df:: DataFrame, editable_cols:: AbstractVector{<: AbstractString}=collect(names(df)); filterable:: Bool=true, selectable_rows::Bool = false, return_only_modified:: Bool=false, kwargs...) column_defs = _make_col_defs(df; filterable, editable_cols) data = _prepare_data(df) - return _create_table(column_defs, data; editable=true, filterable, kwargs...) + return _create_table(column_defs, data; editable=true, filterable, selectable_rows, kwargs...) end editable_table(df, editable_cols; kwargs...) = editable_table(DataFrame(df), editable_cols; kwargs...) @@ -69,7 +69,7 @@ editable_table(df; kwargs...) = editable_table(DataFrame(df); kwargs...) function _create_table(column_defs:: AbstractVector{<: AbstractDict}, data:: AbstractVector; sortable=true, filterable=true, resizable=true, pagination=false, height:: Integer=600, - editable=false, insert=true, delete=true, auto_confirm=false) + editable=false, insert=true, delete=true, auto_confirm=false, selectable_rows = false) edit_button = @htl(""" + """) + + select_button_callback = JavaScript(""" + div.querySelector("button#select_rows").addEventListener("click", (e) => { + const selectedRows = gridOptions.api.getSelectedRows(); + div.value = selectedRows; + div.dispatchEvent(new CustomEvent("input")); + }) + """) + checkbox_renderer = JavaScript(""" // source: https://stackoverflow.com/a/62173238/14693778 function CheckboxRenderer() {} @@ -168,6 +184,7 @@ function _create_table(column_defs:: AbstractVector{<: AbstractDict}, data:: Abs $(editable ? edit_button : "") $((editable && insert) ? insert_button : "") $((editable && delete) ? delete_button : "") +$(selectable_rows ? select_button : "")