{"version":3,"file":"app-1d3f53e4.9729664bca28a8e6916d.bundle.js","mappings":";;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAaA;AAAA;AAXA;AAEA;AACA;AACA;AAEA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAlGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAgDA;AAAA;AA9CA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AACA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAKA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AA1YA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAQA;AAAA;AAAA;AAJA;AAKA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAtEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAeA;AAAA;AAbA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA9FA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAWA;AAAA;AATA;AACA;AAEA;AACA;AAAA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAMA;AAMA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA9KA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;AClBA;AACA;AAEA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAaA;AAAA;AAAA;AATA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAxFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;ACVA;AACA;AACA;AACA;AAEA;AAMA;AAAA;AAHA;AAIA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAvEA;;;;;;;;;;;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AAEA;AASA;AAAA;AANA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;;;;;;;;;;;;;;;;;;;;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AASA;AAAA;AANA;AACA;AAEA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;AAIA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAOA;AACA;AAIA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AA1JA;;;;;;;;;;;;;;;;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAQA;AAAA;AANA;AACA;AACA;AAAA;AAKA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAzCA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAqBA;AAAA;AAnBA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AA7JA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAQA;AAAA;AAGA;AAAA;AAWA;AAAA;AApBA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAjLA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAgCA;AAAA;AA9BA;AACA;AAEA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;AC5MA;AACA;AAEA;AAMA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA3BA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AAEA;AAaA;AAAA;AAAA;AAAA;AAAA;AAPA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AApEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;ACVA;AAEA;AAMA;AAAA;AAJA;AAEA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAvBA;;;;;;;;;;;;;;;;;ACFA;AACA;AACA;AAEA;AAUA;AAAA;AARA;AAEA;AACA;AACA;AACA;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AApDA;;;;;;;;;;;;;;;;ACJA;AACA;AAEA;AAIA;AAAA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AAtCA;;;;;;;;;;;;;;;ACHA;AAEA;AAMA;AAAA;AAJA;AAEA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AArBA;;;;;;;;;;;;;;;;;;ACFA;AACA;AACA;AACA;AACA;AAEA;AASA;AAAA;AAPA;AACA;AACA;AACA;AAEA;AAsCA;AACA;AACA;AACA;AACA;AACA;AACA;AAzCA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAWA;AACA;AACA;AACA;AAxDA;;;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACPA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA","sources":["webpack://www.zeusteam.com/./src/members/calculators/index.js","webpack://www.zeusteam.com/./src/members/carriers/carrier.js","webpack://www.zeusteam.com/./src/members/carriers/dialog/carrier-editor.js","webpack://www.zeusteam.com/./src/members/carriers/dialog/carrier-logo-upload.js","webpack://www.zeusteam.com/./src/members/carriers/dialog/edit-carrier-policy-status.js","webpack://www.zeusteam.com/./src/members/carriers/dialog/edit-product.js","webpack://www.zeusteam.com/./src/members/contests/contests.js","webpack://www.zeusteam.com/./src/members/controls/agent-settings/agent-settings.js","webpack://www.zeusteam.com/./src/members/controls/dialog/edit-profile-image.js","webpack://www.zeusteam.com/./src/members/controls/hierarchy-upline.js","webpack://www.zeusteam.com/./src/members/controls/member-assistant-login/edit-member-assistant-login.js","webpack://www.zeusteam.com/./src/members/controls/member-assistant-login/member-assistant-login.js","webpack://www.zeusteam.com/./src/members/controls/my-files/my-files.js","webpack://www.zeusteam.com/./src/members/controls/profile-image-upload.js","webpack://www.zeusteam.com/./src/members/controls/search-members.js","webpack://www.zeusteam.com/./src/members/controls/suppression.js","webpack://www.zeusteam.com/./src/members/controls/surance-bay/surance-bay.js","webpack://www.zeusteam.com/./src/members/crm/client-list.js","webpack://www.zeusteam.com/./src/members/crm/client.js","webpack://www.zeusteam.com/./src/members/crm/index.js","webpack://www.zeusteam.com/./src/members/crm/nylas/address-book.js","webpack://www.zeusteam.com/./src/members/dashboard.js","webpack://www.zeusteam.com/./src/members/carriers/carrier.scss","webpack://www.zeusteam.com/./src/members/carriers/dialog/carrier-editor.scss","webpack://www.zeusteam.com/./src/members/controls/dialog/edit-profile-image.scss","webpack://www.zeusteam.com/./src/members/controls/hierarchy-upline.scss","webpack://www.zeusteam.com/./src/members/controls/my-files/my-files.scss","webpack://www.zeusteam.com/./src/members/controls/profile-image-upload.scss","webpack://www.zeusteam.com/./src/members/crm/client.scss","webpack://www.zeusteam.com/./src/members/calculators/index.html","webpack://www.zeusteam.com/./src/members/carriers/carrier.html","webpack://www.zeusteam.com/./src/members/carriers/dialog/carrier-editor.html","webpack://www.zeusteam.com/./src/members/carriers/dialog/carrier-logo-upload.html","webpack://www.zeusteam.com/./src/members/carriers/dialog/edit-carrier-policy-status.html","webpack://www.zeusteam.com/./src/members/carriers/dialog/edit-product.html","webpack://www.zeusteam.com/./src/members/contests/contests.html","webpack://www.zeusteam.com/./src/members/controls/agent-settings/agent-settings.html","webpack://www.zeusteam.com/./src/members/controls/dialog/edit-profile-image.html","webpack://www.zeusteam.com/./src/members/controls/hierarchy-upline.html","webpack://www.zeusteam.com/./src/members/controls/member-assistant-login/edit-member-assistant-login.html","webpack://www.zeusteam.com/./src/members/controls/member-assistant-login/member-assistant-login.html","webpack://www.zeusteam.com/./src/members/controls/my-files/my-files.html","webpack://www.zeusteam.com/./src/members/controls/profile-image-upload.html","webpack://www.zeusteam.com/./src/members/controls/search-members.html","webpack://www.zeusteam.com/./src/members/controls/suppression.html","webpack://www.zeusteam.com/./src/members/controls/surance-bay/surance-bay.html","webpack://www.zeusteam.com/./src/members/crm/client-list.html","webpack://www.zeusteam.com/./src/members/crm/client.html","webpack://www.zeusteam.com/./src/members/crm/index.html","webpack://www.zeusteam.com/./src/members/crm/nylas/address-book.html","webpack://www.zeusteam.com/./src/members/dashboard.html"],"sourcesContent":["export class Index {\r\n configureRouter(config, router){\r\n config.title = 'LPFN';\r\n config.auth = true;\r\n config.map([\r\n { route: '', moduleId: 'members/calculators/income', nav: false, membersOnly: true, adminOnly: false, settings: { canAddToMobileMenu: true } },\r\n ]);\r\n this.router = router;\r\n }\r\n\r\n navigate(key, route) {\r\n this.current = key;\r\n this.router.navigate(route, true);\r\n }\r\n}\r\n","import { PLATFORM } from 'aurelia-pal';\r\nimport { EventAggregator } from 'aurelia-event-aggregator';\r\nimport { Security } from 'common/security';\r\nimport { Page } from 'common/ui';\r\nimport { Carriers } from 'services/carriers';\r\nimport { I18n } from 'common/i18n';\r\nimport { Config } from 'services/config';\r\nimport { CarrierEditor } from './dialog/carrier-editor';\r\nimport { DialogService } from 'aurelia-dialog';\r\nimport { ROLE } from 'common/constants';\r\nimport { c } from 'common/common';\r\nimport environment from '../../../config/environment.json';\r\nPLATFORM.moduleName('./dialog/carrier-editor');\r\n\r\nexport class Carrier {\r\n static inject = [EventAggregator, Security, Page, Carriers, I18n, Config, DialogService];\r\n _config;\r\n\r\n carriers = [];\r\n carrier = null;\r\n carrierKey;\r\n\r\n CarrierAdminRole = ROLE.CarrierAdmin;\r\n isCarrierAdmin = false;\r\n\r\n _handlers = [];\r\n\r\n constructor(ea, security, page, carriers, i18n, config, dialogService) {\r\n this._ea = ea;\r\n this._security = security;\r\n this._page = page;\r\n this._carriers = carriers;\r\n this._i18n = i18n;\r\n this._config = config;\r\n this._dialogService = dialogService;\r\n\r\n this.isSuranceBayConfigured = this._config.value('isSuranceBayConfigured');\r\n this.isCarrierAdmin = this._security.isInRole(ROLE.CarrierAdmin);\r\n }\r\n\r\n activate(params) {\r\n const newSlug = this.slug && this.slug !== params.slug;\r\n this.slug = params.slug\r\n if (newSlug) this.viewCarrier(this.carriers.find(x => x.slug === this.slug));\r\n this._page.track(`members/carrier/${this.slug}`);\r\n }\r\n\r\n async attached() {\r\n this._handlers.push(this._ea.subscribe('zeus.carrier.logo-updated', (data) => {\r\n if (!this.carrier) return;\r\n if (this.carrier.id !== data.id) return;\r\n this.carrier.logoUrl = `${data.logoUrl}?cacheBuster=${(new Date()).getTime()}`;\r\n }));\r\n await this._load();\r\n }\r\n\r\n detached() {\r\n this._handlers.forEach(h => h.dispose());\r\n this._handlers = [];\r\n }\r\n\r\n async _load(loadId) {\r\n try {\r\n this.carriers = await this._carriers.all();\r\n this.carriers.forEach(c => {\r\n if (this.isCarrierAdmin) c.display = true;\r\n else c.display = c.isActive;\r\n });\r\n let carrier = loadId\r\n ? this.carriers.find(x => x.id === loadId)\r\n : this.carriers.find(x => x.slug === this.slug);\r\n if (!carrier) carrier = this.carriers[0];\r\n this.viewCarrier(carrier);\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n }\r\n\r\n viewCarrier(carrier) {\r\n if (!carrier) return;\r\n this.carrier = carrier;\r\n this.carrierLogoUrl = `${environment.static}/${this.carrier.logoUrl}`;\r\n this.carrierKey = `carrier-${this.carrier.id}`;\r\n this.showProductData = true;\r\n if (this.isSuranceBayConfigured) {\r\n this.showProductData = this.carrier.suranceBayData.affiliations.find(x => x === this._security.agent.suranceBayAffiliation) !== undefined;\r\n }\r\n window.setTimeout(() => this._ea.publish(c.EventKeys.site.setPageTitle, { title: this.carrier.name }), 0); // must be after the navigation event\r\n return true;\r\n }\r\n\r\n\topenEditor(carrier) {\r\n\t this._dialogService.open({ viewModel: CarrierEditor, model: carrier, ignoreTransitions: true }).whenClosed(async(response) => {\r\n\t if (response.wasCancelled) return;\r\n\t this.carriers = [];\r\n if (response.output.carrierDeleted) this.carrier = undefined;\r\n\t await this._load(response.output.id);\r\n if (!response.output.id) return;\r\n const newCarrier = this.carriers.find(x => x.id === response.output.id);\r\n this.viewCarrier(newCarrier);\r\n this.openEditor(newCarrier);\r\n\t });\r\n\t}\r\n\r\n isJotform(src) {\r\n return src.indexOf('https://form.jotform.com') === 0;\r\n }\r\n\r\n openLightbox(src) {\r\n const link = c.Helpers.replaceVariables(this._security, src, true);\r\n this._ea.publish(c.EventKeys.site.openLightbox, { embedSrc: link });\r\n }\r\n}\r\n","import { PLATFORM } from 'aurelia-pal';\r\nimport { observable } from 'aurelia-framework';\r\nimport { EventAggregator } from 'aurelia-event-aggregator';\r\nimport { DialogController } from 'aurelia-dialog';\r\nimport { NewInstance } from 'aurelia-dependency-injection';\r\nimport { ValidationRules, ValidationController } from 'aurelia-validation';\r\nimport { BootstrapFormValidationRenderer } from 'validation/bootstrap-form-validation-renderer';\r\nimport { I18n } from 'common/i18n';\r\nimport { Carriers } from 'services/carriers';\r\nimport { Notifier } from 'common/ui';\r\nimport { Content } from 'common/content';\r\nimport { Products } from 'services/products';\r\nimport { Sso } from 'services/sso';\r\nimport { DialogService } from 'aurelia-dialog';\r\nimport { EditProduct } from './edit-product';\r\nimport { EditCarrierPolicyStatus } from './edit-carrier-policy-status';\r\nimport { c } from 'common/common';\r\nimport environment from './../../../../config/environment.json';\r\nPLATFORM.moduleName('./edit-carrier-policy-status');\r\nPLATFORM.moduleName('./edit-product');\r\n\r\nexport class CarrierEditor {\r\n static inject = [EventAggregator, DialogController, NewInstance.of(ValidationController), I18n, Carriers, Notifier, Content, Products, Sso, DialogService];\r\n _products;\r\n _sso;\r\n _dialogService;\r\n\r\n title = '';\r\n showDeleteConfirm = false;\r\n\r\n id = null;\r\n isActive = false;\r\n name = '';\r\n code = '';\r\n logoUrl;\r\n websiteUrl = '';\r\n ordering;\r\n lifeProducts = false;\r\n annuityProducts = false;\r\n websiteUrl = '';\r\n getContracted = '';\r\n beginEApp = '';\r\n paperApps = '';\r\n agentServicesPhoneNumber = '';\r\n customerServicePhoneNumber = '';\r\n email = '';\r\n suranceBayData;\r\n newContractEmail;\r\n\r\n listTypes = [];\r\n @observable listType;\r\n linkLists;\r\n linkList;\r\n\r\n defaultLinkLists = [\r\n { code: 'quoting', links: [] },\r\n { code: 'quick-notes', links: [] },\r\n { code: 'product-tutorials', links: [] },\r\n { code: 'underwriting', links: [] },\r\n { code: 'videos', links: [] },\r\n ];\r\n\r\n tab = 'carrier';\r\n\r\n policyStatusFilters = [{ value: '', keys: ['zeusStatusName', 'carrierStatus'] }];\r\n productFilters = [{ value: '', keys: ['name', 'lineOfBusinessName', 'aliases'] }];\r\n\r\n _handlers = [];\r\n\r\n constructor(ea, dialogController, validationController, i18n, carriers, notifier, content, products, sso, dialogService) {\r\n this._ea = ea;\r\n this.dialogController = dialogController;\r\n this.dialogController.settings.centerHorizontalOnly = true;\r\n this._validationController = validationController;\r\n this._validationController.addRenderer(new BootstrapFormValidationRenderer());\r\n this._i18n = i18n;\r\n this._carriers = carriers;\r\n this._notifier = notifier;\r\n this._content = content;\r\n this._products = products;\r\n this._sso = sso;\r\n this._dialogService = dialogService;\r\n\r\n this.deleteText = this._i18n.tr('delete');\r\n\r\n ValidationRules\r\n .ensure('name').required()\r\n .ensure('ordering').required().satisfiesRule('integerRange', 1, 5000)\r\n .ensure('newContractEmail').email()\r\n .on(this);\r\n }\r\n\r\n activate(model) {\r\n this.id = null;\r\n this.isActive = false;\r\n this.hideOnAgentSite = false;\r\n this.notifyUplineNotContracted = true;\r\n this.name = '';\r\n this.code = '';\r\n this.logoUrl = '';\r\n this.lifeProducts = false;\r\n this.annuityProducts = false;\r\n this.websiteUrl = '';\r\n this.getContracted = '';\r\n this.beginEApp = '';\r\n this.paperApps = '';\r\n this.agentServicesPhoneNumber = '';\r\n this.customerServicePhoneNumber = '';\r\n this.email = '';\r\n this.newContractEmail = '';\r\n this.linkLists = this.defaultLinkLists;\r\n this.suranceBayData = { affiliations: [] };\r\n this.title = this._i18n.tr('carriers-add-title');\r\n if (model) {\r\n this.id = model.id;\r\n this.name = model.name;\r\n this.code = model.code;\r\n this.logoUrl = `${environment.static}/${model.logoUrl}`;\r\n this.title = model.name;\r\n this.isActive = model.isActive;\r\n this.hideOnAgentSite = model.hideOnAgentSite;\r\n this.notifyUplineNotContracted = model.notifyUplineNotContracted;\r\n this.lifeProducts = model.lifeProducts;\r\n this.annuityProducts = model.annuityProducts;\r\n this.websiteUrl = model.metadata.websiteUrl;\r\n this.getContracted = model.metadata.getContracted;\r\n this.beginEApp = model.metadata.beginEApp;\r\n this.paperApps = model.metadata.paperApps;\r\n this.agentServicesPhoneNumber = model.metadata.agentServicesPhoneNumber;\r\n this.customerServicePhoneNumber = model.metadata.customerServicePhoneNumber;\r\n this.email = model.metadata.email;\r\n this.newContractEmail = model.metadata.newContractEmail;\r\n if (model.linkLists.length) {\r\n this.linkLists = model.linkLists;\r\n // Add a template for any of the link lists from the default (for when new lists are added after the carriers are saved)\r\n this.defaultLinkLists.forEach(dll => {\r\n const hasLL = this.linkLists.find(x => x.code === dll.code);\r\n if (hasLL) return;\r\n this.linkLists.push(dll);\r\n });\r\n }\r\n this.suranceBayData = model.suranceBayData || { affiliations: [] };\r\n }\r\n\r\n this.listTypes = this.linkLists.map(x => x.code);\r\n this.linkList = this.linkLists[0];\r\n\r\n this._validationController.reset();\r\n this._handlers.push(this._ea.subscribe('dnd:didEnd', async() => await this._saveLinkList()));\r\n this._handlers.push(this._ea.subscribe('zeus.carrier.logo-updated', (data) => this._logoUpdated(data)));\r\n }\r\n\r\n attached() {\r\n this._loadPolicy();\r\n }\r\n\r\n deactivate() {\r\n this._handlers.forEach(h => h.dispose());\r\n this._handlers = [];\r\n }\r\n\r\n async _loadPolicy() {\r\n try {\r\n this.canDelete = false;\r\n if (!this.id) return;\r\n const policyCount = await this._carriers.policyCount(this.id);\r\n this.canDelete = policyCount.count === 0;\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n }\r\n\r\n displayTab(key) {\r\n this.tab = key;\r\n if (this.tab === 'policy-statuses') this._loadPolicyStatuses();\r\n if (this.tab === 'products') this._loadProducts();\r\n if (this.tab === 'surance-bay') this._loadSuranceBay();\r\n }\r\n\r\n async _loadPolicyStatuses() {\r\n try {\r\n if (this.policyStatuses) return;\r\n this.loading = true;\r\n this.policyStatuses = await this._carriers.policyStatuses(this.id);\r\n this.policyStatuses.forEach(ps => ps.zeusStatusName = this._i18n.tr(`policy-status-${ps.zeusStatus}`));\r\n } catch (err) {\r\n console.log(err);\r\n } finally {\r\n this.loading = false;\r\n }\r\n }\r\n\r\n async _loadProducts() {\r\n try {\r\n this.loading = true;\r\n if (this.products) return;\r\n this.products = await this._products.list(this.id);\r\n this.products.forEach(ps => ps.lineOfBusinessName = this._i18n.tr(`lob-${ps.lineOfBusiness}`));\r\n } catch (err) {\r\n console.log(err);\r\n } finally {\r\n this.loading = false;\r\n }\r\n }\r\n\r\n async _loadSuranceBay() {\r\n try {\r\n if (this.affiliations) return;\r\n const sbAffiliates = await this._sso.suranceBayAffiliates();\r\n this.affiliations = [];\r\n sbAffiliates.forEach(a => {\r\n const match = this.suranceBayData.affiliations.find(x => x === a);\r\n this.affiliations.push({ code: a, checked: match ? true : false });\r\n });\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n }\r\n\r\n async saveSuranceBay() {\r\n try {\r\n if (this.saving) return;\r\n this.saving = true;\r\n const data = { affiliations: [] };\r\n this.affiliations.forEach(a => {\r\n if (a.checked) data.affiliations.push(a.code);\r\n });\r\n await this._carriers.saveSuranceBayData(this.id, data);\r\n this._notifier.success('carrier-surance-bay-data-saved', { name: this.name });\r\n } catch (err) {\r\n console.log(err);\r\n this._notifier.generalError();\r\n } finally {\r\n this.saving = false;\r\n }\r\n }\r\n\r\n _logoUpdated(data) {\r\n if (!data || !data.id === this.id) return;\r\n this.logoUrl = `${environment.static}/${data.logoUrl}?uid=${(new Date()).getTime()}`;\r\n }\r\n\r\n async save() {\r\n if (this.saving) return;\r\n try {\r\n const v = await this._validationController.validate();\r\n if (!v.valid) return;\r\n this.saving = true;\r\n\r\n const metadata = {\r\n websiteUrl: this.websiteUrl,\r\n getContracted: this.getContracted,\r\n beginEApp: this.beginEApp,\r\n paperApps: this.paperApps,\r\n agentServicesPhoneNumber: this.agentServicesPhoneNumber,\r\n customerServicePhoneNumber: this.customerServicePhoneNumber,\r\n email: this.email,\r\n newContractEmail: this.newContractEmail\r\n };\r\n\r\n var saveModel = {\r\n name: this.name,\r\n code: this.code,\r\n isActive: this.isActive,\r\n hideOnAgentSite: this.hideOnAgentSite,\r\n notifyUplineNotContracted: this.notifyUplineNotContracted,\r\n lifeProducts: this.lifeProducts,\r\n annuityProducts: this.annuityProducts,\r\n ordering: this.ordering,\r\n metadata,\r\n };\r\n\r\n if (this.id) {\r\n await this._carriers.update(this.id, saveModel);\r\n this._notifier.success('carriers-update-successful', { name: this.name });\r\n this.triggerMenuUpdate();\r\n this.dialogController.ok({ carrierDeleted: false });\r\n } else {\r\n const carrier = await this._carriers.add(saveModel);\r\n this._notifier.success('carriers-add-successful', { name: this.name });\r\n this.id = carrier.id;\r\n this.triggerMenuUpdate();\r\n }\r\n } catch (err) {\r\n this._displayError(err);\r\n } finally {\r\n this.saving = false;\r\n }\r\n }\r\n\r\n _displayError(error) {\r\n var errorText = this._i18n.tr(error);\r\n if (errorText !== error) this._notifier.error(errorText);\r\n else this._notifier.generalError();\r\n }\r\n\r\n resetDelete() {\r\n this.showDeleteConfirm = false;\r\n this.deleteText = this._i18n.tr('delete');\r\n }\r\n\r\n async deleteCarrier() {\r\n if (!this.showDeleteConfirm) {\r\n this.showDeleteConfirm = true;\r\n this.deleteText = this._i18n.tr('delete-confirm');\r\n return;\r\n }\r\n\r\n this.showDeleteConfirm = false;\r\n if (this.deleting) return;\r\n try {\r\n this.deleting = true;\r\n await this._carriers.delete(this.id);\r\n this._notifier.success('carriers-delete-successful', { name: this.name });\r\n this.triggerMenuUpdate();\r\n this.dialogController.ok({ carrierDeleted: true });\r\n } catch(err) {\r\n this.resetDelete();\r\n this._displayError(err);\r\n } finally {\r\n this.deleting = false;\r\n }\r\n }\r\n\r\n listTypeChanged() {\r\n this.linkList = this.linkLists.find(x => x.code === this.listType);\r\n }\r\n\r\n addLinkListItem() {\r\n this.linkList.links.push({\r\n type: 'link',\r\n name: '',\r\n src: '',\r\n description: '',\r\n fileSrc: '',\r\n editing: true,\r\n isNew: true,\r\n });\r\n }\r\n\r\n editLinkListItem(ll) {\r\n ll.editing = true;\r\n ll.original = JSON.parse(JSON.stringify(ll));\r\n }\r\n\r\n async deleteLinkListItem(index) {\r\n this.linkList.links.splice(index, 1);\r\n await this._saveLinkList();\r\n }\r\n\r\n closeLinkListItem(listItem, index) {\r\n listItem.editing = false;\r\n if (listItem.isNew) {\r\n this.linkList.links.splice(index, 1);\r\n return;\r\n }\r\n window.setTimeout(() => {\r\n listItem.type = listItem.original.type;\r\n listItem.name = listItem.original.name;\r\n listItem.src = listItem.original.src;\r\n listItem.description = listItem.original.description;\r\n listItem.fileSrc = listItem.original.fileSrc;\r\n delete listItem.original;\r\n }, 100);\r\n }\r\n\r\n async saveLinkListItem(listItem) {\r\n listItem.editing = false;\r\n listItem.isNew = false;\r\n await this._saveLinkList();\r\n }\r\n\r\n async _saveLinkList() {\r\n try {\r\n this.savingLinkList = true;\r\n const editing = this.linkLists.find(x => x.links.find(y => y.editing));\r\n if (editing) return;\r\n const cleanLinkLists = JSON.parse(JSON.stringify(this.linkLists));\r\n cleanLinkLists.forEach(ll => ll.links.forEach(l => {\r\n delete l.editing;\r\n delete l.original;\r\n }));\r\n await this._carriers.saveLinkLists(this.id, cleanLinkLists);\r\n } catch (err) {\r\n console.log(err);\r\n } finally {\r\n this.savingLinkList = false;\r\n }\r\n }\r\n\r\n openFileManager(pathProperty, object, nameProperty) {\r\n this._content.fileManager(file => {\r\n const name = file.displayName || file.fileName;\r\n if (object) {\r\n object[pathProperty] = file.path;\r\n if (nameProperty) object[nameProperty] = name;\r\n } else {\r\n this[pathProperty] = file.path;\r\n if (nameProperty) this[nameProperty] = name;\r\n }\r\n });\r\n }\r\n\r\n openStatusEditor(status) {\r\n if (status && status.policyCount > 0) {\r\n this._notifier.error('carrier-policy-status-cannot-edit');\r\n return;\r\n }\r\n const model = {\r\n isNew: true,\r\n carrierId: this.id,\r\n carrierName: this.name,\r\n status: '',\r\n zeusStatus: '',\r\n };\r\n if (status) {\r\n model.isNew = false,\r\n model.status = status.carrierStatus,\r\n model.zeusStatus = status.zeusStatus;\r\n }\r\n this._dialogService.open({ viewModel: EditCarrierPolicyStatus, model }).whenClosed(response => {\r\n if (response.wasCancelled) return;\r\n this.policyStatuses = undefined;\r\n this._loadPolicyStatuses();\r\n });\r\n }\r\n\r\n openProductEditor(product) {\r\n if (!product) {\r\n product = {\r\n carrier: { id: this.id, name: this.name }\r\n };\r\n }\r\n this._dialogService.open({ viewModel: EditProduct, model: { product, products: this.products } }).whenClosed(response => {\r\n if (response.wasCancelled) return;\r\n this.products = undefined;\r\n this._loadProducts();\r\n });\r\n }\r\n\r\n triggerMenuUpdate() {\r\n this._carriers.clear();\r\n this._ea.publish(c.EventKeys.menu.reset, { menu: 'members', fireEvent: true });\r\n }\r\n}\r\n","import {inject, bindable} from 'aurelia-framework';\r\nimport {EventAggregator} from 'aurelia-event-aggregator';\r\nimport Dropzone from 'dropzone';\r\nimport {Notifier} from 'common/ui';\r\nimport {Security} from 'common/security';\r\nimport {I18n} from 'common/i18n';\r\nimport environment from './../../../../config/environment.json';\r\n\r\n@inject(EventAggregator, Notifier, Security, I18n)\r\nexport class CarrierLogoUpload {\r\n\r\n @bindable id = null;\r\n imageDropzone = null;\r\n displayClearButton = false;\r\n\r\n\r\n constructor(eventAggregator, notifier, security, i18n) {\r\n this.eventAggregator = eventAggregator;\r\n this.notifier = notifier;\r\n this.security = security;\r\n this.i18n = i18n;\r\n }\r\n\r\n bind() {\r\n this._setUrl();\r\n }\r\n\r\n attached() {\r\n this.initializeDropzone();\r\n }\r\n\r\n detached() {\r\n if (!this.imageDropzone) return;\r\n this.imageDropzone = undefined;\r\n }\r\n \r\n idChanged() {\r\n this._setUrl();\r\n }\r\n\r\n _setUrl() {\r\n if (!this.imageDropzone || !this.id) return;\r\n this.imageDropzone.options.url = `${environment.api}/api/carrier/${encodeURIComponent(this.id)}/upload-logo`;\r\n }\r\n\r\n initializeDropzone() {\r\n let me = this;\r\n let d = new Date();\r\n let timezoneOffset = d.getTimezoneOffset();\r\n\r\n let myDropzone = new Dropzone('#carrier-logo-upload-dropzone', {\r\n url: `${environment.api}/api/carrier/${this.id}/upload-logo`,\r\n dictDefaultMessage: this.i18n.tr('carriers-drop-logo'),\r\n paramName: 'file',\r\n maxFilesize: 6, // MB\r\n headers: { 'Authorization': 'Bearer ' + this.security.token, 'X-LEGACY-TimezoneOffset': timezoneOffset },\r\n acceptedFiles: 'image/*',\r\n maxFiles: 1,\r\n init: function () {\r\n this.on('addedfile', function (file) {\r\n //console.log('added file.');\r\n });\r\n this.on('success', function (file, response) {\r\n this.removeFile(file);\r\n me.notifier.success('carriers-logo-updated-message');\r\n me.eventAggregator.publish('zeus.carrier.logo-updated', response);\r\n });\r\n this.on('error', function (file, error, x) {\r\n me.displayClearButton = true;\r\n me.notifier.error('carriers-logo-upload-error', { message: error.message });\r\n });\r\n }\r\n });\r\n\r\n this.imageDropzone = myDropzone;\r\n }\r\n\r\n clearZone() {\r\n this.imageDropzone.removeAllFiles();\r\n this.displayClearButton = false;\r\n }\r\n} \r\n\r\n ","import { DialogController } from 'aurelia-dialog';\r\nimport { ProductionService } from 'services/production-service';\r\nimport { Carriers } from 'services/carriers';\r\nimport { Notifier } from 'common/ui';\r\nimport { NewInstance } from 'aurelia-dependency-injection';\r\nimport { ValidationRules, ValidationController } from 'aurelia-validation';\r\nimport { BootstrapFormValidationRenderer } from 'validation/bootstrap-form-validation-renderer';\r\n\r\nexport class EditCarrierPolicyStatus {\r\n static inject = [DialogController, ProductionService, Carriers, Notifier, NewInstance.of(ValidationController)];\r\n dialogController;\r\n _productionService;\r\n _carriers;\r\n _notifier;\r\n _validationController;\r\n\r\n _carrierId;\r\n carrierName;\r\n isNew;\r\n carrierStatus;\r\n zeusStatus;\r\n deleteKey = 'delete';\r\n\r\n constructor(dialogController, productionService, carriers, notifier, validationController) {\r\n this.dialogController = dialogController;\r\n this._productionService = productionService;\r\n this._carriers = carriers;\r\n this._notifier = notifier;\r\n this._validationController = validationController;\r\n this._validationController.addRenderer(new BootstrapFormValidationRenderer());\r\n\r\n ValidationRules\r\n .ensure('carrierStatus').required()\r\n .on(this);\r\n }\r\n\r\n activate(model) {\r\n this.isNew = model.isNew;\r\n this._carrierId = model.carrierId;\r\n this.carrierName = model.carrierName;\r\n this.carrierStatus = model.status;\r\n this.zeusStatus = model.zeusStatus;\r\n this._load();\r\n this._validationController.reset();\r\n }\r\n\r\n async _load() {\r\n try {\r\n this.zeusStatuses = await this._productionService.policyStatuses();\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n }\r\n \r\n async save() {\r\n try {\r\n const v = await this._validationController.validate();\r\n if (!v.valid) return;\r\n this.saving = true;\r\n const response = await this._carriers.savePolicyStatus(this._carrierId, this.carrierStatus, this.zeusStatus);\r\n if (response.succeeded) {\r\n this._notifier.success('add-carrier-policy-status-success');\r\n this.dialogController.ok();\r\n return;\r\n }\r\n this._notifier.error(response.message || 'add-carrier-policy-status-fail');\r\n } catch (err) {\r\n console.log(err);\r\n } finally {\r\n this.saving = false;\r\n }\r\n }\r\n\r\n resetDelete() {\r\n this.showDeleteConfirm = false;\r\n this.deleteKey = 'delete';\r\n }\r\n\r\n async delete() {\r\n if (!this.showDeleteConfirm) {\r\n this.showDeleteConfirm = true;\r\n this.deleteKey = 'delete-confirm';\r\n return;\r\n }\r\n\r\n this.showDeleteConfirm = false;\r\n if (this.deleting) return;\r\n try {\r\n this.deleting = true;\r\n const response = await this._carriers.deletePolicyStatus(this._carrierId, this.carrierStatus);\r\n if (response.succeeded) {\r\n this.dialogController.ok();\r\n return;\r\n }\r\n this._notifier.error(response.message || 'An error occurred');\r\n } catch(err) {\r\n this.resetDelete();\r\n this._notifier.generalError();\r\n } finally {\r\n this.deleting = false;\r\n }\r\n }\r\n} \r\n\r\n ","import { observable } from 'aurelia-framework';\r\nimport { DialogController } from 'aurelia-dialog';\r\nimport { NewInstance } from 'aurelia-dependency-injection';\r\nimport { ValidationRules, ValidationController } from 'aurelia-validation';\r\nimport { BootstrapFormValidationRenderer } from 'validation/bootstrap-form-validation-renderer';\r\nimport { I18n } from 'common/i18n';\r\nimport { Carriers } from 'services/carriers';\r\nimport { Notifier } from 'common/ui';\r\nimport { Content } from 'common/content';\r\nimport { Products } from 'services/products';\r\n\r\nexport class EditProduct {\r\n static inject = [DialogController, NewInstance.of(ValidationController), I18n, Carriers, Notifier, Content, Products];\r\n _products;\r\n _sso;\r\n\r\n title = '';\r\n showDeleteConfirm = false;\r\n @observable lineOfBusiness;\r\n\r\n factorPremiumTypes;\r\n\r\n constructor(dialogController, validationController, i18n, carriers, notifier, content, products) {\r\n this.dialogController = dialogController;\r\n this.dialogController.settings.centerHorizontalOnly = true;\r\n this._validationController = validationController;\r\n this._validationController.addRenderer(new BootstrapFormValidationRenderer());\r\n this._i18n = i18n;\r\n this._carriers = carriers;\r\n this._notifier = notifier;\r\n this._content = content;\r\n this._products = products;\r\n\r\n this.deleteText = this._i18n.tr('delete');\r\n\r\n ValidationRules\r\n .ensure('name').required()\r\n .ensure('existingPolicyImpactOption').required().when(m => m.requirePolicyOption)\r\n .ensure('existingPolicyImpactAfterDate').required().when(m => m.requirePolicyOption && m.existingPolicyImpactOption === 'after-date')\r\n .on(this);\r\n \r\n this.factorRules = ValidationRules\r\n .ensure(f1 => f1.factor).required().when(f1 => f1.premiumType)\r\n .ensure(f1 => f1.factor).satisfiesRule('decimalRange', 0, 50).when(f1 => f1.premiumType)\r\n .ensure(f1 => f1.premiumType).required().when(f1 => f1.factor || f1.factor === 0 || f1.factor === '0')\r\n .ensure(f1 => f1.maximumValue).satisfiesRule('decimalRange', 0, 1000000).when(f1 => f1.premiumType)\r\n .rules;\r\n }\r\n\r\n async activate(model) {\r\n try {\r\n await this._load();\r\n\r\n this.products = model.products;\r\n this.product = model.product;\r\n const aliases = model.product.aliases || [];\r\n this.aliases = [];\r\n aliases.forEach(a => this.aliases.push({ alias: a, focus: false }));\r\n this.name = model.product.name;\r\n this.alias = undefined;\r\n this.lineOfBusiness = model.product.lineOfBusiness;\r\n this.productType = model.product.productType;\r\n this.underwriting = model.product.underwriting;\r\n this.factors = model.product.factors;\r\n if (!this.factors) this.factors = JSON.parse(JSON.stringify(this.defaultFactors));\r\n\r\n this._originalFactors = JSON.parse(JSON.stringify(this.factors));\r\n\r\n this.factors.forEach(f => {\r\n this._validationController.addObject(f, this.factorRules);\r\n });\r\n \r\n this.title = this.product.id ? this.product.name : this._i18n.tr('add-product');\r\n\r\n this._validationController.reset();\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n }\r\n\r\n lineOfBusinessChanged() {\r\n if (!this.productTypesByLOB) return;\r\n const data = this.productTypesByLOB.find(x => x.lineOfBusiness === this.lineOfBusiness);\r\n if (!data) this.productTypes = [];\r\n else this.productTypes = data.productTypes;\r\n }\r\n\r\n async _load() {\r\n try {\r\n const loaders = [\r\n this._products.typesByLOB(),\r\n this._products.factorPremiumTypes(),\r\n this._products.defaultFactors(),\r\n ];\r\n const data = await Promise.all(loaders);\r\n this.productTypesByLOB = data[0];\r\n this.factorPremiumTypes = data[1];\r\n this.defaultFactors = data[2];\r\n this.lineOfBusinessChanged();\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n }\r\n\r\n factorChanged() {\r\n this._setRequireExistingPolicyOption();\r\n }\r\n\r\n _setRequireExistingPolicyOption() {\r\n if (this.product.policyCount === 0) return;\r\n if (this.factors.length !== this._originalFactors.length) { this.requirePolicyOption = true; return; }\r\n for (let factor in this.factors) {\r\n const originalFactor = this._originalFactors.find(x => x.creditType === factor.creditType);\r\n if (!originalFactor) { this.requirePolicyOption = true; return; }\r\n if (originalFactor.premiumType !== factor.premiumType || originalFactor.factor !== Number(factor.factor) || originalFactor.maximumValue !== factor.maximumValue) { this.requirePolicyOption = true; return; }\r\n }\r\n }\r\n\r\n async save() {\r\n if (this.saving) return;\r\n try {\r\n this._setRequireExistingPolicyOption();\r\n const v = await this._validationController.validate();\r\n if (!v.valid) {\r\n this._notifier.error('product-update-error');\r\n return;\r\n }\r\n this.saving = true;\r\n this.factors.forEach(f => {\r\n if (!f.premiumType || f.premiumType === 'null') f.premiumType = null;\r\n if (f.factor === '' || f.factor === undefined) f.factor = null;\r\n });\r\n const aliases = [];\r\n this.aliases.forEach(a => {\r\n if (a.alias) aliases.push(a.alias);\r\n });\r\n await this._products.save(this.product.id, this.product.carrier.id, this.name, aliases, this.lineOfBusiness, this.productType, this.underwriting, this.factors, this.existingPolicyImpactOption, this.existingPolicyImpactAfterDate);\r\n this._notifier.success('product-update-successful', { name: this.name });\r\n this.dialogController.ok({ productDeleted: false });\r\n } catch (err) { \r\n console.log(err);\r\n this._notifier.generalError(err);\r\n } finally {\r\n this.saving = false;\r\n }\r\n }\r\n\r\n addAlias() {\r\n this.aliases.push({ alias: '', focus: true });\r\n }\r\n\r\n removeAlias(index) {\r\n try {\r\n this.aliases.splice(index, 1);\r\n } catch (err) {\r\n this._notifier.error(err);\r\n }\r\n }\r\n\r\n resetDelete() {\r\n this.showDeleteConfirm = false;\r\n this.deleteText = this._i18n.tr('delete');\r\n }\r\n\r\n async deleteProduct() {\r\n if (!this.showDeleteConfirm) {\r\n this.showDeleteConfirm = true;\r\n this.deleteText = this._i18n.tr('delete-confirm');\r\n return;\r\n }\r\n\r\n if (this.product.policyCount > 0) {\r\n if (!this.moveToProductId) {\r\n this._notifier.error('delete-product-with-policies-error');\r\n return;\r\n }\r\n }\r\n\r\n this.showDeleteConfirm = false;\r\n if (this.deleting) return;\r\n try {\r\n this.deleting = true;\r\n await this._products.delete(this.product.id, this.moveToProductId);\r\n this._notifier.success('products-delete-successful', { name: this.product.name });\r\n this.dialogController.ok({ productDeleted: true });\r\n } catch(err) {\r\n this.resetDelete();\r\n this._notifier.generalError(err);\r\n } finally {\r\n this.deleting = false;\r\n }\r\n }\r\n}\r\n","import {inject} from 'aurelia-framework';\r\nimport {Page} from 'common/ui';\r\n\r\n@inject(Page)\r\nexport class Contests {\r\n\r\n\tconstructor(page) {\r\n\t\tthis.page = page;\r\n\t}\r\n\r\n\tactivate() {\r\n\t\tthis.page.track('members/contests');\r\n\t}\r\n\r\n\tattached() {\r\n\t}\r\n\r\n}","import { bindable } from 'aurelia-framework';\r\nimport { Security } from 'common/security';\r\nimport { Notifier } from 'common/ui';\r\nimport { Members } from 'services/members';\r\nimport { Sso } from 'services/sso';\r\nimport { Dialer } from 'services/dialer';\r\nimport { Calendar } from 'services/calendar';\r\n\r\nexport class AgentSettings {\r\n static inject = [Security, Notifier, Members, Sso, Dialer, Calendar];\r\n @bindable memberId = null;\r\n\r\n security;\r\n _notifier;\r\n _members;\r\n _sso;\r\n _dialer;\r\n _calendar;\r\n\r\n dialerTeams;\r\n\r\n constructor(security, notifier, members, sso, dialer, calendar) {\r\n this.security = security;\r\n this._notifier = notifier;\r\n this._members = members;\r\n this._sso = sso;\r\n this._dialer = dialer;\r\n this._calendar = calendar;\r\n }\r\n\r\n attached() {\r\n this._isAttached = true;\r\n this._load();\r\n }\r\n\r\n memberIdChanged(newValue, oldValue) {\r\n if (oldValue === newValue) return;\r\n if (!this._isAttached) return;\r\n this._load();\r\n }\r\n\r\n async _load() {\r\n if (!this.memberId) return;\r\n try {\r\n this.isMyProfile = this.security.isAuthenticatedMember(this.memberId);\r\n const loaders = [\r\n this._members.settings(this.memberId, 'code'),\r\n this._members.settings(this.memberId, 'admin-code'),\r\n this._sso.suranceBayAffiliates(),\r\n this._calendar.bookingCalendars(this.memberId),\r\n ];\r\n if (this.security.isAdmin) loaders.push(this._dialer.teams());\r\n const data = await Promise.all(loaders);\r\n this.codes = data[0];\r\n this.adminCodes = data[1];\r\n this.sbAffiliates = data[2];\r\n this.bookingCalendars = data[3];\r\n if (this.security.isAdmin) {\r\n this.dialerTeams = data[4];\r\n }\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n }\r\n\r\n isDialerTeam(key) {\r\n return key.indexOf('dialer-team') === 0;\r\n }\r\n\r\n async saveCodes() {\r\n try {\r\n this.saving = true;\r\n await this._members.saveSettings(this.memberId, 'code', { settings: this.codes });\r\n this._notifier.success('agent-settings-saved-message');\r\n } catch (err) {\r\n console.log(err);\r\n this._notifier.error('agent-settings-saved-error');\r\n } finally {\r\n this.saving = false;\r\n }\r\n }\r\n\r\n async saveAdminCodes() {\r\n try {\r\n this.saving = true;\r\n await this._members.saveSettings(this.memberId, 'admin-code', { settings: this.adminCodes });\r\n this._notifier.success('agent-settings-saved-message');\r\n } catch (err) {\r\n console.log(err);\r\n this._notifier.error('agent-settings-saved-error');\r\n } finally {\r\n this.saving = false;\r\n }\r\n }\r\n\r\n toggleView() {\r\n this.showMyCodes = !this.showMyCodes;\r\n }\r\n}\r\n","import { EventAggregator } from 'aurelia-event-aggregator';\r\nimport { DialogController } from 'aurelia-dialog';\r\nimport Cropper from 'cropperjs';\r\nimport { screenSize } from 'common/ui';\r\n\r\nexport class EditProfileImage {\r\n static inject = [EventAggregator, DialogController];\r\n\r\n height;\r\n width;\r\n\r\n constructor(ea, dialogController) {\r\n this._ea = ea;\r\n this.dialogController = dialogController;\r\n this.dialogController.settings.centerHorizontalOnly = true;\r\n }\r\n\r\n activate(model) {\r\n this._editorFile = model.file;\r\n this.height = model.height || 256;\r\n this.width = model.width || 256;\r\n }\r\n\r\n attached() {\r\n if (this.editingImage) {\r\n this.editingImage.remove();\r\n this.editingImage = undefined;\r\n }\r\n this.editingImage = new Image();\r\n this.editingImage.src = URL.createObjectURL(this._editorFile);\r\n this.imageEditorEl.appendChild(this.editingImage);\r\n\r\n if (this._cropper) {\r\n this.clearEditor();\r\n }\r\n const screen = screenSize(100, 200);\r\n const options = {\r\n aspectRatio: 1,\r\n minContainerWidth: screen.width || 300,\r\n minContainerHeight: screen.height || 550,\r\n minCropBoxWidth: 200,\r\n minCropBoxHeight: 200,\r\n dragMode: 'move',\r\n viewMode: 2,\r\n };\r\n this._cropper = new Cropper(this.editingImage, options);\r\n }\r\n\r\n profileEditComplete() {\r\n const me = this;\r\n // Get the canvas with image data from Cropper.js\r\n const canvas = this._cropper.getCroppedCanvas({\r\n width: this.width,\r\n height: this.height\r\n });\r\n // Turn the canvas into a Blob (file object without a name)\r\n canvas.toBlob((blob) => {\r\n this.dialogController.ok({ blob: blob });\r\n this.clearEditor();\r\n });\r\n }\r\n\r\n clearEditor() {\r\n if (!this._cropper) return;\r\n this._cropper.clear();\r\n this._cropper.destroy();\r\n this._cropper = undefined;\r\n }\r\n\r\n rotateRight() {\r\n this._cropper.rotate(90);\r\n }\r\n\r\n rotateLeft() {\r\n this._cropper.rotate(-90);\r\n }\r\n}\r\n","import {inject} from 'aurelia-framework';\r\nimport {EventAggregator} from 'aurelia-event-aggregator';\r\nimport {Api} from 'common/server';\r\nimport {m} from 'common/models';\r\n//import $ from 'jquery';\r\nimport {Page, Notifier} from 'common/ui';\r\n\r\n@inject(EventAggregator, Api, Page, Notifier)\r\nexport class HiearchyUpline {\r\n\r\n\tisAttached = false;\r\n\tviewMemberId = null;\r\n\tisViewingMyProfile = true;\r\n\r\n\tmemberUpline = [];\r\n\r\n\tconstructor(eventAggregator, api, page, notifier) {\r\n\t\tthis.eventAggregator = eventAggregator;\r\n\t\tthis.api = api;\r\n\t\tthis.page = page;\r\n\t\tthis.notifier = notifier;\r\n\t}\r\n\r\n\tattached() {\r\n\t\t//console.log('hierarchy-upline.attached');\r\n\t\tthis.isAttached = true;\r\n\t\tif ($('team-member-hierarchy-upline').length > 0) {\r\n\t\t\tthis.viewMemberId = $('team-member-hierarchy-upline').attr('data-member-id');\r\n\t\t\tthis.isViewingMyProfile = false;\r\n\t\t}\r\n\r\n\t\tthis.initializeTree();\r\n\t}\r\n\r\n\tactivate(params, routerConfig) {\r\n\t\t//console.log('hierarchy-upline.activate');\r\n\t\tif (params.memberId) {\r\n\t\t\tthis.viewMemberId = params.memberId;\r\n\t\t\tthis.isViewingMyProfile = false;\r\n\t\t\tif (this.isAttached) this.initializeTree();\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeTree() {\r\n\t\tvar self = this;\r\n\t\tvar treeContainer = $('#my-team-tree');\r\n\t\tself.api.getData('member/' + self.viewMemberId + '/upline-list').then(data => {\r\n\t\t\tself.memberUpline = data;\r\n\t\t}).catch(error => {\r\n\t\t self.notifier.generalError();\r\n\t\t});\r\n\t}\r\n\r\n\tshowProfile(uplineMember) {\r\n\t this.eventAggregator.publish(\"zeus.show-member-profile-popup\", { member: null, memberId: uplineMember.id });\r\n\t}\r\n\r\n}\r\n","import { DialogController } from 'aurelia-dialog';\r\nimport { NewInstance } from 'aurelia-dependency-injection';\r\nimport { ValidationRules, ValidationController } from 'aurelia-validation';\r\nimport { BootstrapFormValidationRenderer } from 'validation/bootstrap-form-validation-renderer';\r\nimport { MemberAssistantLogins } from 'services/member-assistant-logins';\r\nimport { Notifier } from 'common/ui';\r\nimport { c } from 'common/common';\r\n\r\nexport class EditMemberAssistantLogin {\r\n static inject = [DialogController, MemberAssistantLogins, Notifier, NewInstance.of(ValidationController)];\r\n\r\n _memberAssistantLogins;\r\n _notifier;\r\n\r\n currentPassword = '';\r\n \tnewPassword = '';\r\n\r\n constructor(dialogController, memberAssistantLogins, notifier, validationController) {\r\n this.dialogController = dialogController;\r\n this.dialogController.settings.centerHorizontalOnly = true;\r\n this._memberAssistantLogins = memberAssistantLogins;\r\n this._notifier = notifier;\r\n this.validationController = validationController;\r\n this.validationController.addRenderer(new BootstrapFormValidationRenderer());\r\n\r\n ValidationRules\r\n .ensure('currentPassword').required()\r\n .ensure('newPassword').required().minLength(6).matches(c.RegEx.strongPassword)\r\n .on(this);\r\n }\r\n\r\n activate(model) {\r\n this.titleKey = model.showEditor\r\n ? model.assistant && model.assistant.id ? 'member-assistant-edit' : 'member-assistant-add'\r\n : 'member-assistant-set-password';\r\n this.showEditor = model.showEditor;\r\n this.showPasswordEditor = model.showPasswordEditor;\r\n this.assistant = model.assistant;\r\n this._clearEditor();\r\n if (this.showEditor) {\r\n this.firstName = model.assistant.firstName;\r\n this.lastName = model.assistant.lastName;\r\n this.email = model.assistant.email;\r\n this.password = undefined;\r\n this.password2 = undefined;\r\n this.focusFirstName = true;\r\n this.deleteTextKey = model.assistant.id ? 'delete' : '';\r\n }\r\n if (this.showPasswordEditor) {\r\n this.newPassword = undefined;\r\n this.newPassword2 = undefined;\r\n this.focusNewPassword = true;\r\n }\r\n this._setupValidation();\r\n }\r\n\r\n attached() {\r\n // Do not auto fill these, browser do not respect autocomplete attr\r\n window.setTimeout(() => {\r\n if (this.assistantPwdEl) this.assistantPwdEl.value = '';\r\n if (this.assistantPwd2El) this.assistantPwd2El.value = '';\r\n if (this.assistantNewPwdEl) this.assistantNewPwdEl.value = '';\r\n if (this.assistantNewPwd2El) this.assistantNewPwd2El.value = '';\r\n }, 750);\r\n }\r\n\r\n _setupValidation() {\r\n if (this.showEditor) {\r\n ValidationRules\r\n .ensure('firstName').required()\r\n .ensure('lastName').required()\r\n .ensure('email').required().email()\r\n .ensure('password').required().minLength(6).matches(c.RegEx.strongPassword).when(x => !x.assistant.id)\r\n .ensure('password2').required().minLength(6).matches(c.RegEx.strongPassword).satisfiesRule('matchesProperty', 'password').when(x => !x.assistant.id)\r\n .on(this);\r\n } else if (this.showPasswordEditor) {\r\n ValidationRules\r\n .ensure('newPassword').required().minLength(6).matches(c.RegEx.strongPassword)\r\n .ensure('newPassword2').required().minLength(6).matches(c.RegEx.strongPassword).satisfiesRule('matchesProperty', 'newPassword')\r\n .on(this);\r\n }\r\n\r\n this._validationRenderer = new BootstrapFormValidationRenderer();\r\n this.validationController.addRenderer(this._validationRenderer);\r\n this.validationController.reset();\r\n }\r\n\r\n _tearDownValidation() {\r\n if (!this._validationRenderer) return;\r\n this.validationController.removeRenderer(this._validationRenderer);\r\n }\r\n\r\n _clearEditor() {\r\n this._tearDownValidation();\r\n this.firstName = '';\r\n this.lastName = '';\r\n this.email = '';\r\n this.password = '';\r\n this.password2 = '';\r\n this.newPassword = '';\r\n this.newPassword2 = '';\r\n }\r\n\r\n closeEditor() {\r\n this._clearEditor();\r\n this.dialogController.cancel();\r\n }\r\n\r\n async save() {\r\n try {\r\n const v = await this.validationController.validate();\r\n if (!v.valid) return;\r\n const isNew = this.assistant.id ? false : true;\r\n await this._memberAssistantLogins.save(this.assistant.id, this.email, this.password, this.firstName, this.lastName);\r\n this._notifier.success(isNew ? 'assistant-login-created' : 'assistant-login-updated');\r\n this._clearEditor();\r\n this.dialogController.ok();\r\n } catch (err) {\r\n console.log(err);\r\n this._notifier.error(err);\r\n }\r\n }\r\n\r\n async changePassword() {\r\n try {\r\n const v = await this.validationController.validate();\r\n if (!v.valid) return;\r\n await this._memberAssistantLogins.changePassword(this.assistant.id, this.newPassword);\r\n this._notifier.success('assistant-login-password-changed');\r\n this._clearEditor();\r\n this.dialogController.ok();\r\n } catch (err) {\r\n console.log(err);\r\n this._notifier.error(err);\r\n }\r\n }\r\n\r\n async delete() {\r\n if (!this.showDeleteConfirm) {\r\n this.deleteTextKey = 'delete-confirm';\r\n this.showDeleteConfirm = true;\r\n return;\r\n }\r\n try {\r\n this.deleting = true;\r\n this.showDeleteConfirm = false;\r\n await this._memberAssistantLogins.delete(this.assistant.id);\r\n this._notifier.success('assistant-login-removed');\r\n this._clearEditor();\r\n this.dialogController.ok();\r\n } catch (err) {\r\n console.log(err);\r\n this._notifier.error(err);\r\n } finally {\r\n this.deleting = false;\r\n }\r\n }\r\n\r\n resetDelete() {\r\n this.showDeleteConfirm = false;\r\n this.deleteTextKey = 'delete';\r\n }\r\n}","import { PLATFORM } from 'aurelia-pal';\r\nimport { bindable } from 'aurelia-framework';\r\nimport { MemberAssistantLogins } from 'services/member-assistant-logins';\r\nimport { Security } from 'common/security';\r\nimport { DialogService } from 'aurelia-dialog';\r\nimport { EditMemberAssistantLogin } from './edit-member-assistant-login';\r\nPLATFORM.moduleName('./edit-member-assistant-login');\r\n\r\nexport class MemberAssistantLogin {\r\n static inject = [MemberAssistantLogins, Security, DialogService];\r\n _memberAssistantLogins;\r\n _security;\r\n _dialogService;\r\n @bindable memberId;\r\n isViewingMyProfile;\r\n\r\n constructor(memberAssistantLogins, security, dialogService) {\r\n this._memberAssistantLogins = memberAssistantLogins;\r\n this._security = security;\r\n this._dialogService = dialogService;\r\n }\r\n\r\n attached() {\r\n this.isViewingMyProfile = this._security.isAuthenticatedMember(this.memberId);\r\n this._initialize();\r\n }\r\n\r\n memberIdChanged() {\r\n this._initialize();\r\n }\r\n\r\n\r\n async _initialize() {\r\n if (!this.memberId) return;\r\n try {\r\n this.assistant = await this._memberAssistantLogins.forMember(this.memberId);\r\n this.firstName = this.assistant.firstName;\r\n this.lastName = this.assistant.lastName;\r\n this.email = this.assistant.email;\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n }\r\n\r\n openEditor() {\r\n\t this._dialogService.open({ viewModel: EditMemberAssistantLogin, model: { assistant: this.assistant || {}, showEditor: true, showPasswordEditor: false }, ignoreTransitions: true }).whenClosed(response => {\r\n\t if (response.wasCancelled) return;\r\n\t this._initialize();\r\n\t });\r\n }\r\n\r\n openPasswordEditor() {\r\n\t this._dialogService.open({ viewModel: EditMemberAssistantLogin, model: { assistant: this.assistant || {}, showEditor: false, showPasswordEditor: true }, ignoreTransitions: true });\r\n }\r\n}\r\n","import { bindable } from 'aurelia-framework';\r\nimport { EventAggregator } from 'aurelia-event-aggregator';\r\nimport Dropzone from 'dropzone';\r\nimport { Notifier, Page } from 'common/ui';\r\nimport { Security } from 'common/security';\r\nimport { I18n } from 'common/i18n';\r\nimport { MemberFiles } from 'services/member-files';\r\nimport { Api } from 'common/server';\r\nimport environment from '../../../../config/environment.json';\r\n\r\nexport class MyFiles {\r\n static inject = [Element, EventAggregator, Notifier, Page, Security, I18n, MemberFiles, Api]\r\n _ea;\r\n _notifier;\r\n _page;\r\n _security;\r\n _i18n;\r\n _memberFiles;\r\n _api;\r\n\r\n @bindable memberId;\r\n @bindable singleUpload;\r\n @bindable showTitle = true;\r\n @bindable theme = 'light';\r\n @bindable showExpander = true;\r\n dropzoneEl;\r\n formAction;\r\n dropzone = null;\r\n fileTypes = [];\r\n isAttached = false;\r\n\r\n constructor(element, eventAggregator, notifier, page, security, i18n, memberFiles, api) {\r\n this._element = element;\r\n this._ea = eventAggregator;\r\n this._notifier = notifier;\r\n this._page = page;\r\n this._security = security;\r\n this._i18n = i18n;\r\n this._memberFiles = memberFiles;\r\n this._api = api;\r\n }\r\n\r\n attached() {\r\n this.isAttached = true;\r\n if (this.showExpander === false) this.showDetails = true;\r\n this._initialize();\r\n }\r\n\r\n detached() {\r\n if (!this.dropzone) return;\r\n try {\r\n this.dropzone.destroy();\r\n this.dropzone = undefined;\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n }\r\n\r\n memberIdChanged() {\r\n this._initialize();\r\n }\r\n\r\n async _initialize() {\r\n if (!this.memberId || !this.isAttached) return;\r\n if (!this.fileTypes.length) {\r\n const fileTypes = this._memberFiles.fileTypes();\r\n if (this.singleUpload) {\r\n const singleUploadFileType = fileTypes.find(x => x === this.singleUpload);\r\n this.fileTypes = [{ code: singleUploadFileType }];\r\n } else {\r\n fileTypes.forEach(ft => this.fileTypes.push({ code: ft }));\r\n }\r\n this.fileTypes.forEach(ft => ft.name = this._i18n.tr(`my-files-type-${ft.code}`));\r\n }\r\n this._initializeDropzone();\r\n await this._load();\r\n }\r\n\r\n async _load() {\r\n try {\r\n this.files = [];\r\n const files = await this._memberFiles.list(this.memberId);\r\n\r\n if (this.singleUpload) {\r\n const hasSingleUploadFileType = files.find(x => x.fileType === this.singleUpload);\r\n if (hasSingleUploadFileType) {\r\n this.files.push(hasSingleUploadFileType);\r\n this._element.dispatchEvent(new CustomEvent('loaded', { bubbles: true, detail: {} }));\r\n }\r\n this._displaySingleFileUpload();\r\n } else {\r\n this.files = files;\r\n }\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n }\r\n\r\n _displaySingleFileUpload() {\r\n const fileType = this.fileTypes.find(x => x.code === this.singleUpload);\r\n this.selectFileType(fileType);\r\n }\r\n\r\n cancelUpload() {\r\n this.selectFileType(undefined);\r\n }\r\n\r\n selectFileType(fileType) {\r\n this.fileType = fileType;\r\n if (this.fileType) {\r\n const memberIdQs = this.memberId ? `?forMemberId=${encodeURIComponent(this.memberId)}` : '';\r\n this.formAction = `${environment.api}/api/member-file/upload/${fileType.code}${memberIdQs}`;\r\n if (this.dropzone) {\r\n this.dropzone.options.url = this.formAction;\r\n }\r\n }\r\n }\r\n\r\n async viewFile(file) {\r\n try {\r\n const model = { id: file.id };\r\n await this._page.export(this._api, 'member-file/export-file', model);\r\n } catch (error) {\r\n this._notifier.generalError();\r\n }\r\n return false;\r\n }\r\n\r\n async deleteFile(index, file) {\r\n try {\r\n await this._memberFiles.delete(this.memberId, file.id);\r\n this.files.splice(index, 1);\r\n } catch (error) {\r\n this._notifier.generalError();\r\n }\r\n return false;\r\n }\r\n\r\n _initializeDropzone() {\r\n this.dropzone = undefined;\r\n if (!this.isAttached || !this.memberId) return;\r\n\r\n const me = this;\r\n let d = new Date();\r\n const timezoneOffset = d.getTimezoneOffset();\r\n\r\n this.dropzone = new Dropzone(this.dropzoneEl, {\r\n paramName: 'file',\r\n maxFilesize: 50, // MB\r\n headers: { 'Authorization': `Bearer ${this._security.token}`, 'X-LEGACY-TimezoneOffset': timezoneOffset },\r\n acceptedFiles: '.pdf',\r\n maxFiles: 1,\r\n timeout: 180000,\r\n init: function() {\r\n this.on('addedfile', function(file) {\r\n me.processing = true;\r\n });\r\n this.on('success', function(file, response) {\r\n this.removeFile(file);\r\n me._notifier.success('my-files-upload-success');\r\n me.processing = false;\r\n me.cancelUpload();\r\n me._load();\r\n me._element.dispatchEvent(new CustomEvent('uploaded', { bubbles: true, detail: {} }));\r\n });\r\n this.on('error', function(file, error, x) {\r\n this.removeAllFiles();\r\n me._notifier.error('my-files-upload-failed', true);\r\n me.isProcessing = false;\r\n });\r\n }\r\n });\r\n }\r\n\r\n toggleDetails() {\r\n this.showDetails = !this.showDetails;\r\n }\r\n}\r\n\r\n","import { PLATFORM } from 'aurelia-pal';\r\nimport { bindable } from 'aurelia-framework';\r\nimport { EventAggregator } from 'aurelia-event-aggregator';\r\nimport Dropzone from 'dropzone';\r\nimport { Notifier } from 'common/ui';\r\nimport { Security } from 'common/security';\r\nimport { I18n } from 'common/i18n';\r\nimport moment from 'moment';\r\nimport { EditProfileImage } from './dialog/edit-profile-image';\r\nimport { DialogService } from 'aurelia-dialog';\r\nimport { c } from 'common/common';\r\nimport environment from '../../../config/environment.json';\r\nPLATFORM.moduleName('./dialog/edit-profile-image');\r\n\r\nexport class ProfileImageUpload {\r\n static inject = [Element, EventAggregator, Notifier, Security, I18n, DialogService]\r\n _ea;\r\n _notifier;\r\n _security;\r\n _i18n;\r\n _dialogService;\r\n\r\n @bindable({ changeHandler: '_resetFormAction' }) agentId;\r\n @bindable formId = 'profile-image-upload-dropzone';\r\n @bindable imgSrc;\r\n @bindable({ changeHandler: '_resetFormAction' }) uploadTo = 'api/member/upload-profile-image';\r\n @bindable height = 256;\r\n @bindable width = 256;\r\n @bindable loadEditor = true;\r\n @bindable instructionsKey = 'profile-image-upload-instructions';\r\n @bindable acceptedFiles = '.jpg,.jpeg,.heic,.png,.svg,.webp';\r\n @bindable dragContentKey = 'profile-image-upload';\r\n\r\n imageDropzone = null;\r\n\tdisplayClearButton = false;\r\n\r\n\tconstructor(element, ea, notifier, security, i18n, dialogService) {\r\n this._element = element;\r\n\t\tthis._ea = ea;\r\n\t\tthis._notifier = notifier;\r\n\t\tthis._security = security;\r\n\t\tthis._i18n = i18n;\r\n this._dialogService = dialogService;\r\n }\r\n\r\n\tattached() {\r\n\t\tthis.initializeDropzone();\r\n\t}\r\n\r\n bind() {\r\n this._resetFormAction();\r\n this.imgSrcChanged();\r\n }\r\n\r\n _resetFormAction() {\r\n if (!this.uploadTo) return;\r\n this.formAction = this._formAction();\r\n console.log('_resetFormAction', this.formAction);\r\n if (this.imageDropzone) {\r\n this.imageDropzone.options.url = this.formAction;\r\n }\r\n }\r\n\r\n _formAction() {\r\n let uploadTo = `${this.uploadTo.indexOf('http') < 0 ? environment.api : ''}/${this.uploadTo}`\r\n if (this.uploadTo.indexOf('api/member/upload-profile-image') < 0) return uploadTo;\r\n if (this.agentId && !this._security.isAuthenticatedMember(this.agentId)) uploadTo += `?memberId=${encodeURIComponent(this.agentId)}`;\r\n return uploadTo;\r\n }\r\n\r\n\tinitializeDropzone() {\r\n\t\tconst me = this;\r\n\t\tconst d = new Date();\r\n\t\tconst timezoneOffset = d.getTimezoneOffset();\r\n\r\n if (this.imageDropzone) {\r\n return;\r\n }\r\n const dictDefaultMessage = this._i18n.tr(this.instructionsKey);\r\n const url = this._formAction();\r\n console.log('initialize', url);\r\n\t\tconst myDropzone = new Dropzone(`#${this.formId}`, {\r\n url,\r\n dictDefaultMessage: dictDefaultMessage,\r\n\t\t\tparamName: 'file',\r\n\t\t\tmaxFilesize: 10, // MB\r\n\t\t\theaders: { 'Authorization': `Bearer ${this._security.token}`, 'X-LEGACY-TimezoneOffset': timezoneOffset },\r\n\t\t\tacceptedFiles: this.acceptedFiles,\r\n\t\t\tmaxFiles: 1,\r\n clickable: this.profileImageEl,\r\n\t\t\tinit: function () {\r\n\t\t\t\tthis.on('success', function (file, response) {\r\n\t\t\t\t\tthis.removeFile(file);\r\n\t\t\t\t\tme._notifier.success('profile-image-updated-message');\r\n if (me.uploadTo.indexOf('api/member/upload-profile-image') >= 0 && me.agentId) {\r\n me._ea.publish(c.EventKeys.agent.profileImageUpdated, { agentId: me.agentId });\r\n }\r\n me._element.dispatchEvent(new CustomEvent('uploaded', { bubbles: true, detail: {} }));\r\n me._resetImgSrc();\r\n\t\t\t\t});\r\n\t\t\t\tthis.on('error', function (file, error, x) {\r\n if (file.status === 'canceled') return;\r\n\t\t\t\t console.log(error);\r\n\t\t\t\t me.displayClearButton = true;\r\n\t\t\t\t if (error === 'You can\\'t upload files of this type.') me._notifier.error('profile-image-upload-error-file-type');\r\n else me._notifier.error(\"profile-image-upload-error\", false, { message: error });\r\n\t\t\t\t});\r\n\t\t\t},\r\n transformFile: function(file, done) {\r\n if (file.name.indexOf('.heic') >= 0) {\r\n me._heicToJpg(file).then(jpgFile => {\r\n if (me.loadEditor) me._loadEditor(jpgFile, done);\r\n else done(file);\r\n }).catch(err => {\r\n me.displayClearButton = true;\r\n me._notifier.error('profile-image-upload-error', { message: err });\r\n done();\r\n });\r\n } else {\r\n if (me.loadEditor) me._loadEditor(file, done);\r\n else done(file);\r\n }\r\n },\r\n renameFile: function(file) {\r\n return 'profile-image-upload.jpg';\r\n },\r\n });\r\n\r\n\t\tthis.imageDropzone = myDropzone;\r\n\t}\r\n\r\n _heicToJpg(file) {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n heic2any({ blob: file, toType: 'image/jpeg', quality: 1 }).then(jpgBlob => {\r\n const jpgFile = new File([jpgBlob], file.name.replace('.heic', '.jpg'));\r\n resolve(jpgFile);\r\n }).catch(e => {\r\n reject(e);\r\n });\r\n } catch (err) {\r\n reject(err);\r\n }\r\n });\r\n }\r\n\r\n imgSrcChanged() {\r\n if (!this.imgSrc) return;\r\n this.previewImgSrc = `${this.imgSrc.indexOf('http') < 0 ? environment.static : ''}${this.imgSrc}`;\r\n this._resetImgSrc();\r\n }\r\n \r\n _resetImgSrc() {\r\n let imgSrc = this.previewImgSrc;\r\n if (imgSrc.indexOf('?') >= 0) imgSrc += `&cache-buster=${moment().valueOf()}`;\r\n else imgSrc += `?cache-buster=${moment().valueOf()}`;\r\n window.setTimeout(() => {\r\n if (!this.profileImageEl) return;\r\n let imgSrcNoCacheBuster = imgSrc;\r\n if (imgSrc.indexOf('?') >= 0) imgSrcNoCacheBuster = imgSrc.substr(0, imgSrc.indexOf('?'));\r\n this.profileImageEl.setAttribute('src', imgSrc);\r\n }, 500);\r\n }\r\n\r\n clearZone() {\r\n\t\tthis.imageDropzone.removeAllFiles(true);\r\n\t\tthis.displayClearButton = false;\r\n\t}\r\n\r\n _loadEditor(file, done) {\r\n this._editorFile = file;\r\n this._editorDone = done;\r\n\t this._dialogService.open({ viewModel: EditProfileImage, model: { file, height: this.height, width: this.width }, ignoreTransitions: true }).whenClosed(async(response) => {\r\n\t if (response.output && response.output.blob) {\r\n // Create a new Dropzone file thumbnail\r\n const me = this;\r\n this.imageDropzone.createThumbnail(\r\n response.output.blob,\r\n this.imageDropzone.options.thumbnailWidth,\r\n this.imageDropzone.options.thumbnailHeight,\r\n this.imageDropzone.options.thumbnailMethod,\r\n false,\r\n function(dataURL) {\r\n // Update the Dropzone file thumbnail\r\n me.imageDropzone.emit('thumbnail', me._editorFile, dataURL);\r\n // Return the file to Dropzone\r\n me._editorDone(response.output.blob);\r\n },\r\n );\r\n }\r\n\t });\r\n }\r\n} \r\n\r\n ","import { inject } from 'aurelia-framework';\r\nimport { EventAggregator } from 'aurelia-event-aggregator';\r\nimport { Api } from 'common/server';\r\nimport { Logger } from 'common/ui';\r\nimport { Security } from 'common/security';\r\nimport { Page } from 'common/ui';\r\nimport { I18n } from 'common/i18n';\r\nimport { Roles } from 'services/roles';\r\nimport { ROLE } from 'common/constants';\r\n\r\n@inject(EventAggregator, Security, Api, Logger, Page, I18n, Roles)\r\nexport class SearchMembers {\r\n _i18n;\r\n _roles;\r\n\r\n searchKey = 'zeus.memberSearchKey';\r\n searchWithinMemberKey = 'zeus.memberSearchWithinMemberKey';\r\n\r\n searchOn = '';\r\n\r\n showFilterOptions = false;\r\n\r\n roleIds;\r\n roleId;\r\n\tincludeOnlyAgencies;\r\n\tincludeOnlyTeams;\r\n\r\n pageSize = 10\r\n\r\n\tisProcessing = false;\r\n\tsearchResults = [];\r\n\tsearchComplete = false;\r\n\tsearchModel = null;\r\n\r\n\tfromMyTeamPage = false;\r\n\tdisplayAdminLinks = false;\r\n\tsearchWithinMember = null;\r\n\r\n\tmodalTitle = '';\r\n\tmodalModel = null;\r\n\tmodalView = '';\r\n\r\n\tconstructor(eventAggregator, security, api, logger, page, i18n, roles) {\r\n\t\tthis.eventAggregator = eventAggregator;\r\n\t\tthis.security = security;\r\n\t\tthis.api = api;\r\n\t\tthis.logger = logger;\r\n\t\tthis.page = page;\r\n\t\tthis._i18n = i18n;\r\n this._roles = roles;\r\n\t}\r\n\r\n\tasync attached() {\r\n\t $('#search-members-modal').on('hidden.bs.modal', this.clearModal);\r\n\r\n await this._loadOptions();\r\n\r\n\t var ele = $('search-members');\r\n\t\tif (ele.length > 0) this.fromMyTeamPage = ele.hasClass('search-my-team-only');\r\n\t\tthis.displayAdminLinks = this.security.isAdmin && !this.fromMyTeamPage;\r\n\r\n\t\tlet lastSearch = this._fromLocalStorage(this.searchKey);\r\n\t\tthis.searchWithinMember = this._fromLocalStorage(this.searchWithinMemberKey);\r\n\r\n if (lastSearch && lastSearch.model && lastSearch.options) {\r\n\t\t\tthis.searchModel = lastSearch.model;\r\n\t\t\tthis.searchOn = lastSearch.options.searchOn;\r\n\t\t\tif (lastSearch.options.roleId) this.roleId = lastSearch.options.roleId;\r\n\t\t\tif (lastSearch.options.includeOnlyAgencies === true) this.includeOnlyAgencies = true;\r\n\t\t\tif (lastSearch.options.includeOnlyTeams === true) this.includeOnlyTeams = true;\r\n\t\t\tif (this.roleId || this.includeOnlyAgencies === true || this.includeOnlyTeams === true) this.showFilterOptions = true;\r\n window.setTimeout(() => this.trySearch(), 0);\r\n\t\t} else {\r\n\t\t\tlocalStorage.removeItem(this.searchKey);\r\n\t\t}\r\n\t}\r\n\r\n\tclearSearch() {\r\n\t\ttry {\r\n\t\t\tif (this.roleId) this.roleId = undefined;\r\n\t\t\tthis.includeOnlyAgencies = false;\r\n\t\t\tthis.includeOnlyTeams = false;\r\n\t\t\tthis.searchOn = '';\r\n\t\t\tthis.setSearchParameters();\r\n\t\t\tthis.searchResults = [];\r\n\t\t} catch (err) {\r\n\t\t\tconsole.log(err);\r\n\t\t}\r\n\t}\r\n\r\n async _loadOptions() {\r\n try {\r\n this.roleIds = await this._roles.all();\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n }\r\n\r\n\ttoggleFilterOptions() {\r\n\t this.showFilterOptions = !this.showFilterOptions;\r\n\t}\r\n\r\n\t_fromLocalStorage(key) {\r\n\t try {\r\n\t let value = localStorage.getItem(key);\r\n\t if (!value) return null;\r\n\t if (value === 'null') return null;\r\n if (value.indexOf('{') === 0) return JSON.parse(value);\r\n\t return value;\r\n } catch(ex) {\r\n return null;\r\n }\r\n\t}\r\n\r\n\tsetSearchParameters() {\r\n\t\tvar downlineOfMemberId = null;\r\n\t\tif (this.searchWithinMember != null) downlineOfMemberId = this.searchWithinMember.id;\r\n\r\n\t\tthis.searchModel = {\r\n\t\t\tsearchOn: this.searchOn,\r\n\t\t\tdownlineOfMemberId: downlineOfMemberId,\r\n\t\t\troleId: this.roleId\r\n\t\t};\r\n\t\tif (this.includeOnlyAgencies === true) this.searchModel.includeOnlyAgencies = true;\r\n\t\tif (this.includeOnlyTeams === true) this.searchModel.includeOnlyTeams = true;\r\n\r\n\t\tvar lastSearch = {\r\n\t\t\tmodel: this.searchModel,\r\n\t\t\toptions: {\r\n\t\t\t\tsearchOn: this.searchOn,\r\n\t\t\t\troleId: this.roleId,\r\n\t\t\t}\r\n\t\t};\r\n\t\tif (this.includeOnlyAgencies === true) lastSearch.options.includeOnlyAgencies = true;\r\n\t\tif (this.includeOnlyTeams === true) lastSearch.options.includeOnlyTeams = true;\r\n\t\tlocalStorage.setItem(this.searchKey, JSON.stringify(lastSearch));\r\n\t\tlocalStorage.setItem(this.searchWithinMemberKey, this.searchWithinMember);\r\n}\r\n\r\n\tasync trySearch() {\r\n\t\tif (this.isProcessing) return;\r\n\r\n try {\r\n this.searchResults = [];\r\n this.isProcessing = true;\r\n\r\n\t\t\tthis.setSearchParameters();\r\n\r\n await this.doSearch();\r\n } catch (err) {\r\n console.log(err);\r\n this.isProcessing = false;\r\n }\r\n\t}\r\n\r\n\tasync doSearch() {\r\n try {\r\n let url = 'member/search-my-downline';\r\n if (this.security.isAdmin && !this.fromMyTeamPage) url = 'member/search';\r\n if (this.security.isInRole(ROLE.HierarchyViewer)) url = 'member/search';\r\n\r\n this.searchResults = await this.api.post(url, this.searchModel);\r\n\t\t this.searchComplete = true;\r\n\t\t} catch (err) {\r\n\t\t console.log(err);\r\n\t\t} finally { \r\n\t\t this.isProcessing = false;\r\n\t\t}\r\n\t}\r\n\r\n\texportResults() {\r\n\t this.page.exportData(this.api, 'member/export-search-key', 'member/export-search', this.searchModel)\r\n .then(response => { /*nothing...already handled*/ })\r\n .catch(error => { console.log(error); });\r\n\t}\r\n\r\n\tsearchWithinDownlineOf(member) {\r\n\t\tthis.searchWithinMember = member;\r\n\t\tthis.trySearch();\r\n\t}\r\n\r\n\tremoveSearchWithinDownlineOf() {\r\n\t\tthis.searchWithinMember = null;\r\n\t\tlocalStorage.removeItem(this.searchWithinMemberKey);\r\n\t\tthis.trySearch();\r\n\t}\r\n\r\n\tshowProfile(memberId) {\r\n\t this.eventAggregator.publish(\"zeus.show-member-profile-popup\", { member: null, memberId: memberId });\r\n\t}\r\n\r\n\tclearModal() {\r\n\t this.modalTitle = '';\r\n\t this.modalModel = null;\r\n\t this.modalView = '';\r\n\t}\r\n\r\n\tshowHierarchy(member) {\r\n\t //console.log('show hierarchy for ' + member.firstName);\r\n\t this.modalTitle = member.firstName + ' ' + member.lastName + ' Hierarchy';\r\n\t this.modalModel = { id: member.id };\r\n\t this.modalView = './hierarchy-full';\r\n\t $('#search-members-modal').modal('show');\r\n\t}\r\n}\r\n ","import { bindable } from 'aurelia-framework';\r\nimport { Members } from 'services/members';\r\n\r\nexport class Suppression {\r\n static inject = [Members];\r\n\r\n @bindable memberId;\r\n isSuppressed;\r\n\r\n\tconstructor(members) {\r\n this._members = members;\r\n }\r\n\r\n\tmemberIdChanged() {\r\n if (!this.memberId) return;\r\n this._load();\r\n\t}\r\n\r\n\tasync _load() {\r\n try {\r\n this.isSuppressed = await this._members.isSuppressed(this.memberId);\r\n } catch (err) {\r\n\t\t\tconsole.log(err);\r\n\t\t}\r\n\t}\r\n\r\n async toggleSuppression(event) {\r\n try {\r\n await this._members.setSuppression(this.memberId, event.detail.checked);\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n }\r\n}\r\n","import { bindable } from 'aurelia-framework';\r\nimport { Security } from 'common/security';\r\nimport { Notifier } from 'common/ui';\r\nimport { Sso } from 'services/sso';\r\nimport { Members } from 'services/members';\r\n\r\nexport class SuranceBay {\r\n static inject = [Security, Notifier, Sso, Members];\r\n @bindable member = null;\r\n @bindable showDetails = false;\r\n @bindable allowToggle = true;\r\n\r\n _security;\r\n _notifier;\r\n _sso;\r\n _members;\r\n\r\n affiliate;\r\n\r\n constructor(security, notifier, sso, members) {\r\n this._security = security;\r\n this._notifier = notifier;\r\n this._sso = sso;\r\n this._members = members;\r\n }\r\n\r\n bind() {\r\n this._initialize();\r\n }\r\n\r\n memberChanged() {\r\n this._initialize();\r\n }\r\n\r\n async _initialize() {\r\n if (!this.member) return;\r\n try {\r\n const agency = await this._members.getAgency(this.member.id);\r\n const isTheAgency = agency && agency.id === this._security.authenticatedMemberId;\r\n const isInDownline = await this._members.isInDownline(this.member.id);\r\n this.canChange = isTheAgency || (isInDownline && this._security.isAgency());\r\n if (this._security.isAdmin) this.canChange = true;\r\n this.affiliate = this.member.suranceBayBranch || '';\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n }\r\n\r\n attached() {\r\n this._load();\r\n }\r\n\r\n async _load() {\r\n try {\r\n this.affiliates = await this._sso.suranceBayAffiliates();\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n }\r\n\r\n async saveAffiliate() {\r\n try {\r\n this.saving = true;\r\n await this._sso.saveSuranceBayAffiliate(this.member.id, this.affiliate);\r\n this._notifier.success('surancebay-affiliate-saved');\r\n } catch (err) {\r\n console.log(err);\r\n this._notifier.error('surancebay-affiliate-saved-error');\r\n } finally {\r\n this.saving = false;\r\n }\r\n }\r\n\r\n toggleDetails() {\r\n this.showDetails = !this.showDetails;\r\n }\r\n}\r\n","import { CRM } from 'services/crm';\r\n\r\nexport class ClientList {\r\n static inject = [CRM];\r\n _crm;\r\n\r\n clientFilters = [{ value: '', keys: ['firstName', 'lastName', 'city', 'state', 'email', 'type'] }];\r\n\r\n constructor(crm) {\r\n this._crm = crm;\r\n }\r\n\r\n attached() {\r\n this._load();\r\n }\r\n\r\n async _load() {\r\n try {\r\n this.clients = await this._crm.clients();\r\n this._crm.setNavList(this.clients);\r\n } catch (err) {\r\n console.log(err);\r\n this._crm.clearNav();\r\n }\r\n }\r\n}\r\n","import { CRM } from 'services/crm';\r\nimport { Security } from 'common/security';\r\nimport { WIDGET, COMMISSION } from 'common/constants';\r\n\r\nexport class Client {\r\n static inject = [CRM, Security];\r\n _crm;\r\n\r\n client;\r\n view = 'overview';\r\n policies;\r\n showCommissions = false;\r\n commissionsConfig;\r\n\r\n constructor(crm, security) {\r\n this._crm = crm;\r\n this.showCommissions = security.canSeeCommissions();\r\n }\r\n\r\n activate(model) {\r\n if (this.id === model.id) return; // this is from changing the hash\r\n this.id = model.id;\r\n this.policies = undefined;\r\n this._load(model.view);\r\n }\r\n\r\n async _load(view) {\r\n try {\r\n this.overview = await this._crm.client(this.id);\r\n this.commissionsConfig = {\r\n clientId: this.id,\r\n groupBy: COMMISSION.GroupBy.Policy,\r\n widgetPeriod: WIDGET.Period.All,\r\n };\r\n \r\n this.nav = this._crm.getNav(this.id);\r\n if (view) this.display(view);\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n }\r\n\r\n display(view) {\r\n this.view = view;\r\n if (this.view === 'policies') this._loadPolicies();\r\n window.location.hash = `/members/crm/client/${this.id}/${view}`;\r\n }\r\n\r\n async _loadPolicies() {\r\n try {\r\n if (this.policies) return;\r\n this.policies = await this._crm.clientPolicies(this.id);\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n }\r\n}","import { PLATFORM } from 'aurelia-pal';\r\nimport { I18n } from 'common/i18n';\r\n\r\nexport class Index {\r\n\tstatic inject = [I18n];\r\n\t_i18n;\r\n\r\n\tconstructor(i18n) {\r\n\t\tthis._i18n = i18n;\r\n\t}\r\n\r\n\tconfigureRouter(config, router){\r\n\t\tconfig.map([\r\n {\r\n\t\t\t\troute: '',\r\n\t\t\t\tmoduleId: PLATFORM.moduleName('members/crm/client-list'),\r\n\t\t\t\tnav: false,\r\n\t\t\t\tmembersOnly: true,\r\n\t\t\t\tadminOnly: false,\r\n\t\t\t\tsettings: { canAddToMobileMenu: true },\r\n\t\t\t},\r\n {\r\n\t\t\t\troute: ['client/:id', 'client/:id/:view'],\r\n\t\t\t\tmoduleId: PLATFORM.moduleName('members/crm/client'),\r\n\t\t\t\tnav: false,\r\n\t\t\t\tmembersOnly: true,\r\n\t\t\t\tadminOnly: false,\r\n\t\t\t\tsettings: { canAddToMobileMenu: false },\r\n\t\t\t},\r\n {\r\n\t\t\t\troute: 'nylas-address-book',\r\n\t\t\t\tmoduleId: PLATFORM.moduleName('members/crm/nylas/address-book'),\r\n\t\t\t\tnav: false,\r\n\t\t\t\tmembersOnly: true,\r\n\t\t\t\tadminOnly: false,\r\n\t\t\t\tsettings: { canAddToMobileMenu: false },\r\n\t\t\t},\r\n\t\t]);\r\n\r\n\t\tthis.router = router;\r\n\t}\r\n}\r\n","import { Nylas } from 'services/nylas';\r\n\r\nexport class AddressBook {\r\n static inject = [Nylas];\r\n _nylas;\r\n\r\n addressBookFilters = [{ value: '', keys: ['firstName', 'lastName', 'company', 'email', 'phone'] }];\r\n\r\n constructor(nylas) {\r\n this._nylas = nylas;\r\n }\r\n\r\n attached() {\r\n this._load();\r\n }\r\n\r\n async _load() {\r\n try {\r\n this.addressBook = await this._nylas.addressBook();\r\n } catch(err) {\r\n console.log(err);\r\n }\r\n }\r\n}","import { activationStrategy } from 'aurelia-router';\r\nimport { Router } from 'aurelia-router';\r\nimport { Page, Device } from 'common/ui';\r\nimport { Api } from 'common/server';\r\nimport { LpfnUtil } from 'common/utils';\r\n\r\nexport class Dashboard {\r\n static inject = [Router, Page, Device, Api];\r\n _router;\r\n _page;\r\n _device;\r\n _api;\r\n\r\n bigButtonView = false;\r\n\r\n\tconstructor(router, page, device, api) {\r\n this._router = router;\r\n\t this._page = page;\r\n this._device = device;\r\n this._api = api;\r\n\r\n }\r\n\r\n\tdetermineActivationStrategy () {\r\n\t\treturn activationStrategy.invokeLifecycle;\r\n\t}\r\n\r\n\tactivate(model, currentRoute) {\r\n try {\r\n this.hideContent = false;\r\n this.dashboardKey = model ? model.dashboardKey : undefined;\r\n this._setBigButtonView(currentRoute ? currentRoute.route : undefined);\r\n this._page.track('members/dashboard');\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n\t}\r\n\r\n async attached() {\r\n try {\r\n LpfnUtil.addResizeHandler(this._setBigButtonView);\r\n // Make this call since the dashboard widgets won't redirect on a 401\r\n await this._api.get('security/auth');\r\n } catch (err) {}\r\n }\r\n\r\n detached() {\r\n LpfnUtil.removeResizeHandler(this._setBigButtonView);\r\n }\r\n\r\n _setBigButtonView = (currentRoute) => {\r\n const isMainDashboard = currentRoute !== undefined && currentRoute === '';\r\n if (!isMainDashboard) {\r\n this.bigButtonView = false;\r\n } else {\r\n this.bigButtonView = this._device.isMobileSize();\r\n }\r\n }\r\n \r\n deactivate() {\r\n this.hideContent = true;\r\n }\r\n}\r\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".zeus-carrier-logo {\\n max-width: 100%;\\n}\\n@media (min-width: 768px) {\\n .zeus-carrier-logo {\\n max-width: 300px;\\n }\\n}\\n\\n.zeus-carrier-content {\\n min-height: 25px;\\n}\\n\\n.zeus-carrier-links {\\n margin-top: var(--zeus-margin);\\n}\\n\\n.zeus-carrier-link {\\n text-align: center;\\n}\\n\\n.zeus-carrier-button {\\n display: inline-block;\\n min-width: 250px;\\n margin-bottom: var(--zeus-margin);\\n text-transform: uppercase;\\n font-weight: bold;\\n text-decoration: none;\\n}\\n.zeus-carrier-button:hover {\\n text-decoration: none;\\n}\\n\\n.zeus-carrier-phone {\\n display: flex;\\n justify-content: center;\\n}\\n.zeus-carrier-phone > label {\\n margin-right: var(--zeus-margin);\\n}\\n\\n.zeus-carrier-link-heading {\\n margin-top: var(--zeus-margin);\\n margin-bottom: var(--zeus-margin-xs);\\n}\\n.zeus-carrier-link-heading h4 {\\n font-size: 1.125rem;\\n margin-bottom: 0;\\n}\\n\\n.zeus-link-list-container .zeus-carrier-link-heading:first-child {\\n margin-top: 0;\\n}\\n\\n.zeus-carrier-link-description {\\n margin-left: var(--zeus-margin-lg);\\n margin-bottom: var(--zeus-margin);\\n}\\n\\n.zeus-carrier-list-link {\\n display: inline-block;\\n margin-right: var(--zeus-margin);\\n}\\n\\n.zeus-carrier-link-link-icon {\\n font-size: 1.25em;\\n margin-right: var(--zeus-margin);\\n}\\n\\n.zeus-carriers-view-more {\\n text-align: center;\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/members/carriers/carrier.scss\"],\"names\":[],\"mappings\":\"AAEA;EACI,eAAA;AADJ;AAGI;EAHJ;IAIQ,gBAAA;EAAN;AACF;;AAGA;EACI,gBAAA;AAAJ;;AAGA;EACI,8BAAA;AAAJ;;AAGA;EACI,kBAAA;AAAJ;;AAGA;EACI,qBAAA;EACA,gBAAA;EACA,iCAAA;EACA,yBAAA;EACA,iBAAA;EACA,qBAAA;AAAJ;AAEI;EACI,qBAAA;AAAR;;AAIA;EACI,aAAA;EACA,uBAAA;AADJ;AAGI;EACI,gCAAA;AADR;;AAKA;EACI,8BAAA;EACA,oCAAA;AAFJ;AAII;EACI,mBAAA;EACA,gBAAA;AAFR;;AAMA;EACI,aAAA;AAHJ;;AAMA;EACI,kCAAA;EACA,iCAAA;AAHJ;;AAMA;EACI,qBAAA;EACA,gCAAA;AAHJ;;AAMA;EACI,iBAAA;EACA,gCAAA;AAHJ;;AAMA;EACI,kBAAA;AAHJ\",\"sourcesContent\":[\"@import \\\"./../../styles/responsive.scss\\\";\\r\\n\\r\\n.zeus-carrier-logo {\\r\\n max-width: 100%;\\r\\n\\r\\n @media(min-width: $zeus-screen-sm-min) {\\r\\n max-width: 300px;\\r\\n }\\r\\n}\\r\\n\\r\\n.zeus-carrier-content {\\r\\n min-height: 25px;\\r\\n}\\r\\n\\r\\n.zeus-carrier-links {\\r\\n margin-top: var(--zeus-margin);\\r\\n}\\r\\n\\r\\n.zeus-carrier-link {\\r\\n text-align: center;\\r\\n}\\r\\n\\r\\n.zeus-carrier-button {\\r\\n display: inline-block;\\r\\n min-width: 250px;\\r\\n margin-bottom: var(--zeus-margin);\\r\\n text-transform: uppercase;\\r\\n font-weight: bold;\\r\\n text-decoration: none;\\r\\n\\r\\n &:hover {\\r\\n text-decoration: none;\\r\\n }\\r\\n}\\r\\n\\r\\n.zeus-carrier-phone {\\r\\n display: flex;\\r\\n justify-content: center;\\r\\n\\r\\n > label {\\r\\n margin-right: var(--zeus-margin);\\r\\n }\\r\\n}\\r\\n\\r\\n.zeus-carrier-link-heading {\\r\\n margin-top: var(--zeus-margin);\\r\\n margin-bottom: var(--zeus-margin-xs);\\r\\n\\r\\n h4 {\\r\\n font-size: 1.125rem;\\r\\n margin-bottom: 0;\\r\\n }\\r\\n}\\r\\n\\r\\n.zeus-link-list-container .zeus-carrier-link-heading:first-child {\\r\\n margin-top: 0;\\r\\n}\\r\\n\\r\\n.zeus-carrier-link-description {\\r\\n margin-left: var(--zeus-margin-lg);\\r\\n margin-bottom: var(--zeus-margin);\\r\\n}\\r\\n\\r\\n.zeus-carrier-list-link {\\r\\n display: inline-block;\\r\\n margin-right: var(--zeus-margin);\\r\\n}\\r\\n\\r\\n.zeus-carrier-link-link-icon {\\r\\n font-size: 1.25em;\\r\\n margin-right: var(--zeus-margin);\\r\\n}\\r\\n\\r\\n.zeus-carriers-view-more {\\r\\n text-align: center;\\r\\n}\\r\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".zeus-carrier-logo {\\n max-width: 100%;\\n}\\n@media (min-width: 768px) {\\n .zeus-carrier-logo {\\n max-width: 300px;\\n }\\n}\\n\\n.zeus-carrier-link-list {\\n background-color: #efefef;\\n border: 1px solid #ccc;\\n border-radius: 6px;\\n padding: var(--zeus-margin);\\n margin-bottom: var(--zeus-margin);\\n}\\n.zeus-carrier-link-list .zeus-form-group {\\n margin-bottom: var(--zeus-margin-sm);\\n}\\n\\n.zeus-carrier-link-view {\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n}\\n\\n.zeus-carrier-link-buttons {\\n display: flex;\\n flex-direction: row-reverse;\\n justify-content: space-between;\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/members/carriers/dialog/carrier-editor.scss\"],\"names\":[],\"mappings\":\"AAEA;EACI,eAAA;AADJ;AAGI;EAHJ;IAIQ,gBAAA;EAAN;AACF;;AAGA;EACI,yBAAA;EACA,sBAAA;EACA,kBAAA;EACA,2BAAA;EACA,iCAAA;AAAJ;AAEI;EACI,oCAAA;AAAR;;AAIA;EACI,aAAA;EACA,8BAAA;EACA,mBAAA;AADJ;;AAIA;EACI,aAAA;EACA,2BAAA;EACA,8BAAA;AADJ\",\"sourcesContent\":[\"@import \\\"./../../../styles/responsive.scss\\\";\\r\\n\\r\\n.zeus-carrier-logo {\\r\\n max-width: 100%;\\r\\n\\r\\n @media(min-width: $zeus-screen-sm-min) {\\r\\n max-width: 300px;\\r\\n }\\r\\n}\\r\\n\\r\\n.zeus-carrier-link-list {\\r\\n background-color: #efefef;\\r\\n border: 1px solid #ccc;\\r\\n border-radius: 6px;\\r\\n padding: var(--zeus-margin);\\r\\n margin-bottom: var(--zeus-margin);\\r\\n\\r\\n .zeus-form-group {\\r\\n margin-bottom: var(--zeus-margin-sm);\\r\\n }\\r\\n}\\r\\n\\r\\n.zeus-carrier-link-view {\\r\\n display: flex;\\r\\n justify-content: space-between;\\r\\n align-items: center;\\r\\n}\\r\\n\\r\\n.zeus-carrier-link-buttons {\\r\\n display: flex;\\r\\n flex-direction: row-reverse;\\r\\n justify-content: space-between;\\r\\n}\\r\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".zeus-image-editor-body {\\n overflow: hidden;\\n height: calc(100% - 50px);\\n}\\n\\n.zeus-image-editor-container {\\n display: flex;\\n width: 100%;\\n height: 100%;\\n overflow: hidden;\\n}\\n.zeus-image-editor-container img {\\n max-width: 100%;\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/members/controls/dialog/edit-profile-image.scss\"],\"names\":[],\"mappings\":\"AAAA;EACI,gBAAA;EACA,yBAAA;AACJ;;AACA;EACI,aAAA;EACA,WAAA;EACA,YAAA;EACA,gBAAA;AAEJ;AADI;EACI,eAAA;AAGR\",\"sourcesContent\":[\".zeus-image-editor-body {\\r\\n overflow: hidden;\\r\\n height: calc(100% - 50px);\\r\\n}\\r\\n.zeus-image-editor-container {\\r\\n display: flex;\\r\\n width: 100%;\\r\\n height: 100%;\\r\\n overflow: hidden;\\r\\n img {\\r\\n max-width: 100%;\\r\\n }\\r\\n}\\r\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".upline-tree {\\n list-style: none;\\n padding-left: var(--zeus-margin);\\n}\\n\\n.upline-tree li:last-of-type > .upline-separator {\\n display: none;\\n}\\n\\n.upline-separator {\\n display: block;\\n margin-left: var(--zeus-margin);\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/members/controls/hierarchy-upline.scss\"],\"names\":[],\"mappings\":\"AAAA;EACI,gBAAA;EACA,gCAAA;AACJ;;AACA;EACI,aAAA;AAEJ;;AAAA;EACI,cAAA;EACA,+BAAA;AAGJ\",\"sourcesContent\":[\".upline-tree {\\r\\n list-style: none;\\r\\n padding-left: var(--zeus-margin);\\r\\n}\\r\\n.upline-tree li:last-of-type > .upline-separator {\\r\\n display: none;\\r\\n}\\r\\n.upline-separator {\\r\\n display:block;\\r\\n margin-left: var(--zeus-margin);\\r\\n}\\r\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".zeus-member-files-file {\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n}\\n\\n.zeus-member-file {\\n margin-bottom: var(--zeus-margin-sm);\\n}\\n.zeus-member-file a {\\n text-decoration: none;\\n}\\n.zeus-member-file a:hover {\\n text-decoration: none;\\n color: var(--kt-primary);\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/members/controls/my-files/my-files.scss\"],\"names\":[],\"mappings\":\"AAAA;EACI,aAAA;EACA,8BAAA;EACA,mBAAA;AACJ;;AAEA;EACI,oCAAA;AACJ;AAAI;EACI,qBAAA;AAER;AAAQ;EACI,qBAAA;EACA,wBAAA;AAEZ\",\"sourcesContent\":[\".zeus-member-files-file {\\r\\n display: flex;\\r\\n justify-content: space-between;\\r\\n align-items: center;\\r\\n}\\r\\n\\r\\n.zeus-member-file {\\r\\n margin-bottom: var(--zeus-margin-sm);\\r\\n a {\\r\\n text-decoration: none;\\r\\n\\r\\n &:hover {\\r\\n text-decoration: none;\\r\\n color: var(--kt-primary);\\r\\n }\\r\\n }\\r\\n}\\r\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".zeus-profile-dropzone {\\n color: inherit;\\n border: none !important;\\n padding: 0;\\n margin: 0;\\n background: transparent;\\n border-radius: 0;\\n}\\n.zeus-profile-dropzone .zeus-profile-dropzone-container {\\n padding: 10px;\\n border: 2px solid transparent;\\n}\\n.zeus-profile-dropzone .dz-message {\\n margin: 0;\\n}\\n.zeus-profile-dropzone .dz-message .dz-button {\\n display: none;\\n}\\n.zeus-profile-dropzone .dz-preview {\\n display: none;\\n}\\n\\n.zeus-profile-dropzone-container:hover {\\n cursor: pointer;\\n background-color: rgba(255, 255, 255, 0.5);\\n border: 2px dashed white;\\n}\\n\\n.zeus-profile-drag-instructions {\\n margin-top: var(--zeus-margin);\\n font-style: italic;\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/members/controls/profile-image-upload.scss\"],\"names\":[],\"mappings\":\"AAEA;EACI,cAAA;EACA,uBAAA;EACA,UAAA;EACA,SAAA;EACA,uBAAA;EACA,gBAAA;AADJ;AAGI;EACI,aAAA;EACA,6BAAA;AADR;AAII;EACI,SAAA;AAFR;AAIQ;EACI,aAAA;AAFZ;AAMI;EACI,aAAA;AAJR;;AAQA;EACI,eAAA;EACA,0CAAA;EACA,wBAAA;AALJ;;AAQA;EACI,8BAAA;EACA,kBAAA;AALJ\",\"sourcesContent\":[\"@import \\\"./../../styles/responsive.scss\\\";\\r\\n\\r\\n.zeus-profile-dropzone {\\r\\n color: inherit;\\r\\n border: none !important;\\r\\n padding: 0;\\r\\n margin: 0;\\r\\n background: transparent;\\r\\n border-radius: 0;\\r\\n\\r\\n .zeus-profile-dropzone-container {\\r\\n padding: 10px;\\r\\n border: 2px solid transparent;\\r\\n }\\r\\n\\r\\n .dz-message {\\r\\n margin: 0;\\r\\n\\r\\n .dz-button {\\r\\n display: none;\\r\\n }\\r\\n }\\r\\n\\r\\n .dz-preview {\\r\\n display: none;\\r\\n }\\r\\n}\\r\\n\\r\\n.zeus-profile-dropzone-container:hover {\\r\\n cursor: pointer;\\r\\n background-color: rgba(255, 255, 255, 0.5);\\r\\n border: 2px dashed white;\\r\\n}\\r\\n\\r\\n.zeus-profile-drag-instructions {\\r\\n margin-top: var(--zeus-margin);\\r\\n font-style: italic;\\r\\n}\\r\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".zeus-client {\\n margin-bottom: var(--zeus-space-lg);\\n}\\n.zeus-client .zeus-client-data {\\n display: flex;\\n padding: var(--zeus-space);\\n}\\n.zeus-client .zeus-client-image {\\n margin-right: var(--zeus-space);\\n}\\n.zeus-client .zeus-client-image-initials {\\n width: 150px;\\n height: 150px;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n border-radius: var(--zeus-space-sm);\\n background-color: rgba(255, 127, 0, 0.2);\\n color: orange;\\n font-size: 2em;\\n}\\n.zeus-client .zeus-client-top {\\n flex: 2;\\n}\\n.zeus-client .zeus-client-details {\\n display: flex;\\n justify-content: space-between;\\n}\\n.zeus-client .zeus-client-name {\\n font-weight: bold;\\n color: black;\\n font-size: 1.25em;\\n margin-bottom: var(--zeus-space-sm);\\n}\\n.zeus-client .zeus-client-contact {\\n display: flex;\\n margin-bottom: var(--zeus-space-sm);\\n}\\n.zeus-client .zeus-client-contact > * {\\n margin-right: var(--zeus-space-sm);\\n}\\n.zeus-client .zeus-client-heros {\\n margin-bottom: var(--zeus-space-sm);\\n}\\n.zeus-client .zeus-client-nav {\\n margin-left: var(--zeus-space);\\n}\\n.zeus-client .zeus-client-nav > a {\\n font-size: 1.1em;\\n text-decoration: none;\\n font-weight: bold;\\n margin-right: var(--zeus-space);\\n display: inline-flex;\\n height: 100%;\\n padding-bottom: 8px;\\n border-bottom: 3px solid transparent;\\n color: inherit;\\n}\\n.zeus-client .zeus-client-nav > a.active, .zeus-client .zeus-client-nav > a:hover {\\n color: var(--zeus-link-color);\\n border-bottom-color: var(--zeus-link-color);\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/members/crm/client.scss\"],\"names\":[],\"mappings\":\"AAAA;EACI,mCAAA;AACJ;AACI;EACI,aAAA;EACA,0BAAA;AACR;AAEI;EACI,+BAAA;AAAR;AAGI;EACI,YAAA;EACA,aAAA;EACA,aAAA;EACA,mBAAA;EACA,uBAAA;EACA,mCAAA;EACA,wCAAA;EACA,aAAA;EACA,cAAA;AADR;AAII;EACI,OAAA;AAFR;AAKI;EACI,aAAA;EACA,8BAAA;AAHR;AAMI;EACI,iBAAA;EACA,YAAA;EACA,iBAAA;EACA,mCAAA;AAJR;AAOI;EACI,aAAA;EACA,mCAAA;AALR;AAOQ;EACI,kCAAA;AALZ;AASI;EACI,mCAAA;AAPR;AAUI;EACI,8BAAA;AARR;AAUQ;EACI,gBAAA;EACA,qBAAA;EACA,iBAAA;EACA,+BAAA;EACA,oBAAA;EACA,YAAA;EACA,mBAAA;EACA,oCAAA;EACA,cAAA;AARZ;AAUY;EAEI,6BAAA;EACA,2CAAA;AAThB\",\"sourcesContent\":[\".zeus-client {\\r\\n margin-bottom: var(--zeus-space-lg);\\r\\n\\r\\n .zeus-client-data {\\r\\n display: flex;\\r\\n padding: var(--zeus-space);\\r\\n }\\r\\n\\r\\n .zeus-client-image {\\r\\n margin-right: var(--zeus-space);\\r\\n }\\r\\n\\r\\n .zeus-client-image-initials {\\r\\n width: 150px;\\r\\n height: 150px;\\r\\n display: flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n border-radius: var(--zeus-space-sm);\\r\\n background-color: rgba(255, 127, 0, 0.2);\\r\\n color: orange;\\r\\n font-size: 2em;\\r\\n }\\r\\n\\r\\n .zeus-client-top {\\r\\n flex: 2;\\r\\n }\\r\\n\\r\\n .zeus-client-details {\\r\\n display: flex;\\r\\n justify-content: space-between;\\r\\n }\\r\\n\\r\\n .zeus-client-name {\\r\\n font-weight: bold;\\r\\n color: black;\\r\\n font-size: 1.25em;\\r\\n margin-bottom: var(--zeus-space-sm);\\r\\n }\\r\\n\\r\\n .zeus-client-contact {\\r\\n display: flex;\\r\\n margin-bottom: var(--zeus-space-sm);\\r\\n\\r\\n > * {\\r\\n margin-right: var(--zeus-space-sm);\\r\\n }\\r\\n }\\r\\n\\r\\n .zeus-client-heros {\\r\\n margin-bottom: var(--zeus-space-sm);\\r\\n }\\r\\n\\r\\n .zeus-client-nav {\\r\\n margin-left: var(--zeus-space);\\r\\n\\r\\n > a {\\r\\n font-size: 1.1em;\\r\\n text-decoration: none;\\r\\n font-weight: bold;\\r\\n margin-right: var(--zeus-space);\\r\\n display: inline-flex;\\r\\n height: 100%;\\r\\n padding-bottom: 8px;\\r\\n border-bottom: 3px solid transparent;\\r\\n color: inherit;\\r\\n\\r\\n &.active,\\r\\n &:hover {\\r\\n color: var(--zeus-link-color);\\r\\n border-bottom-color: var(--zeus-link-color);\\r\\n }\\r\\n }\\r\\n }\\r\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Module\nvar code = \"\\r\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\r\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\r\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\r\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\r\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\r\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\";\n// Exports\nexport default code;","// Module\nvar code = \"\\r\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\r\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\r\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\r\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\r\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\r\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\r\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\r\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\r\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\r\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\";\n// Exports\nexport default code;","// Module\nvar code = \"\";\n// Exports\nexport default code;","// Module\nvar code = \"\";\n// Exports\nexport default code;","// Module\nvar code = \"\";\n// Exports\nexport default code;","// Module\nvar code = \"\\r\\n\";\n// Exports\nexport default code;"],"names":[],"sourceRoot":""}