UNPKG

synapse-react-client

Version:

[![npm version](https://badge.fury.io/js/synapse-react-client.svg)](https://badge.fury.io/js/synapse-react-client) [![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettie

134 lines (82 loc) 5.4 kB
[![npm version](https://badge.fury.io/js/synapse-react-client.svg)](https://badge.fury.io/js/synapse-react-client) [![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier) ## Synapse React Client This project helps you integrate your app with the Synapse API backend. [See the available Components](https://sage-bionetworks.github.io/synapse-web-monorepo/) [Getting started](https://help.synapse.org/docs/Getting-Started.2055471150.html) with Synapse. [Synapse.org](https://www.synapse.org/) is a client written for the Synapse platform. Interested in contributing to this project? See [contributing](./CONTRIBUTING.md). ## Installation Run the following command: `npm install synapse-react-client` ## Usage See [`index.ts`](./src/index.tsx) for a comprehensive list of components that can be used. To function properly, all components must be wrapped in a [SynapseContextProvider](src/utils/context/SynapseContext.tsx). To make authenticated requests, you must provide the user's access token as a property to the context provider, among other values. You may maintain this in state, or provide it however you like. The context provider also maintains a shared cache (via `react-query`). It is recommended to place the provider at the highest possible point in your component tree, and to use the same provider across components if possible. Example: ```tsx const myToken = "example-token" // this value may also be undefined, if a user is not signed in const useUtcTime = true const inExperimentalMode = false <SynapseContextProvider synapseContext={{ accessToken: myToken, isInExperimentalMode: inExperimentalMode, utcTime: useUtcTime }} > <EntityFinder {...entityFinderProps} /> </SynapseContextProvider> ``` ## Setting Endpoints ### Configuring endpoint destinations for repo and portal Specifying the following in the window object will override request endpoints: ```js window.SRC_OVERRIDE_ENDPOINT_CONFIG = { PORTAL: '<endpoint>', REPO: '<endpoint>', } ``` Note - this will apply to all calls being made. ## Theming We are primarily using [MUI](https://mui.com/material-ui/customization/theming/) for styling and per-app theming. We provide a default theme in [DefaultTheme.ts](./src/theme/DefaultTheme.ts) which can be overridden with your own theme properties. ## SCSS Synapse React Client also uses [Dart Sass](https://sass-lang.com/dart-sass). The core css lives in [`src/style`](src/style) and `src/template_style`. For a list of variables you can override, see [`src/style/abstracts/_variables.scss`](src/style/abstracts/_variables.scss). Override the variables by importing the SCSS in your project like so: ```scss @use 'synapse-react-client/dist/style/main.scss' with ($primary-action-color: $-my-primary-color, $secondary-action-color: $-my-secondary-color, // ...any other overrides continue); @use 'synapse-react-client/dist/template_style/Index.scss'; ``` In this example, make sure that your `node_modules` folder is in your Dart Sass load path. ## Project Contents ### ``` ├── ./src │ ├── ./assets Assets such as svgs/pngs needed for logos or buttons │ ├── ./components Contains all React components │ ├── ./style Contains scss stylesheets │ ├── ./synapse-client Functions used to call the Synapse REST API │ ├── ./synapse-queries react-query hooks used to interact with the Synapse REST API │ ├── ./template-style Contains scss stylesheets │ ├── ./theme Utilities and exports for MUI theming │ └── ./utils Contains utilities ├── ./mocks Mock data used for testing and stories ├── ./test Tests for all components and utilities └── ./stories Storybook stories for components ``` ## Adding a new component and Publishing a new version of SRC To expose a component from the library you must export it from [index.ts](src/index.ts). Ideally, your component will get its own subfolder within `src/components/`, which will contain an `index.ts` file that exports the public API of the component (typically the component and its props type). In `src/components/index.ts`, you can then export the contents of the new subfolder. To expose a component for use in synapse.org, you must export it from [SWC.index.ts](src/SWC.index.ts). Note that certain dependencies are not included in this bundle. See the config used to build the bundle, `vite.config.ts`, for more details. ## Available Scripts Before doing anything else run: ### `pnpm install` In the project directory, you can run: ### `pnpm start` Runs Storybook, which allows you to inspect and interact with components. ### `pnpm test` Launches the test runner in the interactive watch mode. Links to Resources on Testing: - Vitest: https://vitest.dev/ - React Testing Library: https://testing-library.com/docs/react-testing-library/intro ### `pnpm build` Bundles the library for production to the `dist` folder. ### `pnpm build:js` Bundles the library for production to the `dist` folder using [Vite's library mode](https://vitejs.dev/guide/build#library-mode). This command creates CJS and ESM bundles with all dependencies removed, and also outputs a single TypeScript declaration file. > Note - this script is run automatically as part of the build command.