@iktos-oss/rdkit-provider
Version:
exports an initialized RDKit instance, with helper functions
72 lines (54 loc) • 5.16 kB
Markdown
# rdkit-provider
Initialises a web worker with `RDKitModule` instance from [/rdkit](https://github.com/rdkit/rdkit-js) and exposes it via a react context
## Setup
#### Assets
The project using this package needs to provide it with [RDKit package assets](https://github.com/rdkit/rdkit/tree/master/Code/MinimalLib#using-the-rdkit-package-assets)
After installing [/rdkit](https://github.com/rdkit/rdkit-js) copy to your public folder
`node_modules/@iktos-oss/rdkit-provider/lib/rdkit-worker*.js`
`node_modules/@rdkit/rdkit/dist/RDKit_minimal.js`
`node_modules/@rdkit/rdkit/dist/RDKit_minimal.wasm`
## Usage
Wrap your components/App with `RDKitProvider`
```html
import { RDKitProvider } from '@iktos/rdkit-provider';
<RDKitProvider>
<Component />
</RDKitProvider>
```
you can also enable caching for molecule, which would enhance performance
```html
import { RDKitProvider } from '@iktos/rdkit-provider';
<RDKitProvider cache={{ enableJsMolCaching: true, maxJsMolsCached: 50 }}>
<Component />
</RDKitProvider>
```
Options that can be passed to `RDKitProvider `:
| prop | type | functionality | required/optional |
| ----------------------- | ----------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------- |
| `cache` | `RDKitProviderCacheOptions = { enableJsMolCaching?: boolean; maxJsMolsCached?: number; }` | enables `JSMol` caching for better performance | optional |
| `preferCoordgen` | `boolean` | will be passed to [/rdkitjs prefer_coordgen](https://docs.rdkitjs.com/interfaces/RDKitModule.html#prefer_coordgen.prefer_coordgen-1) to use Schrodinger’s open-source Coordgen library to generate 2D coordinates of molecules | optional |
| `removeHs` | `boolean` | toggles removing hydrogens molecules. Defaults to true | optional |
| `kekulize` | `boolean` | toggles kekulization of molecules during instantiation. Defaults to true. Set to false to handle molecules that fail kekulization (e.g. some aromatic SMILES) | optional |
| `initialWorkerInstance` | `Worker` instance of `rdkit-worker.js` | pass an rdkit worker instance, if not passed rdkit-provider creates one for you | optional |
| `rdkitPath` | `string` default to `/RDKit_minimal.js` in `initRDKit.ts` | pass a custom path to rdkit module | optional |
| `rdkitWorkerPublicFolder` | `string`, default is '', meaning the file is at the root level of the public folder | path to the folder containing the rdkit-worker-[version].js relative to the public folder | optional |
You can make use of a set of helper functions exposed by the package
```js
import { useRDKitUtils, useRDKit } from '@iktos/rdkit-provider';
const Component = () => {
const { worker } = useRDKit();
const { isValidSmiles } = useRDKitUtils();
const submit = useCallback(
async (smiles) => {
const { isValid } = await isValidSmiles({ smiles });
if (!isValid) return;
// ...
},
[isValidSmiles],
);
if (!worker) return 'loading ...';
return <>...</>;
//...
};
```
Example of usage can be found in [github.com/iktos/molecule-representation](https://github.com/iktos/molecule-representation)