@empathyco/x-components
Version:
Empathy X Components
143 lines (114 loc) • 5.45 kB
Markdown
---
title: BaseEventsModal
---
# BaseEventsModal
Component containing a modal that emits a XEventsTypes.UserClickedCloseEventsModal when
clicking outside the content rendered in the default slot and can receive, through the
eventsToCloseModal prop, a list of XEvent to listen to in order to close
also the modal, eventsToOpenModal prop, another list of XEvent to customize
the events to listen to open the modal and a prop, displayOverlay, to display an
overlay over the rest of the html. The default slot offers the possibility to customize the
modal content.
## Props
| Name | Description | Type | Default |
| ------------------------------- | ----------------------------------------------------------------------------- | -------------------------- | ------------------------------------------------------------------------------------------- |
| <code>eventsToOpenModal</code> | Array of XEvent to listen to open the modal. | <code>XEvent[]</code> | <code>(): XEvent[] => ['UserClickedOpenEventsModal']</code> |
| <code>eventsToCloseModal</code> | Array of XEvent to listen to close the modal. | <code>XEvent[]</code> | <code>(): XEvent[] => ['UserClickedCloseEventsModal', 'UserClickedOutOfEventsModal']</code> |
| <code>bodyClickEvent</code> | Event to emit when any part of the website out of the modal has been clicked. | <code>XEvent</code> | <code>'UserClickedOutOfEventsModal'</code> |
| <code>animation</code> | Animation to use for opening/closing the modal. | <code>AnimationProp</code> | <code></code> |
## Slots
| Name | Description | Bindings<br />(name - type - description) |
| -------------------- | ----------- | ----------------------------------------- |
| <code>default</code> | | None |
## Events
A list of events that the component will emit:
- [`UserClickedCloseEventsModal`](https://github.com/empathyco/x/blob/main/packages/x-components/src/wiring/events.types.ts):
the event is emitted after clicking outside the content rendered in the default slot.
- [`UserClickedOutOfEventsModal`](https://github.com/empathyco/x/blob/main/packages/x-components/src/wiring/events.types.ts):
the event is emitted after clicking outside the modal.
- Custom events to open or close the modal.
## Examples
The `BaseEventsModal` component handles the modal open/close state via the events passed via props.
Its configured by default to work as a modal for a whole search application, but if the events are
changed, it can work as a modal that is opened/closed when the events it is listening are emitted.
### Basic usage
The component interacts with the open and close components, which are preconfigured by default to
emit the same events that the `BaseEventsModal` component is listening to:
```vue
<template>
<div>
<BaseEventsModalOpen>Open</BaseEventsModalOpen>
<BaseEventsModal>
<BaseEventsModalClose>Close</BaseEventsModalClose>
<img src="success.png" />
</BaseEventsModal>
</div>
</template>
<script>
import { BaseEventsModalOpen, BaseEventsModal } from '@empathyco/x-components'
export default {
name: 'ModalTest',
components: {
BaseEventsModalOpen,
BaseEventsModal,
},
}
</script>
```
### Customizing the events
If needed, the events to open/close the modal can be changed. The modal can listen one or more
events. To do so, the `eventsToCloseModal` and `eventsToOpenModal` props can be used. Below you can
see a full example on how this would work with custom events.
```vue
<template>
<div>
<BaseEventsModalOpen openingEvent="UserClickedOpenMyCustomModal">Open</BaseEventsModalOpen>
<BaseEventsModal
:eventsToCloseModal="eventsToCloseModal"
:eventsToOpenModal="eventsToOpenModal"
>
<BaseEventsModalClose closingEvent="UserClickedCloseMyCustomModalFromHeader">
Close from header
</BaseEventsModalClose>
<img src="success.png" />
<BaseEventsModalClose closingEvent="UserClickedCloseMyCustomModalFromFooter">
Close from footer
</BaseEventsModalClose>
</BaseEventsModal>
</div>
</template>
<script>
import { BaseEventsModalOpen, BaseEventsModal, BaseEventsModalClose } from '@empathyco/x-components'
export default {
name: 'ModalTest',
components: {
BaseEventsModalOpen,
BaseEventsModal,
BaseEventsModalClose,
},
}
</script>
```
### Customizing the content with classes
The `contentClass` prop can be used to add classes to the modal content.
```vue
<template>
<div>
<BaseEventsModalOpen>Open</BaseEventsModalOpen>
<BaseEventsModal contentClass="x-bg-neutral-75">
<BaseEventsModalClose>Close</BaseEventsModalClose>
<img src="success.png" />
</BaseEventsModal>
</div>
</template>
<script>
import { BaseEventsModalOpen, BaseEventsModal } from '@empathyco/x-components'
export default {
name: 'ModalTest',
components: {
BaseEventsModalOpen,
BaseEventsModal,
},
}
</script>
```