add onAction callback