This is a Next.js project bootstrapped with create-next-app.
First, run the development server:
npm run dev
# or
yarn dev
# or
pnpm devOpen http://localhost:3000 with your browser to see the result.
You can start editing the page by modifying app/page.tsx. The page auto-updates as you edit the file.
This project uses next/font to automatically optimize and load Inter, a custom Google Font.
npm run type-checkto see all type errors
Hosting environments that use runtime variables need to be able to send public client env vars to the client.
To do this we create an api route which provides a config /src/app/api/config/config.ts
This creates a config object based on a priority of server process vals , then client build time vals and finally a hardcoded default.
In our UI we provide values via a context provider AppConfigProvider. This means that accessing app config variables needs to be done in a "react way" - using context and hooks correctly. Importing from a regular function in a module does not work.
Build time variables are inlined and "frozen" at build time. They are explained here: https://nextjs.org/docs/pages/building-your-application/configuring/environment-variables
docker compose file for local development
created an .env file based on .env.schema
in compose folder, run docker-compose up command
Please recompile Apollo GQL when needed using the npm run gql-compile command
To learn more about Next.js, take a look at the following resources:
- Next.js Documentation - learn about Next.js features and API.
- Learn Next.js - an interactive Next.js tutorial.
You can check out the Next.js GitHub repository - your feedback and contributions are welcome!
In using UIKit we are tied to using a CSS-in-JS paradigm of styling.
Please prefer usage of the css prop and functions over the styled method.
- it's easier to debug (less wrapping in the browser inspectors)
- typechecking css property values is possible
In an attempt to try and keep things clean and bug free, Emotion functions are used directly from UIKit. @emotion/react is only installed as a dependency in this project for types.
react + react dom + emotion all versions needs to be in sync with @icgc-argo/uikit
We use both regular style HTTP endpoints and GQL endpoints. We use Apollo GQL store on the frontend for most state.
Any queries that are NOT GQL and do not have persisted state on the server will need to manually update the Apollo store. https://www.apollographql.com/docs/react/data/mutations/
If there is persisted state on the server, it's possible to use the Apollo refetch function to have the Apollo store sync.