Toolkit for building apps that interact with Vega
Go to file
botond 836c232a1c
Feat/675: Git info (#683)
* feat: add network-switcher lib

* feat: add env variables for some deployed app urls

* feat: add network processing to environment hoook

* refactor: network handling

* refactor: remove dialog from provider and add env setter

* feat: add network switcher dialog to the trading app

* refactor: add network redirect to dialog connect callback

* fix: lint

* feat: add network configuration files to static app

* feat: update environments to use config file instead of static node url

* refactor: split out network switcher utils

* refactor: split up environment hook

* fix: jsonify env variable for possible networks

* fix: add formatter file

* feat: add network loader component

* feat: add network loader to the trading app

* fix: assign correct global state to network swicther

* feat: add status modal

* feat: add network-switcher lib

* feat: add env variables for some deployed app urls

* feat: add network processing to environment hoook

* refactor: network handling

* refactor: remove dialog from provider and add env setter

* feat: add network switcher dialog to the trading app

* refactor: add network redirect to dialog connect callback

* fix: lint

* fix: jsonify env variable for possible networks

* fix: add formatter file

* fix: assign correct global state to network swicther

* fix: failing tests from UI changes

* feat: add environment validation

* feat: add runtime validation for network configs

* fix: readd node urls to envs to avoid breaking the apps for now

* chore: rename network swicther lib to environmnet

* fix: lint

* feat: add tests for config hook

* feat: add environment hook tests

* fix: lint

* fix: lint

* feat: add environment hook tests

* feat: add storage tests

* fix: formet

* feat: improve loading states

* fix: format

* fix: use router instead of window location

* fix: rearrange network loader props and components

* fix: remove FC type

* fix: env validation

* fix: untangle returns in network loader

* fix: add teardown for env and localstorage

* fix: add custom to env networks

* fix: lint

* fix: format

* fix: lint

* fix: remove env provider from simple trading app

* fix: remove failing promise hacks

* fix: some leftover format files

* fix: remove network switcher from tsconf

* fix: move Networks to libs/environment

* fix: add defaults for ether env vars

* feat: add tests for default ether env vars

* fix: remove chain id env var from web3 container

* fix: remove chain id from the environment

* fix: format

* fix: lint token

* fix: lint env

* fix: add comment to callout hack

* fix: lint token again

* fix: remove skip

* fix: move addresses to token app

* fix: improve schema validation errors and fix token app

* fix: lint

* fix: format

* fix: format

* fix: add network loaders to apps

* fix: format

* fix: remove logs

* fix: cypress process errors

* fix: change network loader hierarchy in token

* fix: remove stray console.log

* fix: revert test changes in simple trading app

* fix: prefix env vars with NX

Co-authored-by: Dexter Edwards <dexter.edwards93@gmail.com>

* fix: improve schema validation errors and fix token app

* fix: format

* fix: disable lint rules for catch block any types

* fix: format again

* fix: remove redundant process.platform injections

* fix: format

* feat: add explorer footer

* fix: format

* feat: add custom executor for next

* feat: adjust footer links and add custom executors

* fix: lint and format

* fix: format again

* fix: add explicit github feedback url

* fix: create footer lib

* feat: add footer to token app

* fix: add compiled file to ignore

* fix: make lozenge styling more flexible when no variant specified

* fix: remove schema duplication for third party executors

* fix: add missing intent variant for the lozenge

* fix: move commit hash in footer down two positions

* fix: revert breaking schema removals

* fix: format

* chore: rename footer to network-info

* fix: format

Co-authored-by: Joe <joe@vega.xyz>
Co-authored-by: Matthew Russell <mattrussell36@gmail.com>
Co-authored-by: Dexter Edwards <dexter.edwards93@gmail.com>
2022-07-06 15:53:35 +00:00
.github chore: make tranches update 4 times a day 2022-06-17 15:47:41 -07:00
.husky chore: add commit lint (#398) 2022-05-16 13:36:03 -04:00
.storybook Add storybook/addon-a11y 2022-03-07 13:57:06 -08:00
.vscode Feat/300 network parameters table (#333) 2022-05-04 18:15:54 +03:00
apps Feat/675: Git info (#683) 2022-07-06 15:53:35 +00:00
libs Feat/675: Git info (#683) 2022-07-06 15:53:35 +00:00
nginx Feat/dockerize frontends (#388) 2022-06-13 15:39:17 +01:00
scripts Ci/generate tranches (#401) 2022-05-17 13:26:04 +01:00
tools Feat/675: Git info (#683) 2022-07-06 15:53:35 +00:00
.dockerignore Feat/dockerize frontends (#388) 2022-06-13 15:39:17 +01:00
.editorconfig Normalize line endings (#207) 2022-04-06 11:59:51 +01:00
.eslintrc.json renaming test files (#351) 2022-05-12 13:32:14 +01:00
.gitattributes Normalize line endings (#207) 2022-04-06 11:59:51 +01:00
.gitignore Feat/675: Git info (#683) 2022-07-06 15:53:35 +00:00
.nvmrc Add .nvmrc and engine, set node version to 16.14.0 2022-02-17 13:43:41 +01:00
.prettierignore Ci/generate tranches (#401) 2022-05-17 13:26:04 +01:00
.prettierrc Create a Mono-repo for DeFiUI + ui toolkit using nx 2022-02-11 15:02:11 +01:00
.sentryclirc Chore/sentry (#163) 2022-03-29 18:29:29 +01:00
babel.config.json Create a Mono-repo for DeFiUI + ui toolkit using nx 2022-02-11 15:02:11 +01:00
CODEOWNERS add code owners 2022-02-23 08:53:57 +00:00
commitlint.config.js chore: add commit lint (#398) 2022-05-16 13:36:03 -04:00
Dockerfile Feat/dockerize frontends (#388) 2022-06-13 15:39:17 +01:00
env-config.js Feat/dockerize frontends (#388) 2022-06-13 15:39:17 +01:00
env.sh Feat/dockerize frontends (#388) 2022-06-13 15:39:17 +01:00
jest.config.js Create a Mono-repo for DeFiUI + ui toolkit using nx 2022-02-11 15:02:11 +01:00
jest.preset.js Create a Mono-repo for DeFiUI + ui toolkit using nx 2022-02-11 15:02:11 +01:00
LICENSE Create a Mono-repo for DeFiUI + ui toolkit using nx 2022-02-11 15:02:11 +01:00
migrations.json Fixes for workflows (#291) 2022-04-22 17:51:18 -07:00
netlify.toml Remove custom ignore (#221) 2022-04-07 12:24:04 +01:00
nx.json [#168] Add static app to host AlphaLyrae font 2022-03-31 09:11:29 +02:00
package.json test: update to latest Cypress version (10.2.0) (#655) 2022-06-28 11:07:31 -07:00
README.md Feat/471 cancel order (#610) 2022-06-29 10:03:20 +01:00
tsconfig.base.json Feat/675: Git info (#683) 2022-07-06 15:53:35 +00:00
workspace.json Feat/675: Git info (#683) 2022-07-06 15:53:35 +00:00
yarn.lock Add pagination support to generic-data-provider (#691) 2022-07-05 15:33:50 +02:00

Vega front-end monorepo

The front-end monorepo provides a toolkit for building apps that interact with Vega, as well as the apps themselves.

This repository is managed using Nx.

🔎 Applications in this repo

Block explorer

The Vega block explorer provides an interface that allows users to search for and see transactions, blocks, parties, assets, markets and more on the Vega chain.

Trading UI

The trading interface built based on a component toolkit. It will provide a way for participants to interact with markets and provide resources for others to build additional open-source user interfaces.

Token

The utility dApp for interacting with the Vega token and using its' utility. This includes; delegation, nomination, governance and redemption of tokens.

Explorer

The block explorer for the Vega network, showing details of raw chain states and the state of markets on the Vega network.

Stats

An application for the status of the Vega network. Showing block height and other network activity.

Static

Hosting for static content being shared across apps, for example fonts.

🧱 Libraries in this repo

UI toolkit

The UI toolkit contains a set of components used to build interfaces that can interact with the Vega protocol, and follow the design style of the project. It contains a storybook that can be served with yarn nx run ui-toolkit:storybook.

Tailwind CSS config

The Tailwind CSS config contains theme that align default config with Vega design system.

Cypress

For shared Cypress logic, commands and steps.

Web3

A utility library for connecting to the Ethereum network and interacting with Vega Web3 contracts.

React Helpers

Generic react helpers that can be used across multiple applications, along with other utilities.

💻 Develop

Set up

Check you have the correct version of Node. You can install NVM to switch between node versions. Then NVM install. Before you build you will need to yarn install in the root directory. The repository includes a number of template .env files for different networks. Copy from these to the .env file before serve to launch app with different network. You can serve any application with yarn nx run <name-of-app>:serve.

Build

Run nx build my-app to build the project. The build artifacts will be stored in the dist/ directory. Use the --prod flag for a production build.

Run nx serve my-app for a dev server. Navigate to the port specified in app/<project-name>/project.json. The app will automatically reload if you change any of the source files.

Using Apollo GraphQL and Generate Types

In order to generate the schemas for your GraphQL queries, you can run nx run types:generate. If it is the first time you are running the command, make sure you are setting up the environment variable from apollo.config.js.

export  NX_VEGA_URL=https://lb.testnet.vega.xyz/query
yarn nx run types:generate

Running tests

Run yarn nx run <my-app>-e2e:e2e to execute the e2e tests with cypress, or nx affected:e2e will execute just the end-to-end tests affected by a change. You can use the --watch flag to open the cypress tests UI in watch mode, see cypress executor for all CLI flags.

Run nx test my-app to execute the unit tests with Jest, or nx affected:test to execute just unit tests affected by a change. You can also use --watch with these test to run jest in watch mode, see Jest executor for all CLI flags.

Trading app E2E tests

To run tests locally using your own wallets you can add the following environment variables to cypress.json

  1. Change TRADING_TEST_VEGA_WALLET_NAME to your Vega wallet name
  2. Add TRADING_TEST_VEGA_WALLET_PASSPHRASE as your wallet passphrase
  3. Add ETH_WALLET_MNEMONIC as your Ethereum wallet mnemonic

Formatting

In CI linting, formatting and also run. These checks can be seen in the CI workflow file.

  • To fix linting errors locally run yarn nx lint --fix
  • To fix formatting errors local run yarn nx format:write
  • For either command you may use --all to run across the entire repository

Further help with Nx

Visit the Nx Documentation to learn more.

Docker & Vegacapsule

Docker

The Dockerfile for running the frontends is pretty basic, merely building the application with the APP arg that is passed in and serving the application from nginx. The only complexity that exists is that there is a script which allows the passing of run time environment variables to the containers. See configuration below for how to do this.

You can build any of the containers locally with the following command:

docker build . --build-arg APP=[YOUR APP] --tag=[TAG]

In order to run a container:

docker run -p 3000:80 [TAG]

Config

As environment variables are build time and not run time in frontend applications. We have built a system which allows for passing run time environment variables, this generates a JSON file that will override the default environment variables that the container was built with (which is always testnet, using the default .env files).

In order to override specific environment variables you can pass these to the container like this:

docker run -e NX_VEGA_URL=https://n04.d.vega.xyz/query -p 3000:80 [TAG]

Which will now point the app to use a devnet data node. To see a list of all possible config properties see the readme.md for each app in the app directory.

Vega capsule

Coming soon! You will be able to run the containers within Vega Capsule.

You can run against a local instance of Vega Capsule today by using the .env.capsule present in the apps.

📑 License

MIT