-
Notifications
You must be signed in to change notification settings - Fork 1.3k
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 Clipboard component for handling global on_paste event #3513
Conversation
When using the new paste handler, how do I need to write the event handler so that if a file is pasted we only handle the file but do not paste in the file path as text into the input field / text area, but when we paste in pure text we display the text in the input field / text area? When I use prevent_default the file path isn't displayed when I paste a file, but then I also can't paste in normal text. |
@dentro-innovation so there's not currently a way to accomplish this, but the logic in the paste handler could be update to achieve what sounds like a pretty common workflow. Can you file a follow up bug for this? In the meantime, you might be able to get fancy with a controlled input, i haven't checked if the on_paste gets called before on_change though. |
Not sure if I'm doing something wrong, but it seems to me as if I'm only able to paste in a single file. When inspecting my event handler in debug mode, it seems like
Is this something you are aware of? |
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [reflex](https://reflex.dev) ([source](https://github.com/reflex-dev/reflex)) | project.dependencies | patch | `==0.5.5` -> `==0.5.6` | --- ### Release Notes <details> <summary>reflex-dev/reflex (reflex)</summary> ### [`v0.5.6`](https://github.com/reflex-dev/reflex/releases/tag/v0.5.6) [Compare Source](https://github.com/reflex-dev/reflex/compare/v0.5.5...v0.5.6) #### New Features ##### `rx.clipboard` Handle global and component-scoped `on_paste` with multi-type data - Add Clipboard component for handling global on_paste event by [@​masenf](https://github.com/masenf) in [https://github.com/reflex-dev/reflex/pull/3513](https://github.com/reflex-dev/reflex/pull/3513) ##### `rx.breakpoints` - Set breakpoints by name - introduce customizable breakpoints by [@​adhami3310](https://github.com/adhami3310) in [https://github.com/reflex-dev/reflex/pull/3568](https://github.com/reflex-dev/reflex/pull/3568) - add responsive props to radix components by [@​adhami3310](https://github.com/adhami3310) in [https://github.com/reflex-dev/reflex/pull/3583](https://github.com/reflex-dev/reflex/pull/3583) ##### Computed Backend Vars - add computed backend vars by [@​benedikt-bartscher](https://github.com/benedikt-bartscher) in [https://github.com/reflex-dev/reflex/pull/3573](https://github.com/reflex-dev/reflex/pull/3573) - improve backend var determination by [@​benedikt-bartscher](https://github.com/benedikt-bartscher) in [https://github.com/reflex-dev/reflex/pull/3587](https://github.com/reflex-dev/reflex/pull/3587) #### Improvements - \[REF-3056]Config knob for redis StateManager expiration times by [@​ElijahAhianyo](https://github.com/ElijahAhianyo) in [https://github.com/reflex-dev/reflex/pull/3523](https://github.com/reflex-dev/reflex/pull/3523) - \[Perf] Ensure rx.match gets memoized to avoid excessive re-rendering by [@​masenf](https://github.com/masenf) in [https://github.com/reflex-dev/reflex/pull/3552](https://github.com/reflex-dev/reflex/pull/3552) - bare sqlalchemy session + tests by [@​benedikt-bartscher](https://github.com/benedikt-bartscher) in [https://github.com/reflex-dev/reflex/pull/3522](https://github.com/reflex-dev/reflex/pull/3522) - Remove chakra from codeblock by [@​abulvenz](https://github.com/abulvenz) in [https://github.com/reflex-dev/reflex/pull/3570](https://github.com/reflex-dev/reflex/pull/3570) - add compilation timestamp in log by [@​Lendemor](https://github.com/Lendemor) in [https://github.com/reflex-dev/reflex/pull/3563](https://github.com/reflex-dev/reflex/pull/3563) - \[REF-3148] add props for tabs by [@​Lendemor](https://github.com/Lendemor) in [https://github.com/reflex-dev/reflex/pull/3560](https://github.com/reflex-dev/reflex/pull/3560) - show the value causing problem in deprecation warning by [@​Lendemor](https://github.com/Lendemor) in [https://github.com/reflex-dev/reflex/pull/3558](https://github.com/reflex-dev/reflex/pull/3558) - Better support for Github Codespaces - Add a link to backend in connection error by [@​masenf](https://github.com/masenf) in [https://github.com/reflex-dev/reflex/pull/3044](https://github.com/reflex-dev/reflex/pull/3044) - Better hot reload times on Windows with python 3.12 and uvicorn > 0.20 - \[REF-3164] Hack to fix Windows hot reload + Uvicorn upgrade by [@​masenf](https://github.com/masenf) in [https://github.com/reflex-dev/reflex/pull/3584](https://github.com/reflex-dev/reflex/pull/3584) - `rx.theme` appearance is reset in dev mode - \[REF-2588]Clear color mode local storage for dev mode by [@​ElijahAhianyo](https://github.com/ElijahAhianyo) in [https://github.com/reflex-dev/reflex/pull/3548](https://github.com/reflex-dev/reflex/pull/3548) #### Bug Fixes - Fix radix radio cards component by [@​emmakodes](https://github.com/emmakodes) in [https://github.com/reflex-dev/reflex/pull/3545](https://github.com/reflex-dev/reflex/pull/3545) - fix small typing issue by [@​Lendemor](https://github.com/Lendemor) in [https://github.com/reflex-dev/reflex/pull/3562](https://github.com/reflex-dev/reflex/pull/3562) - \[REF-3185]\[REF-3180]Dont escape backticks in JS string interpolation by [@​ElijahAhianyo](https://github.com/ElijahAhianyo) in [https://github.com/reflex-dev/reflex/pull/3566](https://github.com/reflex-dev/reflex/pull/3566) - classvars should not be backend vars by [@​benedikt-bartscher](https://github.com/benedikt-bartscher) in [https://github.com/reflex-dev/reflex/pull/3578](https://github.com/reflex-dev/reflex/pull/3578) - ComponentState and State mixins now work with backend vars - copy backend vars from mixins by [@​benedikt-bartscher](https://github.com/benedikt-bartscher) in [https://github.com/reflex-dev/reflex/pull/3580](https://github.com/reflex-dev/reflex/pull/3580) - fix var dependency over properties by [@​benedikt-bartscher](https://github.com/benedikt-bartscher) in [https://github.com/reflex-dev/reflex/pull/3588](https://github.com/reflex-dev/reflex/pull/3588) - \[REF-3157] Avoid SQLModel metaclass conflict ([#​3610](https://github.com/reflex-dev/reflex/issues/3610)) - \[REF-3220] Fix rx.cancel_upload EventSpec ([#​3608](https://github.com/reflex-dev/reflex/issues/3608)) - do not get_config in global scope ([#​3597](https://github.com/reflex-dev/reflex/issues/3597)) #### Other Changes - Validate ComputedVar dependencies, add tests by [@​benedikt-bartscher](https://github.com/benedikt-bartscher) in [https://github.com/reflex-dev/reflex/pull/3527](https://github.com/reflex-dev/reflex/pull/3527) - do not validate non-cached var deps by [@​benedikt-bartscher](https://github.com/benedikt-bartscher) in [https://github.com/reflex-dev/reflex/pull/3576](https://github.com/reflex-dev/reflex/pull/3576) - Radio group fix deprecation warning for creating vars with strings by [@​ElijahAhianyo](https://github.com/ElijahAhianyo) in [https://github.com/reflex-dev/reflex/pull/3567](https://github.com/reflex-dev/reflex/pull/3567) - update dependencies pinning by [@​Lendemor](https://github.com/Lendemor) in [https://github.com/reflex-dev/reflex/pull/3556](https://github.com/reflex-dev/reflex/pull/3556) - fix formatting by [@​benedikt-bartscher](https://github.com/benedikt-bartscher) in [https://github.com/reflex-dev/reflex/pull/3574](https://github.com/reflex-dev/reflex/pull/3574) - order type annotations in pyi_generator by [@​benedikt-bartscher](https://github.com/benedikt-bartscher) in [https://github.com/reflex-dev/reflex/pull/3585](https://github.com/reflex-dev/reflex/pull/3585) - Deprecate cached var by [@​benedikt-bartscher](https://github.com/benedikt-bartscher) in [https://github.com/reflex-dev/reflex/pull/3582](https://github.com/reflex-dev/reflex/pull/3582) - Change Strategy Prop to Literal by [@​Alek99](https://github.com/Alek99) in [https://github.com/reflex-dev/reflex/pull/3575](https://github.com/reflex-dev/reflex/pull/3575) - pyi_generator cleanup: ruff, remove fully qualified reflex. names by [@​masenf](https://github.com/masenf) in [https://github.com/reflex-dev/reflex/pull/3591](https://github.com/reflex-dev/reflex/pull/3591) - cleanup unused check by [@​benedikt-bartscher](https://github.com/benedikt-bartscher) in [https://github.com/reflex-dev/reflex/pull/3590](https://github.com/reflex-dev/reflex/pull/3590) - split lifespan and middleware logic in separate mixin files by [@​Lendemor](https://github.com/Lendemor) in [https://github.com/reflex-dev/reflex/pull/3557](https://github.com/reflex-dev/reflex/pull/3557) - Update links to /docs/library/dynamic-rendering/foreach/ ([#​3609](https://github.com/reflex-dev/reflex/issues/3609)) #### New Contributors ##### Welcome Khaleel to the Core Team - [@​adhami3310](https://github.com/adhami3310) made their first contribution in [https://github.com/reflex-dev/reflex/pull/3568](https://github.com/reflex-dev/reflex/pull/3568) **Full Changelog**: reflex-dev/reflex@v0.5.5...v0.5.6 </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MzEuNyIsInVwZGF0ZWRJblZlciI6IjM3LjQzMS43IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
Also, could it be that it isn't possible to paste very big files? I do not use Here the screenshot for reference, inside a zip archive to make sure it doesn't get compressed when uploaded to github: |
Supersede #3078 to fix #3055
Creates a new
rx.clipboard
component withon_paste
handler that will be called when pasting data into the page. If it has children components, then only those components will register thepaste
handler, otherwise, it gets registered at the top-leveldocument
(you can also passtargets
prop as a list of ids).The handler will be called with the data arg as list of tuples of
(mime_type, data)
. If the data is text, it will be a regular string. If the data is associated with a different type, then it will be returned as a base64 encoded data uri. There may be multiple entries in the data list for example if the data is available in several formats (text/plain
andtext/html
) or if several files have been pasted from the filesystem.Sample code