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

Ports Page Sections #119

Closed
8 tasks done
arcticicestudio opened this issue Feb 3, 2019 · 0 comments
Closed
8 tasks done

Ports Page Sections #119

arcticicestudio opened this issue Feb 3, 2019 · 0 comments

Comments

@arcticicestudio
Copy link
Contributor

arcticicestudio commented Feb 3, 2019

Associated epic: #63
Depends on: #123, #125

This issue documents the implementation of all /ports page sections including required changes to involved components and new dependencies.

Hero

The first section will contain a feature duo container with the pages heading and a summary about Nord's ports.
Underneath the static vector graphic that is currently placed in the port section of the landing (/) page will be implemented as interactive animated component. It will use a 3D depth effect for the port project's logos by moving against the direction of the current mouse position where the larger logos will move more to give the impression that they are closer.

Grid Filter

The second section will consist of a input field that allows users to filter available port projects by predefined search terms. Underneath a animated grid of card components will react to the input field by filtering non-matching ports projects.
Each card represents one port project and will consist of the logo, the name (with the Nord prefix) as well as a card footer that contains the version of the latest release of the respective project and the number of stars of the GitHub repository.

To prevent UI freezes/frame drops when users typing in the input field while the grid reacts to the change immediately a debounce might be used. It can wait some milliseconds before actually filtering the grid by the given search term. To get the best performance Lodash can be used through gatsby-plugin-lodash which sets up babel-plugin-lodash and lodash-webpack-plugin.

GitHub GraphQL API

To view the metadata about the port project repositories Gatsby's fantastic GraphQL integration will be used through the awesome gatsby-source-graphql plugin. It allows to fire queries that 'll get executed and stitches remote schemas together by adding a type that wraps the remote schema Query type and putting it under field of Gatsby GraphQL Query.

Interactive Animations

To implement components with an interactive animation the awesome react-spring project will be used which allows, like the fantastic and also already used react-pose library, to use spring-physics based animations.
The advantage of react-spring is that it bails out of the React renderer to avoid unnecessary renders and instead uses native methods to get the best performance even for complex animations.
It comes with first-class support for Hooks, a great and extensive documentation and a lot of examples for inspirations.

Responsive Design

All sections will follow the responsive design concept to adjust the rendered content based on the available width and provide an optimal UX on smaller viewports.

Tasks

  • Install dependencies:
  • Configure Gatsby GraphQL source plugin.
  • Configure Gatsby Lodash plugin.
  • Implement port project metadata provider hook via static query for GitHub GraphQL API and static data.
  • Implement new SVG components for logos and section dividers.
  • Implement interactive and animated port project SVG illustration component.
  • Implement hero and card grid filter section components.
  • Implement initial pages for each currently existing port projects showing a empty state and link to refer to the GitHub repository for the meantime the pages are not implemented yet.
@arcticicestudio arcticicestudio added this to the 0.9.0 milestone Feb 3, 2019
@arcticicestudio arcticicestudio self-assigned this Feb 3, 2019
arcticicestudio added a commit that referenced this issue Feb 20, 2019
To view the metadata about the port project repositories Gatsby's
fantastic GraphQL integration (1) is used through the awesome
"gatsby-source-graphql" (2) plugin. It allows to fire queries that'll
get executed and stitches remote schemas together by adding a type that
wraps the remote schema Query type and putting it under field of Gatsby
GraphQL Query.

References:
  (1) https://www.gatsbyjs.org/docs/querying-with-graphql
  (2) https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-graphql

GH-119
arcticicestudio added a commit that referenced this issue Feb 20, 2019
To prevent UI freezes/frame drops when users typing in the input field
while the grid reacts to the changes immediately a debounce might be
used. It can wait some milliseconds before actually filtering the grid
by the given search term. To get the best performance Lodash (1) can be
used through "gatsby-plugin-lodash" (2) which sets up
"babel-plugin-lodash" (3) and "lodash-webpack-plugin" (4).

References:
  (1) https://lodash.com
  (2) https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-lodash
  (3) https://github.com/lodash/babel-plugin-lodash
  (4) https://github.com/lodash/lodash-webpack-plugin

GH-119
arcticicestudio added a commit that referenced this issue Feb 20, 2019
It uses Gatsby's static query for GitHub's GraphQL API and merges it
with the project's static data.

