refactor: use 1-way databinding