# Javascript Hooks

### Hook structure

We have set up a structure for you that makes it easy to keep adding hooks. To add a new hook:

1. `touch /assets/js/hooks/my-hook.js`
2. Make sure you export it:

```javascript
const MyHook = {
  ...
};

export default MyHook;
```

3. In `hooks/index.js`, import it:

```javascript
import MyHook from "./my-hook";

export default {
  MyHook,
};
```

It will now be available to use in your HEEX templates:

```
<div phx-hook="MyHook"></div>
```

Note that in dead views, only the `mounted()` callback will be run.&#x20;

### Hooks from Petal Pro

#### Remove flash hook

This hook pairs with the `<.flash_group>` component and will auto-dismiss a flash message after a period of time (10 seconds).

#### Resize text area hook

Textareas can be annoying to write in when your content exceeds the height and a scrollbar appears. This hook will auto-resize the textarea as you type in it - so it will never have a scroll bar in it and will keep getting bigger as you add more content.

#### Scroll top hook

Imagine you have a live view with multiple "pages" within it that you navigate via `live_patch` links. There is a bug where, if you're on say Page 1 and the content is larger than the view port and you've scrolled down somewhat - if you click a `live_patch` link to another "page", the content doesn't scroll up. So the content has changed underneath you but you're half way down the page so it's a confusing user experience. You can place `phx-hook="ScrollTopHook"` on the `live_patch` link and it will scroll the page to the top for you when you click it.
