# 🔥 View Events
### Navigation
- [🏡 Native modules made easy with Expo](/gYH9xz-oR2ai0Yih8if50w)
- [👶 First Steps](/ANE6NSUlTSimTIrN-gMsBw)
- [⚙️ Native Module](/mAIt0ctDTvSL5xV4uE9nWQ)
- [📈 Passing data to view](/_gWWp8uoQwGkqKcEyfk8Tg)
- [📚 View Props](/96IjlLNDRvydILdkbfaA5A)
- [👉 🔥 View Events](/PQWXYmxLRCebmLfx3Fh_gg)
- [🏞️ View Functions](/DcjStCFdT6euzWqnJqCL6w)
- [👷♂️ Classes and Shared Objects](/__42gVw8RqiIgfSbVseIvw)
- [📊 Views and shared object](/IgHyIAHQQPCbeBD74Ri4BA)
---
### Task 1
Clicking on a data point should trigger an event called `onDataSelect`. The event data should include the selected point's `x` and `y` values.
:::spoiler :robot_face: Android
:open_file_folder: File `android/src/main/java/expo/modules/workshopscharts/LinearChartModule.kt`
```kotlin
Events("onDataSelect")
```
:open_file_folder: File `android/src/main/java/expo/modules/workshopscharts/LinearChartView.kt`
```kotlin
private val onDataSelect by EventDispatcher<Map<String, Float>>()
// ...
init {
// ...
chartView.setOnChartValueSelectedListener { entry, _ ->
onDataSelect(mapOf(
"x" to entry.x,
"y" to entry.y
))
}
// ...
}
```
:::
:::spoiler :apple: iOS
:open_file_folder: File `ios/LinearChartModule.swift`
```swift
Events("onDataSelect")
```
:open_file_folder: File `ios/LinearChartView.swift`
```swift
class LinearChartView: ExpoView, ChartViewDelegate {
var onDataSelect = EventDispatcher()
// ...
public required init(appContext: AppContext? = nil) {
// ...
chartView.delegate = self
}
// ...
func chartValueSelected(
_ chartView: ChartViewBase,
entry: ChartDataEntry,
highlight: Highlight
) {
onDataSelect([
"x": entry.x,
"y": entry.y
])
}
// ...
}
```
:::
<br />
📝 Full changelog: [open GitHub Commit](https://github.com/software-mansion-labs/appjs-2023-workshop-expo-modules/commit/f660c498966edf50e0a72a80436b9900c6aace1d)
---
### Task 2
Zooming on a chart should trigger an event called `onScale`. The event data should include the `scaleX` and `scaleY` values.
:::spoiler :robot_face: Android
:open_file_folder: File `android/src/main/java/expo/modules/workshopscharts/LinearChartModule.kt`
```kotlin
Events("onDataSelect", "onScale")
```
:open_file_folder: File `android/src/main/java/expo/modules/workshopscharts/LinearChartView.kt`
```kotlin
private val onScale by EventDispatcher<Map<String, Float>>()
// ...
init {
// ...
chartView.setOnChartScale { _, scaleX, scaleY ->
onScale(mapOf(
"scaleX" to scaleX,
"scaleY" to scaleY
))
}
// ...
}
```
:::
:::spoiler :apple: iOS
:open_file_folder: File `ios/LinearChartModule.swift`
```swift
Events("onDataSelect", "onScale")
```
:open_file_folder: File `ios/LinearChartView.swift`
```swift
var onScale = EventDispatcher()
// ...
func chartScaled(_ chartView: ChartViewBase, scaleX: CGFloat, scaleY: CGFloat) {
onScale([
"scaleX": scaleX,
"scaleY": scaleY
])
}
```
:::
<br />
📝 Full changelog: [open GitHub Commit](https://github.com/software-mansion-labs/appjs-2023-workshop-expo-modules/commit/fbd2774d875cb10e66833391b54cff125fab1a9b)
---
### [🏞️ View Functions](/DcjStCFdT6euzWqnJqCL6w)