GH-119
arcticicestudio added a commit that referenced this issue Feb 20, 2019
Includes logos for all port projects and a new "wobbly wave" divider.

GH-119
arcticicestudio added a commit that referenced this issue Feb 20, 2019
A static vector graphic that is currently placed in the port section of
the landing (`/`) page has been implemented as interactive animated
component. It uses a 3D depth effect for the port project's logos by
moving against the direction of the current mouse position where the
larger logos will move more to give the impression that they are closer.

For the interactive animation the awesome react-spring (1) project is
used which allows, like the fantastic and also already used react-pose
(2) library, to use spring-physics based animations.
The advantage of react-spring is that it bails out of the React renderer
to avoid unnecessary renders and instead uses native methods to get the
best performance even for complex animations.
It comes with first-class support for Hooks (3), a great and extensive
documentation and a lot of examples for inspirations (4).

References:
  (1) https://www.react-spring.io
  (2) https://popmotion.io/pose
  (3) https://www.react-spring.io/docs/hooks/basics
  (4) https://www.react-spring.io/docs/hooks/examples

GH-119
arcticicestudio added a commit that referenced this issue Feb 20, 2019
This prevents false pre-fetching of non-existing pages.

GH-119
arcticicestudio added a commit that referenced this issue Feb 21, 2019
Includes logos for all port projects and a new "wobbly wave" divider.

GH-119
arcticicestudio added a commit that referenced this issue Feb 21, 2019
A static vector graphic that is currently placed in the port section of
the landing (`/`) page has been implemented as interactive animated
component. It uses a 3D depth effect for the port project's logos by
moving against the direction of the current mouse position where the
larger logos will move more to give the impression that they are closer.

For the interactive animation the awesome react-spring (1) project is
used which allows, like the fantastic and also already used react-pose
(2) library, to use spring-physics based animations.
The advantage of react-spring is that it bails out of the React renderer
to avoid unnecessary renders and instead uses native methods to get the
best performance even for complex animations.
It comes with first-class support for Hooks (3), a great and extensive
documentation and a lot of examples for inspirations (4).

References:
  (1) https://www.react-spring.io
  (2) https://popmotion.io/pose
  (3) https://www.react-spring.io/docs/hooks/basics
  (4) https://www.react-spring.io/docs/hooks/examples

GH-119
arcticicestudio added a commit that referenced this issue Feb 21, 2019
This prevents false pre-fetching of non-existing pages.

GH-119
arcticicestudio added a commit that referenced this issue Feb 21, 2019
The "Hero" section contains a feature duo container with the pages
heading and a summary about Nord's ports.
Underneath the static vector graphic that is currently placed in the
port section of the landing (`/`) page has been implemented as
interactive animated component. It uses a 3D depth effect for the port
project's logos by moving against the direction of the current mouse
position where the larger logos will move more to give the impression
that they are closer.

The "Grid Filter" section consists of a input field that allows users to
filter available port projects by predefined search terms. Underneath a
animated grid of card components reacts to the input field by filtering
non-matching ports projects.
Each card represents one port project and consists of the logo, the name
(with the "Nord" prefix) as well as a card footer that contains the
version of the latest release of the respective project and the number
of stars of the GitHub repository.

GH-119
arcticicestudio added a commit that referenced this issue Feb 21, 2019
The pages showing the empty state component and a link to refer to the
GitHub repository for the meantime the pages are not implemented yet.

GH-119
arcticicestudio added a commit that referenced this issue Feb 21, 2019
The pages showing the empty state component and a link to refer to the
GitHub repository for the meantime the pages are not implemented yet.

GH-119
arcticicestudio added a commit that referenced this issue Feb 21, 2019
@arcticicestudio arcticicestudio removed their assignment Feb 21, 2019
arcticicestudio added a commit that referenced this issue Feb 24, 2019
The latest React version 16.8.3 (1) has been released including
important bug fixes for incorrect state behaviors with the `useState`
hook as well as a fix for `<input>` elements that discarded state
updates during the render phase and reduced the performance.
The update is strongly recommended for any 16.8 release (2) by the
core team.

This bug fix release version might fix some problems that were
encountered during development of the search filter `<input>` for
GH-119.

References:
  (1) https://github.com/facebook/react/releases/tag/v16.8.3
  (2) https://twitter.com/dan_abramov/status/1098691583292133376

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

No branches or pull requests

1 participant