# FormBuilder Events
```csharp
// Common Interfaces
interface IStateTracker<TCurrent, TPrevious>
{
TCurrent Current { get; }
TPrevious Previous { get; }
}
interface IEventData<TRequest, TCurrent, TPrevious>
{
EventType Type { get; }
TRequest Request { get; }
IStateTracker<TCurrent, TPrevious> State { get; }
}
```
## AddControl
> Note:
> request and final order might be different
```json
{
"type": "AddControl",
"request": {
"controlId": "Guid",
"controlType": "Page",
"parentId": "Guid or null",
"order": "1"
},
"State": {
"current": {
"order": "2"
},
"previous": {}
}
}
```
## MoveControl
> Note:
> request and final order might be different
```json
{
"type": "MoveControl",
"request": {
"controlId": "Guid",
"parentId": "Guid or null",
"order": "1"
},
"State": {
"current": {
"parentId": "Guid or null",
"order": "2"
},
"previous": {
"parentId": "Guid or null",
"order": "5"
}
}
}
```
## RemoveControl
> Note:
> `deletedIds` list must include request `controlId`
```json
{
"type": "RemoveControl",
"request": {
"controlId": "Guid",
},
"State": {
"current": {
"deletedIds": [
"Guid: Control[1].Id",
"Guid: Control[2].Id",
"Guid: Control[...].Id"
]
},
"previous": {
"deletedControls": [
{/*Entire Control[1] Object*/},
{/*Entire Control[2] Object*/},
{/*Entire Control[..] Object*/},
]
}
}
}
```
## ChangePropertyValue
```json
{
"type": "ChangePropertyValue",
"request": {
"controlId": "Guid",
"entityType": "Form|Control",
"Property":{
"Path": "",
"Value": "",
}
},
"State": {
"current": {
"Value": "",
},
"previous": {
"Value": "",
}
}
}
```