-
Notifications
You must be signed in to change notification settings - Fork 92
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add copy / paste to @render.data_frame
#1560
Comments
Related - Add ability to update cells and data from the server: #1449
Correct. As of v1.0.0, this is not implemented. (But it could be in the future! Will expand on this in followup comment)
We already have the ability to edit a data frame within the browser via a single cell edit. The current approach has been:
We can access the updated data via
It is definitely different as updates are happening to the rendered output after the initial rendering has occurred. But if the decorated
|
Questions I run into with pasting data:
On the server side, we can get pretty far with
Goal: Reduce this question set . Any thoughts or approaches appreciated! |
Hi, I was on your Discord and got an answer and pointer to this issue about interacting with a datagrid/dataframe and specifically keeping its state after re-rendering. I think there is another issue on that subject perhaps it is the #1449 one. I think two separate issues are being discussed here:
I see the former (1) as a special case of (2). I'll get to my proposal and discuss the implications of copying and pasting afterward. Other frameworks have the concept of filters or interceptors. They operate similarly to a Python decorator in that they can intercept a function call and manipulate the response from the function call. In my case, I have external state in the form of form controls that have settings or filters that want to influence the dataframe's current data. I want to impose state changes like presorting, removing rows, or removing columns and have access to the current user-selected options in the currently rendered dataframe like the filtering and sort-order for one or several columns in the dataframe so that I can choose to include or disregard the user's current choices. Having an interceptor that can manipulate the data before it is rendered and get a hook into when the user has made changes to the dataframe widget that caused it to change its UI is a powerful feature. Basically, you are dynamically changing the underlying dataframe before it is displayed. The API already has a notion of original .data() and currently .data_view() as well as the @grid.set_patch_fn and so on. Being able to interact with those two states is what I am looking at. Back to pasting. I do not think it is the framework's role to keep track of the validity of data. For one thing, you have to guess what the correct outcome should be and my experience is that one never guesses what the user actually wants. Furthermore, all your questions and concerns seem to reinforce my point as there are too many things to consider. However, you can give that responsibility to the code author using.... an interceptor :-) The same concept applies to validation, to take another example, where the code intercepts a form transmission and tells the user to do something instead of sending it to the server and getting a validation error when it could have been intercepted before sending the form (yes you should always have validation server-side, but that is beside the point I think). Sure it would be good if the framework could figure out all the things, but I fear there will be an abundance of edge cases. Especially as you can have anything in your clipboard that the widget would have to deal with. Then again perhaps I understand the original request poorly. So having a way to hook into the rendering pipeline, especially for a datagrid/dataframe, gives a lot of power and responsibility. I think the interceptor concept could be applied to many widgets to control state. Thanks for reading! |
Thank you for the input! Agreed, there are too many things to consider Yes. #1449 's My summary of your post...
|
@render.data_frame
Update: #1719 added support for |
Do I understand correctly that this feature is one of the building blocks needed to implement copy/pasting into tables, but that the copy/pasting feature is still in the future? If that's the case, do you have any idea how close this feature is to fruition? Thanks. |
This is half a feature request, half a question about how shiny conceptualizes data input.
I'd like to use shiny to help my researcher colleagues process some analytical data. Because most of the potential users are not proficient coders, the most accessible/realistic way to input data should be copy-and-paste from a spreadsheet app into the shiny app. Pasting into an editable datagrid does not appear to be currently implemented, and the fact that DataGrid is explicitly defined as an output makes me wonder if my use case is at odds with some core philosophy of shiny, such as "input data resides on the server", or "input data must be uploaded from a file".
My two cents: pasting into a datagrid offers at least two benefits over simply pasting data into a text area: (a) because any problems in formatting/cell mismatches are immediately apparent, the user can easily perform some kind of visual data validation; (b) one thing end-users frequently mistype is column headers; this problem disappears if the headers are already specified by a datagrid input.
So, is it possible that datagrids will some day be treated as full-blown inputs, or would that break things and/or go against some core conceptualization of py-shiny?
The text was updated successfully, but these errors were encountered: