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

[WIP] Add an example with page loading indicator #250

Closed
wants to merge 6 commits into from

Conversation

arunoda
Copy link
Contributor

@arunoda arunoda commented Nov 14, 2016

Check this:

r2pljyyswi


In order to do this, I have to introduce two new events to the ``. They are:
  • onStart - when the page navigation starts
  • onComplete - when the page navigation completes

Why not using onClick instead of onStart?

onClick gets called even any clicks including external navigations. That's why we need this event.

@arunoda
Copy link
Contributor Author

arunoda commented Nov 14, 2016

@rauchg I think we could pass the xhr object(used to load components) somehow to the onStart event.
In order to do that, we may need to change the router.js a bit.

But I hope this is enough for now.

const {
onStart = () => null,
onComplete = () => null,
onError = () => null
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍 I didn't know this is possible

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ha ha. ES6 is pretty mysterious.

Copy link
Contributor Author

@arunoda arunoda Nov 14, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You can do this also:

onStart: theNewNameForOnStart = () => null

@rauchg
Copy link
Member

rauchg commented Nov 15, 2016

This is a beautiful example, specially because it shows integration with a 3rd party (even non-react!) library.

I would like to add examples/with-loading/README.md with the following format: https://gist.github.com/rauchg/1012e21a5a0d99f13724bfadc3097de4

That's the format we're going with for all examples/, since right now they're kinda cryptic.

@arunoda
Copy link
Contributor Author

arunoda commented Nov 15, 2016

@rauchg sure. Will do it.

@arunoda
Copy link
Contributor Author

arunoda commented Nov 15, 2016

@rauchg done. See.

@arunoda
Copy link
Contributor Author

arunoda commented Nov 18, 2016

@nkzawa I hope we could take this and land this on the next release.

<div style={{ marginBottom: 20 }}>
<Head>
{/* Import CSS for nprogress */}
<link rel='stylesheet' type='text/css' href='http://ricostacruz.com/nprogress/nprogress.css' />
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe make a copy of this into /static instead? Since this is http and we don't want to spam his site

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay. Makes sense.

"version": "0.0.0",
"description": "",
"scripts": {
"dev": "../../dist/bin/next"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This requires a top-level npm install, which is not clarified in the instructions. I think it's best if we include maybe "next": "*" in the deps?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay that makes sense. I will right another script to play with current source code.

Copy link
Member

@rauchg rauchg left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Other than these changes everything looks amazing!

@nkzawa
Copy link
Contributor

nkzawa commented Nov 18, 2016

I noticed loading indicator would be required for history back (popstate) too 😂

@rauchg
Copy link
Member

rauchg commented Nov 18, 2016

Good point @nkzawa. Let's address it

@arunoda
Copy link
Contributor Author

arunoda commented Nov 18, 2016

Good catch @nkzawa :) Let's see.

@arunoda
Copy link
Contributor Author

arunoda commented Nov 18, 2016

Since we need to support popstate events, I think it's better to remove onStart, onStop events from the Link and expose a similar API to the singleton Router.

Just like Router.go()

@arunoda
Copy link
Contributor Author

arunoda commented Nov 19, 2016

@rauchg I changed the example as you suggested.
How about my suggestion here: #250 (comment)

@arunoda arunoda changed the title Add an example with page loading indicator [WIP] Add an example with page loading indicator Dec 16, 2016
@arunoda arunoda self-assigned this Dec 16, 2016
@cctuan
Copy link

cctuan commented Dec 18, 2016

@arunoda
is it possible to add one more props function like the following ?

const {
  onBefore = (next) => { next() }
} = this.props
onBefore(() => {
  this.context.router.push(route, href)
    .then((success) => {
      onComplete(success)
      if (!success) return
      if (scroll !== false) window.scrollTo(0, 0)
    })
    .catch(onError)
  })

@arunoda
Copy link
Contributor Author

arunoda commented Dec 25, 2016

Closing this in favor of #511

@arunoda arunoda closed this Dec 25, 2016
@arunoda arunoda deleted the loading-example branch December 25, 2016 03:00
@lock lock bot locked as resolved and limited conversation to collaborators Jan 19, 2019
@ijjk
Copy link
Member

ijjk commented Sep 29, 2019

Stats from current PR

Default Server Mode
General
zeit/next.js canary zeit/next.js canary Change
buildDuration 16s 15.6s -445ms
nodeModulesSize 48.2 MB 48.2 MB
Client Bundles (main, webpack, commons)
zeit/next.js canary zeit/next.js canary Change
main-HASH.js 18.1 kB 18.1 kB
main-HASH.js gzip 6.6 kB 6.6 kB
webpack-HASH.js 1.53 kB 1.53 kB
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..2b8407376.js 21.9 kB 21.9 kB
4952ddcd88e7..7376.js gzip 7.81 kB 7.81 kB
de003c3a9d30..2ca0edb75.js 43.2 kB 43.2 kB
de003c3a9d30..db75.js gzip 15.5 kB 15.5 kB
framework.5b..dbaff70d3.js 125 kB 125 kB
framework.5b..70d3.js gzip 39.4 kB 39.4 kB
Overall change 210 kB 210 kB
Client Bundles (main, webpack, commons) Modern
zeit/next.js canary zeit/next.js canary Change
main-HASH.module.js 16.4 kB 16.4 kB
main-HASH.module.js gzip 6.35 kB 6.35 kB
webpack-HASH.module.js 1.53 kB 1.53 kB
webpack-HASH..dule.js gzip 746 B 746 B
de003c3a9d30..c0.module.js 45.6 kB 45.6 kB
de003c3a9d30..dule.js gzip 16.5 kB 16.5 kB
framework.5b..d3.module.js 125 kB 125 kB
framework.5b..dule.js gzip 39.4 kB 39.4 kB
Overall change 189 kB 189 kB
Client Pages
zeit/next.js canary zeit/next.js canary Change
_app.js 1.81 kB 1.81 kB
_app.js gzip 873 B 873 B
_error.js 12 kB 12 kB
_error.js gzip 4.73 kB 4.73 kB
hooks.js 12.7 kB 12.7 kB
hooks.js gzip 4.79 kB 4.79 kB
index.js 318 B 318 B
index.js gzip 222 B 222 B
link.js 8.14 kB 8.14 kB
link.js gzip 3.5 kB 3.5 kB
routerDirect.js 408 B 408 B
routerDirect.js gzip 281 B 281 B
withRouter.js 419 B 419 B
withRouter.js gzip 280 B 280 B
Overall change 35.8 kB 35.8 kB
Client Pages Modern
zeit/next.js canary zeit/next.js canary Change
_app.module.js 1.7 kB 1.7 kB
_app.module.js gzip 832 B 832 B
_error.module.js 23.3 kB 23.3 kB
_error.module.js gzip 8.59 kB 8.59 kB
hooks.module.js 1.52 kB 1.52 kB
hooks.module.js gzip 793 B 793 B
index.module.js 294 B 294 B
index.module.js gzip 223 B 223 B
link.module.js 8.53 kB 8.53 kB
link.module.js gzip 3.68 kB 3.68 kB
routerDirect.module.js 394 B 394 B
routerDirect..dule.js gzip 281 B 281 B
withRouter.module.js 404 B 404 B
withRouter.m..dule.js gzip 278 B 278 B
Overall change 36.1 kB 36.1 kB
Client Build Manifests
zeit/next.js canary zeit/next.js canary Change
_buildManifest.js 81 B 81 B
_buildManifest.js gzip 61 B 61 B
_buildManifest.module.js 81 B 81 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 162 B 162 B
Rendered Page Sizes
zeit/next.js canary zeit/next.js canary Change
index.html 3.62 kB 3.62 kB
index.html gzip 946 B 946 B
link.html 3.66 kB 3.66 kB
link.html gzip 954 B 954 B
withRouter.html 3.67 kB 3.67 kB
withRouter.html gzip 941 B 941 B
Overall change 10.9 kB 10.9 kB

Serverless Mode
General
zeit/next.js canary zeit/next.js canary Change
buildDuration 15.9s 16s ⚠️ +152ms
nodeModulesSize 48.2 MB 48.2 MB
Client Bundles (main, webpack, commons)
zeit/next.js canary zeit/next.js canary Change
main-HASH.js 18.1 kB 18.1 kB
main-HASH.js gzip 6.6 kB 6.6 kB
webpack-HASH.js 1.53 kB 1.53 kB
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..2b8407376.js 21.9 kB 21.9 kB
4952ddcd88e7..7376.js gzip 7.81 kB 7.81 kB
de003c3a9d30..2ca0edb75.js 43.2 kB 43.2 kB
de003c3a9d30..db75.js gzip 15.5 kB 15.5 kB
framework.5b..dbaff70d3.js 125 kB 125 kB
framework.5b..70d3.js gzip 39.4 kB 39.4 kB
Overall change 210 kB 210 kB
Client Bundles (main, webpack, commons) Modern
zeit/next.js canary zeit/next.js canary Change
main-HASH.module.js 16.4 kB 16.4 kB
main-HASH.module.js gzip 6.35 kB 6.35 kB
webpack-HASH.module.js 1.53 kB 1.53 kB
webpack-HASH..dule.js gzip 746 B 746 B
de003c3a9d30..c0.module.js 45.6 kB 45.6 kB
de003c3a9d30..dule.js gzip 16.5 kB 16.5 kB
framework.5b..d3.module.js 125 kB 125 kB
framework.5b..dule.js gzip 39.4 kB 39.4 kB
Overall change 189 kB 189 kB
Client Pages
zeit/next.js canary zeit/next.js canary Change
_app.js 1.81 kB 1.81 kB
_app.js gzip 873 B 873 B
_error.js 12 kB 12 kB
_error.js gzip 4.73 kB 4.73 kB
hooks.js 12.7 kB 12.7 kB
hooks.js gzip 4.79 kB 4.79 kB
index.js 318 B 318 B
index.js gzip 222 B 222 B
link.js 8.14 kB 8.14 kB
link.js gzip 3.5 kB 3.5 kB
routerDirect.js 408 B 408 B
routerDirect.js gzip 281 B 281 B
withRouter.js 419 B 419 B
withRouter.js gzip 280 B 280 B
Overall change 35.8 kB 35.8 kB
Client Pages Modern
zeit/next.js canary zeit/next.js canary Change
_app.module.js 1.7 kB 1.7 kB
_app.module.js gzip 832 B 832 B
_error.module.js 23.3 kB 23.3 kB
_error.module.js gzip 8.59 kB 8.59 kB
hooks.module.js 1.52 kB 1.52 kB
hooks.module.js gzip 793 B 793 B
index.module.js 294 B 294 B
index.module.js gzip 223 B 223 B
link.module.js 8.53 kB 8.53 kB
link.module.js gzip 3.68 kB 3.68 kB
routerDirect.module.js 394 B 394 B
routerDirect..dule.js gzip 281 B 281 B
withRouter.module.js 404 B 404 B
withRouter.m..dule.js gzip 278 B 278 B
Overall change 36.1 kB 36.1 kB
Client Build Manifests
zeit/next.js canary zeit/next.js canary Change
_buildManifest.js 81 B 81 B
_buildManifest.js gzip 61 B 61 B
_buildManifest.module.js 81 B 81 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 162 B 162 B
Serverless bundles
zeit/next.js canary zeit/next.js canary Change
_error.js 253 kB 253 kB
_error.js gzip 67.9 kB 67.9 kB
hooks.html 3.75 kB 3.75 kB
hooks.html gzip 979 B 979 B
index.js 254 kB 254 kB
index.js gzip 68.2 kB 68.2 kB
link.js 261 kB 261 kB
link.js gzip 70.2 kB 70.2 kB
routerDirect.js 255 kB 255 kB
routerDirect.js gzip 68.3 kB 68.3 kB
withRouter.js 255 kB 255 kB
withRouter.js gzip 68.3 kB 68.3 kB
Overall change 1.28 MB 1.28 MB

Commit: 0410a43

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

Successfully merging this pull request may close these issues.

5 participants