Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • Jan 13 19:33
    scala-steward closed #517
  • Jan 13 19:33
    scala-steward commented #517
  • Jan 13 19:33
    scala-steward opened #546
  • Jan 13 19:33
    scala-steward closed #544
  • Jan 13 19:33
    scala-steward commented #544
  • Jan 13 19:33
    scala-steward opened #545
  • Jan 12 19:05
    scala-steward closed #541
  • Jan 12 19:05
    scala-steward commented #541
  • Jan 12 19:05
    scala-steward opened #544
  • Jan 12 00:43
    scala-steward opened #543
  • Jan 04 23:47

    shadaj on master

    (compare)

  • Jan 04 23:47

    shadaj on main

    (compare)

  • Dec 31 2021 10:05
    scala-steward opened #542
  • Dec 31 2021 02:08
    scala-steward closed #534
  • Dec 31 2021 02:08
    scala-steward commented #534
  • Dec 31 2021 02:08
    scala-steward opened #541
  • Dec 30 2021 19:41
    shadaj commented #540
  • Dec 30 2021 19:41
    shadaj labeled #540
  • Dec 30 2021 19:41
    shadaj labeled #540
  • Dec 30 2021 12:58
    epifab opened #540
Jason Pickens
@steinybot:matrix.org
[m]
Ah I figured it out. The macro is adding an import for Writer but if that has already been imported then you get a second unused import.
Jason Pickens
@steinybot:matrix.org
[m]
Hmm can't reproduce it in a new project with exactly the same code and versions. Weird.
edlott@sbcglobal.net
@edlott:matrix.org
[m]

Newby question: I'm trying to use the 'useState' hook to store an option case class:

val (code:Option[CaseClass], updateCode) = useState(None)

1 reply
edlott@sbcglobal.net
@edlott:matrix.org
[m]

:point_up: Edit: Newbee question: I'm trying to use the 'useState' hook to store an optional case class:

val (code:Option[CaseClass], updateCode) = useState(None)

This doesn't seem to work (at least IntelliJ doesn't like it). If I invoke 'useState' with scala classes that map to javascript primitives, it works fine.

I also use diode in my project. It can handle elements that are case classes just fine. I was looking into the diode implementation. It also uses the 'useState' hook, but doesn't seem to run into the problem I'm having. I can't untangle the part I need to fix my issue vs. the part that implements their notion of a structured store.

Short term, I can just use diode to model state that goes beyond javascript primitives. But I'd rather use 'useState' for instances where I need case-class component state that no one else needs to see.

Jason Pickens
@steinybot:matrix.org
[m]
Is it possible to get from a FunctionalComponentForwardedRef to a FunctionalComponent? As in React.memo(React.forwardRef(???)).
Matias Partanen
@mpartan

I'm trying to use following pattern with Slinky:

@JSImport("react-select", JSImport.Default)
@js.native
object ReactSelectComponent extends js.Object {

  val Async: js.Object = js.native
}
@react
object ReactSingleSelectTest extends ExternalComponent {
  type OnChange = ReactSelection => Unit

  case class Props(
      onChange: UndefOr[OnChange] = js.undefined,
      options: UndefOr[Seq[ReactSelection]] = js.undefined,
      isClearable: UndefOr[Boolean] = js.undefined
  )

  override val component = ReactSelectComponent
}

case class ReactSelection(label: String, value: String, group: Option[String] = None)

in component

def searchChanged(s: ReactSelection): Unit = {
      println(s)
    }

    val select = ReactSingleSelectTest(
      options = Seq(ReactSelection(s"Value 1", "Value 1"), ReactSelection("Value 2", "Value 2")),
      onChange = searchChanged _,
      isClearable = true
    )

Basically React-Select offers X-button to clear. In JedWatson/react-select#2159 it says to check for null. However here I'm getting an error before the searchChanged-function of:

Uncaught TypeError: Cannot read properties of null (reading 'label') at $c_Lcom_client_components_reactselect_ReactSingleSelectTest$$anon$7.eval [as forceRead__sjs_js_Object__Lcom_client_components_reactselect_ReactSelection]

Is there any way to get around of this somehow? Can I somehow type the type OnChange = Null | ReactSelection => Unit or something else?

