# Implementation of pages
You can implement the functionality by using the Handler provided on each page.
# Label Editor page - /labeleditor
# Implementation example
You need to implement green area.

# Label Editor Handler
Get handler object
const labelEditorHandler = app.labelEditorHandler
labelEditorHandler.ready().then((payload: LabelEditorPayload) => {
console.log(payload)
})
LabelEditorPayload schema
| Name | Type | Description | Example |
|---|---|---|---|
| projectLabels | Object | Current value of label object | |
| sampleData | Array | List of sample data |
When save label
labelEditorHandler.saveLabel(newValue)
Dismiss the label editor
labelEditorHandler.cancelEditLabel()
When saving template options
labelEditorHandler.saveTemplateOptions(data: any)
Template's options are metadata, which allow to add additonal config to template
# Workspace page - /workspace
# Implementation example
You need to implement green area.

# Workspace Handler
TaskData schema
task: {
taskSources: TaskSource[]
previousResult: any
isRejected: boolean
id: number
projectLabels: any
commentCount: any
}
meta: {
readOnly: boolean
canEdit: boolean
}
| Name | Type | Description | Example |
|---|---|---|---|
| task.taskSources | Array | List of task resources, ex: task image | |
| task.previousResult | Previous work result | ||
| task.isRejected | Boolean | Indicate if current task is rejected before or not | |
| task.id | Number | Task ID | |
| task.projectLabels | Object | Project's label | |
| task.commentCount | Number | Number of comments | |
| meta.readOnly | Boolean | Indicate if the task is readonly or not | |
| meta.canEdit | Boolean | Indicate if user can edit task or not |
TaskSource schema
| Name | Type | Description |
|---|---|---|
| fileName | String | File name |
| fileURL | String | File URL |
Get handler object
taskHandler = app.taskHandler
Start work
taskHandler.startWork().then((taskData) => {})
Submit the result and get new task
taskHandler.submit(yourResultObject).then((newTaskData) => {})
Skip the result and get new task
taskHandler.skip().then((newTaskData) => {})
Show comments
taskHandler.showComment()
Start edit the task
taskHandler.startEdit().then((taskData) => {})
# Review page - /review
# Implementation example
You need to implement green area.

# Review page handler
Result schema
| Name | Type | Description | Example |
|---|---|---|---|
| id | Number | Result id | |
| taskId | Number | Task id | |
| status | Number | Current Result Status | |
| workedAt | String | Indicate the time current result is created | |
| fileName | String | File name | |
| fileURL | String | File URL | |
| commentCount | Number | Number of comment | |
| information | Object | Current result |
Get the task handler and set callback for onResultChanges event.
const reviewHandler = app.reviewHandler
reviewHandler.onResultChanges((payload: ReviewPayload) => {})
reviewHandler.ready()
Review Payload Schema
| Name | Type | Description | Example |
|---|---|---|---|
| results | Array | List of results | |
| labels | number[] | List of visible labels' id | |
| projectLabels | Object | Project's label | |
| canReview | Boolean | Indicate if user can review the result or not | |
| viewOptions.size | String | Possible value: sm, md, lg which indicate size of review card |
Render using web-component
You need to custom preview slot
<abj-review-card
result={result}
canReview={this.canReview}
cardSize={this.cardSize}
></abj-review-card>
Example:
<abj-review-card
result={result}
canReview={this.canReview}
cardSize={this.cardSize}
>
<preview-detection result={result} labels={this.labels} />
</abj-review-card>