Code/k/Views/ViewBase.cs
using Sandbox.k.Interfaces;
using Sandbox.k.Models;

namespace Sandbox.k.Views {
    public class ViewBase : Component {
        protected virtual void Awake() {
            Initialize();
        }

        protected virtual void OnEnable() {
        }

        protected virtual void OnDisable() {
        }

        public virtual void OnViewModelUpdate(ViewModelBase model) {
        }

        protected virtual void Initialize() {
        }

        public virtual void SetActive(bool isActive, IViewAnimation viewAnimation = null) {
            GameObject.Enabled = isActive;
            if (isActive && viewAnimation != null) viewAnimation.Play(GameObject);
        }

        public bool IsActive => GameObject.IsValid() && GameObject.Enabled;
    }
}