philip andrew
@PhilAndrew
Hello, using react router, how can I programmatically change the route?
asaadza
@asaadza
...can anybody suggest a decent alternative to slinky for scala 3 projects?
I enjoyed using slinky in the "scala 2 days", and could get what I needed done without too much trouble or bad-taste-in-the-mouth (not always the case with so many other UI libraries, so thank you and congratulations @shadaj for creating and sharing it!) despite having never used react directly. It seems after @oleg-py made a nice contribution back in the summer there is still a long way to go (including identifying what must be done), and nobody has the skills and/or time.
@ramnivas - could I ask if you guys have decided to keep learnraga at scala 2 for the foreseeable future?
Alexander Samsig
@asamsig:matrix.org
[m]

@asaadza: I can only speak for myself, but Scala 3 is still early, IntelliJ isn't super smooth with it yet, and macros need more work.

So I don't think there is a very strong push for Scala 3 at the moment.

The PR open for Scala 3 support is quite far, but it doesn't have support for the @react annotation, which means the user experience won't be great.

Give it a few more months and the ecosystem will be available ready for Scala 3.

asaadza
@asaadza
@asamsig:matrix.org I like scala 3 and almost all the libraries we use already have some level of scala 3 support. Personally, I would not recommend starting any new project in scala 2, and because I prefer to use uptodate (but well enough proven) stuff, when I can, any project that is not deliberately being left to slowly die will be ported to scala 3 whenever possible. AFAIK, slinky does not depend on any scala libs that are still at scala 2 level, anyway, so I was just wondering whether/when it might be available for scala 3, because if it was possible, I would definitely choose/recommend it. Obviously, if there is no real demand yet for a scala 3 version (eg, if people are generally happy to still use scala 2, or people with commercial apps consider scala 3 to be a risk, or a distraction that is non-essential for their business) that may also be a clue, so thanks for the feedback and for starting the effort with @oleg-py in the summer!
asaadza
@asaadza
... and metals has pretty good scala 3 support too, btw, in case you did not try it yet.
Alexander Samsig
@asamsig:matrix.org
[m]

The point about IntelliJ is mostly to show that Scala 3 isn't fully mainstream yet, if not even IntelliJ has seamless support yet.

I'm not the guy for lightweight IDEs, I'm way too accustomed to the benefits of a fullblown IDE.

Scala 3 will get there, but Scala 2 is not in its grave yet.

asaadza
@asaadza
... don't worry, scala 2 will be around for ages. Try ,metals, you'll be amazed. I love IJ, but metals has now ahead in some areas. The only thing I miss from IJ is probably "search for symbol everywhere" (metals finds types, but not members).
2 replies
shadaj
@shadaj:matrix.org
[m]
Yeah, I think full Scala 3 support will take a while since many metaprogramming features that Slinky uses aren't there yet. However, I'd be open to merging in preliminary Scala 3 support without @react if that's something people would use!
asaadza
@asaadza
@shadaj:matrix.org +1
Alexis Hernandez
@AlexITC

I'd be open to merging in preliminary Scala 3 support without @react if that's something people would use!

My team will happily use it that way

Myyk Seok
@myyk
I was just doing a toy project, but I too would have enjoyed the preliminary Scala 3 support
asaadza
@asaadza
@shadaj:matrix.org another not so obvious, but in my opinion very valuable benefit of releasing a "preliminary Scala 3 support without @react" Slinky is that people who have the imagination and skill will have a good base/foundation (ie the build and all the MDN based code generation/type projections/named params etc already working and proven) to try out alternatives/different ideas on for the apply problem (which would probably be sufficient for those who prefer functional components anyway) so slinky react UI development is still the nicest and most intuitive UX in scalajs land.
Ryne Flood
@ryne.flood_gitlab
@shadaj:matrix.org +1
Arman Bilge
@armanbilge
@shadaj:matrix.org would you mind approving the workflow on my PR? Thanks in advance!
zoombinis
@zoombinis

I'm not sure if this is a bug with Slinky reader, but I am using Reader[MyClass] when calling a facade that returns a JSON object in order to deserialize it into MyClass

It tricks the scala compiler into assuming the type of the result is MyClass but unfortunately Option[String] types are actually just String causing runtime exceptions

Is there a way to get a Reader to honor Option types? MyClass has an attribute that is Option[String], so could Reader[MyClass] return Some("text") instead of just "text"?

zoombinis
@zoombinis

Oh, I think I know the answer - because MyClass isn't a case class Props to some @React object, Slinky can only work with plain js.Object types. So I need to use js.UndefOr instead of Option

Yup, that was it!

Jason Pickens
@steinybot:matrix.org
[m]

