elm-spa-example | A Single Page Application written in Elm | GraphQL library
kandi X-RAY | elm-spa-example Summary
kandi X-RAY | elm-spa-example Summary
I gave a talk to explain the principles I used to build this. I highly recommend watching it!. Elm codebase containing real world examples (CRUD, auth, advanced patterns, etc) that adheres to the RealWorld spec and API. This codebase was created to demonstrate a fully fledged fullstack application built with Elm including CRUD operations, authentication, routing, pagination, and more. For more information on how this works with other frontends/backends, head over to the RealWorld repo.
Support
Quality
Security
License
Reuse
Top functions reviewed by kandi - BETA
Currently covering the most popular Java, JavaScript and Python libraries. See a Sample of elm-spa-example
elm-spa-example Key Features
elm-spa-example Examples and Code Snippets
Community Discussions
Trending Discussions on elm-spa-example
QUESTION
I'm building a single page application in Elm and was having difficulty deciding how to split my code in files.
I ended up splitting it using 1 module per page and have Main.elm
convert the Html
and Cmd
emitted by each page using Cmd.map
and Html.map
.
My issue is that the documentation for both Cmd.map and Html.map says that :
This is very rarely useful in well-structured Elm code, so definitely read the section on structure in the guide before reaching for this!
I checked the only 2 large apps I'm aware of :
- elm-spa-example uses Cmd.map (https://github.com/rtfeldman/elm-spa-example/blob/cb32acd73c3d346d0064e7923049867d8ce67193/src/Main.elm#L279)
- I was not able to figure out how https://github.com/elm/elm-lang.org deals with the issue.
Also, both answers to this stackoverflow question suggest using Cmd.map
without second thoughts.
Is Cmd.map the "right" way to split a single page application in modules ?
...ANSWER
Answered 2020-Aug-23 at 14:04I think sometimes you just have to do what's right for you. I used the Cmd.map
/Sub.map
/Html.map
approach for an application I wrote that had 3 "pages" - Initializing, Editing and Reporting.
I wanted to make each of these pages its own module as they were relatively complicated, each had a fair number of messages that are only relevant to each page, and it's easier to reason about each page independently in its own context.
The downside is that the compiler won't prevent you from receiving the wrong message for a given page, leading to a runtime error (e.g., if the application receives an Editing.Save
when it is in the Reporting
page, what is the correct behavior? For my specific implementation, I just log it to the console and move on - this was good enough for me (and it never happened anyway); Other options I've considered include displaying a nasty error page to indicate that something horrible has happened - a BSOD if you will; Or to simply reset/reinitialize the entire application).
Community Discussions, Code Snippets contain sources that include Stack Exchange Network
Vulnerabilities
No vulnerabilities reported
Install elm-spa-example
This is a two-step process. First we compile elm.js using elm make with --optimize, and then we Uglify the result. This generates production-optimized JS that is ready to be minified further using Uglify. (Make sure you have Uglify installed first, e.g. with npm install --global uglify-js). This one lengthy command (make sure to scroll horizontally to get all of it if you're copy/pasting!) runs uglifyjs twice - first with --compress and then again with --mangle. It's necessary to run Uglify twice if you use the pure_funcs flag, because if you enable both --compress and --mangle at the same time, the pure_funcs argument will have no effect; Uglify will mangle the names first and then not recognize them when it encounters those functions later.
Support
Reuse Trending Solutions
Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from over 650 million Knowledge Items
Find more librariesStay Updated
Subscribe to our newsletter for trending solutions and developer bootcamps
Share this Page