import { Component, Vue } from 'vue-property-decorator';

/**
 * Вызывает метод refresh() на компоненте который наследует этот mixin
 * тогда когда пользователь нажимает F5 либо CTRL+R либо CTRL+Shift+R
 * но только если сборка не в режиме "development" (NODE_ENV)
 * Если метод refresh() не реализован
 */
@Component({})
export default class RefreshKeyInterceptor extends Vue {  

  refreshKeyListener = (event: KeyboardEvent) => {
    if (
      (event.keyCode === 116) || // F5
      (event.keyCode === 82 && event.ctrlKey) || // CTRL + R
      (event.keyCode === 82 && event.ctrlKey && event.shiftKey) // SHIFT + CTRL + R
    ) {
      // @ts-ignore
      if (typeof(this['refresh']) === 'function') {
        event.preventDefault();
        // @ts-ignore
        return this['refresh']();
      }
    }
  }

  created() {
    if (process.env.NODE_ENV !== "development!") {
      document.addEventListener("keydown", this.refreshKeyListener);
    }
  }

  beforeDestroy() {
    if (process.env.NODE_ENV !== "development!") {
      document.removeEventListener("keydown", this.refreshKeyListener);
    }
  }  

}
