# @daohaus/moloch-v3-fields
The moloch-v3-fields package is a collection of custom field components used by [@daohaus/form-builder](https://hackmd.io/@bootleggers/Skfd50_w3/https%3A%2F%2Fhackmd.io%2F%40bootleggers%2FHyPeygYDn) when rendering forms.
These fields include some complex functionality above and beyond the basic fields in the [@daohaus/ui](https://hackmd.io/@bootleggers/Skfd50_w3/https%3A%2F%2Fhackmd.io%2F%40bootleggers%2FBkS_0JtDn) package.
### [View on Github](https://github.com/HausDAO/monorepo/tree/develop/libs/moloch-v3-fields)
- [**Field Components**](https://hackmd.io/@bootleggers/Skfd50_w3/https%3A%2F%2Fhackmd.io%2F%40bootleggers%2FBkS_0JtDn)
- [**Field config used for registering custom fields in Form Builder**](https://github.com/HausDAO/monorepo/blob/develop/libs/moloch-v3-fields/src/config/fieldConfig.ts)
### [View on NPM](https://www.npmjs.com/package/@daohaus/moloch-v3-fields)
## Usage
### Installation
```bash
yarn add @daohaus/moloch-v3-fields
```
### Examples
**How to create and add a custom field to your application**
1. Create a new field component
```jsx!
import React from "react";
import { Buildable, WrappedInput, Field } from "@daohaus/ui";
export const TestField = (props: Buildable<Field>) => {
return (
<div>
<WrappedInput {...props} />
<p>I am some strange new field with a line of text below it!!</p>
</div>
);
};
```
2. Add a fieldConfig.ts file to create a new list of available fields and add your custom field to that.
```ts!
// fieldConfig.ts
import { MolochFields } from "@daohaus/moloch-v3-fields";
import { FieldLegoBase, FormLegoBase } from "@daohaus/utils";
import { TestField } from "..fieldTest";
export const AppFieldLookup = {
...MolochFields,
strangeField: TestField,
};
export type CustomFieldLego = FieldLegoBase<typeof AppFieldLookup>;
export type CustomFormLego = FormLegoBase<typeof AppFieldLookup>;
```
3. Pass the new field lookup to the Form Builder component
```jsx!
import { FormBuilder } from "@daohaus/form-builder";
import { MolochFields } from "@daohaus/moloch-v3-fields";
import { AppFieldLookup } from "./fieldConfig";
export const FormTest = () => {
return (
<FormBuilder
<!-- ...other props -->
customFields={AppFieldLookup}
/>
);
};
```
4. Use in a field lego with the new type
```ts!
import { MolochFieldLego } from '@daohaus/moloch-v3-fields';
const StrangeFieldLego:MolochFieldLego = {
id: 'anyId',
type: 'strangeField',
label: 'Whaaa???',
placeholder: 'Enter something!',
},
```