Skip to content
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

[Feature] - new component idea - SI numeric input #116

Open
carl-dawson opened this issue Jul 31, 2020 · 3 comments
Open

[Feature] - new component idea - SI numeric input #116

carl-dawson opened this issue Jul 31, 2020 · 3 comments

Comments

@carl-dawson
Copy link

I've been hacking together a new component for a project that I'm working on, and I thought it might be a good addition to the Dash Daq repository. It's a composite component with a numeric input and a drop-down list. The drop down list is populated with a user supplied base scientific unit (e.g Hz, Wb, T, K, etc.) prepended with the standard SI prefixes (e.g. μ, m, k, M, G, etc.), each corresponding to an order of magnitude (e.g. -6, -3, 3, 6, 9, etc.). The numeric input is the significand. The component value is [significand * 10^magnitude]
2020-07-31 (1)

If this is something you'd be interested in including, I could use some guidance regarding React best practices here. My current implementation feels pretty hacky.

@alexcjohnson
Copy link
Collaborator

For sure, good idea, and it would be a great fit for this package! (leaving aside the ambiguity of the specific example you show here - does km3 mean k(m3) or (km)3? 😈 )

We have a bit of a guide for making dash components in https://dash.plotly.com/react-for-python-developers - might be more basic than you had in mind though, otherwise I'd say just take a look at how the other dash-daq and dash-core-components components are written, you may find some inspiration. And, feel free to make a PR at any time and we can discuss specific places you're looking for help.

@carl-dawson
Copy link
Author

Ha, I was wondering if you'd catch that. I got around that problem by adding a user defined parameter called unitMagnitude. So in the above example it is (km)^3, which is what I needed for my application. Still slightly hacky and ambiguous though. I'll keep digging around for something similar. Can you think of any existing components off the top of your head that might implement a similar composite design pattern?

@alexcjohnson
Copy link
Collaborator

Nothing comes to mind - we've talked about adding a potentially editable text display to dcc.Slider but we haven't gotten around to it. You'll probably want to look at dcc.Input for how it handles up & down arrows, and updates on every keypress vs only on blur, but then the units dropdown will add its own complexity.

One tricky thing may be the 2-way binding between these props. I assume (in addition to the configuration props which will be write-only), you'll have three input/output props, I guess value, significand, and magnitude (though I might vote for exponent over magnitude but that's a separate discussion). The user interacting with the component will set significand and magnitude, and value will be the output; but you'll also want app developers to be able to simply specify value and have significand and magnitude determined automatically WITHOUT then causing value to be set again with a change in its 15th digit; or an app developer should be able to set value and magnitude, only leaving significand to be calculated.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants