Toolkit for building apps that interact with Vega
Go to file
Sam Keen 4ef8218267
Feat/800 better proposal ux round 1 (#1223)
* Feat/800: Configured routes for different proposal types

* Feat/800: Refactored propose.tsx to be a hub for the new proposal routes

* Feat/800: Link style tweak for proposals guide

* Feat/927: Hydrating the new proposal forms

* chore: fix typings for shared components

* Feat/927: Proposal forms built with reusable components

* Feat/800: Updated network params, added new method to get param keys as well as values, updated generated types

* Feat/800: Updated and built more reusable proposal form components

* Feat/800: Removed old catchall file of reusable proposal form components

* Feat/800: Added utils for vote deadline and enactment timestamps

* Feat/800: Readded necessary 'color-scheme-dark' class for dark-theme date and datetime inputs

* Feat/800: Tweak to icon positioning on the dialog component

* Feat/800: Regenerated types for network params

* Feat/800: Added iso8601-duration package for working with API vote deadline and enactment data

* Feat/800: Reworked the proposal forms

* Feat/800: Couple of translation additions

* Feat/800: Another translation addition

* Feat/800: Raw proposal test (tests as per old proposal form test)

* Feat/800: Some basic proposal form tests

* Feat/800: Fixing small types error in test

* Feat/800: Updating simple proposal form tests

* Feat/800: Set up env-specific proposal docs links

* Feat/800: Deadlines to the bottom of proposal forms

* Feat/800: Another type error from API changes fixed

* Feat/800: Added the spam protection min tokens network param to proposal forms requests, and the min requirements now displays the larger value of spam protection or min proposer balance

* Feat/800: Network param value change now a textarea

* Feat/800: Improved way to pass docs url

* Feat/800: Added useful explorer links to proposal forms

* Feat/800: Show current value of selected network param in proposal form

* Feat/800: Removed wallet-confirmation buffer, suspect it is not necessary

* Feat/800: Condense vote and enactment ui into single component for simpler state management, memoised some stuff

* Feat/800: Set a default select option for the market selector

* Feat/800: For network params that aren't JSON, display the network param current value in a readonly text input rather than the syntax highlighter

* Feat/800: Corrected network param form network params

* Feat/800: Timestamp functions for closing, enactment and validation, with tests

* Feat/800: More translations

* Feat/800: Added validation options to proposal-form-vote-and-enactment-deadline.tsx, generally improved the component and added tests

* Feat/800: Improved workings of proposal-form-min-requirements.tsx and wrote tests

* Feat/800: Tests for the other reusable form components

* Feat/800: Improved tests for the proposal forms

* Feat/800: Corrected mistake in get-enactment-timestamp.ts

* Feat/800: Fixed type issues that were preventing spotting an error

* Feat/800: Added some extra docs links

* Feat/800: Using renamed Dialog passed in from useProposalSubmit

* refactor: network params to return an object

* fix: update net param form, remove old net params obj

* fix: check for params before rendering

* Feat/800: Rename and simplify isJson based off PR comment

* Feat/800: Small tweaks to timestamp helpers based on PR comments

* Feat/800: Removed proposal-docs-link.tsx

* Feat/800: Used bignumber for min-requirements calculation

* Feat/800: Update tests to work with merged network params branch

* Feat/800: Removed unnecessary translations splitting

* Feat/800: Removed unwanted test

* Feat/800: Removed unwanted tests

* Feat/800: Consistent arrow functions

* Feat/800: Sorted links

* Feat/800: Removed unnecessary typecasting

* Feat/800: Refactored routing

* Feat/800: Refactored mocking of proposal forms to use MockedProvider

* Feat/800: Correct response from the raw proposal submission test

* Feat/800: Removed console.logs added for debugging

* Feat/800: Result of running 'nx format:write'

* Feat/800: Cleaning up lint warnings

* Update apps/token/.env.stagnet3

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

* Feat/800: Added extra test for docs link in the proposal-form-terms component

* Feat/800: Removed stray console.log

* Feat/800: Added basic render test for proposal-form-terms and cleaned up a bit

* Feat/800: Added tests for the correct form components for the different forms

* Feat/800: Split up the proposal-form-vote-and-enactment-deadline components inside the file to make things a bit more readable

* Feat/800: router config webpack chunk name tweak

* Feat/800: Lint issue fixed

* Feat/800: Fixed timing issue with get-[deadline]-timestamp tests

* Feat/800: Setting a system time in proposal-form-vote-and-enactment-deadline.spec.tsx that doesn't get affected by British Summer Time

* Feat/800: Skipping a cypress test as the newProposalButton no longer takes a user directly to a proposal form. Leaving it in the codebase as the test is very likely to be updated.

* Feat/800: Adding comment on why I've skipped a cypress test

Co-authored-by: Dexter <dexter@vega.xyz>
Co-authored-by: Matthew Russell <mattrussell36@gmail.com>
Co-authored-by: Dexter Edwards <dexter.edwards93@gmail.com>
2022-09-23 11:10:13 +01:00
.github Test/783 cypress tags (#1428) 2022-09-22 18:40:11 +01:00
.husky chore: remove build and test precommit checks (#1285) 2022-09-08 10:24:11 +01:00
.storybook Add storybook/addon-a11y 2022-03-07 13:57:06 -08:00
.vscode chore: remove vscode settings 2022-08-22 11:08:37 -07:00
apps Feat/800 better proposal ux round 1 (#1223) 2022-09-23 11:10:13 +01:00
dockerfiles ci: fix publishing docker images (#1104) 2022-08-30 09:53:27 +01:00
libs Feat/800 better proposal ux round 1 (#1223) 2022-09-23 11:10:13 +01:00
nginx Feat/dockerize frontends (#388) 2022-06-13 15:39:17 +01:00
scripts chore: remove stagnet1, fix env vars for api endpoints (#1163) 2022-08-25 17:07:27 -07:00
tools chore: refactor global store (#1241) 2022-09-05 15:25:33 +01:00
vegacapsule Test/governance suite expansion (#1372) 2022-09-16 18:12:08 +01:00
.dockerignore ci: fix publishing docker images (#1104) 2022-08-30 09:53:27 +01:00
.editorconfig Normalize line endings (#207) 2022-04-06 11:59:51 +01:00
.eslintrc.json chore: set curly eslint rule to multi line (#1322) 2022-09-16 17:04:32 +01:00
.gitattributes Normalize line endings (#207) 2022-04-06 11:59:51 +01:00
.gitignore feat(#927) design update (#1201) 2022-08-30 21:35:46 -07:00
.nvmrc Add .nvmrc and engine, set node version to 16.14.0 2022-02-17 13:43:41 +01:00
.prettierignore Fix/1083: Update type generator (#1219) 2022-09-06 10:03:10 +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
env-config.js Feat: Containerised docker images (#700) 2022-07-25 09:48:29 +01:00
env.sh Feat/dockerize frontends (#388) 2022-06-13 15:39:17 +01:00
jest.config.ts feat(#927) design update (#1201) 2022-08-30 21:35:46 -07:00
jest.preset.js feat(#927) design update (#1201) 2022-08-30 21:35:46 -07:00
LICENSE Create a Mono-repo for DeFiUI + ui toolkit using nx 2022-02-11 15:02:11 +01:00
migrations.json feat(#927) design update (#1201) 2022-08-30 21:35:46 -07:00
netlify.toml Remove custom ignore (#221) 2022-04-07 12:24:04 +01:00
nx.json feat(#927) design update (#1201) 2022-08-30 21:35:46 -07:00
package.json Feat/800 better proposal ux round 1 (#1223) 2022-09-23 11:10:13 +01:00
README.md fix: readme with new env var for type gen (#1288) 2022-09-08 12:07:08 +02:00
tsconfig.base.json chore: LP tooltips & move market-info lib (#1267) 2022-09-12 11:07:29 +02:00
workspace.json feat: lp dashboard setup (#1327) 2022-09-15 08:37:02 -07:00
yarn.lock Feat/800 better proposal ux round 1 (#1223) 2022-09-23 11:10:13 +01: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 GRAPHQL_SCHEMA_PATH=[YOUR SCHEMA FILE / API URL HERE] nx run types:generate.

export  GRAPHQL_SCHEMA_PATH=https://api.n11.testnet.vega.xyz/graphql
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 --dockerfile dockerfiles/Dockerfile.cra . --build-arg APP=[YOUR APP] --tag=[TAG]

In order to run a container:

docker run -p 3000:80 [TAG]

Images ending with .dist are to pack locally created transpiled HTML files into nginx container for non-compatible with yarn architectures like M1 Mac

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://api.n04.d.vega.xyz/graphql -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.

If you wish to run E2E tests for Token and Block Explorer (other areas to be added soon)

  • Vegacapsule must be used in order for these tests to succeed, the vegacapsule repo README.md file contains the steps required to set this up, it must be installed globally.
  • However we start the capsule network a little differently to how it is laid out in those instructions:

In order to run the bootstrap command to generate and start a new network, we must do so using the following:

vegacapsule network bootstrap --config-path=../frontend-monorepo/vegacapsule/config.hcl

📑 License

MIT