I've got a question about Reader. I'm trying to create a Reader[NoYes] for:

final case class NoYes(value: Option[Boolean], onChange: Boolean => Unit)

And it blows up in slinky.readwrite.FunctionReaders#function1 when the component tries to call onChange saying fn is not a function. It's not a function because fn is undefined. It wasn't entirely clear where fn was coming from, it seemed to be part of the anonymous function.
Stepping through the JS code, the Reader[NoYes] was trying to read o.value and o.onChange instead of the actual properties which is some long fully qualified name with . replaced with _. Presumably this is the Reader macro doing this? I've never had a problem before. Any idea why this one is different?

shadaj
@shadaj:matrix.org
[m]
Hmm, not sure I completely understand what's going on Jason Pickens. Readers expect the JS object being red to have attributes corresponding to the names in the case class, so calling .onChange on the read value corresponds to calling .onChange on the original value.
Jason Pickens
@steinybot:matrix.org
[m]
The problem was related to using ReactComponentClass. Turns out I didn't need this (I accidentally used React.memo from ST and not the Slinky one).
zetashift
@sp33der89:matrix.org
[m]
I see preliminary Scala 3 support has landed, has anyone been playing around with it/ has some code examples?
evbo
@evbo

@shadaj:matrix.org with Slinky being such a great advent, have you (un)seriously considered a Svelte companion-repo to Slinky?: https://svelte.dev/

Looks awesome but I'm too invested in React, unless the tides were to change (some day)...

shadaj
@shadaj:matrix.org
[m]

zetashift: mostly, the API is identical except for not having the @react macro available, so you'll have to manually use ComponentWrapper for class components and create a nicer apply yourself

but other than that, we actually share all the unit test code between Scala 2 and 3 so things are actually mostly source compatible too

@evbo: svelte would be interesting to explore someday! one challenging thing is that svelte has a much more opinionated file structure and build tool that might be hard to make compatible with how Scala.js spits out its JS files, but still definitely something worth exploring
Alexis Hernandez
@AlexITC
Are there any short-term plans to release slinky with https://github.com/scala-js/scala-js-dom/releases/tag/v2.0.0? this is blocking me from including https://github.com/scala-js/scala-js-macrotask-executor in several projects
shadaj
@shadaj:matrix.org
[m]
this week! sorry for the delay
going to try to squeeze in some React 17 features (since this will be a bump to 0.7.0), but will release one way or another
or actually, lemme see if there are any source compatibility issues; if not could be a minor version since we've been following semver >> 1
Alexis Hernandez
@AlexITC

@shadaj:matrix.org do you have any plans to allow propagating implicits from components? from what I see, there is a big deal when declaring a component by using def instead of val, which is what prevent this approach to work.

I understand that doing this would break exporting components to js but it would be pretty useful to propagate context in a type-safe way

shadaj
@shadaj:matrix.org
[m]
@AlexITC: probably not in the short term, we try to avoid introducing features that would break patterns in regular React code so that new developers don't have to learn a different way of writing their apps
nafg
@nafg
What does the home page mean by
Slinky comes ready with full integration with familiar tools like [...] React DevTools.
For instance with scalajs-react props and state that are scala objects are very hard to understand in react dev tools
Does Slinky do something special to improve on this?
Fabio Epifani
@epifab
:wave: is Slinky ready for Scala 3? I've noticed the annotation package is missing...
Alexis Hernandez
@AlexITC
Slinky 0.7.0 supports scala 3, the drawback is that the @react macro won't work
Fabio Epifani
@epifab
I am new to Slinky, is there an example of defining components without those annotations?
shadaj
@shadaj:matrix.org
[m]
@epifab: take a look at the component styles section of https://slinky.dev/docs/writing-components/
the macro annotation was designed to not do too much magic, so it just compiles down to the regular API
@nafg: yep, that's exactly one of the things we do; in dev mode the Scala components use reader/writer pairs to make the states easier to view in the devtools
Fabio Epifani
@epifab
@shadaj:matrix.org thanks. is there an equivalent for ExternalComponentWithRefType?
shadaj
@shadaj:matrix.org
[m]
@epifab: you can just use that in Scala 3! The @react annotation on external components only adds the nice apply method, but doesn't do any other rearranging.
Fabio Epifani
@epifab
ah great. thank you!
the problem I have now though is method deriveWriter in trait MacroWriters does not match type slinky.readwrite.Writer[Props]