{"version":3,"file":"ApplicationForm.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AA6BA;;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAGA;AACA;AAAA;AAEA;AACA;AAAA;AAKA;AACA;AACA;AAAA;AAOA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAOA;AAAA;AAKA;AAAA;AAKA;AAAA;AAKA;AAAA;AAOA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAIA;AAAA;AAGA;AAAA;AAGA;AAAA;AAGA;AAAA;AAGA;AAAA;AAYA;AAEA;AAKA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAUA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAKA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5OA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AA4BA;AACA;AACA;AACA;AACA;AACA;AAGA;;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAOA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAQA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAIA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAAA;AAMA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAAA;AAMA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAAA;AAcA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAMA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAKA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1MA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAgCA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAiFA;AAEA;AAAA;AACA;AAAA;AAQA;AAAA;AAAA;AACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgFA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAKA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAGA;AAGA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAKA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAMA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAKA;AACA;AAIA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAIA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AAGA;AAMA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAUA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAKA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAEA;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;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;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;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAIA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAKA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAGA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;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;AAEA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AAEA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;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;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AAUA;AACA;AAEA;AAUA;AACA;AAEA;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAIA;AACA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAGA;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;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;AACA;AACA;AACA;AACA;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;AAEA;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;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;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAIA;AAMA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAoBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AASA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AAKA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AAGA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAOA;AAIA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AACA;AAEA;AAEA;AAEA;AACA;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAGA;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;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAGA;AAGA;AAGA;AAGA;AAGA;AAGA;AAGA;AAGA;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAAA;AAAA;AACA;AAEA;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;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AACA;;AAEA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAIA;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;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;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;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;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAAA;AAEA;AACA;;AAEA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AACA;AArBA;AAAA;AAAA;AAAA;AAuBA;AACA;AACA;AACA;AAKA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AAIA;AACA;AAEA;AAAA;AAEA;AAAA;AAAA;AACA;;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AAIA;AACA;AACA;AACA;AA7BA;AAAA;AAAA;AAAA;AA+BA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AAQA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AAEA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AAIA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAQA;AACA;AACA;AACA;AAxHA;AAAA;AAAA;AAAA;;AA0HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAGA;AACA;AAGA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;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;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAGA;AACA;AAGA;AACA;AACA;AACA;AArDA;AAAA;AAAA;AAAA;AAsDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;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;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;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;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAtFA;AAAA;AAAA;AAAA;AAuFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;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;AAAA;AAGA;AAIA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAxCA;AAAA;AAAA;AAAA;AA0CA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AA7BA;AAAA;AAAA;AA+BA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAGA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AApCA;AAAA;AAAA;AAAA;;AAsCA;AACA;AACA;AACA;AACA;AACA;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;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAIA;AACA;AACA;AACA;AAEA;AAKA;AACA;;AAEA;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;AAEA;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;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAIA;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;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAIA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAGA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAIA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAGA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAMA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAIA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;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;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAIA;AACA;AACA;AACA;AAAA;AAGA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAIA;AACA;AACA;AACA;AACA;AACA;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;AAEA;AACA;AACA;AACA;AAAA;AAOA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAIA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAIA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAIA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAKA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAKA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AA9rLA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AAEA;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;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;AAEA;AACA;AAAA;AAAA;AAAA;AA6kEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAqhHA;;AAEA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAKA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAEA;AACA;AAIA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAMA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAKA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAQA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAQA;AAEA;AACA;AAAA;AAMA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAKA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAMA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;;AAEA;AACA;AACA;AAGA;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;AAKA;AAEA;AAKA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAeA;AAAA;AAAA;AAAA;AAGA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpyMA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAUA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AA+CA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;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;AAGA;;AAEA;;AAEA;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;AAEA;AAGA;AAEA;AACA;AAAA;AAIA;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;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAMA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAEA;AAAA;AAwBA;AAAA;AASA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAKA;AAIA;AACA;AAAA;AAYA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAiBA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAMA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAKA;AACA;AACA;AACA;AACA;AAUA;AAIA;AAMA;AAAA;AAEA;AAAA;AAAA;AAMA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AAAA;AASA;AAAA;AAQA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrgBA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAiBA;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;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAGA;AAAA;AAGA;AAAA;AAGA;AAAA;AAMA;AAEA;AAAA;AAGA;AACA;AAAA;AAOA;AACA;AAAA;AAOA;AACA;AAAA;AAOA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAEA;AAAA;AAIA;AAKA;AAEA;AACA;AACA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AAAA;AAKA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAEA;AAAA;AAMA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;AAMA;AACA;AAAA;AAMA;AACA;AAAA;AAMA;AACA;AAAA;AAMA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAEA;AAAA;AAGA;AAAA;AACA;AAAA;AAYA;AAEA;AAKA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;ACpTA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAWA;;AAEA;AACA;AACA;AAEA;AACA;AACA;AAGA;AAEA;AACA;AAEA;AACA;AAAA;AAKA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAQA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAqCA;;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAKA;AACA;AACA;AAAA;AAOA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAIA;AAAA;AAGA;AAAA;AAGA;AAAA;AAGA;AAAA;AAGA;AAAA;AAGA;AAAA;AAQA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAQA;AAAA;AAOA;AAAA;AAOA;AAAA;AAOA;AAAA;AAOA;AAAA;AAMA;AASA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAUA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAKA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvTA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAkCA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AACA;AAKA;AAEA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAAA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAKA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAQA;AAEA;AAKA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1MA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAGA;AACA;AACA;AACA;;AAEA;;AAiCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAGA;AAKA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAGA;AAKA;AAAA;AAKA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAMA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAMA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAQA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAEA;AAAA;AAIA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AAAA;AAIA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAIA;AAAA;AAOA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAMA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AAAA;AAIA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AAAA;AAIA;AAAA;AAKA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAIA;AAAA;AAEA;AAAA;AAQA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAMA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAIA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAIA;AAAA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAIA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAKA;AAAA;AAGA;AACA;AAAA;AAUA;AACA;AACA;AAAA;AAQA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC51BA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAIA;AAMA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AA6BA;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;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAGA;AAEA;AAAA;AACA;AAAA;AAMA;AAAA;AAAA;AACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AA+BA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AA1CA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;;AAEA;;AAEA;AAAA;AAAA;AAAA;AAeA;;AAEA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AAKA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAOA;AAAA;AAEA;AACA;AACA;AAAA;AAKA;AAAA;AAAA;AACA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAAA;AAQA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAIA;AAAA;AAKA;AAAA;AAAA;AAEA;AAAA;AAmBA;AACA;AACA;AAAA;AAKA;AACA;AACA;AAAA;AAMA;AACA;AAAA;AAOA;AACA;AAAA;AAMA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAOA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAEA;AAAA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AAAA;AASA;AAKA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAMA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAIA;AAAA;AAGA;AAAA;AAAA;AAIA;AAAA;AAEA;AAAA;AAAA;AAQA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAIA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAeA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAkBA;AACA;AAAA;AAAA;AACA;AAAA;AAOA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AAAA;AASA;AAIA;AAAA;AAAA;AAGA;AACA;AAAA;AAMA;AACA;AAAA;AAMA;AAAA;AAAA;AAMA;AAAA;AAAA;AAaA;AAEA;AAKA;AAAA;AAAA;AAAA;AAIA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrpBA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAcA;;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AAAA;AAIA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzGA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAIA;AASA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AAoBA;AAEA;AAAA;AACA;AAAA;AAMA;AAAA;AAAA;AACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAoBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;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;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAmBA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAvHA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AAAA;AAAA;AAqDA;;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AACA;;AAEA;AAAA;AAAA;AAAA;AAkCA;;AAEA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAKA;AACA;AAAA;AAMA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAMA;AAEA;AAKA;AAAA;AAAA;AAAA;AAIA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxRA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAIA;AACA;AAIA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AA6CA;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;AAGA;AAEA;AAAA;AACA;AAAA;AAUA;AAAA;AAAA;AACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuEA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAIA;AAIA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAeA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAKA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAIA;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;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAIA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAKA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AApvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;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;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AAAA;AAAA;AA+aA;;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAwPA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAKA;AACA;AACA;AAAA;AAMA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAKA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAMA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAQA;AAEA;AACA;AACA;AAAA;AAMA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAKA;AACA;AACA;AAAA;AAOA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAMA;AAAA;AAAA;AAMA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAOA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AACA;AAAA;AAAA;AAAA;AASA;AACA;AAAA;AAEA;AAAA;AAAA;AAOA;AAEA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAOA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAUA;AAEA;AACA;AACA;AAAA;AAOA;AACA;AACA;AAAA;AAMA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAOA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAKA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAOA;AACA;AACA;AAAA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AASA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAOA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAEA;AACA;AAAA;AAMA;AACA;AACA;AAEA;AAKA;AAAA;AAAA;AAAA;AAIA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACv0CA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAKA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAuBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AAAA;AACA;AAAA;AAMA;AAAA;AAAA;AACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AA4CA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAIA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAIA;AAIA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAMA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAiBA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAIA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AA3TA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;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;;AAEA;AAAA;AAAA;AAAA;AA0KA;;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AACA;AACA;;AAEA;AAAA;AAAA;AAAA;AA4FA;;AAEA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;;AAEA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAGA;AAOA;AACA;;AAEA;AACA;AAEA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAEA;AACA;AACA;AAAA;AAKA;AAEA;AACA;AAEA;AAAA;AAAA;AAKA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAQA;AAEA;AAGA;AAAA;AACA;AAAA;AAMA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAOA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAOA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAEA;AAKA;AACA;AAEA;AAKA;AAAA;AAAA;AAAA;AAIA;AACA;;;;;;;;;;;;;;;;;;;;ACnqBA;AACA;;AAEA;AACA;AAMA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AAEA;AAGA;AAEA;AAEA;AACA;AAEA;AAEA;AAGA;AACA;AACA;AAGA;AAEA;AAEA;AAGA;AACA;AACA;AACA;AAGA;AAEA;AAEA;AAKA;AAEA;AAEA;AAKA;AAEA;AAEA;AAKA;AAEA;AAEA;AAKA;AAEA;AAEA;AAKA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AAEA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAGA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;AClMA;AACA;;AAEA;;AAGA;AACA;AAIA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AAEA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;AC7CA;AACA;;AAEA;;AAMA;AACA;;AAEA;AACA;AACA;AAGA;AAAA;AAAA;AACA;AACA;AAIA;AAAA;AAAA;AAAA;AACA;AACA;AAIA;AAAA;AAAA;AAAA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;AClCA;AACA;;AAEA;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;AC7BA;AACA;;AAEA;;AAKA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;ACvCA;AACA;;AAEA;AAUA;AAVA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;ACHA;AACA;;AAEA;AAUA;AAVA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;ACHA;AACA;;AAwBA;AAYA;AAZA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;ACzBA;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;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;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;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;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;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;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;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACnSA;;;;;;ACAA;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;;;;AC7BA;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;;;;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACPA;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACNA;AACA;AACA;AACA;AACA;;;;;ACJA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AChDA;;;;;AEAA;AACA;AACA;AACA;AACA","sources":["webpack://@hedtech/powercampus-self-service/./ClientApp/Components/Admissions/ApplicationForm/AddressSearchModal.tsx","webpack://@hedtech/powercampus-self-service/./ClientApp/Components/Admissions/ApplicationForm/ApplicationCompletedModal.tsx","webpack://@hedtech/powercampus-self-service/./ClientApp/Components/Admissions/ApplicationForm/ApplicationFormView.tsx","webpack://@hedtech/powercampus-self-service/./ClientApp/Components/Admissions/ApplicationForm/ApplicationHandler.tsx","webpack://@hedtech/powercampus-self-service/./ClientApp/Components/Admissions/ApplicationForm/Attachments.tsx","webpack://@hedtech/powercampus-self-service/./ClientApp/Components/Admissions/ApplicationForm/ConfirmationSavedModal.tsx","webpack://@hedtech/powercampus-self-service/./ClientApp/Components/Admissions/ApplicationForm/ETSSearchModal.tsx","webpack://@hedtech/powercampus-self-service/./ClientApp/Components/Admissions/ApplicationForm/FieldsGroupHandler.tsx","webpack://@hedtech/powercampus-self-service/./ClientApp/Components/Admissions/ApplicationForm/FieldsHandler.tsx","webpack://@hedtech/powercampus-self-service/./ClientApp/Components/Generic/PaymentDetailModal.tsx","webpack://@hedtech/powercampus-self-service/./ClientApp/Components/Generic/Print.tsx","webpack://@hedtech/powercampus-self-service/./ClientApp/Components/Generic/ProcessPaymentModal.tsx","webpack://@hedtech/powercampus-self-service/./ClientApp/Components/Generic/SignIn.tsx","webpack://@hedtech/powercampus-self-service/./ClientApp/Components/Generic/SignUp.tsx","webpack://@hedtech/powercampus-self-service/./ClientApp/Requests/Admissions/ApplicationForm.ts","webpack://@hedtech/powercampus-self-service/./ClientApp/Requests/Admissions/Applications.ts","webpack://@hedtech/powercampus-self-service/./ClientApp/Requests/Generic/ProcessPaymentModal.ts","webpack://@hedtech/powercampus-self-service/./ClientApp/Requests/Generic/SignIn.ts","webpack://@hedtech/powercampus-self-service/./ClientApp/Requests/Generic/SignUp.ts","webpack://@hedtech/powercampus-self-service/./ClientApp/Types/Enum/AuthStatus.ts","webpack://@hedtech/powercampus-self-service/./ClientApp/Types/Enum/PaymentOrigin.ts","webpack://@hedtech/powercampus-self-service/./ClientApp/Types/Generic/IPasswordPolicy.ts","webpack://@hedtech/powercampus-self-service/./node_modules/moment/locale/ sync ^\\.\\/.*$","webpack://@hedtech/powercampus-self-service/ignored|C:\\Users\\GeorgesHachem\\Documents\\work\\9.2.1 try\\9.2.1\\selfservice-900\\SelfService\\node_modules\\object-inspect|./util.inspect","webpack://@hedtech/powercampus-self-service/webpack/bootstrap","webpack://@hedtech/powercampus-self-service/webpack/runtime/chunk loaded","webpack://@hedtech/powercampus-self-service/webpack/runtime/compat get default export","webpack://@hedtech/powercampus-self-service/webpack/runtime/define property getters","webpack://@hedtech/powercampus-self-service/webpack/runtime/global","webpack://@hedtech/powercampus-self-service/webpack/runtime/hasOwnProperty shorthand","webpack://@hedtech/powercampus-self-service/webpack/runtime/make namespace object","webpack://@hedtech/powercampus-self-service/webpack/runtime/node module decorator","webpack://@hedtech/powercampus-self-service/webpack/runtime/jsonp chunk loading","webpack://@hedtech/powercampus-self-service/webpack/runtime/nonce","webpack://@hedtech/powercampus-self-service/webpack/before-startup","webpack://@hedtech/powercampus-self-service/webpack/startup","webpack://@hedtech/powercampus-self-service/webpack/after-startup"],"sourcesContent":["/* Copyright 2019 Ellucian Company L.P. and its affiliates.\r\n * File: AddressSearchModal.tsx\r\n * Type: Presentation component */\r\n\r\n// #region Imports\r\nimport React from 'react';\r\n\r\n// Core components\r\nimport Button, { ButtonGroup } from '@hedtech/powercampus-design-system/react/core/Button';\r\nimport Grid from '@hedtech/powercampus-design-system/react/core/Grid';\r\nimport Link from '@hedtech/powercampus-design-system/react/core/Link';\r\nimport Modal from '@hedtech/powercampus-design-system/react/core/Modal';\r\nimport Pagination from '@hedtech/powercampus-design-system/react/core/Pagination';\r\nimport Table, { TableBody, TableCell, TableHead, TableRow } from '@hedtech/powercampus-design-system/react/core/Table';\r\nimport Text from '@hedtech/powercampus-design-system/react/core/Text';\r\nimport TextField from '@hedtech/powercampus-design-system/react/core/TextField';\r\n\r\n// Types\r\nimport { IAddress } from '../../../Types/Account/IAddress';\r\nimport { IAddressSearchModal } from '../../../Types/Resources/Admissions/IApplicationFormResources';\r\n\r\n// #endregion Types\r\n\r\n// #region Internal types\r\nexport interface IAddressSearchModalProps {\r\n addresses?: IAddress[];\r\n open: boolean;\r\n pageNumber: number;\r\n pageSize: number;\r\n rowsPerPageOptions: number[];\r\n totalAddress: number;\r\n zipCode?: string;\r\n\r\n // events\r\n onChangePage: (event: any, page: number) => void;\r\n onChangeRowsPerPage: (event: any) => void;\r\n onChangeTextField?: (event: any) => void;\r\n onClear: () => void;\r\n onClickLink: (zipCode?: string, city?: string, stateProvinceId?: number, countryId?: number,\r\n countyId?: number) => void;\r\n onClose: () => void;\r\n onSearch: () => void;\r\n\r\n // resources\r\n resources: IAddressSearchModal;\r\n}\r\n// #endregion Internal types\r\n\r\n// #region Component\r\nconst AddressSearchModal: React.FC = (props: IAddressSearchModalProps): JSX.Element => {\r\n const {\r\n addresses,\r\n open,\r\n pageNumber,\r\n pageSize,\r\n rowsPerPageOptions,\r\n totalAddress,\r\n zipCode,\r\n\r\n // events\r\n onChangePage,\r\n onChangeRowsPerPage,\r\n onChangeTextField,\r\n onClear,\r\n onClickLink,\r\n onClose,\r\n onSearch,\r\n\r\n // resources\r\n resources\r\n } = props;\r\n\r\n const footerModal: JSX.Element = (\r\n \r\n \r\n {resources.btnSearch}\r\n \r\n \r\n {resources.btnClear}\r\n \r\n \r\n );\r\n\r\n let table: JSX.Element | undefined;\r\n\r\n if (addresses && addresses.length > 0) {\r\n const tableBody: JSX.Element[] = [];\r\n addresses.forEach((address, j) => {\r\n tableBody.push(\r\n \r\n \r\n \r\n \r\n {address.zipCode}\r\n \r\n \r\n \r\n \r\n \r\n {address.city}\r\n \r\n \r\n \r\n \r\n {address.state}\r\n \r\n \r\n \r\n \r\n {address.county}\r\n \r\n \r\n \r\n \r\n {address.country}\r\n \r\n \r\n \r\n );\r\n });\r\n\r\n table = (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {resources.lblZipCode}\r\n \r\n \r\n {resources.lblCity}\r\n \r\n \r\n {resources.lblState}\r\n \r\n \r\n {resources.lblCounty}\r\n \r\n \r\n {resources.lblCountry}\r\n \r\n \r\n \r\n \r\n {tableBody}\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n else {\r\n table = (\r\n \r\n {resources.lblNoResults}\r\n \r\n );\r\n }\r\n\r\n let paginationComponent: JSX.Element | undefined;\r\n if (addresses && addresses.length > 0) {\r\n paginationComponent = (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n let bodyModal: JSX.Element;\r\n bodyModal = (\r\n <>\r\n \r\n \r\n \r\n \r\n
\r\n \r\n {footerModal}\r\n \r\n
\r\n
\r\n {table}\r\n {paginationComponent}\r\n \r\n );\r\n\r\n return (\r\n \r\n {bodyModal}\r\n \r\n );\r\n};\r\n// #endregion Component\r\n\r\n// Export: Component\r\nexport default AddressSearchModal;","/* Copyright 2019 Ellucian Company L.P. and its affiliates.\r\n * File: ApplicationCompletedModal.tsx\r\n * Type: Presentation component */\r\n\r\n// #region Imports\r\nimport React from 'react';\r\n\r\n// Core components\r\nimport Button, { ButtonGroup } from '@hedtech/powercampus-design-system/react/core/Button';\r\nimport Divider from '@hedtech/powercampus-design-system/react/core/Divider';\r\nimport Grid from '@hedtech/powercampus-design-system/react/core/Grid';\r\nimport Modal from '@hedtech/powercampus-design-system/react/core/Modal';\r\nimport Text from '@hedtech/powercampus-design-system/react/core/Text';\r\n\r\n// Internal components\r\nimport { IApplicationHandler } from '../../../Types/Resources/Admissions/IApplicationFormResources';\r\nimport FieldsGroupHandler from './FieldsGroupHandler';\r\n\r\n// Helpers\r\nimport Tokens from '@hedtech/powercampus-design-system/react/core/styles/Tokens';\r\nimport { createStyles, withStyles, WithStyles } from '@hedtech/powercampus-design-system/react/core/styles/withStyles';\r\n\r\n// Types\r\nimport { IDropDownOption } from '@hedtech/powercampus-design-system/types/IDropDownOption';\r\nimport { IFieldsGroup } from '../../../Types/Form/IFieldsGroup';\r\nimport { IPaymentTransaction } from '../../../Types/Payment/IPaymentTransaction';\r\n// #endregion\r\n\r\n// #region Internal types\r\nexport interface IApplicationCompletedModalProps {\r\n dateTimeCulture: string;\r\n failedPayment: boolean;\r\n fieldGroup?: IFieldsGroup;\r\n paymentTransaction?: IPaymentTransaction;\r\n shortDatePattern: string;\r\n successPayment: boolean;\r\n\r\n onAddMore: (fieldGroup: IFieldsGroup, stepIndex: number, fieldGroupIndex: number) => void;\r\n onChangeCheckBox: (event: React.ChangeEvent) => void;\r\n onChangeDateTimeField: (date: string, id: string, isValid: boolean) => void;\r\n onChangeDropDown: (optionSelected: IDropDownOption, id: string) => void;\r\n onChangeListCheckbox: (event: any) => void;\r\n onChangeRadioGroup: (event: React.ChangeEvent, value: string) => void;\r\n onChangeTextField: (event: React.ChangeEvent) => void;\r\n onClickButton: (event: React.MouseEvent) => void;\r\n onCloseFailedPayment: (event: React.MouseEvent) => void;\r\n\r\n resourcesApplicationHandler: IApplicationHandler;\r\n}\r\n\r\nconst styles = createStyles({\r\n containerDetails: {\r\n backgroundColor: Tokens.colorBrandNeutral200,\r\n padding: Tokens.spacing50\r\n }\r\n});\r\n\r\ntype PropsWithStyles = IApplicationCompletedModalProps & WithStyles;\r\n// #endregion\r\n\r\n// #region Component\r\nconst ApplicationCompletedModal: React.FC = (props: PropsWithStyles): JSX.Element => {\r\n const {\r\n classes,\r\n dateTimeCulture,\r\n failedPayment,\r\n fieldGroup,\r\n paymentTransaction,\r\n shortDatePattern,\r\n successPayment,\r\n\r\n onAddMore,\r\n onChangeCheckBox,\r\n onChangeDateTimeField,\r\n onChangeDropDown,\r\n onChangeListCheckbox,\r\n onChangeRadioGroup,\r\n onChangeTextField,\r\n onClickButton,\r\n onCloseFailedPayment,\r\n\r\n resourcesApplicationHandler\r\n } = props;\r\n\r\n let footerModal: JSX.Element;\r\n footerModal = (\r\n \r\n \r\n {resourcesApplicationHandler.btnOk}\r\n \r\n \r\n );\r\n\r\n const bodyModal: JSX.Element[] = [];\r\n if (fieldGroup) {\r\n bodyModal.push(\r\n \r\n {failedPayment ?\r\n (\r\n \r\n \r\n {resourcesApplicationHandler.lblContentTextApplication}\r\n \r\n \r\n ) :\r\n successPayment && paymentTransaction ?\r\n (\r\n \r\n \r\n
\r\n \r\n {resourcesApplicationHandler.lblTitleDetails}\r\n \r\n \r\n \r\n \r\n \r\n {resourcesApplicationHandler.lblAmount}\r\n \r\n \r\n \r\n \r\n {paymentTransaction.amount}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {resourcesApplicationHandler.lblDescription}\r\n \r\n \r\n \r\n \r\n {paymentTransaction.description}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {resourcesApplicationHandler.lblAuthorizationCode}\r\n \r\n \r\n \r\n \r\n {paymentTransaction.authorizationNumber}\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n ) :\r\n undefined\r\n }\r\n {!failedPayment ?\r\n (\r\n \r\n \r\n \r\n ) : undefined}\r\n
\r\n );\r\n }\r\n\r\n return (\r\n \r\n {bodyModal}\r\n \r\n );\r\n};\r\n// #endregion\r\n\r\n// Export: Component\r\nexport default withStyles(styles)(ApplicationCompletedModal);","/* Copyright 2019 - 2021 Ellucian Company L.P. and its affiliates.\r\n * File: ApplicationFormView.tsx\r\n * Type: Container component */\r\n\r\n// #region Imports\r\nimport moment from 'moment';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\n\r\n// Core components\r\nimport Layout, { withLayout } from '@hedtech/powercampus-design-system/react/components/Layout';\r\nimport ConfirmationDialog from '@hedtech/powercampus-design-system/react/core/ConfirmationDialog';\r\n\r\n// Internal Components\r\nimport PaymentDetailModal from '../../Generic/PaymentDetailModal';\r\nimport ProcessPaymentModal from '../../Generic/ProcessPaymentModal';\r\nimport SignIn from '../../Generic/SignIn';\r\nimport SignUp from '../../Generic/SignUp';\r\nimport AddressSearchModal from './AddressSearchModal';\r\nimport ApplicationHandler from './ApplicationHandler';\r\nimport Attachments from './Attachments';\r\nimport ConfirmationSavedModal from './ConfirmationSavedModal';\r\nimport ETSSearchModal from './ETSSearchModal';\r\n\r\n// Generic components\r\nimport Button from '@hedtech/powercampus-design-system/react/core/Button';\r\nimport Grid from '@hedtech/powercampus-design-system/react/core/Grid';\r\nimport Modal from '@hedtech/powercampus-design-system/react/core/Modal';\r\nimport Table, { TableBody, TableCell, TableRow } from '@hedtech/powercampus-design-system/react/core/Table';\r\nimport Text from '@hedtech/powercampus-design-system/react/core/Text';\r\nimport TextField from '@hedtech/powercampus-design-system/react/core/TextField';\r\n\r\n// #region Types\r\nimport { IAddress } from '../../../Types/Account/IAddress';\r\nimport { IAlert } from '@hedtech/powercampus-design-system/types/IAlert';\r\nimport { IApplication } from '../../../Types/Applications/IApplication';\r\nimport { IApplicationActivity } from '../../../Types/Applications/IApplicationActivity';\r\nimport { IApplicationAddress } from '../../../Types/Applications/IApplicationAddress';\r\nimport { IApplicationAttachment } from '../../../Types/Applications/IApplicationAttachment';\r\nimport { IApplicationEducation } from '../../../Types/Applications/IApplicationEducation';\r\nimport { IApplicationEmergencyContact } from '../../../Types/Applications/IApplicationEmergencyContact';\r\nimport { IApplicationEmployment } from '../../../Types/Applications/IApplicationEmployment';\r\nimport { IApplicationErrors } from '../../../Types/Applications/IApplicationErrors';\r\nimport { IApplicationForm } from '../../../Types/Form/IApplicationForm';\r\nimport { IApplicationFormResources } from '../../../Types/Resources/Admissions/IApplicationFormResources';\r\nimport { IApplicationIpeds } from '../../../Types/Applications/IApplicationIpeds';\r\nimport { IApplicationPhoneList } from '../../../Types/Applications/IApplicationPhoneList';\r\nimport { IApplicationProgram } from '../../../Types/Applications/IApplicationProgram';\r\nimport { IApplicationRelative } from '../../../Types/Applications/IApplicationRelative';\r\nimport { IApplicationResidency } from '../../../Types/Applications/IApplicationResidency';\r\nimport { IApplicationUserDefined } from '../../../Types/Applications/IApplicationUserDefined';\r\nimport { ICultures } from '@hedtech/powercampus-design-system/types/ICultures';\r\nimport { IDataForm } from '../../../Types/Form/IDataForm';\r\nimport { IDropDownOption } from '@hedtech/powercampus-design-system/types/IDropDownOption';\r\nimport { IFieldForm } from '../../../Types/Form/IFieldForm';\r\nimport { IFieldsGroup } from '../../../Types/Form/IFieldsGroup';\r\nimport { IGroupErrors } from '../../../Types/Applications/IApplicationErrors';\r\nimport { IInstitution } from '../../../Types/Applications/IInstitution';\r\nimport { IJsonResult } from '@hedtech/powercampus-design-system/types/IJsonResult';\r\nimport { ILogData } from '@hedtech/powercampus-design-system/types/ILogData';\r\nimport { IPaymentInfo } from '../../../Types/Payment/IPaymentInfo';\r\nimport { IPaymentTransaction } from '../../../Types/Payment/IPaymentTransaction';\r\nimport { ISavedApplication } from '../../../Types/Applications/ISavedApplication';\r\nimport { ITestScore } from '../../../Types/Applications/ITestScore';\r\nimport { PaymentOrigin } from '../../../Types/Enum/PaymentOrigin';\r\nimport { ResultType } from '@hedtech/powercampus-design-system/types/ResultType';\r\n// #endregion Types\r\n\r\n// Helpers\r\nimport Format from '@hedtech/powercampus-design-system/helpers/Format';\r\nimport LogData from '@hedtech/powercampus-design-system/helpers/LogData';\r\nimport Resolver from '@hedtech/powercampus-design-system/helpers/Resolver';\r\n\r\n// Constants\r\nimport Constants from '@hedtech/powercampus-design-system/helpers/Constants';\r\n\r\n// Requests\r\nimport Requests from '../../../Requests/Admissions/ApplicationForm';\r\nimport RequestsApplication from '../../../Requests/Admissions/Applications';\r\n\r\n// State Management\r\nimport LayoutActions from '@hedtech/powercampus-design-system/flux/actions/LayoutActions';\r\nimport LayoutStore from '@hedtech/powercampus-design-system/flux/stores/LayoutStore';\r\n// #endregion Imports\r\n\r\ninterface IApplicationFormState {\r\n // Address Search Modal\r\n addresses?: IAddress[];\r\n openAddressSearchModal: boolean;\r\n selectedZipCode?: string;\r\n\r\n // Account\r\n hasPersonId: boolean;\r\n showSignIn: boolean;\r\n showSignUp: boolean;\r\n\r\n // Application\r\n activeStep: number;\r\n application: IApplication;\r\n applicationId?: number;\r\n componentError: boolean;\r\n components?: IApplicationForm;\r\n cultures: ICultures;\r\n dateTimeCulture: string;\r\n errors: IApplicationErrors[];\r\n expanded: boolean | string;\r\n expansionPanelHeaders: string[];\r\n firstDayOfWeek: number;\r\n openNotAvailableModal: boolean;\r\n resources?: IApplicationFormResources;\r\n rowsPerPageOptions: number[];\r\n shortDatePattern: string;\r\n\r\n // Attachments\r\n attachments: IApplicationAttachment[];\r\n attachmentsTotalSize?: string;\r\n attachmentsTotalSizeNumber: number;\r\n fileId?: number;\r\n fileName?: string;\r\n fileSelector?: any;\r\n openRemoveAttachmentDialog: boolean;\r\n openSupportedFilesModal: boolean;\r\n showAttachments: boolean;\r\n totalNumberOfAttachments: number;\r\n\r\n // ETS Search Modal\r\n countries?: IDropDownOption[];\r\n institutions?: IInstitution[];\r\n openETSSearchModal: boolean;\r\n pageNumber: number;\r\n pageSize: number;\r\n selectedCity?: string;\r\n selectedCountry?: number;\r\n selectedEtsCode?: string;\r\n selectedFieldId?: string;\r\n selectedInstitutionName?: string;\r\n selectedState?: number;\r\n states?: IDropDownOption[];\r\n total: number;\r\n\r\n // Payment\r\n paymentDetailModalOpen: boolean;\r\n paymentInfo?: IPaymentInfo;\r\n paymentModalOpenFail: boolean;\r\n paymentModalOpenProcess: boolean;\r\n paymentModalOpenSuccess: boolean;\r\n paymentTransaction?: IPaymentTransaction;\r\n returnUrl?: string;\r\n\r\n // Save\r\n changeEmailText: boolean;\r\n confirmationMessage?: string;\r\n emailField?: string;\r\n emptyEmailField: boolean;\r\n invalidEmail: boolean;\r\n openConfirmationSavedModal: boolean;\r\n openEmailModal: boolean;\r\n saveMessage?: string;\r\n showSaveButton: boolean;\r\n token?: string;\r\n\r\n // Settings\r\n governmentIdFormat: string;\r\n}\r\n// #endregion Types\r\n\r\n// #region Component\r\nclass ApplicationFormView extends React.Component {\r\n private idMainPage: string;\r\n private idModule: string;\r\n private idPage: string;\r\n private rowsPerPageOptions: number[];\r\n\r\n public readonly state: Readonly;\r\n\r\n public constructor(props) {\r\n super(props);\r\n\r\n // #region Initialize Variables and State\r\n this.idMainPage = 'Applications';\r\n this.idModule = 'Admissions';\r\n this.idPage = 'ApplicationForm';\r\n this.rowsPerPageOptions = [5, 10, 15, 20, 25, 50];\r\n this.state = this.getInitialState();\r\n // #endregion Initialize Variables and State\r\n\r\n // #region Bind State Management Listeners\r\n LayoutStore.addLayoutReadyListener(this.onLayoutReady);\r\n // #endregion State Management Listeners\r\n }\r\n\r\n private getInitialState(): IApplicationFormState {\r\n let resources: IApplicationFormResources | undefined;\r\n if (this.state) {\r\n resources = this.state.resources;\r\n }\r\n\r\n const cultures: ICultures = LayoutStore.getCultures();\r\n\r\n return {\r\n activeStep: 0,\r\n addresses: [],\r\n application: {\r\n addresses: [],\r\n education: [],\r\n employments: [],\r\n phones: [{ isPrimary: true }],\r\n testScores: [],\r\n userDefined: []\r\n },\r\n attachments: [],\r\n attachmentsTotalSizeNumber: 0,\r\n changeEmailText: true,\r\n componentError: false,\r\n components: undefined,\r\n cultures: LayoutStore.getCultures(),\r\n dateTimeCulture: cultures.dateTimeCulture,\r\n emptyEmailField: false,\r\n errors: [],\r\n expanded: false,\r\n expansionPanelHeaders: [],\r\n firstDayOfWeek: cultures.firstDayOfWeek,\r\n hasPersonId: false,\r\n institutions: [],\r\n invalidEmail: false,\r\n openAddressSearchModal: false,\r\n openConfirmationSavedModal: false,\r\n openEmailModal: false,\r\n openETSSearchModal: false,\r\n openNotAvailableModal: false,\r\n openRemoveAttachmentDialog: false,\r\n openSupportedFilesModal: false,\r\n pageNumber: 0,\r\n pageSize: 5,\r\n resources: resources,\r\n rowsPerPageOptions: [],\r\n shortDatePattern: cultures.shortDatePattern,\r\n showAttachments: false,\r\n showSaveButton: false,\r\n showSignIn: false,\r\n showSignUp: false,\r\n total: 0,\r\n totalNumberOfAttachments: 0,\r\n\r\n // Payment\r\n paymentDetailModalOpen: false,\r\n paymentModalOpenFail: false,\r\n paymentModalOpenProcess: false,\r\n paymentModalOpenSuccess: false,\r\n\r\n // Settings\r\n governmentIdFormat: ''\r\n };\r\n }\r\n\r\n // #region Events\r\n // #region Payment\r\n private onClosePaymentDetailModal = (): void => {\r\n try {\r\n this.setState({\r\n paymentDetailModalOpen: false,\r\n paymentInfo: undefined\r\n });\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onClosePaymentDetailModal.name, e));\r\n }\r\n };\r\n\r\n private onClosePaymentModalProcess = (): void => {\r\n try {\r\n this.setState({\r\n paymentModalOpenProcess: false\r\n });\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onClosePaymentModalProcess.name, e));\r\n }\r\n };\r\n\r\n private onPay = (): void => {\r\n try {\r\n const {\r\n paymentInfo\r\n } = this.state;\r\n\r\n if (paymentInfo) {\r\n this.setState({\r\n paymentModalOpenProcess: true\r\n });\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onPay.name, e));\r\n }\r\n };\r\n\r\n private onCloseFailedPayment = (): void => {\r\n try {\r\n window.location.href = `${Constants.webUrl}/Admissions/Applications`;\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onCloseFailedPayment.name, e));\r\n }\r\n };\r\n // #endregion Payment\r\n\r\n // #region Attachment\r\n private buildFileSelector = () => {\r\n try {\r\n const fileSelector = document.createElement('input');\r\n const {\r\n components\r\n } = this.state;\r\n if (components) {\r\n let supportedTypes: string = '';\r\n if (components.fileTypes) {\r\n components.fileTypes.forEach(fileType => {\r\n const newFileExt = fileType.fileExtension.replace(' ', '');\r\n const fileExtensions = newFileExt.split(';');\r\n fileExtensions.forEach(fileExt => {\r\n supportedTypes = supportedTypes + fileExt.replace('*.', '') + ',';\r\n });\r\n });\r\n fileSelector.setAttribute('type', 'file');\r\n fileSelector.setAttribute('files', supportedTypes);\r\n fileSelector.onchange = this.onChangeFile.bind(this);\r\n }\r\n }\r\n return fileSelector;\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.buildFileSelector.name, e));\r\n return null;\r\n }\r\n };\r\n\r\n private getMediaTypeId = (fileExtension: string): number => {\r\n let mediaId: number = 0;\r\n try {\r\n const {\r\n components\r\n } = this.state;\r\n\r\n if (components && components.fileTypes) {\r\n components.fileTypes.forEach(fileType => {\r\n const newFileExt = fileType.fileExtension.replace(' ', '');\r\n const fileExtensions = newFileExt.split(';');\r\n fileExtensions.forEach(fileExt => {\r\n if (fileExt.replace('*.', '') === fileExtension) {\r\n mediaId = fileType.mediaTypeId;\r\n }\r\n });\r\n });\r\n }\r\n return mediaId;\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.getMediaTypeId.name, e));\r\n return mediaId;\r\n }\r\n };\r\n\r\n private readUploadedFile = inputFile => {\r\n try {\r\n const temporaryFileReader = new FileReader();\r\n\r\n return new Promise(resolve => {\r\n temporaryFileReader.onload = () => {\r\n if (temporaryFileReader.result) {\r\n let encoded = temporaryFileReader.result.toString().replace(/^data:(.*,)?/, '');\r\n if ((encoded.length % 4) > 0) {\r\n encoded += '='.repeat(4 - (encoded.length % 4));\r\n }\r\n resolve(encoded);\r\n }\r\n };\r\n temporaryFileReader.readAsDataURL(inputFile);\r\n });\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.readUploadedFile.name, e));\r\n return null;\r\n }\r\n };\r\n\r\n private onChangeFile = async event => {\r\n try {\r\n const {\r\n applicationId\r\n } = this.state;\r\n\r\n event.stopPropagation();\r\n event.preventDefault();\r\n\r\n const file = event.target.files[0];\r\n const fileName = file.name.split('.');\r\n const mediaId = this.getMediaTypeId(fileName[1]);\r\n if (mediaId !== 0 && applicationId) {\r\n const {\r\n attachmentsTotalSizeNumber,\r\n components,\r\n resources,\r\n totalNumberOfAttachments\r\n } = this.state;\r\n\r\n if (components && resources) {\r\n if (components.numberOfAttachments <= totalNumberOfAttachments) {\r\n LayoutActions.setAlert({\r\n message: Format.toString(resources.attachments.lblTotalAttachmentsError, [components.numberOfAttachments]),\r\n messageType: ResultType.warning\r\n } as IAlert);\r\n }\r\n else {\r\n const bytes = (file.size / 1048576).toFixed(5);\r\n if (Number(bytes) > Number(components.maxAttachmentSize)) {\r\n LayoutActions.setAlert({\r\n message: Format.toString(resources.attachments.lblAttachmentsSizeError, [components.maxAttachmentSize]),\r\n messageType: ResultType.warning\r\n } as IAlert);\r\n }\r\n else {\r\n if (Number(bytes) + Number(attachmentsTotalSizeNumber) > Number(components.maxAttachmentSize)) {\r\n LayoutActions.setAlert({\r\n message: Format.toString(resources.attachments.lblAllAttachmentsSizeError,\r\n [components.maxApplicationAttachmentSize]),\r\n messageType: ResultType.warning\r\n } as IAlert);\r\n }\r\n else {\r\n const fileContents = await this.readUploadedFile(file);\r\n const newFile: IApplicationAttachment = {\r\n applicationId: applicationId,\r\n attachmentTitle: fileName[0],\r\n extension: `.${fileName[1]}`,\r\n fileContent: fileContents,\r\n fileSize: file.size,\r\n mediaTypeId: mediaId\r\n };\r\n LayoutActions.setLoading(true);\r\n Requests.postCreateApplicationAttachment(newFile, this.resolveCreateAttachment, this.logError);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onChangeFile.name, e));\r\n }\r\n };\r\n\r\n private onClickOpenFolder = (event: React.MouseEvent) => {\r\n try {\r\n event.preventDefault();\r\n const {\r\n fileSelector\r\n } = this.state;\r\n fileSelector.click();\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onClickOpenFolder.name, e));\r\n }\r\n };\r\n\r\n private onClickContinue = () => {\r\n try {\r\n const {\r\n components,\r\n paymentInfo\r\n } = this.state;\r\n\r\n if (components) {\r\n if (paymentInfo) {\r\n const returnUrl =\r\n `${Constants.webUrl}/Admissions/ApplicationForm/${components.applicationFormId}`;\r\n this.setState({\r\n paymentDetailModalOpen: true,\r\n returnUrl: returnUrl,\r\n showAttachments: false\r\n });\r\n }\r\n else {\r\n components.isCompletedApplication = true;\r\n this.setState({\r\n components: components,\r\n showAttachments: false\r\n });\r\n }\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onClickContinue.name, e));\r\n }\r\n };\r\n\r\n private onClickInfo = () => {\r\n try {\r\n this.setState({\r\n openSupportedFilesModal: true\r\n });\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onClickInfo.name, e));\r\n }\r\n };\r\n\r\n private onCloseSupportedFilesModal = () => {\r\n try {\r\n this.setState({\r\n openSupportedFilesModal: false\r\n });\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onCloseSupportedFilesModal.name, e));\r\n }\r\n };\r\n\r\n private onClickRemoveAttachmentButton = (event: any) => {\r\n try {\r\n const fieldButtonId: string[] = event.target.id.split('|');\r\n this.setState({\r\n fileId: Number(fieldButtonId[1]),\r\n fileName: fieldButtonId[2],\r\n openRemoveAttachmentDialog: true\r\n });\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onClickRemoveAttachmentButton.name, e));\r\n }\r\n };\r\n\r\n private onClickRemoveAttachment = () => {\r\n try {\r\n const {\r\n fileId\r\n } = this.state;\r\n LayoutActions.setLoading(true);\r\n Requests.postDeleteApplicationAttachment(Number(fileId), this.resolveRemoveAttachment, this.logError);\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onClickRemoveAttachment.name, e));\r\n }\r\n };\r\n\r\n private onCloseRemoveAttachmentModal = (): void => {\r\n try {\r\n this.setState({\r\n openRemoveAttachmentDialog: false\r\n });\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onCloseRemoveAttachmentModal.name, e));\r\n }\r\n };\r\n\r\n // #endregion Attachment\r\n\r\n // #region Account\r\n private onCloseSignIn = (): void => {\r\n try {\r\n this.setState({\r\n showSignIn: false\r\n });\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onCloseSignIn.name, e));\r\n }\r\n };\r\n\r\n private onCloseSignUp = (): void => {\r\n try {\r\n this.setState({\r\n showSignUp: false\r\n });\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onCloseSignUp.name, e));\r\n }\r\n };\r\n\r\n private onOpenSignIn = (): void => {\r\n try {\r\n this.setState({\r\n showSignIn: true,\r\n showSignUp: false\r\n });\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onOpenSignIn.name, e));\r\n }\r\n };\r\n\r\n private onOpenSignUp = (): void => {\r\n try {\r\n this.setState({\r\n showSignIn: false,\r\n showSignUp: true\r\n });\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onOpenSignUp.name, e));\r\n }\r\n };\r\n\r\n private onAfterSignUp = (userName?: string): void => {\r\n try {\r\n // After creation of new account user must be logged in\r\n LayoutStore.setIsAuthenticated(true);\r\n LayoutStore.setMenuOptions(undefined);\r\n if (userName) {\r\n this.setState({\r\n emailField: userName,\r\n showSignUp: false\r\n });\r\n this.onSaveEmailField();\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onAfterSignUp.name, e));\r\n }\r\n };\r\n\r\n private onAfterSignIn = (): void => {\r\n try {\r\n this.setState({\r\n showSignIn: false\r\n });\r\n this.onSaveApplication();\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onAfterSignIn.name, e));\r\n }\r\n };\r\n // #endregion Account\r\n\r\n // #region Stepper\r\n private onBackStep = (): void => {\r\n try {\r\n const {\r\n activeStep\r\n } = this.state;\r\n\r\n this.setState({\r\n activeStep: activeStep - 1\r\n });\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onBackStep.name, e));\r\n }\r\n };\r\n\r\n private onClickStep = (event: React.MouseEvent) => {\r\n try {\r\n const steps: string[] = event.currentTarget.id.split('|');\r\n this.setState({\r\n activeStep: Number(steps[1])\r\n });\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onClickStep.name, e));\r\n }\r\n };\r\n\r\n private onNextStep = (): void => {\r\n try {\r\n const {\r\n activeStep\r\n } = this.state;\r\n\r\n this.setState({\r\n activeStep: activeStep + 1\r\n });\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onNextStep.name, e));\r\n }\r\n };\r\n // #endregion Stepper\r\n\r\n // #region Address\r\n private onCloseAddressSearchModal = (): void => {\r\n try {\r\n this.setState({\r\n addresses: [],\r\n openAddressSearchModal: false,\r\n selectedZipCode: undefined\r\n });\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onCloseAddressSearchModal.name, e));\r\n }\r\n };\r\n\r\n private onClickZipCodeLink =\r\n (zipCode?: string, city?: string, stateProvinceId?: number, countryId?: number, countyId?: number) => (): void => {\r\n try {\r\n const {\r\n components,\r\n selectedFieldId\r\n } = this.state;\r\n\r\n if (selectedFieldId && components) {\r\n const fieldId: string[] = selectedFieldId.split('|');\r\n\r\n const fieldGroup: IFieldForm[] =\r\n components.steps[Number(fieldId[1])].fieldsGroups[Number(fieldId[2])].fields;\r\n\r\n if (fieldId.length > 4) {\r\n this.assignFieldValue(fieldGroup, fieldId, 'addressCityId', true, city);\r\n this.assignFieldValue(fieldGroup, fieldId, 'stateProvinceId', true, stateProvinceId);\r\n this.assignFieldValue(fieldGroup, fieldId, 'postalCodeId', true, zipCode);\r\n this.assignFieldValue(fieldGroup, fieldId, 'addressCountyId', true, countyId);\r\n this.assignFieldValue(fieldGroup, fieldId, 'addressCountryId', true, countryId);\r\n }\r\n else {\r\n this.assignFieldValue(fieldGroup, fieldId, 'addressCityId', false, city);\r\n this.assignFieldValue(fieldGroup, fieldId, 'stateProvinceId', false, stateProvinceId);\r\n this.assignFieldValue(fieldGroup, fieldId, 'postalCodeId', false, zipCode);\r\n this.assignFieldValue(fieldGroup, fieldId, 'addressCountyId', false, countyId);\r\n this.assignFieldValue(fieldGroup, fieldId, 'addressCountryId', false, countryId);\r\n }\r\n }\r\n\r\n this.setState({\r\n openAddressSearchModal: false\r\n });\r\n } catch (e) {\r\n this.logError(LogData.fromException(this.onClickZipCodeLink.name, e));\r\n }\r\n };\r\n\r\n private onChangeTextFieldAddressSearch = (event: any): void => {\r\n try {\r\n if (event.target.id && event.target.id !== '') {\r\n switch (event.target.id) {\r\n case 'txtZipCode':\r\n this.setState({\r\n selectedZipCode: event.target.value\r\n });\r\n break;\r\n }\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onChangeTextFieldAddressSearch.name, e));\r\n }\r\n };\r\n\r\n private onClearAddress = (): void => {\r\n try {\r\n this.setState({\r\n addresses: [],\r\n selectedZipCode: undefined\r\n });\r\n }\r\n catch (e) {\r\n throw e;\r\n }\r\n };\r\n\r\n private onSearchAddress = (): void => {\r\n try {\r\n LayoutActions.setLoading(true);\r\n\r\n const {\r\n pageSize,\r\n selectedZipCode\r\n } = this.state;\r\n\r\n Requests.getAddresses(\r\n 0,\r\n pageSize,\r\n selectedZipCode,\r\n this.resolveGetAddress, this.logError);\r\n\r\n const {\r\n total\r\n } = this.state;\r\n\r\n if (total) {\r\n const previousSize = pageSize;\r\n // Fix 60\r\n this.setState({\r\n pageSize: 0\r\n }, () => {\r\n this.setState({\r\n pageNumber: 0,\r\n pageSize: previousSize\r\n });\r\n });\r\n }\r\n }\r\n catch (e) {\r\n LayoutActions.setLoading(false);\r\n throw e;\r\n }\r\n };\r\n // #endregion Address\r\n\r\n // #region Education\r\n private onChangeTextFieldETSSearch = (event: any): void => {\r\n try {\r\n if (event.target.id && event.target.id !== '') {\r\n switch (event.target.id) {\r\n case 'txtEtsCode':\r\n this.setState({\r\n selectedEtsCode: event.target.value\r\n });\r\n break;\r\n case 'txtCity':\r\n this.setState({\r\n selectedCity: event.target.value\r\n });\r\n break;\r\n case 'txtInstitutionName':\r\n this.setState({\r\n selectedInstitutionName: event.target.value\r\n });\r\n break;\r\n }\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onChangeTextFieldETSSearch.name, e));\r\n }\r\n };\r\n\r\n private onCloseETSSearchModal = (): void => {\r\n try {\r\n this.setState({\r\n institutions: [],\r\n openETSSearchModal: false,\r\n selectedCity: undefined,\r\n selectedCountry: undefined,\r\n selectedEtsCode: undefined,\r\n selectedInstitutionName: undefined,\r\n selectedState: undefined\r\n });\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onCloseETSSearchModal.name, e));\r\n }\r\n };\r\n\r\n private onChangeDropDownETSSearch = (optionSelected: IDropDownOption, id: string): void => {\r\n try {\r\n if (id && id !== '') {\r\n switch (id) {\r\n case 'ddlCountry':\r\n this.setState({\r\n selectedCountry: optionSelected.value === '' ? undefined :\r\n Number(optionSelected.value)\r\n });\r\n break;\r\n case 'ddlState':\r\n this.setState({\r\n selectedState: optionSelected.value === '' ? undefined :\r\n Number(optionSelected.value)\r\n });\r\n break;\r\n }\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onChangeDropDownETSSearch.name, e));\r\n }\r\n };\r\n\r\n private onClearInstitution = (): void => {\r\n try {\r\n this.setState({\r\n institutions: [],\r\n selectedCity: undefined,\r\n selectedCountry: undefined,\r\n selectedEtsCode: undefined,\r\n selectedInstitutionName: undefined,\r\n selectedState: undefined\r\n });\r\n }\r\n catch (e) {\r\n throw e;\r\n }\r\n };\r\n\r\n private onSearchInstitution = (): void => {\r\n try {\r\n LayoutActions.setLoading(true);\r\n\r\n const {\r\n selectedCity,\r\n selectedEtsCode,\r\n selectedInstitutionName,\r\n selectedState,\r\n selectedCountry,\r\n pageSize\r\n } = this.state;\r\n\r\n Requests.getInstitutions(\r\n 0,\r\n pageSize,\r\n selectedInstitutionName,\r\n selectedEtsCode,\r\n selectedCity,\r\n selectedState,\r\n selectedCountry,\r\n this.resolveGetInstitutions, this.logError);\r\n\r\n const {\r\n total\r\n } = this.state;\r\n\r\n if (total) {\r\n const previousSize = pageSize;\r\n // Fix 60\r\n this.setState({\r\n pageSize: 0\r\n }, () => {\r\n this.setState({\r\n pageNumber: 0,\r\n pageSize: previousSize\r\n });\r\n });\r\n }\r\n }\r\n catch (e) {\r\n LayoutActions.setLoading(false);\r\n throw e;\r\n }\r\n };\r\n\r\n private onClickLink =\r\n (institutionName?: string, etsCode?: string, ficeCode?: string, city?: string, stateProvinceId?: number, countryId?: number) => (): void => {\r\n try {\r\n const {\r\n components,\r\n selectedFieldId\r\n } = this.state;\r\n\r\n if (selectedFieldId && components) {\r\n const fieldId: string[] = selectedFieldId.split('|');\r\n\r\n const fieldGroup: IFieldForm[] =\r\n components.steps[Number(fieldId[1])].fieldsGroups[Number(fieldId[2])].fields;\r\n\r\n if (fieldId.length > 4) {\r\n this.assignFieldValue(fieldGroup, fieldId, 'educationInstitutionName', true, institutionName);\r\n this.assignFieldValue(fieldGroup, fieldId, 'educationEtsCodeId', true, etsCode);\r\n this.assignFieldValue(fieldGroup, fieldId, 'educationFiceCode', true, ficeCode);\r\n this.assignFieldValue(fieldGroup, fieldId, 'educationCityId', true, city);\r\n this.assignFieldValue(fieldGroup, fieldId, 'educationStateId', true, stateProvinceId);\r\n this.assignFieldValue(fieldGroup, fieldId, 'educationCountryId', true, countryId);\r\n }\r\n else {\r\n this.assignFieldValue(fieldGroup, fieldId, 'educationInstitutionName', false, institutionName);\r\n this.assignFieldValue(fieldGroup, fieldId, 'educationEtsCodeId', false, etsCode);\r\n this.assignFieldValue(fieldGroup, fieldId, 'educationFiceCode', false, ficeCode);\r\n this.assignFieldValue(fieldGroup, fieldId, 'educationCityId', false, city);\r\n this.assignFieldValue(fieldGroup, fieldId, 'educationStateId', false, stateProvinceId);\r\n this.assignFieldValue(fieldGroup, fieldId, 'educationCountryId', false, countryId);\r\n }\r\n }\r\n\r\n this.setState({\r\n openETSSearchModal: false\r\n });\r\n } catch (e) {\r\n this.logError(LogData.fromException(this.onClickLink.name, e));\r\n }\r\n };\r\n // #endregion Education\r\n\r\n // #region Phone\r\n private onPrimaryButtonClick = (fieldId: string[], newComponents: IApplicationForm, value: any): IApplicationForm => {\r\n try {\r\n const phoneFields: any = newComponents.steps[Number(fieldId[1])].fieldsGroups[Number(fieldId[2])];\r\n let field: any = [];\r\n let numRow: number = 4;\r\n\r\n field = newComponents;\r\n phoneFields.fields.forEach(function (item, row) {\r\n const idFields: string[] = item.data.id.split('|');\r\n if (fieldId[0] === idFields[0]) {\r\n if (fieldId[3] !== idFields[3] || fieldId[4] !== idFields[4]) {\r\n item.value = '';\r\n }\r\n else {\r\n numRow = row;\r\n }\r\n }\r\n });\r\n\r\n field.steps[Number(fieldId[1])].fieldsGroups[fieldId[2]].fields[Number(numRow)].value = value;\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.resolveLayoutReady.name, e));\r\n }\r\n return newComponents;\r\n };\r\n // #endregion Phone\r\n\r\n // #region Submit and Save\r\n private onSaveApplication = (): void => {\r\n try {\r\n const {\r\n components,\r\n resources,\r\n token\r\n } = this.state;\r\n\r\n if (resources) {\r\n const applicationTop: HTMLElement | null = document.getElementById('applicationTop');\r\n if (applicationTop) {\r\n applicationTop.scrollIntoView();\r\n }\r\n LayoutActions.setLoading(true);\r\n if (components) {\r\n if (components && components.layoutId) {\r\n // Update saved application\r\n if (token) {\r\n if (components.person &&\r\n (components.person.email || components.person.temporaryEmail)) {\r\n const savedApplication: ISavedApplication = {\r\n applicationFormSettingId: components.applicationFormId,\r\n email: components.person.email ? components.person.email :\r\n components.person.temporaryEmail ? components.person.temporaryEmail : '',\r\n formLayoutId: components.layoutId,\r\n token: token\r\n };\r\n RequestsApplication.postUpdateSavedApplication(savedApplication,\r\n components, this.resolveSaveIncompleteApplication, this.logError);\r\n }\r\n }\r\n else {\r\n if (LayoutStore && !LayoutStore.getIsAuthenticated()) {\r\n // If person doesn't have a person id\r\n if (!components.person || !components.person.personId) {\r\n this.onOpenSignIn();\r\n LayoutActions.setLoading(false);\r\n }\r\n }\r\n else {\r\n // If user has primary email use this to populate email confirmation modal.\r\n if (components.person && components.person.email) {\r\n this.setState({\r\n emailField: components.person.email,\r\n openEmailModal: true\r\n });\r\n LayoutActions.setLoading(false);\r\n }\r\n else if (components.person && components.person.temporaryEmail) {\r\n this.onSaveEmailField();\r\n }\r\n // If user has not primary email and email exist in the form with some value use it.\r\n else {\r\n if (components) {\r\n let hasValueEmailField: boolean = false;\r\n components.steps.forEach(step => {\r\n step.fieldsGroups.forEach(fieldsGroup => {\r\n fieldsGroup.fields.forEach(field => {\r\n if (field.data.id === 'emailId') {\r\n if (field.value && !field.data.error) {\r\n this.setState({\r\n emailField: field.value,\r\n openEmailModal: true\r\n });\r\n hasValueEmailField = true;\r\n LayoutActions.setLoading(false);\r\n }\r\n }\r\n });\r\n });\r\n });\r\n // If user has not primary email and email not exist in the form or is empty don't populate it.\r\n if (!hasValueEmailField) {\r\n this.setState({\r\n openEmailModal: true\r\n });\r\n LayoutActions.setLoading(false);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onSaveApplication.name, e));\r\n }\r\n };\r\n\r\n private onSaveEmailField = (): void => {\r\n try {\r\n LayoutActions.setLoading(true);\r\n\r\n const {\r\n components,\r\n emailField,\r\n invalidEmail\r\n } = this.state;\r\n\r\n if (!emailField &&\r\n components && components.person && !components.person.temporaryEmail) {\r\n this.setState({\r\n emptyEmailField: true\r\n });\r\n }\r\n else {\r\n if (!invalidEmail && components && components.person) {\r\n const savedApplication: ISavedApplication = {\r\n applicationFormSettingId: components.applicationFormId,\r\n email: emailField ? emailField :\r\n components.person.temporaryEmail ? components.person.temporaryEmail : '',\r\n formLayoutId: components.layoutId\r\n };\r\n Requests.postCreateSavedApplication(savedApplication, components, this.resolveSaveIncompleteApplication, this.logError);\r\n }\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onChangeTextFieldModal.name, e));\r\n }\r\n };\r\n\r\n private onSubmit = (): void => {\r\n try {\r\n const {\r\n application,\r\n components,\r\n governmentIdFormat\r\n } = this.state;\r\n\r\n const applicationTop: HTMLElement | null = document.getElementById('applicationTop');\r\n if (applicationTop) {\r\n applicationTop.scrollIntoView();\r\n }\r\n\r\n if (components) {\r\n components.steps.forEach(step => {\r\n step.fieldsGroups.forEach(fieldsGroup => {\r\n fieldsGroup.fields.forEach(field => {\r\n let exist: boolean = false;\r\n if (field.componentType === 'Dropdown') {\r\n if (field.default && field.data.options) {\r\n field.data.options.forEach(option => {\r\n if (option.value.toString() === field.default.toString()) {\r\n exist = true;\r\n }\r\n });\r\n }\r\n if (exist) {\r\n field.value = field.value ? field.value : field.default;\r\n this.setApplicationValues(field.data.id, field.value);\r\n }\r\n else if (!field.default && field.value !== '') {\r\n this.setApplicationValues(field.data.id, field.value);\r\n }\r\n }\r\n else {\r\n field.value = field.value ? field.value : field.default;\r\n this.setApplicationValues(field.data.id, field.value);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n\r\n this.setState({\r\n components\r\n });\r\n\r\n if (this.reviewRequiredFields()) {\r\n\r\n // Remove non-alphanumeric characters from governmentId\r\n if (application.governmentId && governmentIdFormat) {\r\n let cleanGovernmentId: string = '';\r\n for (let i = 0; i < governmentIdFormat.length; i++) {\r\n if (governmentIdFormat[i] === 'X' || governmentIdFormat[i] === '#') {\r\n cleanGovernmentId += application.governmentId[i];\r\n }\r\n }\r\n application.governmentId = cleanGovernmentId;\r\n }\r\n\r\n if (application) {\r\n LayoutActions.showPageLoader();\r\n Requests.postSubmit(application, this.resolveSubmitApplication, this.logError);\r\n }\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onSubmit.name, e));\r\n }\r\n };\r\n\r\n private onCloseEmailModal = (): void => {\r\n try {\r\n this.setState({\r\n openEmailModal: false\r\n });\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onCloseEmailModal.name, e));\r\n }\r\n };\r\n\r\n private onCloseNotAvailableModal = (): void => {\r\n try {\r\n window.location.assign(`${Constants.webUrl}/Admissions/Applications`);\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onCloseNotAvailableModal.name, e));\r\n }\r\n };\r\n\r\n private onCloseConfirmationSavedModal = (): void => {\r\n try {\r\n const {\r\n components\r\n } = this.state;\r\n\r\n if (components) {\r\n const confirmationIndex: number =\r\n components.fieldsGroups.findIndex(x => x.id === 'confirmationGroup');\r\n const finishButtonId: number =\r\n components.fieldsGroups[confirmationIndex].fields.findIndex(x => x.data.id === 'finishId');\r\n if (confirmationIndex > -1 && finishButtonId > -1) {\r\n const actionUrl: string | undefined = components.fieldsGroups[confirmationIndex].fields[finishButtonId].actionUrl;\r\n if (actionUrl) {\r\n window.location.assign(actionUrl);\r\n }\r\n else {\r\n window.location.assign(`${Constants.webUrl}/Admissions/Applications`);\r\n }\r\n }\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onCloseConfirmationSavedModal.name, e));\r\n }\r\n };\r\n // #endregion Submit and Save\r\n\r\n // #region Change Fields Events\r\n private onChangeCheckBox = (event: any): void => {\r\n try {\r\n const {\r\n application,\r\n components\r\n } = this.state;\r\n\r\n if (application && components) {\r\n const app: IApplication = application;\r\n const fieldId: string[] = event.target.id.split('|');\r\n const newComponents: IApplicationForm = components;\r\n const value: boolean = Boolean(event.target.checked);\r\n const evaluateAppJs = eval;\r\n\r\n if (fieldId.length < 5) {\r\n if (fieldId && fieldId[1] && fieldId[2] && fieldId[3]) {\r\n const field: IFieldForm = newComponents.steps[Number(fieldId[1])].fieldsGroups[Number(fieldId[2])].fields[Number(fieldId[3])];\r\n\r\n if (field.isUserDefined && field.customScript) {\r\n if (value) {\r\n field.value = evaluateAppJs(field.customScript);\r\n field.data.error = false;\r\n field.data.helperText = '';\r\n }\r\n else {\r\n field.value = NaN;\r\n }\r\n }\r\n else {\r\n field.value = value ? value : undefined;\r\n }\r\n }\r\n }\r\n else {\r\n const field: IFieldForm | undefined =\r\n components.steps[Number(fieldId[1])].\r\n fieldsGroups[Number(fieldId[2])].\r\n fields.find(x =>\r\n x.data.section === Number(fieldId[4]) &&\r\n x.data.id.substr(0, fieldId[0].length) === fieldId[0]);\r\n if (field) {\r\n field.value = value;\r\n }\r\n }\r\n\r\n this.setState({\r\n application: app,\r\n components: newComponents\r\n });\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onChangeCheckBox.name, e));\r\n }\r\n };\r\n\r\n private onChangeDateTimeField = (date: string, id: string, isValid: boolean): void => {\r\n try {\r\n const {\r\n application,\r\n components,\r\n cultures,\r\n resources,\r\n shortDatePattern\r\n } = this.state;\r\n\r\n if (id && id !== '' && application && components) {\r\n const app: IApplication = application;\r\n const fieldId: string[] = id.split('|');\r\n let fieldIndex: number = 0;\r\n if (fieldId[4]) {\r\n fieldIndex = Number(fieldId[4]) + 1;\r\n }\r\n let newComponents: IApplicationForm = components;\r\n const field = newComponents.steps[Number(fieldId[1])].\r\n fieldsGroups[Number(fieldId[2])].\r\n fields[Number(fieldId[3])];\r\n\r\n const dateMinFormat: string =\r\n moment().add(-100, 'years').format(cultures.shortDatePattern.toUpperCase());\r\n const dateMaxFormat: string =\r\n moment().add(100, 'years').format(cultures.shortDatePattern.toUpperCase());\r\n\r\n switch (fieldId[0]) {\r\n case 'dateOfBirthId':\r\n app.dateOfBirth = date;\r\n newComponents = this.setValues(fieldId, newComponents, date);\r\n if (isValid) {\r\n field.data.error = false;\r\n field.data.helperText = '';\r\n newComponents = this.cleanErrorMessages(fieldId, newComponents);\r\n }\r\n else {\r\n if (date) {\r\n field.data.error = true;\r\n if (resources) {\r\n field.data.helperText =\r\n Format.toString(resources.formatDateOutOfRange, [dateMinFormat, dateMaxFormat]);\r\n }\r\n }\r\n else {\r\n field.data.error = true;\r\n field.data.helperText = field.data.errorMessageRequired;\r\n }\r\n }\r\n break;\r\n case 'visaExpirationDateId':\r\n app.visaExpiration = date;\r\n newComponents = this.setValues(fieldId, newComponents, date);\r\n if (isValid) {\r\n field.data.error = false;\r\n field.data.helperText = '';\r\n newComponents = this.cleanErrorMessages(fieldId, newComponents);\r\n }\r\n else {\r\n if (date) {\r\n field.data.error = true;\r\n if (resources) {\r\n field.data.helperText =\r\n Format.toString(resources.formatDateOutOfRange, [dateMinFormat, dateMaxFormat]);\r\n }\r\n }\r\n else {\r\n field.data.error = true;\r\n field.data.helperText = field.data.errorMessageRequired;\r\n }\r\n }\r\n break;\r\n case 'passportExpirationDateId':\r\n app.passportExpiration = date;\r\n newComponents = this.setValues(fieldId, newComponents, date);\r\n if (isValid) {\r\n field.data.error = false;\r\n field.data.helperText = '';\r\n newComponents = this.cleanErrorMessages(fieldId, newComponents);\r\n }\r\n else {\r\n if (date) {\r\n field.data.error = true;\r\n if (resources) {\r\n field.data.helperText =\r\n Format.toString(resources.formatDateOutOfRange, [dateMinFormat, dateMaxFormat]);\r\n }\r\n }\r\n else {\r\n field.data.error = true;\r\n field.data.helperText = field.data.errorMessageRequired;\r\n }\r\n }\r\n break;\r\n case 'testDateTakenId':\r\n const fieldTestTaken: any = newComponents.steps[Number(fieldId[1])].fieldsGroups[Number(fieldId[2])];\r\n if (!app.testScores[fieldIndex]) {\r\n app.testScores[fieldIndex] = {} as ITestScore;\r\n }\r\n app.testScores[fieldIndex].dateTaken = date;\r\n if (!isValid) {\r\n field.data.error = true;\r\n if (resources) {\r\n field.data.helperText =\r\n Format.toString(resources.formatDateOutOfRange, [dateMinFormat, dateMaxFormat]);\r\n }\r\n }\r\n if (fieldId.length > 4) {\r\n fieldTestTaken.fields.forEach(function (field) {\r\n const itemArrId: string[] = field.data.id.split('|');\r\n if (fieldId[3] === itemArrId[3] && fieldId[4] === itemArrId[4]) {\r\n if (!isValid) {\r\n field.data.error = true;\r\n if (resources) {\r\n field.data.helperText =\r\n Format.toString(resources.formatDateOutOfRange, [dateMinFormat, dateMaxFormat]);\r\n }\r\n } else if (moment(date, shortDatePattern).toDate() > new Date()) {\r\n field.data.error = true;\r\n field.data.helperText =\r\n Format.toString(\r\n field.data.errorMessageRange, [\r\n newComponents.dateTimeMin,\r\n moment(new Date()).format(shortDatePattern.toUpperCase())]);\r\n } else {\r\n field.data.error = false;\r\n field.data.helperText = '';\r\n field.value = date;\r\n }\r\n }\r\n });\r\n }\r\n else {\r\n fieldTestTaken.fields.forEach(function (field) {\r\n const itemArrId: string[] = field.data.id.split('|');\r\n if (fieldId[0] === itemArrId[0] && itemArrId.length === 1) {\r\n if (!isValid) {\r\n field.data.error = true;\r\n if (resources) {\r\n field.data.helperText =\r\n Format.toString(resources.formatDateOutOfRange, [dateMinFormat, dateMaxFormat]);\r\n }\r\n } else if (moment(date).toDate() > new Date()) {\r\n field.data.error = true;\r\n field.data.helperText =\r\n Format.toString(\r\n field.data.errorMessageRange, [\r\n newComponents.dateTimeMin,\r\n moment(new Date()).format(shortDatePattern.toUpperCase())]);\r\n } else {\r\n field.data.error = false;\r\n field.data.helperText = '';\r\n field.value = date;\r\n }\r\n }\r\n });\r\n }\r\n break;\r\n default:\r\n newComponents = this.setValues(fieldId, newComponents, date);\r\n if (isValid) {\r\n field.data.error = false;\r\n field.data.helperText = '';\r\n newComponents = this.cleanErrorMessages(fieldId, newComponents);\r\n }\r\n else {\r\n if (date) {\r\n field.data.error = true;\r\n if (resources) {\r\n field.data.helperText =\r\n Format.toString(resources.formatDateOutOfRange, [dateMinFormat, dateMaxFormat]);\r\n }\r\n }\r\n else {\r\n if (field.isRequired) {\r\n field.data.error = true;\r\n field.data.helperText = field.data.errorMessageRequired;\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n this.setState({\r\n application: app,\r\n components: newComponents\r\n });\r\n }\r\n } catch (e) {\r\n this.logError(LogData.fromException(this.onChangeDateTimeField.name, e));\r\n }\r\n };\r\n\r\n private onChangeDropDown = (optionSelected: IDropDownOption, id: string): void => {\r\n try {\r\n const {\r\n application,\r\n components\r\n } = this.state;\r\n\r\n if (id && id !== '' && application && components) {\r\n const app: IApplication = application;\r\n const fieldId: string[] = id.split('|');\r\n let fieldIndex: number = 0;\r\n if (fieldId[4]) {\r\n fieldIndex = Number(fieldId[4]) + 1;\r\n }\r\n\r\n let valueSelected: any | undefined;\r\n if (optionSelected.value) {\r\n switch (typeof optionSelected.value) {\r\n case 'string':\r\n valueSelected = String(optionSelected.value);\r\n break;\r\n case 'number':\r\n valueSelected = Number(optionSelected.value);\r\n break;\r\n default:\r\n valueSelected = optionSelected.value;\r\n break;\r\n }\r\n }\r\n\r\n switch (fieldId[0]) {\r\n case 'testId':\r\n if (!app.testScores[fieldIndex]) {\r\n app.testScores[fieldIndex] = {} as ITestScore;\r\n }\r\n app.testScores[fieldIndex].id = valueSelected;\r\n app.testScores[fieldIndex].typeId = 0;\r\n\r\n const testScoreComponents: IFieldForm[] =\r\n components.steps[Number(fieldId[1])].fieldsGroups[Number(fieldId[2])].fields;\r\n const score: IFieldForm | undefined =\r\n testScoreComponents.find(f =>\r\n f.data.id.split('|')[0] === 'testScoreId' &&\r\n (f.data.id.split('|')[4] || '') === (fieldId[4] || ''));\r\n\r\n if (score && valueSelected && valueSelected !== '') {\r\n Requests.getValidateScoreType(\r\n application.applicationId || 0,\r\n app.testScores[fieldIndex].id,\r\n 'testScoreGroup',\r\n score.data.id,\r\n this.resolveValidateScore, this.logError);\r\n }\r\n break;\r\n case 'testTypeId':\r\n if (!app.testScores[fieldIndex]) {\r\n app.testScores[fieldIndex] = {} as ITestScore;\r\n }\r\n app.testScores[fieldIndex].typeId = valueSelected;\r\n break;\r\n case 'hispanicGroupId':\r\n if (components) {\r\n // Get fieldsGroup\r\n const fieldsGroup: IFieldForm[] =\r\n components.steps[Number(fieldId[1])].fieldsGroups[Number(fieldId[2])].fields;\r\n // Get checkBoxList hispanicCheckboxListId index\r\n let checkBoxListIndex: number = -1;\r\n fieldsGroup.forEach((field, i) => {\r\n if (field.data.id.substr(0, 'hispanicCheckboxListId'.length) === 'hispanicCheckboxListId') {\r\n checkBoxListIndex = i;\r\n }\r\n });\r\n // Get checkBoxList hispanicCheckboxListId\r\n const checkBoxListField: IFieldForm =\r\n components.steps[Number(fieldId[1])].fieldsGroups[Number(fieldId[2])].fields[checkBoxListIndex];\r\n let ipedsList: IApplicationIpeds[] | undefined = application.ipeds;\r\n if (valueSelected === '1') {\r\n if (checkBoxListField) {\r\n // Add category in list\r\n const ipeds: IApplicationIpeds = { ipedsEthnicityId: undefined, ipedsFederalCategoryId: 1 };\r\n if (ipedsList) {\r\n const ipedIndex: number =\r\n ipedsList.findIndex(x => x.ipedsFederalCategoryId === 1);\r\n // Category was not found, add category\r\n if (ipedIndex === -1) {\r\n ipedsList.push(ipeds);\r\n }\r\n }\r\n // ipedsList was undefined so add a new item with category\r\n else {\r\n ipedsList = [ipeds];\r\n }\r\n checkBoxListField.value = undefined;\r\n }\r\n }\r\n if (valueSelected === '0') {\r\n if (checkBoxListField) {\r\n if (ipedsList && ipedsList.length > 0) {\r\n let index: number = -1;\r\n do {\r\n index = ipedsList.findIndex(x => x.ipedsFederalCategoryId === 1);\r\n if (index > -1) {\r\n ipedsList.splice(index, 1);\r\n }\r\n } while (index > -1);\r\n }\r\n checkBoxListField.value = undefined;\r\n }\r\n }\r\n if (valueSelected === undefined) {\r\n if (checkBoxListField) {\r\n if (ipedsList && ipedsList.length > 0) {\r\n let index: number = ipedsList.length;\r\n do {\r\n ipedsList.splice(index, 1);\r\n index--;\r\n } while (ipedsList.length > 0);\r\n }\r\n checkBoxListField.value = undefined;\r\n }\r\n }\r\n application.ipeds = ipedsList;\r\n this.setState({\r\n application: application,\r\n components: components\r\n });\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n let newComponents: IApplicationForm = components;\r\n if (fieldId && fieldId[1] && fieldId[2] && fieldId[3]) {\r\n newComponents = this.cleanErrorMessages(fieldId, newComponents);\r\n newComponents = this.setValues(fieldId, newComponents, valueSelected);\r\n\r\n const fieldGroup: any = newComponents.steps[Number(fieldId[1])].fieldsGroups[Number(fieldId[2])];\r\n const sectionFields: any = fieldGroup.fields.filter(x => (x.data.id.split('|')[4] || '') === (fieldId[4] || ''));\r\n\r\n sectionFields.forEach(field => {\r\n if (fieldId[0] === 'testId' && field.childField && valueSelected && valueSelected !== '' &&\r\n Number(valueSelected) > 0) {\r\n Requests.getChildOptions(\r\n field.childEndPoint,\r\n valueSelected || 0,\r\n fieldId[1],\r\n fieldId[2],\r\n field.childField,\r\n true,\r\n this.resolveGetChildOptions,\r\n this.logError,\r\n undefined);\r\n }\r\n if (fieldId[0] === 'activityTypeId' && field.childField && valueSelected && valueSelected !== '' &&\r\n Number(valueSelected) > 0) {\r\n Requests.getChildOptions(\r\n field.childEndPoint,\r\n valueSelected || 0,\r\n fieldId[1],\r\n fieldId[2],\r\n field.childField,\r\n true,\r\n this.resolveGetChildOptions,\r\n this.logError,\r\n Number(newComponents.applicationFormId));\r\n }\r\n if (fieldId[0] === 'campusOptionsId' && field.childField && valueSelected && valueSelected !== '' &&\r\n Number(valueSelected) > 0) {\r\n Requests.getChildOptions(\r\n field.childEndPoint,\r\n valueSelected || 0,\r\n fieldId[1],\r\n fieldId[2],\r\n field.childField,\r\n true,\r\n this.resolveGetChildOptions,\r\n this.logError,\r\n undefined);\r\n }\r\n });\r\n }\r\n this.setState({\r\n application: app,\r\n components: newComponents\r\n });\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onChangeDropDown.name, e));\r\n }\r\n };\r\n\r\n private onChangeListCheckbox = (event: any): void => {\r\n try {\r\n const {\r\n application,\r\n components\r\n } = this.state;\r\n\r\n const fieldId: string[] = event.currentTarget.id.split('|');\r\n const app: IApplication = application;\r\n\r\n if (application && components) {\r\n const childField: string[] = event.target.id.split('|');\r\n if (childField[1] === 'noHispanicNestedCheckboxListId') {\r\n const field: IFieldForm =\r\n components.steps[Number(childField[2])].\r\n fieldsGroups[Number(childField[3])].\r\n fields[Number(childField[4])];\r\n if (!app.ipeds && field.value) {\r\n const fieldGroup: IFieldsGroup =\r\n components.steps[Number(childField[2])].\r\n fieldsGroups[Number(childField[3])];\r\n this.setIpedsValuesNestedCheckList(fieldGroup);\r\n }\r\n if (event.target.checked === true) {\r\n let ipedNew: IApplicationIpeds = { ipedsFederalCategoryId: 0 };\r\n let ipedIndex: number = -1;\r\n if (childField[0] === 'child') {\r\n ipedNew = {\r\n ipedsEthnicityId: Number(childField[7]),\r\n ipedsFederalCategoryId: Number(childField[6])\r\n };\r\n if (app.ipeds) {\r\n ipedIndex = app.ipeds.findIndex(x => x.ipedsEthnicityId === undefined &&\r\n x.ipedsFederalCategoryId === Number(childField[6]));\r\n }\r\n }\r\n else if (childField[0] === 'parent') {\r\n ipedNew = {\r\n ipedsEthnicityId: undefined,\r\n ipedsFederalCategoryId: Number(childField[6])\r\n };\r\n if (app.ipeds) {\r\n ipedIndex =\r\n app.ipeds.findIndex(x => x.ipedsFederalCategoryId ===\r\n Number(childField[6]));\r\n }\r\n }\r\n if (app.ipeds) {\r\n if (ipedIndex > -1) {\r\n app.ipeds[ipedIndex] = ipedNew;\r\n }\r\n else {\r\n app.ipeds.push(ipedNew);\r\n }\r\n }\r\n else {\r\n app.ipeds = [ipedNew];\r\n }\r\n }\r\n else {\r\n if (app.ipeds) {\r\n if (childField[0] === 'child') {\r\n const itemToRemove: number =\r\n app.ipeds.findIndex(x => x.ipedsEthnicityId === Number(childField[7]) &&\r\n x.ipedsFederalCategoryId === Number(childField[6]));\r\n app.ipeds.splice(itemToRemove, 1);\r\n }\r\n else if (childField[0] === 'parent') {\r\n let index: number = -1;\r\n do {\r\n index = app.ipeds.findIndex(x =>\r\n x.ipedsFederalCategoryId === Number(childField[6]));\r\n if (index > -1) {\r\n app.ipeds.splice(index, 1);\r\n }\r\n } while (index > -1);\r\n }\r\n }\r\n }\r\n if (childField && childField[2] && childField[3] && childField[4]) {\r\n const field: IFieldForm =\r\n components.steps[Number(childField[2])].\r\n fieldsGroups[Number(childField[3])].\r\n fields[Number(childField[4])];\r\n if (app.ipeds && app.ipeds.length === 0 && field.isRequired) {\r\n field.value = undefined;\r\n }\r\n else {\r\n // change value of field\r\n if (app.ipeds) {\r\n field.value = undefined;\r\n app.ipeds.forEach(iped => {\r\n if (iped.ipedsFederalCategoryId !== 1) {\r\n if (field.value) {\r\n field.value = field.value +\r\n `${iped.ipedsFederalCategoryId.toString()}$${iped.ipedsEthnicityId ?\r\n iped.ipedsEthnicityId.toString() : ''},`;\r\n }\r\n else {\r\n field.value =\r\n `${iped.ipedsFederalCategoryId.toString()}$${iped.ipedsEthnicityId ?\r\n iped.ipedsEthnicityId.toString() : ''},`;\r\n }\r\n }\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n switch (fieldId[0]) {\r\n case 'campusId':\r\n if (fieldId && fieldId[1] && fieldId[2] && fieldId[3] && fieldId[4]) {\r\n const field: any =\r\n components.steps[Number(fieldId[1])].fieldsGroups[Number(fieldId[2])].fields[Number(fieldId[3])];\r\n if (!app.campuses && field.value) {\r\n const fieldGroup =\r\n components.steps[Number(fieldId[1])].fieldsGroups[Number(fieldId[2])];\r\n this.reviewCampus(fieldGroup);\r\n }\r\n }\r\n if (app.campuses) {\r\n const campusIndex: number = app.campuses.findIndex(x => x === Number(fieldId[4]));\r\n if (event.target.checked === true) {\r\n app.campuses.push(Number(fieldId[4]));\r\n }\r\n else {\r\n app.campuses.splice(campusIndex, 1);\r\n }\r\n }\r\n else {\r\n if (event.target.checked === true) {\r\n const campus: number = Number(fieldId[4]);\r\n app.campuses = [campus];\r\n }\r\n }\r\n if (fieldId && fieldId[1] && fieldId[2] && fieldId[3] && fieldId[4]) {\r\n const field: any =\r\n components.steps[Number(fieldId[1])].fieldsGroups[Number(fieldId[2])].fields[Number(fieldId[3])];\r\n if (app.campuses && app.campuses.length === 0 && field.isRequired) {\r\n field.value = undefined;\r\n field.data.error = true;\r\n field.data.helperText = field.data.errorMessageRequired;\r\n }\r\n else {\r\n if (app.campuses) {\r\n field.value = app.campuses.toString();\r\n }\r\n field.data.error = false;\r\n field.data.helperText = '';\r\n }\r\n }\r\n break;\r\n case 'interestId':\r\n if (fieldId && fieldId[1] && fieldId[2] && fieldId[3] && fieldId[4]) {\r\n const field: any =\r\n components.steps[Number(fieldId[1])].fieldsGroups[Number(fieldId[2])].fields[Number(fieldId[3])];\r\n if (!app.academicInterests && field.value) {\r\n const fieldGroup =\r\n components.steps[Number(fieldId[1])].fieldsGroups[Number(fieldId[2])];\r\n this.reviewAcademicInterest(fieldGroup);\r\n }\r\n }\r\n if (app.academicInterests) {\r\n const index: number = app.academicInterests.findIndex(x => x === Number(fieldId[4]));\r\n if (event.target.checked === true) {\r\n app.academicInterests.push(Number(fieldId[4]));\r\n }\r\n else {\r\n app.academicInterests.splice(index, 1);\r\n }\r\n }\r\n else {\r\n if (event.target.checked === true) {\r\n app.academicInterests = [Number(fieldId[4])];\r\n }\r\n }\r\n if (fieldId && fieldId[1] && fieldId[2] && fieldId[3] && fieldId[4]) {\r\n const field: any = components.steps[Number(fieldId[1])].fieldsGroups[Number(fieldId[2])].fields[Number(fieldId[3])];\r\n if (app.academicInterests && app.academicInterests.length === 0 && field.isRequired) {\r\n field.value = undefined;\r\n field.data.error = true;\r\n field.data.helperText = field.data.errorMessageRequired;\r\n }\r\n else {\r\n if (app.academicInterests) {\r\n field.value = app.academicInterests.toString();\r\n }\r\n field.data.error = false;\r\n field.data.helperText = '';\r\n }\r\n }\r\n break;\r\n case 'hispanicCheckboxListId':\r\n const field: IFieldForm =\r\n components.steps[Number(childField[1])].\r\n fieldsGroups[Number(childField[2])].\r\n fields[Number(childField[3])];\r\n if (!app.ipeds && field.value) {\r\n const fieldGroup: IFieldsGroup =\r\n components.steps[Number(childField[1])].\r\n fieldsGroups[Number(childField[2])];\r\n this.setIpedsValuesCheckList(fieldGroup);\r\n }\r\n const ipedNew: IApplicationIpeds = {\r\n ipedsEthnicityId: Number(fieldId[4]),\r\n ipedsFederalCategoryId: 1\r\n };\r\n if (app.ipeds) {\r\n const ipedIndex: number = app.ipeds.findIndex(x => x.ipedsEthnicityId === undefined &&\r\n x.ipedsFederalCategoryId === 1);\r\n if (event.target.checked === true) {\r\n // when exists category 1 and null, record should be updated\r\n if (ipedIndex > -1) {\r\n app.ipeds[ipedIndex] = ipedNew;\r\n }\r\n else {\r\n app.ipeds.push(ipedNew);\r\n }\r\n }\r\n else {\r\n // remove item from list\r\n const itemToRemove: number =\r\n app.ipeds.findIndex(x => x.ipedsEthnicityId === Number(fieldId[4]) &&\r\n x.ipedsFederalCategoryId === 1);\r\n app.ipeds.splice(itemToRemove, 1);\r\n }\r\n }\r\n else {\r\n app.ipeds = [ipedNew];\r\n }\r\n // Select yes in radio buttons\r\n components.steps[Number(fieldId[1])].\r\n fieldsGroups[Number(fieldId[2])].fields.forEach(field => {\r\n if (field.data.id === 'hispanicGroupId') {\r\n field.value = '1';\r\n }\r\n });\r\n // Add in the list of value id's selected\r\n if (fieldId && fieldId[1] && fieldId[2] && fieldId[3] && fieldId[4]) {\r\n const field: IFieldForm =\r\n components.steps[Number(fieldId[1])].fieldsGroups[Number(fieldId[2])].fields[Number(fieldId[3])];\r\n if (app.ipeds && app.ipeds.length === 0 && field.isRequired) {\r\n field.value = undefined;\r\n }\r\n else {\r\n // change value of field\r\n if (app.ipeds) {\r\n const ipedsArray: string[] = [];\r\n app.ipeds.forEach(ethnicity => {\r\n if (ethnicity.ipedsFederalCategoryId === 1) {\r\n if (ethnicity.ipedsEthnicityId) {\r\n ipedsArray.push(ethnicity.ipedsEthnicityId.toString());\r\n }\r\n }\r\n });\r\n field.value = ipedsArray.toString();\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n this.setState({\r\n application: app,\r\n components: components\r\n });\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onChangeListCheckbox.name, e));\r\n }\r\n };\r\n\r\n private onChangeRadioGroup = (event: any, value: string): void => {\r\n try {\r\n const {\r\n application,\r\n components\r\n } = this.state;\r\n\r\n if (event.target.name && event.target.name !== '' && application && components) {\r\n const app: IApplication = application;\r\n const fieldId: string[] = event.target.name.split('|');\r\n let newComponents: IApplicationForm = components;\r\n\r\n switch (fieldId[0]) {\r\n case 'primaryPhoneId':\r\n newComponents = this.onPrimaryButtonClick(fieldId, newComponents, value);\r\n break;\r\n }\r\n\r\n newComponents = this.cleanErrorMessages(fieldId, newComponents);\r\n newComponents = this.setValues(fieldId, newComponents, value);\r\n\r\n this.setState({\r\n application: app,\r\n components: newComponents\r\n });\r\n }\r\n } catch (e) {\r\n this.logError(LogData.fromException(this.onChangeRadioGroup.name, e));\r\n }\r\n };\r\n\r\n private onChangeTextField = (event: any): void => {\r\n try {\r\n const {\r\n application,\r\n components\r\n } = this.state;\r\n\r\n if (event.target.id && event.target.id !== '' && application && components) {\r\n const app: IApplication = application;\r\n const fieldId: string[] = event.target.id.split('|');\r\n let fieldIndex: number = 0;\r\n if (fieldId[4]) {\r\n fieldIndex = Number(fieldId[4]) + 1;\r\n }\r\n let newComponents: IApplicationForm = components;\r\n switch (fieldId[0]) {\r\n case 'emailId':\r\n if (fieldId && fieldId[1] && fieldId[2]) {\r\n const field: any = newComponents.steps[Number(fieldId[1])].fieldsGroups[Number(fieldId[2])].fields[Number(fieldId[3])];\r\n if (!components.emailRegExpression || event.target.value.match(components.emailRegExpression)) {\r\n field.data.error = false;\r\n field.data.helperText = '';\r\n field.value = event.target.value;\r\n app.email = event.target.value;\r\n }\r\n else {\r\n field.data.error = true;\r\n field.data.helperText = field.data.errorMessageNotValid;\r\n }\r\n }\r\n break;\r\n case 'emergencyPhoneId':\r\n if (!event.target.value.match(/^[0-9]*$/g)) {\r\n const onlyNum = new RegExp(/([A-Za-zñ<> äÄëËïÏöÖüÜáÁéÉíÍóÓúÚýÝ'¿\"#_-Ä-´°%;&¨Ñ,¡.*+?^=!:$(){}|[\\]\\/\\\\])/g);\r\n event.target.value = event.target.value.replace(onlyNum, '');\r\n }\r\n break;\r\n case 'firstNameId':\r\n app.firstName = event.target.value;\r\n break;\r\n case 'formerLastNameId':\r\n app.formerLastName = event.target.value;\r\n break;\r\n case 'governmentId':\r\n if (fieldId && fieldId[1] && fieldId[2] && fieldId[3]) {\r\n const field: any = newComponents.steps[Number(fieldId[1])]\r\n .fieldsGroups[Number(fieldId[2])].fields[Number(fieldId[3])];\r\n const governmentId: string = event.target.value;\r\n if (governmentId.includes('_')) {\r\n field.data.error = true;\r\n field.data.helperText = field.data.errorMessageFormat;\r\n }\r\n else {\r\n field.data.error = false;\r\n field.data.helperText = '';\r\n }\r\n app.governmentId = governmentId;\r\n }\r\n break;\r\n case 'lastNameId':\r\n app.lastName = event.target.value;\r\n break;\r\n case 'lastNamePrefixId':\r\n app.lastNamePrefix = event.target.value;\r\n break;\r\n case 'legalNameId':\r\n app.legalName = event.target.value;\r\n break;\r\n case 'middleNameId':\r\n app.middleName = event.target.value;\r\n break;\r\n case 'monthsInCountryId':\r\n if (fieldId && fieldId[1] && fieldId[2] && fieldId[3]) {\r\n if (!event.target.value.match(/^[0-9]*$/g)) {\r\n const onlyNum = new RegExp(/([A-Za-zñ<> äÄëËïÏöÖüÜáÁéÉíÍóÓúÚýÝ'¿\"#_-Ä-´°%;&¨Ñ,¡.*+?^=!:$(){}|[\\]\\/\\\\])/g);\r\n event.target.value = event.target.value.replace(onlyNum, '');\r\n }\r\n const field: any = newComponents.steps[Number(fieldId[1])].fieldsGroups[Number(fieldId[2])].fields[Number(fieldId[3])];\r\n if (Number(event.target.value) >= 0 && Number(event.target.value) <= 9999) {\r\n field.data.error = false;\r\n field.data.helperText = '';\r\n app.monthsInCountry = Number(event.target.value);\r\n }\r\n else {\r\n if (Number(event.target.value) > 9999) {\r\n field.data.error = true;\r\n field.data.helperText = field.data.errorMessageRange;\r\n }\r\n else {\r\n field.data.error = true;\r\n field.data.helperText = field.data.errorMessageNumeric;\r\n }\r\n }\r\n }\r\n break;\r\n case 'nickNameId':\r\n app.nickname = event.target.value;\r\n break;\r\n case 'otherSourceId':\r\n app.otherSource = event.target.value;\r\n break;\r\n case 'testScoreId':\r\n const fieldGroupTestScore: any = newComponents.steps[Number(fieldId[1])].fieldsGroups[Number(fieldId[2])];\r\n\r\n if (!app.testScores[fieldIndex]) {\r\n app.testScores[fieldIndex] = {} as ITestScore;\r\n }\r\n app.testScores[fieldIndex].score = event.target.value;\r\n\r\n if (fieldId.length > 4) {\r\n fieldGroupTestScore.fields.forEach(function (field) {\r\n const itemArrId: string[] = field.data.id.split('|');\r\n if (fieldId[3] === itemArrId[3] && fieldId[4] === itemArrId[4]) {\r\n if (Number(event.target.value) > 9999) {\r\n field.data.error = true;\r\n field.data.helperText = field.data.errorMessageRange;\r\n field.value = event.target.value;\r\n } else {\r\n field.data.error = false;\r\n field.data.helperText = '';\r\n field.value = event.target.value;\r\n }\r\n }\r\n });\r\n }\r\n else {\r\n fieldGroupTestScore.fields.forEach(function (field) {\r\n const itemArrId: string[] = field.data.id.split('|');\r\n if (fieldId[0] === itemArrId[0] && itemArrId.length === 1) {\r\n if (Number(event.target.value) > 9999) {\r\n field.data.error = true;\r\n field.data.helperText = field.data.errorMessageRange;\r\n field.value = event.target.value;\r\n } else {\r\n field.data.error = false;\r\n field.data.helperText = '';\r\n field.value = event.target.value;\r\n }\r\n }\r\n });\r\n }\r\n break;\r\n case 'passportNumberId':\r\n app.passportNumber = event.target.value;\r\n break;\r\n case 'phoneNumberId':\r\n if (!event.target.value.match(/^[0-9]*$/g)) {\r\n const onlyNum = new RegExp(/([A-Za-zñ<> äÄëËïÏöÖüÜáÁéÉíÍóÓúÚýÝ'¿\"#_-Ä-´°%;&¨Ñ,¡.*+?^=!:$(){}|[\\]\\/\\\\])/g);\r\n event.target.value = event.target.value.replace(onlyNum, '');\r\n }\r\n break;\r\n case 'visaNumberId':\r\n app.visaNumber = event.target.value;\r\n break;\r\n case 'numberOfHoursPerWeekId':\r\n if (!event.target.value.match(/^[0-9]*$/g)) {\r\n const onlyNum = new RegExp(/([A-Za-zñ<> äÄëËïÏöÖüÜáÁéÉíÍóÓúÚýÝ'¿\"#_-Ä-´°%;&¨Ñ,¡.*+?^=!:$(){}|[\\]\\/\\\\])/g);\r\n event.target.value = event.target.value.replace(onlyNum, '');\r\n }\r\n let fieldHoursPerWeek: any;\r\n if (fieldId.length < 5) {\r\n fieldHoursPerWeek = newComponents.steps[Number(fieldId[1])].fieldsGroups[Number(fieldId[2])].fields[Number(fieldId[3])];\r\n }\r\n else {\r\n fieldHoursPerWeek = newComponents.steps[Number(fieldId[1])].\r\n fieldsGroups[Number(fieldId[2])].fields.find(x =>\r\n x.data.section === Number(fieldId[4]) &&\r\n x.data.id.substr(0, 'numberOfHoursPerWeekId'.length) ===\r\n 'numberOfHoursPerWeekId');\r\n }\r\n if (Number(event.target.value) > 168) {\r\n fieldHoursPerWeek.data.error = true;\r\n fieldHoursPerWeek.data.helperText = fieldHoursPerWeek.data.errorMessageRange;\r\n }\r\n else {\r\n fieldHoursPerWeek.data.error = false;\r\n fieldHoursPerWeek.data.helperText = '';\r\n }\r\n break;\r\n case 'numberOfWeeksPerYearId':\r\n if (!event.target.value.match(/^[0-9]*$/g)) {\r\n const onlyNum = new RegExp(/([A-Za-zñ<> äÄëËïÏöÖüÜáÁéÉíÍóÓúÚýÝ'¿\"#_-Ä-´°%;&¨Ñ,¡.*+?^=!:$(){}|[\\]\\/\\\\])/g);\r\n event.target.value = event.target.value.replace(onlyNum, '');\r\n }\r\n let fieldWeeksPerYear: any;\r\n if (fieldId.length < 5) {\r\n fieldWeeksPerYear = newComponents.steps[Number(fieldId[1])].fieldsGroups[Number(fieldId[2])].fields[Number(fieldId[3])];\r\n }\r\n else {\r\n fieldWeeksPerYear = newComponents.steps[Number(fieldId[1])].\r\n fieldsGroups[Number(fieldId[2])].fields.find(x =>\r\n x.data.section === Number(fieldId[4]) &&\r\n x.data.id.substr(0, 'numberOfWeeksPerYearId'.length) ===\r\n 'numberOfWeeksPerYearId');\r\n }\r\n if (Number(event.target.value) > 52) {\r\n fieldWeeksPerYear.data.error = true;\r\n fieldWeeksPerYear.data.helperText = fieldWeeksPerYear.data.errorMessageRange;\r\n }\r\n else {\r\n fieldWeeksPerYear.data.error = false;\r\n fieldWeeksPerYear.data.helperText = '';\r\n }\r\n break;\r\n case 'numberOfYearsId':\r\n if (!event.target.value.match(/^[0-9]*$/g)) {\r\n const onlyNum = new RegExp(/([A-Za-zñ<> äÄëËïÏöÖüÜáÁéÉíÍóÓúÚýÝ'¿\"#_-Ä-´°%;&¨Ñ,¡.*+?^=!:$(){}|[\\]\\/\\\\])/g);\r\n event.target.value = event.target.value.replace(onlyNum, '');\r\n }\r\n let fieldYears: any;\r\n if (fieldId.length < 5) {\r\n fieldYears = newComponents.steps[Number(fieldId[1])].fieldsGroups[Number(fieldId[2])].fields[Number(fieldId[3])];\r\n }\r\n else {\r\n fieldYears = newComponents.steps[Number(fieldId[1])].\r\n fieldsGroups[Number(fieldId[2])].fields.find(x =>\r\n x.data.section === Number(fieldId[4]) &&\r\n x.data.id.substr(0, 'numberOfYearsId'.length) ===\r\n 'numberOfYearsId');\r\n }\r\n if (Number(event.target.value) > 99) {\r\n fieldYears.data.error = true;\r\n fieldYears.data.helperText = fieldYears.data.errorMessageRange;\r\n }\r\n else {\r\n fieldYears.data.error = false;\r\n fieldYears.data.helperText = '';\r\n }\r\n break;\r\n }\r\n\r\n newComponents = this.cleanErrorMessages(fieldId, newComponents);\r\n newComponents = this.setValues(fieldId, newComponents, event.target.value);\r\n\r\n this.setState({\r\n application: app,\r\n components: newComponents\r\n });\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onChangeTextField.name, e));\r\n }\r\n };\r\n\r\n private onChangeTextFieldModal = (event: any): void => {\r\n try {\r\n\r\n if (event.target.id && event.target.id !== '') {\r\n switch (event.target.id) {\r\n case 'txtEmailField':\r\n const {\r\n components\r\n } = this.state;\r\n if (components) {\r\n if (!components.emailRegExpression || event.target.value.match(components.emailRegExpression)) {\r\n this.setState({\r\n changeEmailText: false,\r\n emailField: event.target.value,\r\n invalidEmail: false\r\n });\r\n }\r\n else {\r\n this.setState({\r\n changeEmailText: false,\r\n emailField: event.target.value,\r\n invalidEmail: true\r\n });\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onChangeTextFieldModal.name, e));\r\n }\r\n };\r\n\r\n private onClickButton = (event: React.MouseEvent): void => {\r\n try {\r\n const {\r\n application,\r\n components\r\n } = this.state;\r\n\r\n if (event.currentTarget.id && event.currentTarget.id !== '' && application && components) {\r\n const fieldId: string[] = event.currentTarget.id.split('|');\r\n\r\n switch (fieldId[0]) {\r\n case 'educationEtsCodeButtonId':\r\n this.setState({\r\n institutions: undefined,\r\n openETSSearchModal: true,\r\n selectedCity: undefined,\r\n selectedCountry: undefined,\r\n selectedEtsCode: undefined,\r\n selectedFieldId: event.currentTarget.id,\r\n selectedInstitutionName: undefined,\r\n selectedState: undefined\r\n });\r\n break;\r\n case 'postalCodeButtonId':\r\n // Get zip code\r\n let zipCode: string = '';\r\n const fieldGroup: IFieldForm[] =\r\n components.steps[Number(fieldId[1])].fieldsGroups[Number(fieldId[2])].fields;\r\n let fieldIndex: number = -1;\r\n if (fieldId.length > 4) {\r\n fieldIndex = fieldGroup.findIndex(x => x.data.section === Number(fieldId[4]) &&\r\n x.data.id.substr(0, 'postalCodeId'.length) === 'postalCodeId');\r\n }\r\n else {\r\n fieldIndex = fieldGroup.findIndex(x => x.data.id === 'postalCodeId');\r\n }\r\n if (fieldIndex > -1) {\r\n zipCode = components.steps[Number(fieldId[1])].fieldsGroups[Number(fieldId[2])].\r\n fields[fieldIndex].value;\r\n }\r\n\r\n this.setState({\r\n openAddressSearchModal: true,\r\n selectedFieldId: event.currentTarget.id,\r\n selectedZipCode: zipCode\r\n });\r\n\r\n LayoutActions.setLoading(true);\r\n\r\n const {\r\n pageSize\r\n } = this.state;\r\n\r\n Requests.getAddresses(\r\n 0,\r\n pageSize,\r\n zipCode,\r\n this.resolveGetAddress, this.logError);\r\n\r\n const {\r\n total\r\n } = this.state;\r\n\r\n if (total) {\r\n const previousSize = pageSize;\r\n // Fix 60\r\n this.setState({\r\n pageSize: 0\r\n }, () => {\r\n this.setState({\r\n pageNumber: 0,\r\n pageSize: previousSize\r\n });\r\n });\r\n }\r\n break;\r\n case 'finishId':\r\n // Get action of button\r\n const confirmationIndex: number =\r\n components.fieldsGroups.findIndex(x => x.id === 'confirmationGroup');\r\n const finishButtonId: number =\r\n components.fieldsGroups[confirmationIndex].fields.findIndex(x => x.data.id === 'finishId');\r\n if (confirmationIndex > -1 && finishButtonId > -1) {\r\n const actionUrl: string | undefined = components.fieldsGroups[confirmationIndex].fields[finishButtonId].actionUrl;\r\n if (actionUrl) {\r\n window.location.assign(actionUrl);\r\n }\r\n else {\r\n window.location.assign(`${Constants.webUrl}/Admissions/Applications`);\r\n }\r\n }\r\n break;\r\n default:\r\n const actionUrl: string | undefined =\r\n components.steps[Number(fieldId[1])].\r\n fieldsGroups[Number(fieldId[2])].\r\n fields[Number(fieldId[3])].actionUrl;\r\n if (actionUrl) {\r\n window.location.assign(actionUrl);\r\n }\r\n else {\r\n window.location.assign(`${Constants.webUrl}/Admissions/Applications`);\r\n }\r\n break;\r\n }\r\n }\r\n } catch (e) {\r\n LayoutActions.setLoading(false);\r\n this.logError(LogData.fromException(this.onClickButton.name, e));\r\n }\r\n };\r\n // #endregion Change Fields Events\r\n\r\n // #region Pagination\r\n private getRowsPerPageOptions(maxValue: number): number[] {\r\n const rowsPerPageOptions: number[] = [];\r\n try {\r\n this.rowsPerPageOptions.forEach(option => {\r\n if (option < maxValue) {\r\n rowsPerPageOptions.push(option);\r\n }\r\n });\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.getRowsPerPageOptions.name, e));\r\n }\r\n return rowsPerPageOptions;\r\n }\r\n\r\n private onChangePage = (_event: any, page: number): void => {\r\n try {\r\n const {\r\n selectedInstitutionName,\r\n selectedEtsCode,\r\n selectedCity,\r\n selectedState,\r\n selectedCountry,\r\n pageSize\r\n } = this.state;\r\n\r\n this.setState({\r\n pageNumber: page\r\n });\r\n\r\n LayoutActions.setLoading(true);\r\n Requests.getInstitutions(\r\n page,\r\n pageSize,\r\n selectedInstitutionName,\r\n selectedEtsCode,\r\n selectedCity,\r\n selectedState,\r\n selectedCountry,\r\n this.resolveGetInstitutions, this.logError);\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onChangePage.name, e));\r\n }\r\n };\r\n\r\n private onChangePageAddress = (_event: any, page: number): void => {\r\n try {\r\n const {\r\n selectedZipCode,\r\n pageSize\r\n } = this.state;\r\n\r\n this.setState({\r\n pageNumber: page\r\n });\r\n\r\n LayoutActions.setLoading(true);\r\n Requests.getAddresses(\r\n page,\r\n pageSize,\r\n selectedZipCode,\r\n this.resolveGetAddress, this.logError);\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onChangePage.name, e));\r\n }\r\n };\r\n\r\n private onChangeRowsPerPage = (event: any): void => {\r\n try {\r\n this.setState({\r\n pageNumber: 0,\r\n pageSize: Number(event.target.value)\r\n });\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onChangeRowsPerPage.name, e));\r\n }\r\n };\r\n // #endregion Pagination\r\n\r\n // #region Expansion\r\n private onAddMore = (fieldGroup: IFieldsGroup, stepIndex: number, fieldGroupIndex: number): void => {\r\n try {\r\n if (fieldGroup.id && fieldGroup.id !== '') {\r\n const {\r\n components,\r\n errors,\r\n expanded\r\n } = this.state;\r\n\r\n if (components) {\r\n if (components.expansionPanel === null) {\r\n components.expansionPanel = {};\r\n }\r\n switch (fieldGroup.id) {\r\n case 'employmentGroup':\r\n if (components.expansionPanel.employeeCount !== undefined) {\r\n this.createNewSection(components, fieldGroup, errors, stepIndex,\r\n fieldGroupIndex, components.expansionPanel.employeeCount, 'employmentErrosId', expanded);\r\n\r\n components.expansionPanel.employeeCount++;\r\n }\r\n else {\r\n this.createNewSection(components, fieldGroup, errors, stepIndex,\r\n fieldGroupIndex, 0, 'employmentErrosId', expanded);\r\n\r\n components.expansionPanel.employeeCount = 1;\r\n }\r\n break;\r\n case 'programOfStudyGroup':\r\n if (components.expansionPanel.programsCount !== undefined) {\r\n this.createNewSection(components, fieldGroup, errors, stepIndex,\r\n fieldGroupIndex, components.expansionPanel.programsCount, 'programOfStudydErrorsId', expanded);\r\n\r\n components.expansionPanel.programsCount++;\r\n }\r\n else {\r\n this.createNewSection(components, fieldGroup, errors, stepIndex,\r\n fieldGroupIndex, 0, 'programOfStudydErrorsId', expanded);\r\n\r\n components.expansionPanel.programsCount = 1;\r\n }\r\n break;\r\n case 'phoneGroup':\r\n if (components.expansionPanel.phoneCount !== undefined) {\r\n this.createNewSection(components, fieldGroup, errors, stepIndex,\r\n fieldGroupIndex, components.expansionPanel.phoneCount, 'phoneErrorsId', expanded);\r\n\r\n components.expansionPanel.phoneCount++;\r\n }\r\n else {\r\n this.createNewSection(components, fieldGroup, errors, stepIndex,\r\n fieldGroupIndex, 0, 'phoneErrorsId', expanded);\r\n\r\n components.expansionPanel.phoneCount = 1;\r\n }\r\n break;\r\n case 'testScoreGroup':\r\n const initialGroupLengthTS: number = fieldGroup.fields.length;\r\n\r\n this.createNewSection(components, fieldGroup, errors, stepIndex,\r\n fieldGroupIndex, initialGroupLengthTS, 'testScoreErrorsId', expanded);\r\n\r\n const finalGroupLengthTS: number = fieldGroup.fields.length;\r\n const newSetTS: IFieldForm[] = fieldGroup.fields.slice(initialGroupLengthTS, finalGroupLengthTS);\r\n const parentDropDownTS: IFieldForm = newSetTS[newSetTS.findIndex(e => e.childField !== null)];\r\n const childDropDownTS:\r\n IFieldForm =\r\n newSetTS[newSetTS.findIndex(e => e.data.id.split('|')[0] === parentDropDownTS.childField)];\r\n childDropDownTS.data.options = [];\r\n parentDropDownTS.childField = childDropDownTS.data.id;\r\n\r\n if (components.expansionPanel.testScoresCount !== undefined) {\r\n components.expansionPanel.testScoresCount++;\r\n }\r\n else {\r\n components.expansionPanel.testScoresCount = 1;\r\n }\r\n break;\r\n case 'emergencyContactGroup':\r\n if (errors[stepIndex].groupErrors[fieldGroupIndex].sectionErrors.length < 1) {\r\n if (components.expansionPanel.emergencyContactsCount !== undefined) {\r\n // Error id is not sent because errorId for this group will be excluded\r\n this.createNewSection(components, fieldGroup, errors, stepIndex,\r\n fieldGroupIndex, components.expansionPanel.emergencyContactsCount, '', expanded);\r\n\r\n components.expansionPanel.emergencyContactsCount++;\r\n }\r\n else {\r\n this.createNewSection(components, fieldGroup, errors, stepIndex,\r\n fieldGroupIndex, 0, '', expanded);\r\n\r\n components.expansionPanel.emergencyContactsCount = 1;\r\n }\r\n }\r\n break;\r\n case 'addressInformationGroup':\r\n if (components.expansionPanel.addressessCount !== undefined) {\r\n // Error id is not sent because errorId for this group will be excluded\r\n this.createNewSection(components, fieldGroup, errors, stepIndex,\r\n fieldGroupIndex, components.expansionPanel.addressessCount, '', expanded);\r\n\r\n components.expansionPanel.addressessCount++;\r\n }\r\n else {\r\n this.createNewSection(components, fieldGroup, errors, stepIndex,\r\n fieldGroupIndex, 0, '', expanded);\r\n\r\n components.expansionPanel.addressessCount = 1;\r\n }\r\n break;\r\n case 'educationGroup':\r\n if (components.expansionPanel.educationCount !== undefined) {\r\n // Error id is not sent because errorId for this group will be excluded\r\n this.createNewSection(components, fieldGroup, errors, stepIndex,\r\n fieldGroupIndex, components.expansionPanel.educationCount, '', expanded);\r\n\r\n components.expansionPanel.educationCount++;\r\n }\r\n else {\r\n this.createNewSection(components, fieldGroup, errors, stepIndex,\r\n fieldGroupIndex, 0, '', expanded);\r\n\r\n components.expansionPanel.educationCount = 1;\r\n }\r\n break;\r\n case 'activityGroup':\r\n const initialGroupLength: number = fieldGroup.fields.length;\r\n\r\n if (components.expansionPanel.activityCount !== undefined) {\r\n // Error id is not sent because errorId for this group will be excluded\r\n this.createNewSection(components, fieldGroup, errors, stepIndex,\r\n fieldGroupIndex, components.expansionPanel.activityCount, '', expanded);\r\n }\r\n else {\r\n this.createNewSection(components, fieldGroup, errors, stepIndex,\r\n fieldGroupIndex, 0, '', expanded);\r\n }\r\n\r\n const finalGroupLength: number = fieldGroup.fields.length;\r\n const newSet: IFieldForm[] = fieldGroup.fields.slice(initialGroupLength, finalGroupLength);\r\n const parentDropDown: IFieldForm = newSet[newSet.findIndex(e => e.childField !== null)];\r\n const childDropDown: IFieldForm = newSet[newSet.findIndex(e => e.data.id.split('|')[0] === parentDropDown.childField)];\r\n childDropDown.data.options = [];\r\n parentDropDown.childField = childDropDown.data.id;\r\n\r\n if (components.expansionPanel.activityCount !== undefined) {\r\n components.expansionPanel.activityCount++;\r\n }\r\n else {\r\n components.expansionPanel.activityCount = 1;\r\n }\r\n break;\r\n case 'relativesGroup':\r\n if (components.expansionPanel.relativesCount !== undefined) {\r\n // Error id is not sent because errorId for this group will be excluded\r\n this.createNewSection(components, fieldGroup, errors, stepIndex,\r\n fieldGroupIndex, components.expansionPanel.relativesCount, '', expanded);\r\n\r\n components.expansionPanel.relativesCount++;\r\n }\r\n else {\r\n this.createNewSection(components, fieldGroup, errors, stepIndex,\r\n fieldGroupIndex, 0, '', expanded);\r\n\r\n components.expansionPanel.relativesCount = 1;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onAddMore.name, e));\r\n }\r\n };\r\n\r\n private onAddDeleteButton =\r\n (fieldGroup: IFieldsGroup, stepIndex: number, fieldGroupIndex: number, groupLength: number, sectionNumber: number): void => {\r\n try {\r\n const data: IDataForm = {\r\n id: `deleteIcon|${stepIndex}|${fieldGroupIndex}|${groupLength}|${sectionNumber}`,\r\n modified: true,\r\n section: sectionNumber\r\n };\r\n\r\n const deleteButton: IFieldForm = {\r\n componentType: 'DeleteIconButton',\r\n data: data,\r\n isNumeric: false,\r\n isRequired: false,\r\n onClick: this.onDeleteItem,\r\n value: ''\r\n };\r\n\r\n fieldGroup.fields.push(deleteButton);\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onAddDeleteButton.name, e));\r\n }\r\n };\r\n\r\n private onChangeExpansionPanel = (panelId: string) => (): void => {\r\n try {\r\n this.setState({\r\n expanded: panelId\r\n });\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onChangeExpansionPanel.name, e));\r\n }\r\n };\r\n\r\n private onDeleteItem = (event: any): void => {\r\n try {\r\n const {\r\n errors,\r\n components\r\n } = this.state;\r\n\r\n if (components) {\r\n if (event.currentTarget.id) {\r\n const buttonId: string[] = event.currentTarget.id.split('|');\r\n const componentName: string = components.steps[buttonId[1]].fieldsGroups[buttonId[2]].id;\r\n const fields: IFieldForm[] = components.steps[buttonId[1]].fieldsGroups[buttonId[2]].fields;\r\n if (fields) {\r\n let fieldIndex: number;\r\n do {\r\n fieldIndex = fields.findIndex(x => x.data.section === Number(buttonId[4]));\r\n if (fieldIndex > -1) {\r\n fields.splice(fieldIndex, 1);\r\n }\r\n } while (fieldIndex > -1);\r\n }\r\n components.steps[Number(buttonId[1])].fieldsGroups[Number(buttonId[2])].fields = fields;\r\n\r\n // Delete section from sectionErrors\r\n const sectionIndex = errors[Number(buttonId[1])].groupErrors[Number(buttonId[2])].sectionErrors.findIndex(\r\n section => section.sectionIndex === Number(buttonId[4]));\r\n if (sectionIndex > -1) {\r\n errors[Number(buttonId[1])].groupErrors[Number(buttonId[2])].sectionErrors.splice(sectionIndex, 1);\r\n }\r\n\r\n switch (componentName) {\r\n case 'phoneGroup':\r\n // Search for primary selected in phone group\r\n const primaryPhoneField: IFieldForm[] = components.steps[buttonId[1]].fieldsGroups[buttonId[2]]\r\n .fields.filter(x => x.data.id.substr(0, 'primaryPhoneId'.length) === 'primaryPhoneId' && x.value === '1');\r\n // If doesn't exist, select first item as primary\r\n if (primaryPhoneField.length === 0) {\r\n const firstPrimaryPhoneField: number = components.steps[buttonId[1]].fieldsGroups[buttonId[2]]\r\n .fields.findIndex(x => x.data.id === 'primaryPhoneId');\r\n if (firstPrimaryPhoneField > -1) {\r\n components.steps[buttonId[1]].fieldsGroups[buttonId[2]]\r\n .fields[firstPrimaryPhoneField].value = '1';\r\n }\r\n }\r\n break;\r\n case 'testScoreGroup':\r\n const {\r\n application\r\n } = this.state;\r\n application.testScores[Number(buttonId[3]) + 1] = {};\r\n this.setState({\r\n application: application\r\n });\r\n break;\r\n }\r\n const fieldGroup: IFieldsGroup =\r\n components.steps[buttonId[1]].fieldsGroups[buttonId[2]];\r\n let maxAdd: number;\r\n if (fieldGroup.maximumAllowed) {\r\n maxAdd = Number(fieldGroup.maximumAllowed) - 1;\r\n }\r\n else {\r\n maxAdd = 99;\r\n }\r\n if (errors[buttonId[1]].groupErrors[buttonId[2]].sectionErrors.length < maxAdd) {\r\n // Add more button if it was remove\r\n components.steps[buttonId[1]].fieldsGroups[buttonId[2]].isMultiple = true;\r\n }\r\n }\r\n\r\n this.setState({\r\n components: components,\r\n errors: errors\r\n });\r\n\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onDeleteItem.name, e));\r\n }\r\n };\r\n // #endregion Expansion\r\n // #endregion Events\r\n\r\n // #region Functions\r\n private assignFieldValue =\r\n (fieldGroup: IFieldForm[], fieldId: string[], fieldIdName: string, isSectionField: boolean, value?: any): void => {\r\n const {\r\n components\r\n } = this.state;\r\n\r\n if (components) {\r\n let fieldIndex: number = 1;\r\n if (isSectionField) {\r\n fieldIndex = fieldGroup.findIndex(x => x.data.section === Number(fieldId[4]) &&\r\n x.data.id.substr(0, fieldIdName.length) === fieldIdName);\r\n }\r\n else {\r\n fieldIndex = fieldGroup.findIndex(x => x.data.id === fieldIdName);\r\n }\r\n if (fieldIndex > -1) {\r\n components.steps[Number(fieldId[1])].fieldsGroups[Number(fieldId[2])].\r\n fields[fieldIndex].value = value;\r\n }\r\n }\r\n };\r\n\r\n private cleanErrorMessages = (fieldId: string[], newComponents: IApplicationForm): IApplicationForm => {\r\n if (fieldId && fieldId[1] && fieldId[2] && fieldId[3]) {\r\n let field: IFieldForm | undefined;\r\n\r\n if (fieldId.length > 4) {\r\n const fieldGroup: IFieldForm[] =\r\n newComponents.steps[Number(fieldId[1])].fieldsGroups[Number(fieldId[2])].fields;\r\n field =\r\n fieldGroup.find(x => x.data.id.split('|')[3] === fieldId[3] && x.data.id.split('|')[4] === fieldId[4]);\r\n }\r\n else {\r\n field =\r\n newComponents.steps[Number(fieldId[1])].fieldsGroups[Number(fieldId[2])].fields[Number(fieldId[3])];\r\n }\r\n\r\n if (field !== undefined) {\r\n if ((field.data.errorMessageDuplicate === undefined ||\r\n field.data.errorMessageDuplicate === null) &&\r\n (field.data.errorMessageFormat === undefined ||\r\n field.data.errorMessageFormat === null) &&\r\n (field.data.errorMessageNotValid === undefined ||\r\n field.data.errorMessageNotValid === null) &&\r\n (field.data.errorMessageNumeric === undefined ||\r\n field.data.errorMessageNumeric === null) &&\r\n (field.data.errorMessagePrimary === undefined ||\r\n field.data.errorMessagePrimary === null) &&\r\n (field.data.errorMessageRange === undefined ||\r\n field.data.errorMessageRange === null)) {\r\n field.data.error = false;\r\n field.data.helperText = '';\r\n }\r\n }\r\n }\r\n return newComponents;\r\n };\r\n\r\n private copyField =\r\n (id: string, stepIndex: number, fieldGroupIndex: number, groupLength: number, sectionNumber: number, components: IApplicationForm): IApplicationForm => {\r\n try {\r\n const fields: any =\r\n components.steps[stepIndex].fieldsGroups[fieldGroupIndex].fields;\r\n const fieldIndex: number =\r\n fields.findIndex(x => x.data.id === id);\r\n\r\n const copiedField: IFieldForm = fields[fieldIndex];\r\n const newField: IFieldForm = JSON.parse(JSON.stringify(copiedField));\r\n\r\n newField.data.id =\r\n `${id}|${stepIndex}|${fieldGroupIndex}|${groupLength}|${sectionNumber}`;\r\n let exist: boolean = false;\r\n if (copiedField.componentType === 'Dropdown') {\r\n if (copiedField.default && copiedField.data.options) {\r\n copiedField.data.options.forEach(option => {\r\n if (option.value.toString() === copiedField.default.toString()) {\r\n exist = true;\r\n }\r\n });\r\n }\r\n if (exist) {\r\n newField.value = copiedField.default;\r\n }\r\n else {\r\n newField.value = '';\r\n }\r\n }\r\n else {\r\n newField.value = copiedField.default ? copiedField.default : '';\r\n }\r\n newField.data.error = false;\r\n newField.data.helperText = '';\r\n newField.data.modified = true;\r\n newField.data.section = sectionNumber;\r\n fields.push(newField);\r\n components.steps[stepIndex].fieldsGroups[fieldGroupIndex].fields = fields;\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.copyField.name, e));\r\n }\r\n return components;\r\n };\r\n\r\n private createNewSection =\r\n (components: IApplicationForm, fieldGroup: IFieldsGroup, errors: IApplicationErrors[], stepIndex: number, fieldGroupIndex: number, count: number, errorTexId: string, expanded):\r\n void => {\r\n const groupLength: number = fieldGroup.fields.length;\r\n /* Initialization of SectionErrors in errors state variable and set of\r\n * SectionIndex = sectionErrors.length -1; \r\n */\r\n const sectionIndex = errors[stepIndex].groupErrors[fieldGroupIndex].sectionErrors.push(\r\n { sectionIndex: count, isSectionError: false, fieldsErrors: [] }) - 1;\r\n\r\n fieldGroup.fields.forEach((field, i) => {\r\n if (!field.data.modified) {\r\n if (field.data.id !== errorTexId) {\r\n components = this.copyField(field.data.id, stepIndex,\r\n fieldGroupIndex, (groupLength - 1) + i, count, components);\r\n }\r\n // Initialization of FieldErrors in errors state variable\r\n errors[stepIndex].groupErrors[fieldGroupIndex].sectionErrors[sectionIndex].fieldsErrors.push(\r\n { fieldId: field.data.id, isFieldError: false }\r\n );\r\n }\r\n });\r\n\r\n this.onAddDeleteButton(fieldGroup, stepIndex, fieldGroupIndex, (groupLength - 1), count);\r\n\r\n let maxAdd: number;\r\n if (fieldGroup.maximumAllowed) {\r\n maxAdd = Number(fieldGroup.maximumAllowed) - 1;\r\n }\r\n else {\r\n maxAdd = 99;\r\n }\r\n if (errors && errors[stepIndex].groupErrors[fieldGroupIndex].sectionErrors.length < maxAdd) {\r\n fieldGroup.isMultiple = true;\r\n }\r\n else {\r\n fieldGroup.isMultiple = false;\r\n }\r\n\r\n this.setState({\r\n components: components,\r\n errors: errors,\r\n expanded: fieldGroup.isExpansionPanel ?\r\n `panel|${stepIndex}|${fieldGroupIndex}|${count}` : expanded\r\n });\r\n };\r\n\r\n private reviewRequiredFields = (): boolean => {\r\n const {\r\n application,\r\n components,\r\n errors\r\n } = this.state;\r\n\r\n let isValid: boolean = true;\r\n if (components) {\r\n let programsValid: boolean = true;\r\n let testScoresValid: boolean = true;\r\n let validPhones: boolean = true;\r\n let isValidEmploymentSection: boolean = true;\r\n let emergencyContactsValid: boolean = true;\r\n let ipedsValid: boolean = true;\r\n let addressValid: boolean = true;\r\n let userDefinedValid: boolean = true;\r\n let educationValid: boolean = true;\r\n let activityValid: boolean = true;\r\n let relativeValid: boolean = true;\r\n let residencyValid: boolean = true;\r\n\r\n let ids: string[] = [];\r\n let fieldSectionIndex: number;\r\n let fieldId: string;\r\n let sectionErrorIndex: number;\r\n let fieldErrorIndex: number;\r\n\r\n components.steps.forEach((step, stepIndex) => {\r\n fieldErrorIndex = -1;\r\n step.fieldsGroups.forEach((fieldsGroup, groupIndex) => {\r\n fieldsGroup.fields.forEach(field => {\r\n if (field.isRequired && !field.value) {\r\n field.data.error = true;\r\n field.data.helperText = field.data.errorMessageRequired;\r\n isValid = false;\r\n } else if (field.isNumeric && String(field.value).length > 0 && isNaN(Number(field.value))) {\r\n field.data.error = true;\r\n field.data.helperText = field.data.errorMessageNumeric;\r\n isValid = false;\r\n } else if (field.isRequired && field.value && field.componentType === 'DatePicker') {\r\n const date = moment(field.value, 'YYYY-MM-DD');\r\n const isDateValid: boolean = date.isValid();\r\n const minDate = new Date(moment().add(-100, 'years').toDate());\r\n const maxDate = new Date(moment().add(+100, 'years').toDate());\r\n\r\n const isDateInRange: boolean =\r\n new Date(moment(field.value).toDate()) >= minDate &&\r\n new Date(moment(field.value).toDate()) <= maxDate;\r\n if (!isDateValid || !isDateInRange) {\r\n field.value = undefined;\r\n field.data.error = true;\r\n field.data.helperText = field.data.errorMessageRequired;\r\n isValid = false;\r\n }\r\n if (isDateValid && isDateInRange) {\r\n field.data.error = false;\r\n field.data.helperText = '';\r\n }\r\n } else if (field.value && field.componentType === 'DatePicker') {\r\n const date = moment(field.value, 'YYYY-MM-DD');\r\n const isDateValid: boolean = date.isValid();\r\n const minDate = new Date(moment().add(-100, 'years').toDate());\r\n const maxDate = new Date(moment().add(+100, 'years').toDate());\r\n\r\n const isDateInRange: boolean =\r\n new Date(moment(field.value).toDate()) >= minDate &&\r\n new Date(moment(field.value).toDate()) <= maxDate;\r\n if (isDateValid && !isDateInRange) {\r\n field.value = undefined;\r\n field.data.error = true;\r\n field.data.helperText = field.data.errorMessageRequired;\r\n isValid = false;\r\n }\r\n }\r\n else if (field.parentId == 'governmentIdGroup' && field.data.error) {\r\n isValid = false;\r\n }\r\n else {\r\n field.data.error = false;\r\n field.data.helperText = '';\r\n }\r\n });\r\n\r\n // init counts\r\n if (!components.expansionPanel) {\r\n components.expansionPanel = {};\r\n components.expansionPanel.activityCount = components.expansionPanel.activityCount ?\r\n components.expansionPanel.activityCount : 0;\r\n\r\n components.expansionPanel.addressessCount = components.expansionPanel.addressessCount ?\r\n components.expansionPanel.addressessCount : 0;\r\n\r\n components.expansionPanel.educationCount = components.expansionPanel.educationCount ?\r\n components.expansionPanel.educationCount : 0;\r\n\r\n components.expansionPanel.emergencyContactsCount = components.expansionPanel.emergencyContactsCount ?\r\n components.expansionPanel.emergencyContactsCount : 0;\r\n\r\n components.expansionPanel.employeeCount = components.expansionPanel.employeeCount ?\r\n components.expansionPanel.employeeCount : 0;\r\n\r\n components.expansionPanel.phoneCount = components.expansionPanel.phoneCount ?\r\n components.expansionPanel.phoneCount : 0;\r\n\r\n components.expansionPanel.programsCount = components.expansionPanel.programsCount ?\r\n components.expansionPanel.programsCount : 0;\r\n\r\n components.expansionPanel.relativesCount = components.expansionPanel.relativesCount ?\r\n components.expansionPanel.relativesCount : 0;\r\n\r\n components.expansionPanel.testScoresCount = components.expansionPanel.testScoresCount ?\r\n components.expansionPanel.testScoresCount : 0;\r\n }\r\n\r\n // #region Components Validations\r\n\r\n // #region Programs\r\n if (fieldsGroup.id === 'programOfStudyGroup') {\r\n programsValid = this.reviewPrograms(fieldsGroup);\r\n const textErrorIndex: number = fieldsGroup.fields.findIndex(x => x.data.id === 'programOfStudydErrorsId');\r\n if (!programsValid) {\r\n if (textErrorIndex > -1) {\r\n fieldsGroup.fields[textErrorIndex].data.error = true;\r\n }\r\n }\r\n else {\r\n if (textErrorIndex > -1) {\r\n fieldsGroup.fields[textErrorIndex].data.error = false;\r\n fieldsGroup.fields[textErrorIndex].data.label = '';\r\n }\r\n }\r\n }\r\n // #endregion Programs\r\n\r\n // #region TestScores\r\n if (fieldsGroup.id === 'testScoreGroup') {\r\n const filteredControls: IFieldForm[] =\r\n fieldsGroup.fields.filter(f => !(f.data.id.includes('deleteIcon') || f.data.id.includes('testScoreErrorsId')));\r\n const groupedControls: any = filteredControls.reduce(function (r, a) {\r\n const key: string | undefined = a.data.id.split('|')[4];\r\n let index: number = 0;\r\n if (!key) {\r\n index = 0;\r\n } else {\r\n index = Number(key) + 1;\r\n }\r\n r[index] = r[index] || [];\r\n r[index].push(a);\r\n return r;\r\n }, Object.create(null));\r\n\r\n const messageErrorIndex: number = fieldsGroup.fields.findIndex(x => x.data.id === 'testScoreErrorsId');\r\n testScoresValid = this.reviewTestScores(groupedControls);\r\n if (!testScoresValid) {\r\n if (messageErrorIndex > -1) {\r\n fieldsGroup.fields[messageErrorIndex].data.error = true;\r\n fieldsGroup.fields[messageErrorIndex].data.label = fieldsGroup.errorMessageDuplicate;\r\n }\r\n }\r\n else {\r\n if (messageErrorIndex > -1) {\r\n fieldsGroup.fields[messageErrorIndex].data.error = false;\r\n fieldsGroup.fields[messageErrorIndex].data.label = '';\r\n }\r\n }\r\n\r\n // Validate testscore completeness\r\n if (testScoresValid && !filteredControls.some(f => f.data.error === true)) {\r\n testScoresValid = this.reviewTestScoreCompleteness(groupedControls);\r\n\r\n if (!testScoresValid) {\r\n if (messageErrorIndex > -1) {\r\n fieldsGroup.fields[messageErrorIndex].data.error = true;\r\n fieldsGroup.fields[messageErrorIndex].data.label = fieldsGroup.errorMessageRequired;\r\n }\r\n }\r\n else {\r\n if (messageErrorIndex > -1) {\r\n fieldsGroup.fields[messageErrorIndex].data.error = false;\r\n fieldsGroup.fields[messageErrorIndex].data.label = '';\r\n }\r\n }\r\n }\r\n\r\n // removes empty test scores\r\n for (let i: number = application.testScores.length; i >= 0; i--) {\r\n if (application.testScores[i]) {\r\n if (!application.testScores[i].id) {\r\n application.testScores.splice(i, 1);\r\n }\r\n } else {\r\n application.testScores.splice(i, 1);\r\n }\r\n }\r\n }\r\n // #endregion TestScores\r\n\r\n // #region Phones\r\n if (fieldsGroup.id === 'phoneGroup') {\r\n validPhones = this.reviewPhoneGroup(fieldsGroup);\r\n const textErrorIndex: number = fieldsGroup.fields.findIndex(x => x.data.id === 'phoneErrorsId');\r\n if (!validPhones) {\r\n if (textErrorIndex > -1) {\r\n fieldsGroup.fields[textErrorIndex].data.error = true;\r\n }\r\n }\r\n else {\r\n if (textErrorIndex > -1) {\r\n fieldsGroup.fields[textErrorIndex].data.error = false;\r\n fieldsGroup.fields[textErrorIndex].data.label = '';\r\n }\r\n }\r\n }\r\n // #endregion Phones\r\n\r\n // #region Ipeds\r\n if (fieldsGroup.id === 'ipedsGroup') {\r\n ipedsValid = this.reviewIpeds(fieldsGroup);\r\n const textErrorIndex: number = fieldsGroup.fields.findIndex(x => x.data.id === 'ipedsErrorsId');\r\n if (!ipedsValid) {\r\n if (textErrorIndex > -1) {\r\n fieldsGroup.fields[textErrorIndex].data.error = true;\r\n }\r\n }\r\n else {\r\n if (textErrorIndex > -1) {\r\n fieldsGroup.fields[textErrorIndex].data.error = false;\r\n fieldsGroup.fields[textErrorIndex].data.label = '';\r\n }\r\n }\r\n }\r\n // #endregion Ipeds\r\n\r\n // #region Employment\r\n if (fieldsGroup.id === 'employmentGroup') {\r\n isValidEmploymentSection = this.reviewEmployment(fieldsGroup);\r\n const fieldsById =\r\n fieldsGroup.fields.filter(x =>\r\n x.data.id.substr(0, 'employmentErrosId'.length) === 'employmentErrosId');\r\n fieldsById.forEach(field => {\r\n if (!isValidEmploymentSection) {\r\n field.data.error = true;\r\n }\r\n else {\r\n field.data.error = false;\r\n field.data.label = '';\r\n }\r\n });\r\n isValid = !isValidEmploymentSection ? false : isValid;\r\n }\r\n // #endregion Employment\r\n\r\n // #region EmergencyContacts\r\n if (fieldsGroup.id === 'emergencyContactGroup') {\r\n emergencyContactsValid = this.reviewEmergencyContacts(fieldsGroup);\r\n isValid = !emergencyContactsValid ? false : isValid;\r\n }\r\n // #endregion EmergencyContacts\r\n\r\n // #region Address\r\n if (fieldsGroup.id === 'addressInformationGroup') {\r\n addressValid = this.reviewAddress(fieldsGroup);\r\n isValid = !addressValid ? false : isValid;\r\n }\r\n // #endregion Address\r\n\r\n // #region UserDefinedFields\r\n if (fieldsGroup.isCustom) {\r\n userDefinedValid = this.reviewUserDefined(fieldsGroup);\r\n isValid = !userDefinedValid ? false : isValid;\r\n }\r\n // #endregion UserDefinedFields\r\n\r\n // #region Education\r\n if (fieldsGroup.id === 'educationGroup') {\r\n educationValid = this.reviewEducation(fieldsGroup);\r\n isValid = !educationValid ? false : isValid;\r\n }\r\n // #endregion Education\r\n\r\n // #region Activities\r\n if (fieldsGroup.id === 'activityGroup') {\r\n activityValid = this.reviewActivities(fieldsGroup);\r\n }\r\n // #endregion Activities\r\n\r\n // #region Relatives\r\n if (fieldsGroup.id === 'relativesGroup') {\r\n relativeValid = this.reviewRelatives(fieldsGroup);\r\n isValid = !relativeValid ? false : isValid;\r\n }\r\n // #endregion Relatives\r\n\r\n // #region Residency\r\n if (fieldsGroup.id === 'residencyGroup') {\r\n residencyValid = this.reviewResidency(fieldsGroup);\r\n isValid = !residencyValid ? false : isValid;\r\n }\r\n // #endregion Residency\r\n\r\n // #region Campuses\r\n if (fieldsGroup.id === 'campusGroup') {\r\n this.reviewCampus(fieldsGroup);\r\n }\r\n // #endregion Campuses\r\n\r\n // #region Academic Interest\r\n if (fieldsGroup.id === 'interestGroup') {\r\n this.reviewAcademicInterest(fieldsGroup);\r\n }\r\n // #endregion Academic Interest\r\n // #endregion Components Validations\r\n // Group errors\r\n fieldsGroup.fields.forEach(field => {\r\n // Set errors in copied fields inside the SectionErrors array of errors state variable\r\n if (field.data.modified) {\r\n ids = field.data.id.split('|');\r\n if (ids[0] !== 'deleteIcon') {\r\n // Gets the actual Section index from the field id\r\n fieldSectionIndex = Number(ids[4]);\r\n // Gets the actual Field id\r\n fieldId = ids[0];\r\n // Gets the index of the sectionErrors array\r\n sectionErrorIndex = errors[stepIndex].groupErrors[groupIndex].sectionErrors.findIndex(section =>\r\n section.sectionIndex === fieldSectionIndex);\r\n if (sectionErrorIndex > -1) {\r\n // Gets the index of the fieldErrors array\r\n fieldErrorIndex = errors[stepIndex].groupErrors[groupIndex].sectionErrors[sectionErrorIndex].fieldsErrors\r\n .findIndex(field => field.fieldId === fieldId);\r\n if (fieldErrorIndex > -1) {\r\n // Sets the value of the error\r\n errors[stepIndex].groupErrors[groupIndex].sectionErrors[sectionErrorIndex].fieldsErrors[fieldErrorIndex]\r\n .isFieldError = field.data.error ? field.data.error : false;\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n // Set errors in first fields inside the firstSectionErrors array state variable\r\n fieldErrorIndex = errors[stepIndex].groupErrors[groupIndex].firstSectionErrors.firstFieldsErrors.findIndex(fieldError =>\r\n fieldError.fieldId === field.data.id);\r\n // Checks if the field is already in firstFieldsErrors\r\n if (fieldErrorIndex > -1) {\r\n errors[stepIndex].groupErrors[groupIndex].firstSectionErrors.firstFieldsErrors[fieldErrorIndex].isFieldError =\r\n field.data.error ? field.data.error : false;\r\n } else {\r\n errors[stepIndex].groupErrors[groupIndex].firstSectionErrors.firstFieldsErrors.push(\r\n { fieldId: field.data.id, isFieldError: field.data.error ? field.data.error : false }\r\n );\r\n }\r\n }\r\n });\r\n\r\n errors[stepIndex].groupErrors[groupIndex].firstSectionErrors.isFirstSectionErrors =\r\n errors[stepIndex].groupErrors[groupIndex].firstSectionErrors.firstFieldsErrors.some(fieldError => fieldError.isFieldError);\r\n\r\n errors[stepIndex].groupErrors[groupIndex].sectionErrors.forEach(sectionError => {\r\n sectionError.isSectionError = sectionError.fieldsErrors.some(fieldError => fieldError.isFieldError);\r\n });\r\n\r\n errors[stepIndex].groupErrors[groupIndex].isGroupError =\r\n fieldsGroup.fields.some(field => field.data.error ? field.data.error : false);\r\n });\r\n errors[stepIndex].isStepError = errors[stepIndex].groupErrors.some(groupError => groupError.isGroupError);\r\n });\r\n\r\n // Multiple components validations\r\n isValid = programsValid && testScoresValid &&\r\n validPhones && ipedsValid && addressValid &&\r\n activityValid && relativeValid &&\r\n isValid;\r\n\r\n const allErrors: IGroupErrors[] = [];\r\n const especificErrors: IGroupErrors[] = [];\r\n if (!isValid) {\r\n errors.forEach(step => {\r\n step.groupErrors.forEach(groupError => {\r\n if (groupError.isGroupError) {\r\n if (\r\n // groupError.groupId === 'emergencyContactGroup' ||\r\n (groupError.groupId === 'educationGroup' && application.education.length === 0) ||\r\n groupError.groupId === 'activityGroup' ||\r\n groupError.groupId === 'residencyGroup') {\r\n especificErrors.push(groupError);\r\n }\r\n else {\r\n allErrors.push(groupError);\r\n }\r\n }\r\n });\r\n });\r\n if (allErrors.length === 0) {\r\n isValid = programsValid && testScoresValid && validPhones &&\r\n ipedsValid && addressValid &&\r\n isValidEmploymentSection && emergencyContactsValid &&\r\n educationValid && activityValid && relativeValid && residencyValid;\r\n }\r\n }\r\n\r\n this.setState({\r\n components: components,\r\n errors: errors\r\n });\r\n }\r\n return isValid;\r\n };\r\n\r\n private setApplicationValues = (fieldId: string, fieldDefault: any): void => {\r\n const {\r\n application\r\n } = this.state;\r\n\r\n switch (fieldId) {\r\n case 'attendStatusId':\r\n application.collegeAttendStatus = fieldDefault;\r\n break;\r\n case 'campusId':\r\n application.campuses = fieldDefault;\r\n break;\r\n case 'counselorId':\r\n application.counselorId = fieldDefault;\r\n break;\r\n case 'countryOfBirthId':\r\n application.countryOfBirth = fieldDefault;\r\n break;\r\n case 'ethnicityId':\r\n application.ethnicity = fieldDefault;\r\n break;\r\n case 'genderId':\r\n application.gender = fieldDefault;\r\n break;\r\n case 'maritalyId':\r\n application.maritalStatus = fieldDefault;\r\n break;\r\n case 'passportCountryId':\r\n application.passportCountryId = fieldDefault;\r\n break;\r\n case 'primaryCitizenshipId':\r\n application.primaryCitizenship = fieldDefault;\r\n break;\r\n case 'primaryLanguageId':\r\n application.primaryLanguage = fieldDefault;\r\n break;\r\n case 'prefixId':\r\n application.prefix = fieldDefault;\r\n break;\r\n case 'religionId':\r\n application.religion = fieldDefault;\r\n break;\r\n case 'secondayCitizenshipId':\r\n application.secondaryCitizenship = fieldDefault;\r\n break;\r\n case 'secondaryLanguageId':\r\n application.secondaryLanguage = fieldDefault;\r\n break;\r\n case 'sessionPeriodId':\r\n application.period = fieldDefault;\r\n break;\r\n case 'sourceId':\r\n application.sourceId = fieldDefault;\r\n break;\r\n case 'suffixId':\r\n application.suffix = fieldDefault;\r\n break;\r\n case 'veteranId':\r\n application.veteranStatus = fieldDefault;\r\n break;\r\n case 'visaId':\r\n application.visa = fieldDefault;\r\n break;\r\n case 'visaCountryId':\r\n application.visaCountryId = fieldDefault;\r\n break;\r\n case 'extraCurricularActivityId':\r\n application.isInterestedInExtracurricular = fieldDefault;\r\n break;\r\n case 'financialAidId':\r\n application.isInterestedInFinancialAid = fieldDefault;\r\n break;\r\n case 'retiredId':\r\n application.isRetired = fieldDefault;\r\n break;\r\n case 'seekingDegreeId':\r\n application.isSeekingDegree = fieldDefault;\r\n break;\r\n case 'policyCheckboxId':\r\n application.policy = fieldDefault;\r\n break;\r\n case 'dateOfBirthId':\r\n application.dateOfBirth = fieldDefault;\r\n break;\r\n case 'visaExpirationDateId':\r\n application.visaExpiration = fieldDefault;\r\n break;\r\n case 'passportExpirationDateId':\r\n application.passportExpiration = fieldDefault;\r\n break;\r\n case 'emailId':\r\n application.email = fieldDefault;\r\n break;\r\n case 'firstNameId':\r\n application.firstName = fieldDefault;\r\n break;\r\n case 'formerLastNameId':\r\n application.formerLastName = fieldDefault;\r\n break;\r\n case 'governmentId':\r\n application.governmentId = fieldDefault;\r\n break;\r\n case 'lastNameId':\r\n application.lastName = fieldDefault;\r\n break;\r\n case 'lastNamePrefixId':\r\n application.lastNamePrefix = fieldDefault;\r\n break;\r\n case 'legalNameId':\r\n application.legalName = fieldDefault;\r\n break;\r\n case 'middleNameId':\r\n application.middleName = fieldDefault;\r\n break;\r\n case 'monthsInCountryId':\r\n application.monthsInCountry = fieldDefault;\r\n break;\r\n case 'nickNameId':\r\n application.nickname = fieldDefault;\r\n break;\r\n case 'otherSourceId':\r\n application.otherSource = fieldDefault;\r\n break;\r\n case 'passportNumberId':\r\n application.passportNumber = fieldDefault;\r\n break;\r\n case 'visaNumberId':\r\n application.visaNumber = fieldDefault;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n this.setState({\r\n application: fieldDefault\r\n });\r\n };\r\n\r\n private setValues = (fieldId: string[], newComponents: IApplicationForm, value: any): IApplicationForm => {\r\n if (fieldId.length > 4) {\r\n const fieldGroup: IFieldForm[] =\r\n newComponents.steps[Number(fieldId[1])].fieldsGroups[Number(fieldId[2])].fields;\r\n const field: IFieldForm | undefined =\r\n fieldGroup.find(x => x.data.id.split('|')[3] === fieldId[3] && x.data.id.split('|')[4] === fieldId[4]);\r\n if (field) {\r\n field.value = value;\r\n }\r\n }\r\n else {\r\n const field: IFieldForm =\r\n newComponents.steps[Number(fieldId[1])].fieldsGroups[Number(fieldId[2])].fields[Number(fieldId[3])];\r\n if (fieldId) {\r\n field.value = value;\r\n }\r\n }\r\n return newComponents;\r\n };\r\n\r\n // #region Review Information\r\n private reviewActivities = (fieldsGroup: IFieldsGroup): boolean => {\r\n const {\r\n application,\r\n components\r\n } = this.state;\r\n\r\n let isValid = true;\r\n\r\n if (components && components.expansionPanel.activityCount === undefined) {\r\n components.expansionPanel.activityCount = 0;\r\n }\r\n\r\n if (components && components.expansionPanel.activityCount !== undefined && components.expansionPanel.activityCount > -1) {\r\n let activityList: IApplicationActivity[] = [];\r\n const activity: IApplicationActivity = {};\r\n\r\n let activityTypefield: IFieldForm | undefined;\r\n if (activityTypefield = fieldsGroup.fields.find(x => x.data.id === 'activityTypeId')) {\r\n activity.activityType = activityTypefield.value;\r\n }\r\n let activityField: IFieldForm | undefined;\r\n if (activityField = fieldsGroup.fields.find(x => x.data.id === 'activityId')) {\r\n activity.activity = activityField.value;\r\n }\r\n let positionHeldField: IFieldForm | undefined;\r\n if (positionHeldField = fieldsGroup.fields.find(x => x.data.id === 'positionHeldId')) {\r\n activity.position = positionHeldField.value;\r\n }\r\n let numberOfHoursPerWeekField: IFieldForm | undefined;\r\n if (numberOfHoursPerWeekField = fieldsGroup.fields.find(x => x.data.id === 'numberOfHoursPerWeekId')) {\r\n activity.hoursPerWeek = numberOfHoursPerWeekField.value;\r\n }\r\n let numberOfWeeksPerYearField: IFieldForm | undefined;\r\n if (numberOfWeeksPerYearField = fieldsGroup.fields.find(x => x.data.id === 'numberOfWeeksPerYearId')) {\r\n activity.weeksPerYear = numberOfWeeksPerYearField.value;\r\n }\r\n let numberOfYearsField: IFieldForm | undefined;\r\n if (numberOfYearsField = fieldsGroup.fields.find(x => x.data.id === 'numberOfYearsId')) {\r\n activity.numberOfYears = numberOfYearsField.value;\r\n }\r\n let participated9Field: IFieldForm | undefined;\r\n if (participated9Field = fieldsGroup.fields.find(x => x.data.id === 'participated9Id')) {\r\n activity.participatedGrade09 = Boolean(participated9Field.value);\r\n }\r\n let participated10Field: IFieldForm | undefined;\r\n if (participated10Field = fieldsGroup.fields.find(x => x.data.id === 'participated10Id')) {\r\n activity.participatedGrade10 = Boolean(participated10Field.value);\r\n }\r\n let participated11Field: IFieldForm | undefined;\r\n if (participated11Field = fieldsGroup.fields.find(x => x.data.id === 'participated11Id')) {\r\n activity.participatedGrade11 = Boolean(participated11Field.value);\r\n }\r\n let participated12Field: IFieldForm | undefined;\r\n if (participated12Field = fieldsGroup.fields.find(x => x.data.id === 'participated12Id')) {\r\n activity.participatedGrade12 = Boolean(participated12Field.value);\r\n }\r\n let participatedPostSecondaryField: IFieldForm | undefined;\r\n if (participatedPostSecondaryField = fieldsGroup.fields.find(x => x.data.id === 'participatedPostSecondaryId')) {\r\n activity.participatedPostsecondary = Boolean(participatedPostSecondaryField.value);\r\n }\r\n\r\n // XNOR\r\n // If any required fields or none are filled that is allowed\r\n activity.activityType = activity.activityType || 0;\r\n activity.activity = activity.activity || 0;\r\n if (!(activity.activityType !== 0 && activity.activity !== 0) &&\r\n (activity.activityType !== 0 || activity.activity !== 0)) {\r\n return false;\r\n }\r\n\r\n activityList = this.setApplicationActivitiesValues(activity, activityList);\r\n\r\n let i: number = 0;\r\n do {\r\n let activityItem: IApplicationActivity = {};\r\n activityItem = this.setApplicationActivitiesAdditional(fieldsGroup, i, activityItem);\r\n\r\n // Duplicated\r\n if (activityList.find(x => x.activityType === activityItem.activityType &&\r\n x.activity === activityItem.activity)) {\r\n const fieldsById =\r\n fieldsGroup.fields.filter(x =>\r\n x.data.id.substr(0, 'activityErrosId'.length) === 'activityErrosId' &&\r\n x.data.section === i);\r\n fieldsById.forEach(field => {\r\n field.data.label = fieldsGroup.errorMessageDuplicate;\r\n field.data.error = true;\r\n });\r\n return false;\r\n }\r\n\r\n activityList = this.setApplicationActivitiesValues(activityItem, activityList);\r\n\r\n i++;\r\n } while (i < components.expansionPanel.activityCount);\r\n\r\n if (activityList.length > 0) {\r\n // Required fields should be filled\r\n activityList.forEach(activity => {\r\n if (activity.position || activity.hoursPerWeek ||\r\n activity.weeksPerYear || activity.numberOfYears ||\r\n activity.participatedGrade09 || activity.participatedGrade10 ||\r\n activity.participatedGrade11 || activity.participatedGrade12 ||\r\n activity.participatedPostsecondary) {\r\n if ((activity.activityType === null || activity.activityType === 0) &&\r\n (activity.activity === null || activity.activity === 0)) {\r\n isValid = false;\r\n }\r\n }\r\n });\r\n }\r\n // List is empty so no error should be show\r\n else {\r\n fieldsGroup.fields.forEach(field => {\r\n field.data.error = false;\r\n field.data.helperText = '';\r\n });\r\n isValid = true;\r\n }\r\n if (isValid) {\r\n application.activities = activityList;\r\n }\r\n\r\n this.setState({\r\n application\r\n });\r\n }\r\n return isValid;\r\n\r\n };\r\n\r\n private reviewAddress = (fieldsGroup: IFieldsGroup): boolean => {\r\n const {\r\n application,\r\n components\r\n } = this.state;\r\n\r\n if (components && components.expansionPanel.addressessCount === undefined) {\r\n components.expansionPanel.addressessCount = 0;\r\n }\r\n\r\n if (components && components.expansionPanel.addressessCount !== undefined && components.expansionPanel.addressessCount > -1) {\r\n const addressList: IApplicationAddress[] = [];\r\n let address: IApplicationAddress = { isPrimary: false };\r\n\r\n address = this.setApplicationAddress(fieldsGroup, address);\r\n address = this.setApplicationAddressValues(address);\r\n\r\n if (address.type !== 0 && address.line1 !== '' &&\r\n address.city !== '' && address.country !== 0) {\r\n address.isPrimary = true;\r\n addressList.push(address);\r\n }\r\n else if (address.line2 || address.line3 || address.line4 ||\r\n address.city || address.stateProvince || address.postalCode ||\r\n address.county) {\r\n addressList.push(address);\r\n }\r\n\r\n let i: number = 0;\r\n do {\r\n let address: IApplicationAddress = { isPrimary: false };\r\n address = this.setApplicationAddressAdditional(fieldsGroup, i, address);\r\n\r\n // Duplicated\r\n if (addressList.find(x => x.type === address.type)) {\r\n const fieldsById =\r\n fieldsGroup.fields.filter(x =>\r\n x.data.id.substr(0, 'addressErrorsId'.length) === 'addressErrorsId' &&\r\n x.data.section === i);\r\n fieldsById.forEach(field => {\r\n field.data.label = fieldsGroup.errorMessageDuplicate;\r\n field.data.error = true;\r\n });\r\n return false;\r\n }\r\n\r\n address = this.setApplicationAddressValues(address);\r\n\r\n if (address.type !== 0 && address.line1 !== '' &&\r\n address.city !== '' && address.country !== 0) {\r\n addressList.push(address);\r\n }\r\n else if (address.line2 !== '' || address.line3 !== '' || address.line4 !== '' ||\r\n address.city !== '' || address.stateProvince !== 0 || address.postalCode !== '' ||\r\n address.county !== 0) {\r\n addressList.push(address);\r\n }\r\n i++;\r\n } while (i < components.expansionPanel.addressessCount);\r\n\r\n application.addresses = addressList;\r\n\r\n this.setState({\r\n application\r\n });\r\n\r\n return true;\r\n }\r\n else {\r\n return true;\r\n }\r\n };\r\n\r\n private reviewEducation = (fieldsGroup: IFieldsGroup): boolean => {\r\n const {\r\n application,\r\n components\r\n } = this.state;\r\n\r\n let isValid: boolean = true;\r\n\r\n if (components && components.expansionPanel.educationCount === undefined) {\r\n components.expansionPanel.educationCount = 0;\r\n }\r\n\r\n if (components && components.expansionPanel.educationCount !== undefined && components.expansionPanel.educationCount > -1) {\r\n const educationList: IApplicationEducation[] = [];\r\n let education: IApplicationEducation = {\r\n enrollment: {},\r\n institution: {\r\n city: '',\r\n countryDesc: '',\r\n etsCode: '',\r\n ficeCode: '',\r\n id: 0,\r\n name: '',\r\n stateDesc: ''\r\n }\r\n };\r\n\r\n education = this.setApplicationEducation(fieldsGroup, education);\r\n education = this.setApplicationEducationValues(education);\r\n\r\n if (education.institution.city || education.enrollment.startDate || education.enrollment.endDate ||\r\n education.institution.etsCode || education.institution.name || education.institution.ficeCode) {\r\n educationList.push(education);\r\n }\r\n else if (education.enrollment &&\r\n education.enrollment.curriculumId && education.enrollment.curriculumId > 0 ||\r\n education.enrollment.honorsId && education.enrollment.honorsId > 0 ||\r\n education.enrollment.degreeId && education.enrollment.degreeId > 0 ||\r\n education.institution.id && education.institution.id > 0 ||\r\n education.institution.stateProvinceId && education.institution.stateProvinceId > 0 ||\r\n education.institution.countryId && education.institution.countryId > 0) {\r\n educationList.push(education);\r\n }\r\n\r\n // Dates\r\n if (education.enrollment.startDate && education.enrollment.endDate) {\r\n if (components && (education.enrollment.startDate || education.enrollment.endDate)) {\r\n if (moment(education.enrollment.startDate).format('YYYY-MM-DD') > moment(education.enrollment.endDate).format('YYYY-MM-DD')) {\r\n const fieldsById =\r\n fieldsGroup.fields.filter(x =>\r\n x.data.id === 'educationErrosId');\r\n fieldsById.forEach(field => {\r\n field.data.label = fieldsGroup.errorMessageNotValid;\r\n field.data.error = true;\r\n });\r\n return false;\r\n }\r\n else if (moment(education.enrollment.startDate).format('YYYY-MM-DD') <\r\n moment(education.enrollment.endDate).format('YYYY-MM-DD')) {\r\n const fieldsById =\r\n fieldsGroup.fields.filter(x =>\r\n x.data.id === 'educationErrosId');\r\n fieldsById.forEach(field => {\r\n field.data.label = '';\r\n field.data.error = false;\r\n });\r\n }\r\n else if (education.enrollment && education.enrollment.startDate && education.enrollment.endDate &&\r\n (education.enrollment.startDate < moment(components.dateTimeMin).format('YYYY-MM-DD') ||\r\n education.enrollment.endDate > moment(components.dateTimeMax).format('YYYY-MM-DD'))) {\r\n const fieldsById =\r\n fieldsGroup.fields.filter(x =>\r\n x.data.id === 'educationErrosId');\r\n fieldsById.forEach(field => {\r\n field.data.label = fieldsGroup.errorMessageRange\r\n + moment(components.dateTimeMin).format('YYYY') + '-' +\r\n + moment(components.dateTimeMax).format('YYYY');\r\n field.data.error = true;\r\n });\r\n return false;\r\n }\r\n else if (education.enrollment && education.enrollment.startDate && education.enrollment.endDate &&\r\n (education.enrollment.startDate < moment(components.dateTimeMin).format('YYYY-MM-DD') ||\r\n education.enrollment.endDate < moment(components.dateTimeMax).format('YYYY-MM-DD'))) {\r\n const fieldsById =\r\n fieldsGroup.fields.filter(x =>\r\n x.data.id === 'educationErrosId');\r\n fieldsById.forEach(field => {\r\n field.data.label = '';\r\n field.data.error = false;\r\n });\r\n }\r\n }\r\n }\r\n\r\n let i: number = 0;\r\n do {\r\n let education: IApplicationEducation = {\r\n enrollment: {},\r\n institution: {\r\n city: '',\r\n countryDesc: '',\r\n etsCode: '',\r\n ficeCode: '',\r\n id: 0,\r\n name: '',\r\n stateDesc: ''\r\n }\r\n };\r\n\r\n education = this.setApplicationEducationAdditional(fieldsGroup, i, education);\r\n education = this.setApplicationEducationValues(education);\r\n\r\n // Dates\r\n if (education.enrollment.startDate && education.enrollment.endDate) {\r\n if (components && (education.enrollment.startDate || education.enrollment.endDate)) {\r\n if (moment(education.enrollment.startDate).format('YYYY-MM-DD') >\r\n moment(education.enrollment.endDate).format('YYYY-MM-DD')) {\r\n const fieldsById =\r\n fieldsGroup.fields.filter(x =>\r\n x.data.id.substr(0, 'educationErrosId'.length) === 'educationErrosId' &&\r\n x.data.section === i);\r\n fieldsById.forEach(field => {\r\n field.data.label = fieldsGroup.errorMessageNotValid;\r\n field.data.error = true;\r\n });\r\n return false;\r\n }\r\n else if (moment(education.enrollment.startDate).format('YYYY-MM-DD') <\r\n moment(education.enrollment.endDate).format('YYYY-MM-DD')) {\r\n const fieldsById =\r\n fieldsGroup.fields.filter(x =>\r\n x.data.id.substr(0, 'educationErrosId'.length) === 'educationErrosId' &&\r\n x.data.section === i);\r\n fieldsById.forEach(field => {\r\n field.data.label = '';\r\n field.data.error = false;\r\n });\r\n }\r\n else if (education.enrollment && education.enrollment.startDate && education.enrollment.endDate &&\r\n (education.enrollment.startDate < moment(components.dateTimeMin).format('YYYY-MM-DD') ||\r\n education.enrollment.endDate > moment(components.dateTimeMax).format('YYYY-MM-DD'))) {\r\n const fieldsById =\r\n fieldsGroup.fields.filter(x =>\r\n x.data.id.substr(0, 'educationErrosId'.length) === 'educationErrosId' &&\r\n x.data.section === i);\r\n fieldsById.forEach(field => {\r\n field.data.label = fieldsGroup.errorMessageRange\r\n + moment(components.dateTimeMin).format('YYYY') + '-' +\r\n + moment(components.dateTimeMax).format('YYYY');\r\n field.data.error = true;\r\n });\r\n return false;\r\n }\r\n else if (education.enrollment && education.enrollment.startDate && education.enrollment.endDate &&\r\n (education.enrollment.startDate < moment(components.dateTimeMin).format('YYYY-MM-DD') ||\r\n education.enrollment.endDate < moment(components.dateTimeMax).format('YYYY-MM-DD'))) {\r\n const fieldsById =\r\n fieldsGroup.fields.filter(x =>\r\n x.data.id.substr(0, 'educationErrosId'.length) === 'educationErrosId' &&\r\n x.data.section === i);\r\n fieldsById.forEach(field => {\r\n field.data.label = '';\r\n field.data.error = false;\r\n });\r\n }\r\n }\r\n }\r\n // Duplicated\r\n if (education.enrollment && education.enrollment.degreeId && education.enrollment.curriculumId &&\r\n education.enrollment.honorsId &&\r\n (education.enrollment.degreeId > 0 && education.enrollment.curriculumId > 0 &&\r\n education.enrollment.honorsId > 0)) {\r\n if (educationList.find(x => x.enrollment.degreeId === education.enrollment.degreeId &&\r\n x.enrollment.curriculumId === education.enrollment.curriculumId &&\r\n x.enrollment.honorsId === education.enrollment.honorsId)) {\r\n const fieldsById =\r\n fieldsGroup.fields.filter(x =>\r\n x.data.id.substr(0, 'educationErrosId'.length) === 'educationErrosId' &&\r\n x.data.section === i);\r\n fieldsById.forEach(field => {\r\n field.data.label = fieldsGroup.errorMessageDuplicate;\r\n field.data.error = true;\r\n });\r\n return false;\r\n }\r\n }\r\n else {\r\n if (education.institution.etsCode) {\r\n if (educationList.find(x => x.institution.etsCode === education.institution.etsCode)) {\r\n const fieldsById =\r\n fieldsGroup.fields.filter(x =>\r\n x.data.id.substr(0, 'educationErrosId'.length) === 'educationErrosId');\r\n fieldsById.forEach(field => {\r\n field.data.label = fieldsGroup.errorMessageDuplicate;\r\n field.data.error = true;\r\n });\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n if (education.institution.city || education.enrollment.startDate || education.enrollment.endDate ||\r\n education.institution.etsCode || education.institution.name || education.institution.ficeCode) {\r\n educationList.push(education);\r\n }\r\n else if (education.enrollment &&\r\n education.enrollment.curriculumId && education.enrollment.curriculumId > 0 ||\r\n education.enrollment.honorsId && education.enrollment.honorsId > 0 ||\r\n education.enrollment.degreeId && education.enrollment.degreeId > 0 ||\r\n education.institution.id && education.institution.id > 0 ||\r\n education.institution.stateProvinceId && education.institution.stateProvinceId > 0 ||\r\n education.institution.countryId && education.institution.countryId > 0) {\r\n educationList.push(education);\r\n }\r\n i++;\r\n } while (i < components.expansionPanel.educationCount);\r\n\r\n // Education is required\r\n if (fieldsGroup.isRequired) {\r\n // List is no empty so no error should be show.\r\n if (educationList.length > 0) {\r\n isValid = true;\r\n const fieldsById =\r\n fieldsGroup.fields.filter(x =>\r\n x.data.id === 'educationErrosId');\r\n fieldsById.forEach(field => {\r\n field.data.label = '';\r\n field.data.error = false;\r\n });\r\n }\r\n // List is empty so error should be show.\r\n else {\r\n isValid = false;\r\n const fieldsById =\r\n fieldsGroup.fields.filter(x =>\r\n x.data.id === 'educationErrosId');\r\n fieldsById.forEach(field => {\r\n field.data.label = fieldsGroup.errorMessageRequired;\r\n field.data.error = true;\r\n });\r\n }\r\n }\r\n // Education is include\r\n else {\r\n // List is empty so no error should be show\r\n if (educationList.length === 0) {\r\n fieldsGroup.fields.forEach(field => {\r\n field.data.error = false;\r\n field.data.helperText = '';\r\n });\r\n isValid = true;\r\n }\r\n }\r\n if (isValid) {\r\n application.education = educationList;\r\n }\r\n this.setState({\r\n application: application\r\n });\r\n }\r\n return isValid;\r\n };\r\n\r\n private reviewEmergencyContacts = (fieldsGroup: IFieldsGroup): boolean => {\r\n const {\r\n application,\r\n components\r\n } = this.state;\r\n\r\n let isValid = true;\r\n\r\n if (components && components.expansionPanel.emergencyContactsCount === undefined) {\r\n components.expansionPanel.emergencyContactsCount = 0;\r\n }\r\n\r\n if (components && components.expansionPanel.emergencyContactsCount !== undefined && components.expansionPanel.emergencyContactsCount > -1) {\r\n const emergencyList: IApplicationEmergencyContact[] = [];\r\n\r\n const emergency: IApplicationEmergencyContact = { firstName: '', lastName: '', phoneNumber: '' };\r\n const firstNamefield = fieldsGroup.fields.findIndex(x => x.data.id === 'emergencyFirstNameId');\r\n if (firstNamefield > -1) {\r\n emergency.firstName = fieldsGroup.fields[firstNamefield].value;\r\n }\r\n const lastNameField = fieldsGroup.fields.findIndex(x => x.data.id === 'emergencyLastNameId');\r\n if (lastNameField > -1) {\r\n emergency.lastName = fieldsGroup.fields[lastNameField].value;\r\n }\r\n const phoneField = fieldsGroup.fields.findIndex(x => x.data.id === 'emergencyPhoneId');\r\n if (phoneField > -1) {\r\n emergency.phoneNumber = fieldsGroup.fields[phoneField].value;\r\n }\r\n const suffixField = fieldsGroup.fields.findIndex(x => x.data.id === 'emergencySuffixId');\r\n if (suffixField > -1) {\r\n emergency.suffixId = fieldsGroup.fields[suffixField].value;\r\n }\r\n const middleNameField = fieldsGroup.fields.findIndex(x => x.data.id === 'emergencyMiddleNameId');\r\n if (middleNameField > -1) {\r\n emergency.middleName = fieldsGroup.fields[middleNameField].value;\r\n }\r\n const lastNamePrefixField = fieldsGroup.fields.findIndex(x => x.data.id === 'emergencyLastNamePrefixId');\r\n if (lastNamePrefixField > -1) {\r\n emergency.lastNamePrefix = fieldsGroup.fields[lastNamePrefixField].value;\r\n }\r\n const relationshipField = fieldsGroup.fields.findIndex(x => x.data.id === 'emergencyRelationshipId');\r\n if (relationshipField > -1) {\r\n emergency.relationshipId = fieldsGroup.fields[relationshipField].value;\r\n }\r\n const prefix = fieldsGroup.fields.findIndex(x => x.data.id === 'emergencyPrefixId');\r\n if (prefix > -1) {\r\n emergency.prefixId = fieldsGroup.fields[prefix].value;\r\n }\r\n\r\n // XNOR\r\n // If any required fields or none are filled that is allowed\r\n emergency.firstName = emergency.firstName === null ? '' : emergency.firstName;\r\n emergency.lastName = emergency.lastName === null ? '' : emergency.lastName;\r\n emergency.phoneNumber = emergency.phoneNumber === null ? '' : emergency.phoneNumber;\r\n if (!(emergency.firstName !== '' && emergency.lastName !== '' && emergency.phoneNumber !== '') &&\r\n (emergency.firstName !== '' || emergency.lastName !== '' || emergency.phoneNumber !== '')) {\r\n return false;\r\n }\r\n\r\n if (emergency.firstName !== null && emergency.firstName !== '' &&\r\n emergency.lastName !== null && emergency.lastName !== '' &&\r\n emergency.phoneNumber !== null && emergency.phoneNumber !== '') {\r\n emergencyList.push(emergency);\r\n }\r\n else if (emergency.suffixId || emergency.middleName ||\r\n emergency.lastNamePrefix || emergency.relationshipId || emergency.prefixId) {\r\n emergencyList.push(emergency);\r\n }\r\n let i: number = 0;\r\n do {\r\n const emergency: IApplicationEmergencyContact = { firstName: '', lastName: '', phoneNumber: '' };\r\n\r\n const fieldsBySection = fieldsGroup.fields.filter(x => x.data.section === i);\r\n fieldsBySection.forEach(field => {\r\n if (field.data.id.substr(0, 'emergencyFirstNameId'.length) === 'emergencyFirstNameId') {\r\n emergency.firstName = field.value;\r\n }\r\n if (field.data.id.substr(0, 'emergencyLastNameId'.length) === 'emergencyLastNameId') {\r\n emergency.lastName = field.value;\r\n }\r\n if (field.data.id.substr(0, 'emergencyPhoneId'.length) === 'emergencyPhoneId') {\r\n emergency.phoneNumber = field.value;\r\n }\r\n if (field.data.id.substr(0, 'emergencySuffixId'.length) === 'emergencySuffixId') {\r\n emergency.suffixId = field.value;\r\n }\r\n if (field.data.id.substr(0, 'emergencyMiddleNameId'.length) === 'emergencyMiddleNameId') {\r\n emergency.middleName = field.value;\r\n }\r\n if (field.data.id.substr(0, 'emergencyLastNamePrefixId'.length) === 'emergencyLastNamePrefixId') {\r\n emergency.lastNamePrefix = field.value;\r\n }\r\n if (field.data.id.substr(0, 'emergencyRelationshipId'.length) === 'emergencyRelationshipId') {\r\n emergency.relationshipId = field.value;\r\n }\r\n if (field.data.id.substr(0, 'emergencyPrefixId'.length) === 'emergencyPrefixId') {\r\n emergency.prefixId = field.value;\r\n }\r\n });\r\n // Duplicated\r\n if (emergencyList.find(x => x.firstName === emergency.firstName &&\r\n x.lastName === emergency.lastName && x.relationshipId === emergency.relationshipId)) {\r\n const fieldsById =\r\n fieldsGroup.fields.filter(x =>\r\n x.data.id.substr(0, 'emergencyErrorsId'.length) === 'emergencyErrorsId' &&\r\n x.data.section === i);\r\n fieldsById.forEach(field => {\r\n field.data.label = fieldsGroup.errorMessageDuplicate;\r\n field.data.error = true;\r\n });\r\n return false;\r\n }\r\n if (emergency.firstName !== null && emergency.firstName !== '' &&\r\n emergency.lastName !== null && emergency.lastName !== '' &&\r\n emergency.phoneNumber !== null && emergency.phoneNumber !== '') {\r\n emergencyList.push(emergency);\r\n }\r\n else if (emergency.suffixId || emergency.middleName ||\r\n emergency.lastNamePrefix || emergency.relationshipId || emergency.prefixId) {\r\n emergencyList.push(emergency);\r\n }\r\n i++;\r\n } while (i < components.expansionPanel.emergencyContactsCount);\r\n // Emergency is required\r\n if (fieldsGroup.isRequired) {\r\n // List is no empty so no error should be show.\r\n if (emergencyList.length > 0) {\r\n isValid = true;\r\n const fieldsById =\r\n fieldsGroup.fields.filter(x =>\r\n x.data.id === 'emergencyErrorsId');\r\n fieldsById.forEach(field => {\r\n field.data.label = '';\r\n field.data.error = false;\r\n });\r\n }\r\n // List is empty so error should be show.\r\n else {\r\n isValid = false;\r\n const fieldsById =\r\n fieldsGroup.fields.filter(x =>\r\n x.data.id === 'emergencyErrorsId');\r\n fieldsById.forEach(field => {\r\n field.data.label = fieldsGroup.errorMessageRequired;\r\n field.data.error = true;\r\n });\r\n }\r\n }\r\n // Emergency is include\r\n else {\r\n // List is not empty\r\n if (emergencyList.length > 0) {\r\n // Required fields should be filled\r\n emergencyList.forEach(emergency => {\r\n if (emergency.suffixId || emergency.middleName ||\r\n emergency.lastNamePrefix || emergency.relationshipId || emergency.prefixId) {\r\n if ((emergency.firstName === null || emergency.firstName === '') &&\r\n (emergency.lastName === null || emergency.lastName === '') &&\r\n (emergency.phoneNumber === null || emergency.phoneNumber === '')) {\r\n isValid = false;\r\n }\r\n }\r\n });\r\n }\r\n // List is empty so no error should be show\r\n else {\r\n fieldsGroup.fields.forEach(field => {\r\n field.data.error = false;\r\n field.data.helperText = '';\r\n });\r\n isValid = true;\r\n }\r\n }\r\n if (isValid) {\r\n application.emergencyContacts = emergencyList;\r\n }\r\n this.setState({\r\n application: application\r\n });\r\n }\r\n return isValid;\r\n };\r\n\r\n private reviewEmployment = (fieldsGroup: IFieldsGroup): boolean => {\r\n const {\r\n application,\r\n components\r\n } = this.state;\r\n\r\n let isValid = true;\r\n\r\n if (components && components.expansionPanel.employeeCount === undefined) {\r\n components.expansionPanel.employeeCount = 0;\r\n }\r\n\r\n if (components && components.expansionPanel.employeeCount !== undefined && components.expansionPanel.employeeCount > -1) {\r\n const employmentList: IApplicationEmployment[] = [];\r\n if (components) {\r\n const employment: IApplicationEmployment = { name: '', positionId: 0, startDate: undefined, endDate: undefined };\r\n const employerNamefield = fieldsGroup.fields.findIndex(x => x.data.id === 'employerNameId');\r\n const employerPositionField = fieldsGroup.fields.findIndex(x => x.data.id === 'employerPositionId');\r\n if (employerNamefield > -1 && employerPositionField > -1) {\r\n employment.name = fieldsGroup.fields[employerNamefield].value;\r\n employment.positionId = fieldsGroup.fields[employerPositionField].value;\r\n\r\n employment.name = employment.name === null ? '' : employment.name;\r\n employment.positionId = employment.positionId === null ? 0 : employment.positionId;\r\n // If name has value position is not required\r\n if (employment.name !== '') {\r\n fieldsGroup.fields[employerPositionField].data.error = false;\r\n fieldsGroup.fields[employerPositionField].data.helperText = '';\r\n }\r\n // If position has value name is not required\r\n if (employment.positionId > 0) {\r\n fieldsGroup.fields[employerNamefield].data.error = false;\r\n fieldsGroup.fields[employerNamefield].data.helperText = '';\r\n }\r\n }\r\n const employerStartDateField = fieldsGroup.fields.findIndex(x => x.data.id === 'employerStartDateId');\r\n if (employerStartDateField > -1) {\r\n employment.startDate = fieldsGroup.fields[employerStartDateField].value;\r\n }\r\n const employerEndDateField = fieldsGroup.fields.findIndex(x => x.data.id === 'employerEndDateId');\r\n if (employerEndDateField > -1) {\r\n employment.endDate = fieldsGroup.fields[employerEndDateField].value;\r\n }\r\n // When group is required and name and position is empty, required error is show.\r\n if (fieldsGroup.isRequired && employment.name === '' &&\r\n (employment.positionId === 0 || employment.positionId === undefined)) {\r\n isValid = false;\r\n const fieldsById =\r\n fieldsGroup.fields.filter(x =>\r\n x.data.id.substr(0, 'employmentErrosId'.length) === 'employmentErrosId');\r\n fieldsById.forEach(field => {\r\n field.data.label = fieldsGroup.errorMessageRequired;\r\n });\r\n return false;\r\n }\r\n if (employment.name !== '' || employment.positionId > 0) {\r\n employmentList.push(employment);\r\n }\r\n if (employment.startDate || employment.endDate) {\r\n if (employment.startDate && employment.endDate) {\r\n // Dates\r\n if (moment(employment.startDate).format('YYYY-MM-DD') > moment(employment.endDate).format('YYYY-MM-DD')) {\r\n isValid = false;\r\n const fieldsById =\r\n fieldsGroup.fields.filter(x =>\r\n x.data.id.substr(0, 'employmentErrosId'.length) === 'employmentErrosId');\r\n fieldsById.forEach(field => {\r\n field.data.label = fieldsGroup.errorMessageNotValid;\r\n });\r\n }\r\n else if (employment.startDate < moment(components.dateTimeMin).format('YYYY-MM-DD') ||\r\n employment.endDate > moment(components.dateTimeMax).format('YYYY-MM-DD')) {\r\n isValid = false;\r\n const fieldsById =\r\n fieldsGroup.fields.filter(x =>\r\n x.data.id.substr(0, 'employmentErrosId'.length) === 'employmentErrosId');\r\n fieldsById.forEach(field => {\r\n field.data.label = fieldsGroup.errorMessageRange\r\n + moment(components.dateTimeMin).format('YYYY') + '-' +\r\n + moment(components.dateTimeMax).format('YYYY');\r\n });\r\n }\r\n }\r\n if (employment.name === '' &&\r\n (employment.positionId === 0 || employment.positionId === undefined)) {\r\n isValid = false;\r\n const fieldsById =\r\n fieldsGroup.fields.filter(x =>\r\n x.data.id.substr(0, 'employmentErrosId'.length) === 'employmentErrosId');\r\n fieldsById.forEach(field => {\r\n field.data.label = fieldsGroup.errorMessageRequired;\r\n });\r\n return false;\r\n }\r\n }\r\n let i: number = 0;\r\n do {\r\n const employment: IApplicationEmployment = { name: '', positionId: 0, startDate: undefined, endDate: undefined };\r\n\r\n const fieldsBySection = fieldsGroup.fields.filter(x => x.data.section === i);\r\n fieldsBySection.forEach(field => {\r\n if (field.data.id.substr(0, 'employerNameId'.length) === 'employerNameId') {\r\n employment.name = field.value === null ? null : field.value;\r\n }\r\n if (field.data.id.substr(0, 'employerPositionId'.length) === 'employerPositionId') {\r\n employment.positionId = field.value === '' ? 0 : field.value;\r\n }\r\n if (field.data.id.substr(0, 'employerStartDateId'.length) === 'employerStartDateId') {\r\n employment.startDate = field.value === '' ? null : field.value;\r\n }\r\n if (field.data.id.substr(0, 'employerEndDateId'.length) === 'employerEndDateId') {\r\n employment.endDate = field.value === '' ? null : field.value;\r\n }\r\n });\r\n fieldsBySection.forEach(field => {\r\n if (field.data.id.substr(0, 'employerNameId'.length) === 'employerNameId' &&\r\n employment.positionId > 0) {\r\n field.data.error = false;\r\n field.data.helperText = '';\r\n }\r\n if (field.data.id.substr(0, 'employerPositionId'.length) === 'employerPositionId' &&\r\n employment.name !== '') {\r\n field.data.error = false;\r\n field.data.helperText = '';\r\n }\r\n });\r\n // Duplicated\r\n if (employmentList.find(x => x.name === employment.name &&\r\n x.positionId === employment.positionId &&\r\n x.startDate === employment.startDate &&\r\n x.endDate === employment.endDate)) {\r\n isValid = false;\r\n const fieldsById =\r\n fieldsGroup.fields.filter(x =>\r\n x.data.id.substr(0, 'employmentErrosId'.length) === 'employmentErrosId');\r\n fieldsById.forEach(field => {\r\n field.data.label = fieldsGroup.errorMessageDuplicate;\r\n });\r\n return false;\r\n }\r\n // If start date or end date is entered Position or Name should have a value\r\n if (employment.startDate || employment.endDate) {\r\n if (employment.name === '' &&\r\n (employment.positionId === 0 || employment.positionId === undefined)) {\r\n isValid = false;\r\n const fieldsById =\r\n fieldsGroup.fields.filter(x =>\r\n x.data.id.substr(0, 'employmentErrosId'.length) === 'employmentErrosId');\r\n fieldsById.forEach(field => {\r\n field.data.label = fieldsGroup.errorMessageRequired;\r\n });\r\n return false;\r\n }\r\n if (employment.startDate && employment.endDate) {\r\n // Dates validations\r\n if (moment(employment.startDate).format('YYYY-MM-DD') > moment(employment.endDate).format('YYYY-MM-DD')) {\r\n isValid = false;\r\n const fieldsById =\r\n fieldsGroup.fields.filter(x =>\r\n x.data.id.substr(0, 'employmentErrosId'.length) === 'employmentErrosId');\r\n fieldsById.forEach(field => {\r\n field.data.label = fieldsGroup.errorMessageNotValid;\r\n });\r\n }\r\n else if (employment.startDate < moment(components.dateTimeMin).format('YYYY-MM-DD') ||\r\n employment.endDate > moment(components.dateTimeMax).format('YYYY-MM-DD')) {\r\n isValid = false;\r\n const fieldsById =\r\n fieldsGroup.fields.filter(x =>\r\n x.data.id.substr(0, 'employmentErrosId'.length) === 'employmentErrosId');\r\n fieldsById.forEach(field => {\r\n field.data.label = fieldsGroup.errorMessageRange\r\n + moment(components.dateTimeMin).format('YYYY') + '-' +\r\n + moment(components.dateTimeMax).format('YYYY');\r\n });\r\n }\r\n }\r\n }\r\n if (employment.name !== '' || employment.positionId > 0) {\r\n employmentList.push(employment);\r\n }\r\n i++;\r\n } while (i < components.expansionPanel.employeeCount);\r\n // Employment is required\r\n if (fieldsGroup.isRequired) {\r\n // List is empty so error should be show.\r\n if (employmentList.length === 0) {\r\n isValid = false;\r\n const fieldsById =\r\n fieldsGroup.fields.filter(x =>\r\n x.data.id.substr(0, 'employmentErrosId'.length) === 'employmentErrosId');\r\n fieldsById.forEach(field => {\r\n field.data.label = fieldsGroup.errorMessageRequired;\r\n });\r\n }\r\n }\r\n // Employment is include\r\n else {\r\n // List is not empty\r\n if (employmentList.length > 0) {\r\n // Required fields should be filled\r\n employmentList.forEach(employment => {\r\n if (employment.startDate || employment.endDate) {\r\n if ((employment.name === null || employment.name === '') &&\r\n employment.positionId === 0) {\r\n isValid = false;\r\n }\r\n }\r\n });\r\n }\r\n else {\r\n fieldsGroup.fields.forEach(field => {\r\n field.data.error = false;\r\n field.data.helperText = '';\r\n });\r\n isValid = true;\r\n }\r\n }\r\n if (isValid) {\r\n application.employments = employmentList;\r\n }\r\n this.setState({\r\n application: application\r\n });\r\n }\r\n }\r\n return isValid;\r\n };\r\n\r\n private reviewIpeds = (fieldsGroup: IFieldsGroup): boolean => {\r\n const {\r\n application\r\n } = this.state;\r\n\r\n let isValid = true;\r\n const hispanicAnswer: string = fieldsGroup.fields[2].value;\r\n\r\n if (hispanicAnswer) {\r\n // If question is responded with NO, user must select at least one subrace\r\n if (hispanicAnswer === '0') {\r\n if (application.ipeds) {\r\n const subRaces: IApplicationIpeds[] =\r\n application.ipeds.filter(x => x.ipedsFederalCategoryId !== 1);\r\n if (subRaces.length === 0) {\r\n isValid = false;\r\n const textErrorIndex: number = fieldsGroup.fields.findIndex(x => x.data.id === 'ipedsErrorsId');\r\n fieldsGroup.fields[textErrorIndex].data.label =\r\n fieldsGroup.errorMessageRequired;\r\n }\r\n }\r\n else {\r\n isValid = false;\r\n const textErrorIndex: number = fieldsGroup.fields.findIndex(x => x.data.id === 'ipedsErrorsId');\r\n fieldsGroup.fields[textErrorIndex].data.label =\r\n fieldsGroup.errorMessageRequired;\r\n }\r\n }\r\n }\r\n else {\r\n // If question was not answered and some subraces were selected, user must answer question\r\n if (application.ipeds && application.ipeds.length > 0) {\r\n isValid = false;\r\n const textErrorIndex: number = fieldsGroup.fields.findIndex(x => x.data.id === 'ipedsErrorsId');\r\n fieldsGroup.fields[textErrorIndex].data.label =\r\n fieldsGroup.errorMessageNotValid;\r\n }\r\n }\r\n // Save ipeds if them were saved\r\n application.ipeds = undefined;\r\n this.setIpedsValuesCheckList(fieldsGroup);\r\n this.setIpedsValuesNestedCheckList(fieldsGroup);\r\n\r\n return isValid;\r\n };\r\n\r\n private reviewPhoneGroup = (fieldsGroup: IFieldsGroup): boolean => {\r\n const {\r\n application,\r\n components\r\n } = this.state;\r\n\r\n if (components && components.expansionPanel.phoneCount === undefined) {\r\n components.expansionPanel.phoneCount = 0;\r\n }\r\n\r\n if (components && components.expansionPanel.phoneCount !== undefined && components.expansionPanel.phoneCount > -1) {\r\n const phoneList: IApplicationPhoneList[] = [];\r\n\r\n const phone: IApplicationPhoneList = { type: '', countryId: 0, number: '', isPrimary: false };\r\n const phoneTypeField = fieldsGroup.fields.findIndex(x => x.data.id === 'phoneTypeId');\r\n if (phoneTypeField > -1) {\r\n phone.type = fieldsGroup.fields[phoneTypeField].value;\r\n }\r\n const phoneCountryField = fieldsGroup.fields.findIndex(x => x.data.id === 'phoneCountryId');\r\n if (phoneCountryField > -1) {\r\n phone.countryId = fieldsGroup.fields[phoneCountryField].value;\r\n }\r\n const phoneNumberField = fieldsGroup.fields.findIndex(x => x.data.id === 'phoneNumberId');\r\n if (phoneNumberField > -1) {\r\n phone.number = fieldsGroup.fields[phoneNumberField].value;\r\n }\r\n const primaryPhoneField = fieldsGroup.fields.findIndex(x => x.data.id === 'primaryPhoneId');\r\n if (primaryPhoneField > -1) {\r\n phone.isPrimary = fieldsGroup.fields[primaryPhoneField].value === '1' ? true : false;\r\n }\r\n\r\n // Set values\r\n phone.type = phone.type === null ? '' : phone.type;\r\n phone.countryId = phone.countryId === 0 ? 0 : phone.countryId;\r\n phone.number = phone.number === null ? '' : phone.number;\r\n phone.isPrimary = phone.isPrimary === null ? false : phone.isPrimary;\r\n\r\n // Add phone to list\r\n if (phone.type !== '' && phone.countryId !== 0 && phone.number !== '') {\r\n phoneList.push(phone);\r\n }\r\n\r\n let i: number = 0;\r\n do {\r\n const phoneItem: IApplicationPhoneList = { type: '', countryId: 0, number: '', isPrimary: false };\r\n\r\n const fieldsBySection = fieldsGroup.fields.filter(x => x.data.section === i);\r\n fieldsBySection.forEach(field => {\r\n if (field.data.id.substr(0, 'phoneTypeId'.length) === 'phoneTypeId') {\r\n phoneItem.type = field.value;\r\n }\r\n if (field.data.id.substr(0, 'phoneCountryId'.length) === 'phoneCountryId') {\r\n phoneItem.countryId = field.value;\r\n }\r\n if (field.data.id.substr(0, 'phoneNumberId'.length) === 'phoneNumberId') {\r\n phoneItem.number = field.value;\r\n }\r\n if (field.data.id.substr(0, 'primaryPhoneId'.length) === 'primaryPhoneId') {\r\n phoneItem.isPrimary = field.value === '1' ? true : false;\r\n }\r\n });\r\n // Duplicated\r\n if (phoneList.find(x => x.type === phoneItem.type &&\r\n x.countryId === phoneItem.countryId && x.number === phoneItem.number)) {\r\n const fieldsById =\r\n fieldsGroup.fields.filter(x =>\r\n x.data.id.substr(0, 'phoneErrorsId'.length) === 'phoneErrorsId');\r\n fieldsById.forEach(field => {\r\n field.data.label = fieldsGroup.errorMessageDuplicate;\r\n });\r\n return false;\r\n }\r\n // Set values\r\n phoneItem.type = phoneItem.type === null ? '' : phoneItem.type;\r\n phoneItem.countryId = phoneItem.countryId === 0 ? 0 : phoneItem.countryId;\r\n phoneItem.number = phoneItem.number === null ? '' : phoneItem.number;\r\n phoneItem.isPrimary = phoneItem.isPrimary === null ? false : phoneItem.isPrimary;\r\n\r\n // Add phone to list\r\n if (phoneItem.type !== '' && phoneItem.countryId !== 0 && phoneItem.number !== '') {\r\n phoneList.push(phoneItem);\r\n }\r\n i++;\r\n } while (i < components.expansionPanel.phoneCount);\r\n\r\n application.phones = phoneList;\r\n\r\n this.setState({\r\n application\r\n });\r\n\r\n return true;\r\n }\r\n else {\r\n return true;\r\n }\r\n };\r\n\r\n private reviewPrograms = (fieldsGroup: IFieldsGroup): boolean => {\r\n const {\r\n application,\r\n components\r\n } = this.state;\r\n\r\n let isValid = true;\r\n\r\n if (components && components.expansionPanel.programsCount === undefined) {\r\n components.expansionPanel.programsCount = 0;\r\n }\r\n\r\n if (components && components.expansionPanel.programsCount !== undefined && components.expansionPanel.programsCount > -1) {\r\n const programList: IApplicationProgram[] = [];\r\n const program: IApplicationProgram = { programId: 0 };\r\n if (fieldsGroup && fieldsGroup.fields && fieldsGroup.fields.length > 0) {\r\n let exist: boolean = false;\r\n const field = fieldsGroup.fields.find(x => x.data.id === 'programOfStudydId');\r\n if (field && field.data && field.data.options && field.data.options.length > 0) {\r\n field.data.options.forEach(option => {\r\n if (Number(option.value) === Number(field.value)) {\r\n exist = true;\r\n }\r\n });\r\n if (exist) {\r\n program.programId = field.value;\r\n }\r\n else {\r\n isValid = false;\r\n }\r\n }\r\n }\r\n if (isValid) {\r\n const commintmentField = fieldsGroup.fields.findIndex(x => x.data.id === 'commitmentId');\r\n if (commintmentField > -1) {\r\n program.commitmentId = fieldsGroup.fields[commintmentField].value;\r\n }\r\n if (program.programId > 0) {\r\n programList.push(program);\r\n }\r\n let i: number = 0;\r\n do {\r\n const program: IApplicationProgram = { programId: 0 };\r\n\r\n const fieldsBySection = fieldsGroup.fields.filter(x => x.data.section === i);\r\n fieldsBySection.forEach(field => {\r\n if (field.data.id.substr(0, 'programOfStudydId'.length) === 'programOfStudydId') {\r\n program.programId = field.value;\r\n }\r\n if (field.data.id.substr(0, 'commitmentId'.length) === 'commitmentId') {\r\n program.commitmentId = field.value;\r\n }\r\n });\r\n if (programList.find(x => x.programId === program.programId)) {\r\n isValid = false;\r\n const textErrorIndex: number = fieldsGroup.fields.findIndex(x => x.data.id === 'programOfStudydErrorsId');\r\n fieldsGroup.fields[textErrorIndex].data.label =\r\n fieldsGroup.errorMessageDuplicate;\r\n }\r\n if (programList.find(x => x.programId ===\r\n program.programId && x.commitmentId === program.commitmentId)) {\r\n isValid = false;\r\n const textErrorIndex: number = fieldsGroup.fields.findIndex(x => x.data.id === 'programOfStudydErrorsId');\r\n fieldsGroup.fields[textErrorIndex].data.label =\r\n fieldsGroup.errorMessageRequired;\r\n }\r\n else if (program.programId > 0) {\r\n programList.push(program);\r\n }\r\n i++;\r\n } while (i < components.expansionPanel.programsCount);\r\n\r\n if (isValid) {\r\n application.programs = programList;\r\n }\r\n\r\n this.setState({\r\n application\r\n });\r\n }\r\n }\r\n return isValid;\r\n };\r\n\r\n private reviewRelatives = (fieldsGroup: IFieldsGroup): boolean => {\r\n const {\r\n application,\r\n components\r\n } = this.state;\r\n\r\n let isValid: boolean = true;\r\n\r\n if (components && components.expansionPanel.relativesCount === undefined) {\r\n components.expansionPanel.relativesCount = 0;\r\n }\r\n\r\n if (components && components.expansionPanel.relativesCount !== undefined && components.expansionPanel.relativesCount > -1) {\r\n const relativeList: IApplicationRelative[] = [];\r\n let relative: IApplicationRelative = {\r\n attendedInstitution: false,\r\n relationFirstName: '',\r\n relationLastName: '',\r\n relationType: 0\r\n };\r\n relative = this.setApplicationRelative(fieldsGroup, relative);\r\n relative = this.setApplicationRelativeValues(relative);\r\n\r\n if (relative.relationFirstName || relative.relationLastName || relative.relationType > 0 ||\r\n relative.attendedInstitution) {\r\n relativeList.push(relative);\r\n }\r\n else if (relative.relationPrefix || relative.relationSuffix || relative.relationMiddleName ||\r\n relative.relationLastNamePrefix) {\r\n relativeList.push(relative);\r\n }\r\n\r\n let i: number = 0;\r\n do {\r\n let relative: IApplicationRelative = {\r\n attendedInstitution: false,\r\n relationFirstName: '',\r\n relationLastName: '',\r\n relationType: 0\r\n };\r\n\r\n relative = this.setApplicationRelativeAdditional(fieldsGroup, i, relative);\r\n relative = this.setApplicationRelativeValues(relative);\r\n\r\n // Duplicated\r\n if (relative.relationFirstName && relative.relationLastName && relative.relationType) {\r\n if (relativeList.find(x => x.relationFirstName === relative.relationFirstName &&\r\n x.relationLastName === relative.relationLastName &&\r\n x.relationType === relative.relationType)) {\r\n const fieldsById =\r\n fieldsGroup.fields.filter(x =>\r\n x.data.id.substr(0, 'relativesErrosId'.length) === 'relativesErrosId' &&\r\n x.data.section === i);\r\n fieldsById.forEach(field => {\r\n field.data.label = fieldsGroup.errorMessageDuplicate;\r\n field.data.error = true;\r\n });\r\n return false;\r\n }\r\n }\r\n if (relative.relationFirstName || relative.relationLastName || relative.relationType > 0 ||\r\n relative.attendedInstitution) {\r\n relativeList.push(relative);\r\n }\r\n else if (relative.relationPrefix || relative.relationSuffix || relative.relationMiddleName ||\r\n relative.relationLastNamePrefix) {\r\n relativeList.push(relative);\r\n }\r\n i++;\r\n } while (i < components.expansionPanel.relativesCount);\r\n\r\n // Relatives is required\r\n if (fieldsGroup.isRequired) {\r\n // List is no empty so no error should be show.\r\n if (relativeList.length > 0) {\r\n const fieldsById =\r\n fieldsGroup.fields.filter(x =>\r\n x.data.id === 'relativesErrosId');\r\n fieldsById.forEach(field => {\r\n field.data.error = false;\r\n field.data.label = '';\r\n });\r\n isValid = true;\r\n }\r\n // List is empty so error should be show.\r\n if (relativeList.length === 0) {\r\n isValid = false;\r\n const fieldsById =\r\n fieldsGroup.fields.filter(x =>\r\n x.data.id === 'relativesErrosId');\r\n fieldsById.forEach(field => {\r\n field.data.error = true;\r\n field.data.label = fieldsGroup.errorMessageRequired;\r\n });\r\n }\r\n }\r\n else {\r\n if (relativeList.length === 0) {\r\n fieldsGroup.fields.forEach(field => {\r\n field.data.error = false;\r\n field.data.helperText = '';\r\n });\r\n isValid = true;\r\n }\r\n }\r\n if (isValid) {\r\n application.relatives = relativeList;\r\n\r\n this.setState({\r\n application: application\r\n });\r\n }\r\n }\r\n return isValid;\r\n };\r\n\r\n private reviewResidency = (fieldsGroup: IFieldsGroup): boolean => {\r\n const {\r\n application\r\n } = this.state;\r\n\r\n let isValid: boolean = true;\r\n const residencyList: IApplicationResidency[] = [];\r\n let residency: IApplicationResidency = {};\r\n residency = this.setApplicationResidency(fieldsGroup, residency);\r\n\r\n if (residency.residencyPreference !== null ||\r\n residency.foodPlanInterest !== null ||\r\n residency.dormPlanInterest !== null ||\r\n residency.dormCampus !== null ||\r\n residency.dormBuilding !== null) {\r\n residencyList.push(residency);\r\n }\r\n\r\n // Residency is required\r\n if (fieldsGroup.isRequired) {\r\n // List is no empty so no error should be show.\r\n if (residencyList.length > 0) {\r\n const fieldsById =\r\n fieldsGroup.fields.filter(x =>\r\n x.data.id === 'relativesErrosId');\r\n fieldsById.forEach(field => {\r\n field.data.error = false;\r\n field.data.label = '';\r\n });\r\n isValid = true;\r\n }\r\n // List is empty so error should be show.\r\n if (residencyList.length === 0) {\r\n isValid = false;\r\n const fieldsById =\r\n fieldsGroup.fields.filter(x =>\r\n x.data.id === 'residencyErrosId');\r\n fieldsById.forEach(field => {\r\n field.data.error = true;\r\n field.data.label = fieldsGroup.errorMessageRequired;\r\n });\r\n }\r\n }\r\n // Residency is include\r\n else {\r\n // List is empty so no error should be show\r\n if (residencyList.length === 0) {\r\n fieldsGroup.fields.forEach(field => {\r\n field.data.error = false;\r\n field.data.helperText = '';\r\n });\r\n isValid = true;\r\n }\r\n }\r\n if (isValid) {\r\n if (residencyList.length > 0) {\r\n if (residencyList[0].residencyPreference && residencyList[0].residencyPreference > 0) {\r\n application.residencyPreference = residencyList[0].residencyPreference;\r\n }\r\n if (residencyList[0].foodPlanInterest) {\r\n application.foodPlanInterest = residencyList[0].foodPlanInterest;\r\n }\r\n if (residencyList[0].dormPlanInterest) {\r\n application.dormPlanInterest = residencyList[0].dormPlanInterest;\r\n }\r\n if (residencyList[0].dormCampus && residencyList[0].dormCampus > 0) {\r\n application.dormCampus = residencyList[0].dormCampus;\r\n }\r\n if (residencyList[0].dormBuilding && residencyList[0].dormBuilding > 0) {\r\n application.dormBuilding = residencyList[0].dormBuilding;\r\n }\r\n }\r\n this.setState({\r\n application: application\r\n });\r\n }\r\n return isValid;\r\n };\r\n\r\n private reviewTestScoreCompleteness = (groupedControls: any): boolean => {\r\n let validCompleteness: boolean = true;\r\n // this is meant to iterate over all controls grouped by section\r\n for (const keyIndex of Object.keys(groupedControls)) {\r\n const scoreA: IFieldForm[] = groupedControls[Number(keyIndex)];\r\n\r\n const fieldsPopulated: boolean = scoreA.every(f => f.value && f.value !== '');\r\n const fieldsEmpty: boolean = scoreA.every(f => !f.value || f.value === '');\r\n\r\n if (!fieldsPopulated && !fieldsEmpty) {\r\n scoreA.forEach(field => {\r\n if (field.value && field.value !== '') {\r\n field.data.error = false;\r\n } else {\r\n field.data.error = true;\r\n validCompleteness = false;\r\n }\r\n });\r\n }\r\n }\r\n return validCompleteness;\r\n };\r\n\r\n private reviewTestScores = (groupedControls: any): boolean => {\r\n // this is meant to iterate over all controls grouped by section\r\n for (let i: number = 0; i < Object.keys(groupedControls).length; i++) {\r\n const scoreA: any = groupedControls[Number(Object.keys(groupedControls)[i])];\r\n for (let j: number = 0; j < Object.keys(groupedControls).length; j++) {\r\n if (i !== j) {\r\n let identical: boolean = true;\r\n const scoreB: any = groupedControls[Number(Object.keys(groupedControls)[j])];\r\n for (let k: number = 0; k < scoreA.length; k++) {\r\n const fieldA: IFieldForm = scoreA[k];\r\n const fieldB: IFieldForm = scoreB[k];\r\n if (fieldA.data.id !== fieldB.data.id) {\r\n if ((fieldA.value || '') !== (fieldB.value || '')) {\r\n identical = false;\r\n }\r\n }\r\n }\r\n if (identical) {\r\n return false;\r\n }\r\n }\r\n }\r\n }\r\n return true;\r\n };\r\n\r\n private reviewUserDefined = (fieldsGroup: IFieldsGroup): boolean => {\r\n const {\r\n application\r\n } = this.state;\r\n\r\n let isValid: boolean = true;\r\n fieldsGroup.fields.forEach(field => {\r\n if (field.isUserDefined) {\r\n // validate length of field\r\n const userDefined: IApplicationUserDefined = {\r\n columnLabel: '',\r\n columnName: '',\r\n columnType: 0,\r\n columnValue: '',\r\n isUploading: false\r\n };\r\n if (field.value) {\r\n if (field.maxLength && field.value.toString().length <= field.maxLength) {\r\n field.data.error = false;\r\n field.data.helperText = '';\r\n isValid = true;\r\n\r\n userDefined.columnLabel = field.data.label ? field.data.label : '';\r\n userDefined.columnName = field.data.id;\r\n if (field.dataType === 'nvarchar') {\r\n userDefined.columnType = 1;\r\n }\r\n if (field.dataType === 'date') {\r\n userDefined.columnType = 2;\r\n }\r\n if (field.dataType === 'time') {\r\n userDefined.columnType = 3;\r\n }\r\n userDefined.columnValue = field.value;\r\n userDefined.isUploading = field.isUploading ? field.isUploading : false;\r\n let userDefinedIndex: number = -1;\r\n userDefinedIndex =\r\n application.userDefined.findIndex(x => x.columnName === userDefined.columnName);\r\n if (userDefinedIndex > -1) {\r\n application.userDefined.splice(userDefinedIndex, 1);\r\n }\r\n application.userDefined.push(userDefined);\r\n }\r\n else {\r\n field.data.error = true;\r\n field.data.helperText = field.data.errorMessageRange;\r\n isValid = false;\r\n }\r\n }\r\n else {\r\n if (field.isRequired) {\r\n field.data.error = true;\r\n field.data.helperText = field.data.errorMessageRequired;\r\n isValid = false;\r\n }\r\n }\r\n }\r\n });\r\n return isValid;\r\n };\r\n\r\n private reviewCampus = (fieldsGroup: IFieldsGroup): void => {\r\n const {\r\n application\r\n } = this.state;\r\n\r\n const campusIndex = fieldsGroup.fields.findIndex(x => x.data.id === 'campusId');\r\n if (fieldsGroup.fields[campusIndex].componentType === 'CheckboxList') {\r\n application.campuses = undefined;\r\n if (campusIndex > -1) {\r\n const campusList = fieldsGroup.fields[campusIndex].value;\r\n if (campusList) {\r\n const array = Object.values(campusList.split(','));\r\n array.forEach(campus => {\r\n if (application.campuses) {\r\n let findCampus: number = -1;\r\n findCampus = application.campuses.findIndex(x => x === Number(campus));\r\n if (findCampus === -1) {\r\n application.campuses.push(\r\n Number(campus)\r\n );\r\n }\r\n }\r\n else {\r\n application.campuses = [\r\n Number(campus)\r\n ];\r\n }\r\n });\r\n }\r\n }\r\n }\r\n };\r\n\r\n private reviewAcademicInterest = (fieldsGroup: IFieldsGroup): void => {\r\n const {\r\n application\r\n } = this.state;\r\n\r\n const interestIndex = fieldsGroup.fields.findIndex(x => x.data.id === 'interestId');\r\n application.academicInterests = undefined;\r\n if (interestIndex > -1) {\r\n const interestList = fieldsGroup.fields[interestIndex].value;\r\n if (interestList) {\r\n const array = Object.values(interestList.split(','));\r\n array.forEach(interest => {\r\n if (application.academicInterests) {\r\n let findInterest: number = -1;\r\n findInterest = application.academicInterests.findIndex(x => x === Number(interest));\r\n if (findInterest === -1) {\r\n application.academicInterests.push(\r\n Number(interest)\r\n );\r\n }\r\n }\r\n else {\r\n application.academicInterests = [\r\n Number(interest)\r\n ];\r\n }\r\n });\r\n }\r\n }\r\n };\r\n // #endregion Review Information\r\n\r\n // #region Set Values for Collections\r\n private setApplicationActivitiesAdditional = (fieldsGroup: any, sectionNumber: number, activityItem: IApplicationActivity):\r\n IApplicationActivity => {\r\n const fieldsBySection = fieldsGroup.fields.filter(x => x.data.section === sectionNumber);\r\n fieldsBySection.forEach(field => {\r\n if (field.data.id.substr(0, 'activityTypeId'.length) === 'activityTypeId') {\r\n activityItem.activityType = field.value;\r\n }\r\n if (field.data.id.substr(0, 'activityId'.length) === 'activityId') {\r\n activityItem.activity = field.value;\r\n }\r\n if (field.data.id.substr(0, 'positionHeldId'.length) === 'positionHeldId') {\r\n activityItem.position = field.value;\r\n }\r\n if (field.data.id.substr(0, 'numberOfHoursPerWeekId'.length) === 'numberOfHoursPerWeekId') {\r\n activityItem.hoursPerWeek = field.value;\r\n }\r\n if (field.data.id.substr(0, 'numberOfWeeksPerYearId'.length) === 'numberOfWeeksPerYearId') {\r\n activityItem.weeksPerYear = field.value;\r\n }\r\n if (field.data.id.substr(0, 'numberOfYearsId'.length) === 'numberOfYearsId') {\r\n activityItem.numberOfYears = field.value;\r\n }\r\n if (field.data.id.substr(0, 'participated9Id'.length) === 'participated9Id') {\r\n activityItem.participatedGrade09 = Boolean(field.value);\r\n }\r\n if (field.data.id.substr(0, 'participated10Id'.length) === 'participated10Id') {\r\n activityItem.participatedGrade10 = Boolean(field.value);\r\n }\r\n if (field.data.id.substr(0, 'participated11Id'.length) === 'participated11Id') {\r\n activityItem.participatedGrade11 = Boolean(field.value);\r\n }\r\n if (field.data.id.substr(0, 'participated12Id'.length) === 'participated12Id') {\r\n activityItem.participatedGrade12 = Boolean(field.value);\r\n }\r\n if (field.data.id.substr(0, 'participatedPostSecondaryId'.length) === 'participatedPostSecondaryId') {\r\n activityItem.participatedPostsecondary = Boolean(field.value);\r\n }\r\n });\r\n return activityItem;\r\n };\r\n\r\n private setApplicationAddress = (fieldsGroup: any, address: IApplicationAddress):\r\n IApplicationAddress => {\r\n const addressTypefield = fieldsGroup.fields.findIndex(x => x.data.id === 'addressTypeId');\r\n if (addressTypefield > -1) {\r\n address.type = fieldsGroup.fields[addressTypefield].value;\r\n }\r\n const houseNumberField = fieldsGroup.fields.findIndex(x => x.data.id === 'houseNumberId');\r\n if (houseNumberField > -1) {\r\n address.houseNumber = fieldsGroup.fields[houseNumberField].value;\r\n }\r\n const addressLine1Field = fieldsGroup.fields.findIndex(x => x.data.id === 'addressLine1Id');\r\n if (addressLine1Field > -1) {\r\n address.line1 = fieldsGroup.fields[addressLine1Field].value;\r\n }\r\n const addressLine2Field = fieldsGroup.fields.findIndex(x => x.data.id === 'addressLine2Id');\r\n if (addressLine2Field > -1) {\r\n address.line2 = fieldsGroup.fields[addressLine2Field].value;\r\n }\r\n const addressLine3Field = fieldsGroup.fields.findIndex(x => x.data.id === 'addressLine3Id');\r\n if (addressLine3Field > -1) {\r\n address.line3 = fieldsGroup.fields[addressLine3Field].value;\r\n }\r\n const addressLine4Field = fieldsGroup.fields.findIndex(x => x.data.id === 'addressLine4Id');\r\n if (addressLine4Field > -1) {\r\n address.line4 = fieldsGroup.fields[addressLine4Field].value;\r\n }\r\n const addressCityField = fieldsGroup.fields.findIndex(x => x.data.id === 'addressCityId');\r\n if (addressCityField > -1) {\r\n address.city = fieldsGroup.fields[addressCityField].value;\r\n }\r\n const stateProvinceField = fieldsGroup.fields.findIndex(x => x.data.id === 'stateProvinceId');\r\n if (stateProvinceField > -1) {\r\n address.stateProvince = fieldsGroup.fields[stateProvinceField].value;\r\n }\r\n const postalCodeField = fieldsGroup.fields.findIndex(x => x.data.id === 'postalCodeId');\r\n if (postalCodeField > -1) {\r\n address.postalCode = fieldsGroup.fields[postalCodeField].value;\r\n }\r\n const countyIdField = fieldsGroup.fields.findIndex(x => x.data.id === 'addressCountyId');\r\n if (countyIdField > -1) {\r\n address.county = fieldsGroup.fields[countyIdField].value;\r\n }\r\n const addressCountryField = fieldsGroup.fields.findIndex(x => x.data.id === 'addressCountryId');\r\n if (addressCountryField > -1) {\r\n address.country = fieldsGroup.fields[addressCountryField].value;\r\n }\r\n return address;\r\n };\r\n\r\n private setApplicationAddressValues = (address: IApplicationAddress): IApplicationAddress => {\r\n address.type = address.type || 0;\r\n address.line1 = address.line1 || '';\r\n address.city = address.city || '';\r\n address.country = address.country || 0;\r\n\r\n address.line2 = address.line2 || '';\r\n address.line3 = address.line3 || '';\r\n address.line4 = address.line4 || '';\r\n address.city = address.city || '';\r\n address.stateProvince = address.stateProvince || 0;\r\n address.postalCode = address.postalCode || '';\r\n address.county = address.county || 0;\r\n\r\n return address;\r\n };\r\n\r\n private setApplicationAddressAdditional =\r\n (fieldsGroup: any, sectionNumber: number, address: IApplicationAddress): IApplicationAddress => {\r\n const fieldsBySection = fieldsGroup.fields.filter(x => x.data.section === sectionNumber);\r\n fieldsBySection.forEach(field => {\r\n if (field.data.id.substr(0, 'addressTypeId'.length) === 'addressTypeId') {\r\n address.type = field.value;\r\n }\r\n if (field.data.id.substr(0, 'houseNumberId'.length) === 'houseNumberId') {\r\n address.houseNumber = field.value;\r\n }\r\n if (field.data.id.substr(0, 'addressLine1Id'.length) === 'addressLine1Id') {\r\n address.line1 = field.value;\r\n }\r\n if (field.data.id.substr(0, 'addressLine2Id'.length) === 'addressLine2Id') {\r\n address.line2 = field.value;\r\n }\r\n if (field.data.id.substr(0, 'addressLine3Id'.length) === 'addressLine3Id') {\r\n address.line3 = field.value;\r\n }\r\n if (field.data.id.substr(0, 'addressLine4Id'.length) === 'addressLine4Id') {\r\n address.line4 = field.value;\r\n }\r\n if (field.data.id.substr(0, 'addressCityId'.length) === 'addressCityId') {\r\n address.city = field.value;\r\n }\r\n if (field.data.id.substr(0, 'stateProvinceId'.length) === 'stateProvinceId') {\r\n address.stateProvince = field.value;\r\n }\r\n if (field.data.id.substr(0, 'postalCodeId'.length) === 'postalCodeId') {\r\n address.postalCode = field.value;\r\n }\r\n if (field.data.id.substr(0, 'addressCountyId'.length) === 'addressCountyId') {\r\n address.county = field.value;\r\n }\r\n if (field.data.id.substr(0, 'addressCountryId'.length) === 'addressCountryId') {\r\n address.country = field.value;\r\n }\r\n });\r\n return address;\r\n };\r\n\r\n private setApplicationEducation = (fieldsGroup: any, education: IApplicationEducation): IApplicationEducation => {\r\n const degreefield = fieldsGroup.fields.findIndex(x => x.data.id === 'educationDegreeId');\r\n if (degreefield > -1) {\r\n education.enrollment.degreeId = fieldsGroup.fields[degreefield].value;\r\n }\r\n const curriculumField = fieldsGroup.fields.findIndex(x => x.data.id === 'educationCurriculumId');\r\n if (curriculumField > -1) {\r\n education.enrollment.curriculumId = fieldsGroup.fields[curriculumField].value;\r\n }\r\n const honorsField = fieldsGroup.fields.findIndex(x => x.data.id === 'educationHonorsId');\r\n if (honorsField > -1) {\r\n education.enrollment.honorsId = fieldsGroup.fields[honorsField].value;\r\n }\r\n const startDateField = fieldsGroup.fields.findIndex(x => x.data.id === 'educationStartDateId');\r\n if (startDateField > -1) {\r\n education.enrollment.startDate = fieldsGroup.fields[startDateField].value;\r\n }\r\n const endDateField = fieldsGroup.fields.findIndex(x => x.data.id === 'educationEndDateId');\r\n if (endDateField > -1) {\r\n education.enrollment.endDate = fieldsGroup.fields[endDateField].value;\r\n }\r\n const institutionField = fieldsGroup.fields.findIndex(x => x.data.id === 'educationInstitutionName');\r\n if (institutionField > -1) {\r\n education.institution.name = fieldsGroup.fields[institutionField].value;\r\n }\r\n const etsCodeField = fieldsGroup.fields.findIndex(x => x.data.id === 'educationEtsCodeId');\r\n if (etsCodeField > -1) {\r\n education.institution.etsCode = fieldsGroup.fields[etsCodeField].value;\r\n }\r\n const cityField = fieldsGroup.fields.findIndex(x => x.data.id === 'educationCityId');\r\n if (cityField > -1) {\r\n education.institution.city = fieldsGroup.fields[cityField].value;\r\n }\r\n const stateField = fieldsGroup.fields.findIndex(x => x.data.id === 'educationStateId');\r\n if (stateField > -1) {\r\n education.institution.stateProvinceId = fieldsGroup.fields[stateField].value;\r\n }\r\n const countryField = fieldsGroup.fields.findIndex(x => x.data.id === 'educationCountryId');\r\n if (countryField > -1) {\r\n education.institution.countryId = fieldsGroup.fields[countryField].value;\r\n }\r\n const ficeCodeField = fieldsGroup.fields.findIndex(x => x.data.id === 'educationFiceCode');\r\n if (ficeCodeField > -1) {\r\n education.institution.ficeCode = fieldsGroup.fields[ficeCodeField].value;\r\n }\r\n return education;\r\n };\r\n\r\n private setApplicationRelativeAdditional =\r\n (fieldsGroup: any, sectionNumber: number, relativeItem: IApplicationRelative): IApplicationRelative => {\r\n const fieldsBySection = fieldsGroup.fields.filter(x => x.data.section === sectionNumber);\r\n fieldsBySection.forEach(field => {\r\n if (field.data.id.substr(0, 'relativesPrefixId'.length) === 'relativesPrefixId') {\r\n relativeItem.relationPrefix = field.value;\r\n }\r\n if (field.data.id.substr(0, 'relativesFirstNameId'.length) === 'relativesFirstNameId') {\r\n relativeItem.relationFirstName = field.value;\r\n }\r\n if (field.data.id.substr(0, 'relativesMiddleNameId'.length) === 'relativesMiddleNameId') {\r\n relativeItem.relationMiddleName = field.value;\r\n }\r\n if (field.data.id.substr(0, 'relativesLastNamePrefixId'.length) === 'relativesLastNamePrefixId') {\r\n relativeItem.relationLastNamePrefix = field.value;\r\n }\r\n if (field.data.id.substr(0, 'relativesLastNameId'.length) === 'relativesLastNameId') {\r\n relativeItem.relationLastName = field.value;\r\n }\r\n if (field.data.id.substr(0, 'relativesSuffixId'.length) === 'relativesSuffixId') {\r\n relativeItem.relationSuffix = field.value;\r\n }\r\n if (field.data.id.substr(0, 'relativesRelationshipId'.length) === 'relativesRelationshipId') {\r\n relativeItem.relationType = field.value;\r\n }\r\n if (field.data.id.substr(0, 'relativesAttendedInstitutionId'.length) === 'relativesAttendedInstitutionId') {\r\n relativeItem.attendedInstitution = field.value;\r\n }\r\n });\r\n return relativeItem;\r\n };\r\n\r\n private setApplicationEducationValues = (education: IApplicationEducation): IApplicationEducation => {\r\n education.institution.city = education.institution.city || '';\r\n education.enrollment.curriculumId = education.enrollment.curriculumId || 0;\r\n education.enrollment.degreeId = education.enrollment.degreeId || 0;\r\n education.enrollment.honorsId = education.enrollment.honorsId || 0;\r\n education.enrollment.startDate = education.enrollment.startDate || undefined;\r\n education.enrollment.endDate = education.enrollment.endDate || undefined;\r\n education.institution.id = education.institution.id || 0;\r\n education.institution.name = education.institution.name || '';\r\n education.institution.etsCode = education.institution.etsCode || '';\r\n education.institution.city = education.institution.city || '';\r\n education.institution.stateProvinceId = education.institution.stateProvinceId || 0;\r\n education.institution.countryId = education.institution.countryId || 0;\r\n education.institution.ficeCode = education.institution.ficeCode || '';\r\n return education;\r\n };\r\n\r\n private setApplicationEducationAdditional = (fieldsGroup: any, sectionNumber: number, education: IApplicationEducation):\r\n IApplicationEducation => {\r\n const fieldsBySection = fieldsGroup.fields.filter(x => x.data.section === sectionNumber);\r\n fieldsBySection.forEach(field => {\r\n if (field.data.id.substr(0, 'educationDegreeId'.length) === 'educationDegreeId') {\r\n education.enrollment.degreeId = field.value;\r\n }\r\n if (field.data.id.substr(0, 'educationCurriculumId'.length) === 'educationCurriculumId') {\r\n education.enrollment.curriculumId = field.value;\r\n }\r\n if (field.data.id.substr(0, 'educationHonorsId'.length) === 'educationHonorsId') {\r\n education.enrollment.honorsId = field.value;\r\n }\r\n if (field.data.id.substr(0, 'educationStartDateId'.length) === 'educationStartDateId') {\r\n education.enrollment.startDate = field.value;\r\n }\r\n if (field.data.id.substr(0, 'educationEndDateId'.length) === 'educationEndDateId') {\r\n education.enrollment.endDate = field.value;\r\n }\r\n if (field.data.id.substr(0, 'educationInstitutionName'.length) === 'educationInstitutionName') {\r\n education.institution.name = field.value;\r\n }\r\n if (field.data.id.substr(0, 'educationEtsCodeId'.length) === 'educationEtsCodeId') {\r\n education.institution.etsCode = field.value;\r\n }\r\n if (field.data.id.substr(0, 'educationCityId'.length) === 'educationCityId') {\r\n education.institution.city = field.value;\r\n }\r\n if (field.data.id.substr(0, 'educationStateId'.length) === 'educationStateId') {\r\n education.institution.stateProvinceId = field.value;\r\n }\r\n if (field.data.id.substr(0, 'educationCountryId'.length) === 'educationCountryId') {\r\n education.institution.countryId = field.value;\r\n }\r\n if (field.data.id.substr(0, 'educationFiceCode'.length) === 'educationFiceCode') {\r\n education.institution.ficeCode = field.value;\r\n }\r\n });\r\n return education;\r\n };\r\n\r\n private setApplicationResidency = (fieldsGroup: any, residency: IApplicationResidency): IApplicationResidency => {\r\n const residencyPreferenceField = fieldsGroup.fields.findIndex(x => x.data.id === 'commutePreferenceId');\r\n if (residencyPreferenceField > -1) {\r\n residency.residencyPreference = fieldsGroup.fields[residencyPreferenceField].value;\r\n }\r\n const foodPlanInterestField = fieldsGroup.fields.findIndex(x => x.data.id === 'interestedFoodPlanId');\r\n if (foodPlanInterestField > -1) {\r\n residency.foodPlanInterest = fieldsGroup.fields[foodPlanInterestField].value;\r\n }\r\n const dormPlanInterestField = fieldsGroup.fields.findIndex(x => x.data.id === 'interestedDormPlanId');\r\n if (dormPlanInterestField > -1) {\r\n residency.dormPlanInterest = fieldsGroup.fields[dormPlanInterestField].value;\r\n }\r\n const dormCampusField = fieldsGroup.fields.findIndex(x => x.data.id === 'campusOptionsId');\r\n if (dormCampusField > -1) {\r\n residency.dormCampus = fieldsGroup.fields[dormCampusField].value;\r\n }\r\n const dormBuildingField = fieldsGroup.fields.findIndex(x => x.data.id === 'dormPlanOptionsId');\r\n if (dormBuildingField > -1) {\r\n residency.dormBuilding = fieldsGroup.fields[dormBuildingField].value;\r\n }\r\n return residency;\r\n };\r\n\r\n private setApplicationRelative = (fieldsGroup: any, relative: IApplicationRelative): IApplicationRelative => {\r\n const prefixField = fieldsGroup.fields.findIndex(x => x.data.id === 'relativesPrefixId');\r\n if (prefixField > -1) {\r\n relative.relationPrefix = fieldsGroup.fields[prefixField].value;\r\n }\r\n const firstNameField = fieldsGroup.fields.findIndex(x => x.data.id === 'relativesFirstNameId');\r\n if (firstNameField > -1) {\r\n relative.relationFirstName = fieldsGroup.fields[firstNameField].value;\r\n }\r\n const middleNameField = fieldsGroup.fields.findIndex(x => x.data.id === 'relativesMiddleNameId');\r\n if (middleNameField > -1) {\r\n relative.relationMiddleName = fieldsGroup.fields[middleNameField].value;\r\n }\r\n const lastNamePrefixField = fieldsGroup.fields.findIndex(x => x.data.id === 'relativesLastNamePrefixId');\r\n if (lastNamePrefixField > -1) {\r\n relative.relationLastNamePrefix = fieldsGroup.fields[lastNamePrefixField].value;\r\n }\r\n const lastNameField = fieldsGroup.fields.findIndex(x => x.data.id === 'relativesLastNameId');\r\n if (lastNameField > -1) {\r\n relative.relationLastName = fieldsGroup.fields[lastNameField].value;\r\n }\r\n const suffixField = fieldsGroup.fields.findIndex(x => x.data.id === 'relativesSuffixId');\r\n if (suffixField > -1) {\r\n relative.relationSuffix = fieldsGroup.fields[suffixField].value;\r\n }\r\n const relationshipField = fieldsGroup.fields.findIndex(x => x.data.id === 'relativesRelationshipId');\r\n if (relationshipField > -1) {\r\n relative.relationType = fieldsGroup.fields[relationshipField].value;\r\n }\r\n const attendedInstitutionField = fieldsGroup.fields.findIndex(x => x.data.id === 'relativesAttendedInstitutionId');\r\n if (attendedInstitutionField > -1) {\r\n relative.attendedInstitution = Boolean(fieldsGroup.fields[attendedInstitutionField].value);\r\n }\r\n return relative;\r\n };\r\n\r\n private setApplicationRelativeValues = (relative: IApplicationRelative): IApplicationRelative => {\r\n relative.applicationId = relative.applicationId || 0;\r\n relative.relationMiddleName = relative.relationMiddleName || '';\r\n relative.relationLastNamePrefix = relative.relationLastNamePrefix || '';\r\n\r\n return relative;\r\n };\r\n\r\n private setApplicationActivitiesValues =\r\n (activity: IApplicationActivity, activityList: IApplicationActivity[]): IApplicationActivity[] => {\r\n activity.activityType = activity.activityType || 0;\r\n activity.activity = activity.activity || 0;\r\n activity.hoursPerWeek = activity.hoursPerWeek || 0;\r\n activity.weeksPerYear = activity.weeksPerYear || 0;\r\n activity.numberOfYears = activity.numberOfYears || 0;\r\n activity.participatedGrade09 = activity.participatedGrade09 || false;\r\n activity.participatedGrade10 = activity.participatedGrade10 || false;\r\n activity.participatedGrade11 = activity.participatedGrade11 || false;\r\n activity.participatedGrade12 = activity.participatedGrade12 || false;\r\n activity.participatedPostsecondary = activity.participatedPostsecondary || false;\r\n\r\n if (activity.activityType !== 0 && activity.activity !== 0) {\r\n activityList.push(activity);\r\n }\r\n else if (activity.position || activity.hoursPerWeek || activity.weeksPerYear ||\r\n activity.numberOfYears || activity.participatedGrade09 || activity.participatedGrade10 ||\r\n activity.participatedGrade11 || activity.participatedGrade12 || activity.participatedPostsecondary) {\r\n activityList.push(activity);\r\n }\r\n return activityList;\r\n };\r\n\r\n private setIpedsValuesCheckList = (fieldsGroup: IFieldsGroup): void => {\r\n const {\r\n application\r\n } = this.state;\r\n\r\n const ipedsCheckList = fieldsGroup.fields[3].value;\r\n if (ipedsCheckList) {\r\n const array = Object.values(ipedsCheckList.split(','));\r\n array.forEach(iped => {\r\n if (application.ipeds) {\r\n let index: number = -1;\r\n index = application.ipeds.findIndex(x => x.ipedsFederalCategoryId === 1\r\n && x.ipedsEthnicityId === Number(iped));\r\n if (index === -1) {\r\n application.ipeds.push({\r\n ipedsEthnicityId: Number(iped),\r\n ipedsFederalCategoryId: 1\r\n });\r\n }\r\n }\r\n else {\r\n application.ipeds = [{\r\n ipedsEthnicityId: Number(iped),\r\n ipedsFederalCategoryId: 1\r\n }];\r\n }\r\n });\r\n }\r\n\r\n this.setState({\r\n application: application\r\n });\r\n };\r\n\r\n private setIpedsValuesNestedCheckList = (fieldsGroup: IFieldsGroup): void => {\r\n const {\r\n application\r\n } = this.state;\r\n\r\n const ipedsNestedCheckboxList = fieldsGroup.fields[4].value;\r\n if (ipedsNestedCheckboxList) {\r\n const ipedsArray = ipedsNestedCheckboxList.split(',');\r\n ipedsArray.forEach(iped => {\r\n const ipedItem = iped.split('$');\r\n if (ipedItem[0] !== '') {\r\n if (ipedItem.length > 1) {\r\n if (application.ipeds) {\r\n application.ipeds.push({\r\n ipedsEthnicityId: ipedItem[1] !== '' ? Number(ipedItem[1]) : undefined,\r\n ipedsFederalCategoryId: Number(ipedItem[0])\r\n });\r\n }\r\n else {\r\n application.ipeds = [{\r\n ipedsEthnicityId: ipedItem[1] !== '' ? Number(ipedItem[1]) : undefined,\r\n ipedsFederalCategoryId: Number(ipedItem[0])\r\n }];\r\n }\r\n }\r\n else {\r\n if (application.ipeds) {\r\n application.ipeds.push({\r\n ipedsFederalCategoryId: Number(ipedItem[0])\r\n });\r\n }\r\n else {\r\n application.ipeds = [{\r\n ipedsFederalCategoryId: Number(ipedItem[0])\r\n }];\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n this.setState({\r\n application: application\r\n });\r\n };\r\n\r\n // #endregion Set Values for Collections\r\n // #endregion Functions\r\n\r\n // #region Error Functions\r\n private logError = (logData: ILogData): void => {\r\n LayoutActions.setLogData(logData);\r\n };\r\n\r\n private redirectError = (code: number): void => {\r\n LayoutActions.setRedirectCode(code);\r\n };\r\n\r\n private showError = (message?: string): void => {\r\n LayoutActions.setAlert({ message: message, messageType: ResultType.error } as IAlert);\r\n };\r\n // #endregion Error Functions\r\n\r\n // #region Resolvers\r\n private resolveLayoutReady = () => {\r\n try {\r\n const {\r\n application,\r\n resources\r\n } = this.state;\r\n\r\n if (resources) {\r\n document.title = resources.lblPageTitle;\r\n\r\n if (application) {\r\n const hdnAppId: HTMLInputElement | undefined =\r\n document.getElementById('hdnApplicationId') as HTMLInputElement;\r\n if (hdnAppId && hdnAppId.value) {\r\n application.applicationId = Number(hdnAppId.value);\r\n hdnAppId.remove();\r\n Requests.getComponents(application.applicationId, this.resolveGetComponents, this.logError);\r\n\r\n const hdnTransactionId: HTMLInputElement | undefined =\r\n document.getElementById('hdnTransactionId') as HTMLInputElement;\r\n const hdnTransactionStatus: HTMLInputElement | undefined =\r\n document.getElementById('hdnTransactionStatus') as HTMLInputElement;\r\n const hdnTransactionAmount: HTMLInputElement | undefined =\r\n document.getElementById('hdnTransactionAmount') as HTMLInputElement;\r\n const hdnTransactionDescription: HTMLInputElement | undefined =\r\n document.getElementById('hdnTransactionDescription') as HTMLInputElement;\r\n const hdnTransactionAuthorizationNumber: HTMLInputElement | undefined =\r\n document.getElementById('hdnTransactionAuthorizationNumber') as HTMLInputElement;\r\n const hdnTransactionReturnUrl: HTMLInputElement | undefined =\r\n document.getElementById('hdnTransactionReturnUrl') as HTMLInputElement;\r\n if (hdnTransactionId && hdnTransactionId.value\r\n && hdnTransactionStatus\r\n && hdnTransactionAmount\r\n && hdnTransactionDescription\r\n && hdnTransactionAuthorizationNumber\r\n && hdnTransactionReturnUrl) {\r\n const paymentTransaction: IPaymentTransaction = {\r\n amount: hdnTransactionAmount.value,\r\n authorizationNumber: hdnTransactionAuthorizationNumber.value,\r\n description: hdnTransactionDescription.value,\r\n returnUrl: hdnTransactionReturnUrl.value,\r\n status: Number(hdnTransactionStatus.value),\r\n transactionId: Number(hdnTransactionAmount.value)\r\n } as IPaymentTransaction;\r\n this.setState({\r\n paymentModalOpenFail: Number(hdnTransactionStatus.value) === 0,\r\n paymentModalOpenSuccess: Number(hdnTransactionStatus.value) === 1,\r\n paymentTransaction: paymentTransaction\r\n });\r\n hdnTransactionId.remove();\r\n hdnTransactionStatus.remove();\r\n hdnTransactionAmount.remove();\r\n hdnTransactionDescription.remove();\r\n hdnTransactionAuthorizationNumber.remove();\r\n hdnTransactionReturnUrl.remove();\r\n }\r\n }\r\n else {\r\n const hdnSavedApplicationToken: HTMLInputElement | undefined =\r\n document.getElementById('hdnSavedApplicationToken') as HTMLInputElement;\r\n if (hdnSavedApplicationToken && hdnSavedApplicationToken.value) {\r\n this.setState({\r\n token: hdnSavedApplicationToken.value\r\n });\r\n hdnSavedApplicationToken.remove();\r\n Requests.getSavedApplicationComponents(hdnSavedApplicationToken.value, this.resolveGetComponents, this.logError);\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n this.logError(LogData.noResources(this.resolveLayoutReady.name));\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.resolveLayoutReady.name, e));\r\n }\r\n };\r\n\r\n private resolveCountries = (json: string): void => {\r\n try {\r\n const result: IJsonResult | undefined\r\n = Resolver(json, this.resolveCountries.name);\r\n\r\n if (result?.status) {\r\n const countries: any = result.data;\r\n\r\n this.setState({\r\n countries: countries\r\n });\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.resolveCountries.name, e));\r\n }\r\n };\r\n\r\n private resolveGetAddress = (json: string): void => {\r\n try {\r\n const result: IJsonResult | undefined\r\n = Resolver(json, this.resolveGetAddress.name);\r\n\r\n if (result?.status) {\r\n const rowsPerPageOptions: number[] = this.getRowsPerPageOptions(result.data.overallCount\r\n ? result.data.overallCount : 0);\r\n this.setState({\r\n addresses: result.data.addresses,\r\n rowsPerPageOptions,\r\n total: result.data.overallCount\r\n });\r\n LayoutActions.setLoading(false);\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.resolveGetAddress.name, e));\r\n }\r\n };\r\n\r\n private resolveGetComponents = (json: string): void => {\r\n try {\r\n const result: IJsonResult | undefined\r\n = Resolver(json, this.resolveGetComponents.name);\r\n\r\n if (result?.status) {\r\n const components: IApplicationForm = result.data;\r\n if (components.steps) {\r\n const errors: IApplicationErrors[] = Array(components.steps.length);\r\n if (components.applicationFormId > 0) {\r\n const {\r\n application\r\n } = this.state;\r\n\r\n application.applicationId = components.applicationFormId;\r\n }\r\n if (components.savedApplicationId) {\r\n const {\r\n application\r\n } = this.state;\r\n\r\n application.savedApplicationId = components.savedApplicationId;\r\n }\r\n if (components.canSaveApplication) {\r\n this.setState({\r\n confirmationMessage: components.confirmationSaveMessage,\r\n saveMessage: components.footerSaveMessage,\r\n showSaveButton: components.canSaveApplication\r\n });\r\n }\r\n\r\n components.steps.forEach((step, i) => {\r\n errors[i] = { isStepError: false, groupErrors: Array(step.fieldsGroups.length), stepTitle: step.title };\r\n for (let j = 0; j < step.fieldsGroups.length; j++) {\r\n errors[i].groupErrors[j] = {\r\n firstSectionErrors: {\r\n firstFieldsErrors: [],\r\n isFirstSectionErrors: false\r\n },\r\n groupId: step.fieldsGroups[j].id,\r\n isGroupError: false,\r\n sectionErrors: []\r\n };\r\n }\r\n });\r\n\r\n const {\r\n paymentModalOpenFail,\r\n paymentModalOpenSuccess\r\n } = this.state;\r\n\r\n if (paymentModalOpenFail || paymentModalOpenSuccess) {\r\n components.isCompletedApplication = true;\r\n this.setState({\r\n showAttachments: false\r\n });\r\n }\r\n\r\n this.setState({\r\n components: components,\r\n errors: errors\r\n }, () => LayoutActions.setLoading(false));\r\n\r\n const fileSelector = this.buildFileSelector();\r\n\r\n this.setState({\r\n fileSelector: fileSelector\r\n });\r\n }\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.resolveGetComponents.name, e));\r\n }\r\n };\r\n\r\n private resolveGetChildOptions = (json: string): void => {\r\n try {\r\n const {\r\n components\r\n } = this.state;\r\n\r\n if (components) {\r\n const result: IJsonResult | undefined\r\n = Resolver(json, this.resolveGetChildOptions.name);\r\n\r\n if (result?.status) {\r\n if (result.data) {\r\n if (result.data.step && result.data.group && result.data.targetId) {\r\n const fields: any = components.steps[Number(result.data.step)].fieldsGroups[Number(result.data.group)].fields;\r\n const fieldIndex: number =\r\n fields.findIndex(x => x.data.id === result.data.targetId);\r\n if (fieldIndex > -1) {\r\n const childField: IFieldForm = fields[fieldIndex];\r\n if (result.data.results) {\r\n childField.data.options = result.data.results as IDropDownOption[];\r\n }\r\n else {\r\n childField.data.options = [] as IDropDownOption[];\r\n }\r\n if (childField) {\r\n childField.value = undefined;\r\n }\r\n this.setState({\r\n components: components\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n } catch (e) {\r\n this.logError(LogData.fromException(this.resolveGetChildOptions.name, e));\r\n }\r\n };\r\n\r\n private resolveGetInstitutions = (json: string): void => {\r\n try {\r\n const result: IJsonResult | undefined\r\n = Resolver(json, this.resolveGetInstitutions.name);\r\n\r\n if (result?.status) {\r\n const rowsPerPageOptions: number[] = this.getRowsPerPageOptions(result.data.overallCount\r\n ? result.data.overallCount : 0);\r\n this.setState({\r\n institutions: result.data.institutions,\r\n rowsPerPageOptions,\r\n total: result.data.overallCount\r\n });\r\n LayoutActions.setLoading(false);\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.resolveGetInstitutions.name, e));\r\n }\r\n };\r\n\r\n private resolveStates = (json: string): void => {\r\n try {\r\n const result: IJsonResult | undefined\r\n = Resolver(json, this.resolveStates.name);\r\n\r\n if (result?.status) {\r\n const states: any = result.data;\r\n\r\n this.setState({\r\n states: states\r\n });\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.resolveStates.name, e));\r\n }\r\n };\r\n\r\n private resolveSaveIncompleteApplication = (json: string): void => {\r\n try {\r\n const result: IJsonResult | undefined\r\n = Resolver(json, this.resolveSaveIncompleteApplication.name);\r\n\r\n if (result?.status) {\r\n if (result.data.result) {\r\n const {\r\n components\r\n } = this.state;\r\n // Send notification\r\n if (components && result.data.token && result.data.email && components.name) {\r\n LayoutActions.setLoading(false);\r\n const urlToSend = `${window.location.origin}${Constants.webUrl}/Admissions/ApplicationForm/Saved/${result.data.token}`;\r\n Requests.postCreateSaveApplicationNotification(urlToSend,\r\n result.data.email, components.name, this.resolveCreateSaveApplicationNotification, this.logError);\r\n this.setState({\r\n openConfirmationSavedModal: true\r\n });\r\n }\r\n }\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.resolveSaveIncompleteApplication.name, e));\r\n }\r\n };\r\n\r\n private resolveCreateSaveApplicationNotification = (json: string): void => {\r\n try {\r\n const result: IJsonResult | undefined\r\n = Resolver(json, this.resolveCreateSaveApplicationNotification.name);\r\n\r\n if (!result?.status) {\r\n this.logError(LogData.badJsonResult(this.resolveCreateSaveApplicationNotification.name));\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.resolveCreateSaveApplicationNotification.name, e));\r\n }\r\n };\r\n\r\n private resolveSubmitApplication = (json: string): void => {\r\n try {\r\n const {\r\n components\r\n } = this.state;\r\n\r\n const result: IJsonResult | undefined\r\n = Resolver(json, this.resolveSubmitApplication.name);\r\n\r\n if (result?.status) {\r\n if (result.data.result) {\r\n if (components) {\r\n if (result.data.applicationId) {\r\n this.setState({\r\n applicationId: result.data.applicationId\r\n });\r\n }\r\n if (result.data.paymentInfo) {\r\n this.setState({\r\n paymentInfo: result.data.paymentInfo\r\n });\r\n }\r\n // Attachments are after sumbit and before payment\r\n if (components.allowAttachment) {\r\n const {\r\n applicationId\r\n } = this.state;\r\n if (applicationId !== undefined && applicationId > 0) {\r\n Requests.postListApplicationAttachments(applicationId, this.resolveGetListApplicationAttachments, this.logError);\r\n this.setState({\r\n showAttachments: true\r\n });\r\n }\r\n }\r\n else {\r\n if (result.data.paymentInfo) {\r\n const returnUrl =\r\n `${Constants.webUrl}/Admissions/ApplicationForm/${components.applicationFormId}`;\r\n\r\n this.setState({\r\n paymentDetailModalOpen: true,\r\n paymentInfo: result.data.paymentInfo,\r\n returnUrl: returnUrl\r\n });\r\n }\r\n else {\r\n components.isCompletedApplication = true;\r\n this.setState({\r\n components: components\r\n });\r\n }\r\n }\r\n LayoutActions.setLoading(false);\r\n }\r\n }\r\n else {\r\n this.showError();\r\n }\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.resolveSubmitApplication.name, e));\r\n }\r\n };\r\n\r\n private resolveValidateScore = (json: string): void => {\r\n try {\r\n const {\r\n components\r\n } = this.state;\r\n\r\n const result: IJsonResult | undefined\r\n = Resolver(json, this.resolveValidateScore.name);\r\n\r\n if (result?.status && components) {\r\n components.steps.forEach(step => {\r\n const group: IFieldsGroup | undefined = step.fieldsGroups.find(g => g.id === result.data.group);\r\n if (group) {\r\n const field: IFieldForm | undefined = group.fields.find(f => f.data.id === result.data.componentId);\r\n if (field) {\r\n if (result.data.isNumeric) {\r\n field.isNumeric = true;\r\n } else {\r\n field.isNumeric = false;\r\n }\r\n }\r\n }\r\n });\r\n\r\n this.setState({\r\n components: this.state.components\r\n });\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.resolveValidateScore.name, e));\r\n }\r\n };\r\n\r\n private resolveCreateAttachment = (json: string): void => {\r\n try {\r\n const result: IJsonResult | undefined\r\n = Resolver(json, this.resolveCreateAttachment.name);\r\n\r\n if (result?.status) {\r\n if (result.data.result) {\r\n const {\r\n applicationId\r\n } = this.state;\r\n if (applicationId !== undefined && applicationId > 0) {\r\n LayoutActions.setLoading(true);\r\n Requests.postListApplicationAttachments(applicationId, this.resolveGetListApplicationAttachments, this.logError);\r\n }\r\n }\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.resolveCreateAttachment.name, e));\r\n }\r\n };\r\n\r\n private resolveGetListApplicationAttachments = (json: string): void => {\r\n try {\r\n const result: IJsonResult | undefined\r\n = Resolver(json, this.resolveGetListApplicationAttachments.name);\r\n\r\n if (result?.status) {\r\n if (result.data) {\r\n this.setState({\r\n attachments: result.data.appAttachmentsViewModel,\r\n openRemoveAttachmentDialog: false\r\n });\r\n const {\r\n applicationId\r\n } = this.state;\r\n if (applicationId) {\r\n LayoutActions.setLoading(true);\r\n Requests.GetApplicationAttachmentTotals(applicationId, this.resolveGetAttachmentTotals, this.logError);\r\n }\r\n const fileSelector = this.buildFileSelector();\r\n this.setState({\r\n fileSelector: fileSelector\r\n });\r\n }\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.resolveGetListApplicationAttachments.name, e));\r\n }\r\n };\r\n\r\n private resolveRemoveAttachment = (json: string): void => {\r\n try {\r\n const result: IJsonResult | undefined\r\n = Resolver(json, this.resolveRemoveAttachment.name);\r\n\r\n if (result?.status) {\r\n if (result.data) {\r\n const {\r\n applicationId\r\n } = this.state;\r\n if (applicationId) {\r\n LayoutActions.setLoading(true);\r\n Requests.postListApplicationAttachments(applicationId, this.resolveGetListApplicationAttachments, this.logError);\r\n }\r\n }\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.resolveRemoveAttachment.name, e));\r\n }\r\n };\r\n\r\n private resolveGetAttachmentTotals = (json: string): void => {\r\n try {\r\n const result: IJsonResult | undefined\r\n = Resolver(json, this.resolveGetAttachmentTotals.name);\r\n\r\n if (result?.status) {\r\n this.setState({\r\n attachmentsTotalSize: result.data.appAttachmentTotalsViewModel.totalAttachmentSize,\r\n attachmentsTotalSizeNumber: Number(result.data.appAttachmentTotalsViewModel.totalAttachmentSizeNumber),\r\n totalNumberOfAttachments: Number(result.data.appAttachmentTotalsViewModel.totalNumberOfAttachments)\r\n });\r\n LayoutActions.setLoading(false);\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.resolveGetAttachmentTotals.name, e));\r\n }\r\n };\r\n\r\n private resolveGetGeneralSettings = (json: string): void => {\r\n try {\r\n const result: IJsonResult | undefined\r\n = Resolver(json, this.resolveGetGeneralSettings.name);\r\n if (result?.status) {\r\n this.setState({\r\n governmentIdFormat: result.data.general.governmentIdFormat\r\n });\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.resolveGetGeneralSettings.name, e));\r\n }\r\n };\r\n // #endregion Resolvers\r\n\r\n // #region State Management Events\r\n private onLayoutReady = (): void => {\r\n const ready: boolean = LayoutStore.getLayoutReady();\r\n const resources: IApplicationFormResources | undefined = LayoutStore.getResources();\r\n const cultures: ICultures = LayoutStore.getCultures();\r\n\r\n if (ready) {\r\n Requests.getStates(this.resolveStates, this.logError);\r\n Requests.getCountries(this.resolveCountries, this.logError);\r\n Requests.getGeneralSettings(this.resolveGetGeneralSettings);\r\n\r\n this.setState({\r\n dateTimeCulture: cultures.dateTimeCulture,\r\n firstDayOfWeek: cultures.firstDayOfWeek,\r\n shortDatePattern: cultures.shortDatePattern,\r\n\r\n // Resources\r\n resources: resources\r\n }, this.resolveLayoutReady);\r\n }\r\n else {\r\n this.setState({\r\n componentError: true\r\n }, () => this.logError(LogData.layoutNoReady(this.onLayoutReady.name)));\r\n }\r\n };\r\n // #endregion State Management Events\r\n\r\n // #region Lifecycle\r\n public componentWillUnmount = (): void => {\r\n LayoutStore.removeLayoutReadyListener(this.onLayoutReady);\r\n };\r\n\r\n public componentDidCatch = (error, info): void => {\r\n this.setState({\r\n componentError: true\r\n }, () => {\r\n this.logError(LogData.fromComponentException(this.componentDidCatch.name, error, info));\r\n this.redirectError(500);\r\n });\r\n };\r\n // #endregion Lifecycle\r\n\r\n public render(): JSX.Element {\r\n const {\r\n activeStep,\r\n addresses,\r\n attachments,\r\n attachmentsTotalSize,\r\n changeEmailText,\r\n componentError,\r\n components,\r\n confirmationMessage,\r\n countries,\r\n dateTimeCulture,\r\n emailField,\r\n emptyEmailField,\r\n errors,\r\n expanded,\r\n fileName,\r\n firstDayOfWeek,\r\n hasPersonId,\r\n institutions,\r\n invalidEmail,\r\n openAddressSearchModal,\r\n openETSSearchModal,\r\n pageNumber,\r\n pageSize,\r\n paymentModalOpenFail,\r\n paymentModalOpenSuccess,\r\n paymentTransaction,\r\n resources,\r\n rowsPerPageOptions,\r\n openConfirmationSavedModal,\r\n openEmailModal,\r\n openNotAvailableModal,\r\n openRemoveAttachmentDialog,\r\n openSupportedFilesModal,\r\n saveMessage,\r\n selectedCity,\r\n selectedCountry,\r\n selectedEtsCode,\r\n selectedInstitutionName,\r\n selectedState,\r\n selectedZipCode,\r\n shortDatePattern,\r\n showAttachments,\r\n showSaveButton,\r\n showSignIn,\r\n showSignUp,\r\n states,\r\n total,\r\n\r\n // Payment\r\n paymentDetailModalOpen,\r\n paymentInfo,\r\n paymentModalOpenProcess,\r\n returnUrl,\r\n\r\n // Settings\r\n governmentIdFormat\r\n } = this.state;\r\n\r\n // #region Payment modals\r\n let processPaymentModal: JSX.Element | undefined;\r\n if (paymentModalOpenProcess && paymentInfo) {\r\n processPaymentModal = (\r\n \r\n );\r\n }\r\n // #endregion Payment modals\r\n\r\n let addressSearchModal: JSX.Element | undefined;\r\n\r\n if (resources && resources.addressSearchModal) {\r\n addressSearchModal = (\r\n \r\n );\r\n }\r\n\r\n let etsSearchModal: JSX.Element | undefined;\r\n if (resources && resources.etsSearchModal && states && countries) {\r\n etsSearchModal = (\r\n \r\n );\r\n }\r\n\r\n let confirmationSavedModal: JSX.Element | undefined;\r\n if (resources && confirmationMessage) {\r\n confirmationSavedModal = (\r\n \r\n );\r\n }\r\n\r\n let emailModal: JSX.Element | undefined;\r\n if (resources && openEmailModal) {\r\n emailModal = (\r\n \r\n {resources.emailModal.lblSave}\r\n \r\n )}\r\n id=\"emailModal\"\r\n header={resources.emailModal.lblSaveApplication}\r\n maxWidth=\"md\"\r\n open={openEmailModal}\r\n onClose={this.onCloseEmailModal}\r\n >\r\n \r\n \r\n \r\n {emailField && changeEmailText ? resources.emailModal.lblSaveApplicationInstructions\r\n : resources.emailModal.lblSaveApplicationEmptyEmailIns}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n let notAvailableModal: JSX.Element | undefined;\r\n if (resources && openNotAvailableModal) {\r\n notAvailableModal = (\r\n \r\n {resources.notAvailableModal.lblOk}\r\n \r\n )}\r\n id=\"notAvailableModal\"\r\n header={resources.notAvailableModal.lblNotAvailable}\r\n maxWidth=\"md\"\r\n open={openNotAvailableModal}\r\n onClose={this.onCloseNotAvailableModal}\r\n >\r\n \r\n \r\n \r\n {resources.notAvailableModal.lblNotAvailableMessage}\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n let supportedFiles: JSX.Element | undefined;\r\n if (resources && components && components.fileTypes) {\r\n const supportedFilesBody: JSX.Element[] = [];\r\n components.fileTypes.forEach((availableFileType, i) => {\r\n let fileExt = '';\r\n const fileExtensions = availableFileType.fileExtension.split(';');\r\n fileExtensions.forEach(fExt => {\r\n fileExt = fileExt + fExt.replace('*.', '');\r\n });\r\n fileExt = fileExt.replace(/ /g, ', ');\r\n supportedFilesBody.push(\r\n \r\n \r\n \r\n {fileExt}\r\n \r\n \r\n \r\n );\r\n });\r\n\r\n supportedFiles = (\r\n \r\n \r\n {supportedFilesBody}\r\n \r\n
\r\n );\r\n }\r\n\r\n let supportedFilesModal: JSX.Element | undefined;\r\n if (resources && openSupportedFilesModal) {\r\n supportedFilesModal = (\r\n \r\n {resources.attachments.lblClose}\r\n \r\n )}\r\n id=\"supportedFilesModal\"\r\n header={resources.attachments.lblSupportedFilesTitle}\r\n maxWidth=\"md\"\r\n open={openSupportedFilesModal}\r\n onClose={this.onCloseSupportedFilesModal}\r\n >\r\n \r\n \r\n {supportedFiles}\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n let attachmentsComponent: JSX.Element | undefined;\r\n if (resources && components && components.fileTypes) {\r\n attachmentsComponent = (\r\n \r\n );\r\n }\r\n\r\n let removeAttachmentModal: JSX.Element | undefined;\r\n if (resources && openRemoveAttachmentDialog) {\r\n removeAttachmentModal = (\r\n \r\n );\r\n }\r\n\r\n let signInModal: JSX.Element | undefined;\r\n if (!hasPersonId) {\r\n signInModal = (\r\n \r\n );\r\n }\r\n\r\n let signUpModal: JSX.Element | undefined;\r\n if (showSignUp) {\r\n signUpModal = (\r\n \r\n );\r\n }\r\n\r\n let contentPage: JSX.Element | undefined;\r\n if (!componentError && resources) {\r\n // #region Payment Info modal\r\n let paymentInfoModal: JSX.Element | undefined;\r\n if (paymentInfo && components && paymentDetailModalOpen) {\r\n paymentInfoModal = (\r\n \r\n );\r\n }\r\n // #endregion Payment Info modal\r\n\r\n if (components) {\r\n if (!showAttachments) {\r\n contentPage = (\r\n <>\r\n \r\n {paymentInfoModal}\r\n \r\n );\r\n }\r\n else {\r\n contentPage = (\r\n <>\r\n {attachmentsComponent}\r\n \r\n );\r\n }\r\n }\r\n }\r\n\r\n return (\r\n \r\n {contentPage}\r\n {addressSearchModal}\r\n {etsSearchModal}\r\n {processPaymentModal}\r\n {confirmationSavedModal}\r\n {emailModal}\r\n {notAvailableModal}\r\n {supportedFilesModal}\r\n {removeAttachmentModal}\r\n {signInModal}\r\n {signUpModal}\r\n \r\n );\r\n }\r\n}\r\n\r\nconst ApplicationFormViewWithLayout = withLayout(ApplicationFormView);\r\n// #endregion Component\r\n\r\n// RenderDOM: Component\r\nReactDOM.render(, document.getElementById('root'));","/* Copyright 2019 Ellucian Company L.P. and its affiliates.\r\n* File: ApplicationHandler.tsx\r\n* Type: Presentation component */\r\n\r\n// #region Imports\r\nimport React from 'react';\r\nimport Media from 'react-media';\r\n\r\n// Core components\r\nimport Button, { ButtonGroup } from '@hedtech/powercampus-design-system/react/core/Button';\r\nimport Card from '@hedtech/powercampus-design-system/react/core/Card';\r\nimport Divider from '@hedtech/powercampus-design-system/react/core/Divider';\r\nimport Grid from '@hedtech/powercampus-design-system/react/core/Grid';\r\nimport Icon from '@hedtech/powercampus-design-system/react/core/Icon';\r\nimport MessageStyled from '@hedtech/powercampus-design-system/react/core/MessageStyled';\r\nimport StepProgress, {\r\n MobileStepper,\r\n MobileStepperLabel,\r\n MobileStepperStep,\r\n MobileStepperTitle,\r\n Step,\r\n StepButton,\r\n StepContent,\r\n StepLabel\r\n} from '@hedtech/powercampus-design-system/react/core/StepProgress';\r\nimport Text from '@hedtech/powercampus-design-system/react/core/Text';\r\n\r\n// Internal components\r\nimport ApplicationCompletedModal from './ApplicationCompletedModal';\r\nimport FieldsGroupHandler from './FieldsGroupHandler';\r\n\r\n// Helpers\r\nimport Format from '@hedtech/powercampus-design-system/helpers/Format';\r\nimport Tokens from '@hedtech/powercampus-design-system/react/core/styles/Tokens';\r\nimport { createStyles, Theme, withStyles, WithStyles } from '@hedtech/powercampus-design-system/react/core/styles/withStyles';\r\n\r\n// Types\r\nimport { IDropDownOption } from '@hedtech/powercampus-design-system/types/IDropDownOption';\r\nimport { IApplicationContent } from '../../../Types/Applications/IApplicationContent';\r\nimport { IApplicationErrors } from '../../../Types/Applications/IApplicationErrors';\r\nimport { IApplicationForm } from '../../../Types/Form/IApplicationForm';\r\nimport { IFieldsGroup } from '../../../Types/Form/IFieldsGroup';\r\nimport { IPaymentTransaction } from '../../../Types/Payment/IPaymentTransaction';\r\nimport { IApplicationHandler } from '../../../Types/Resources/Admissions/IApplicationFormResources';\r\n// #endregion\r\n\r\n// #region Internal types\r\nexport interface IApplicationHandlerProps {\r\n activeStep: number;\r\n components?: IApplicationForm;\r\n dateTimeCulture: string;\r\n errors: IApplicationErrors[];\r\n expanded: boolean | string;\r\n failedPayment: boolean;\r\n firstDayOfWeek: number;\r\n governmentIdFormat: string;\r\n paymentTransaction: IPaymentTransaction;\r\n saveMessage?: string;\r\n section?: JSON;\r\n shortDatePattern: string;\r\n showSaveButton: boolean;\r\n successPayment: boolean;\r\n\r\n resources: IApplicationHandler;\r\n onAddMore: (fieldGroup: IFieldsGroup) => void;\r\n onBackStep: () => void;\r\n onClickSave?: () => void;\r\n onClickStep: (event: React.MouseEvent) => void;\r\n onChangeCheckBox: (event: React.ChangeEvent) => void;\r\n onChangeDateTimeField: (date: string, id: string, isValid: boolean) => void;\r\n onChangeDropDown: (optionSelected: IDropDownOption, id: string) => void;\r\n onChangeExpansionPanel: (label: string) => void;\r\n onChangeListCheckbox: (event: any) => void;\r\n onChangeRadioGroup: (event: React.ChangeEvent, value: string) => void;\r\n onChangeTextField: (event: React.ChangeEvent) => void;\r\n onClickButton: (event: React.MouseEvent) => void;\r\n onCloseFailedPayment: (event: React.MouseEvent) => void;\r\n onDeleteItem: (event: any) => void;\r\n\r\n onNextStep: () => void;\r\n onSubmit: () => void;\r\n}\r\n\r\nconst styles = (theme: Theme) => createStyles({\r\n backButtonMovil: {\r\n marginLeft: Tokens.spacing30\r\n },\r\n boxStep: {\r\n '& > span > span > span': {\r\n textAlign: 'left'\r\n },\r\n '&:focus': {\r\n boxShadow: 'none'\r\n }\r\n },\r\n buttonContainer: {\r\n marginTop: Tokens.spacing50\r\n },\r\n buttonsContainerMovil: {\r\n marginRight: Tokens.spacing50\r\n },\r\n buttonStep: {\r\n marginRight: Tokens.spacing40\r\n },\r\n cardRoot: {\r\n [theme.breakpoints.up('sm')]: {\r\n marginTop: Tokens.spacing80\r\n }\r\n },\r\n fieldContainer: {\r\n marginTop: Tokens.spacing30\r\n },\r\n footerPadding: {\r\n padding: `${Tokens.spacing50} ${Tokens.spacing50} 0 ${Tokens.spacing50}`,\r\n textAlign: 'center'\r\n },\r\n inline: {\r\n display: 'inline'\r\n },\r\n marginLeft: {\r\n display: 'inline',\r\n marginLeft: Tokens.sizingSmall\r\n },\r\n mobileStepperContent: {\r\n minHeight: '65vh',\r\n padding: `${Tokens.spacing40} ${Tokens.spacing40} 0 ${Tokens.spacing40}`\r\n },\r\n saveButtonMargin: {\r\n marginLeft: Tokens.sizingSmall,\r\n marginRight: Tokens.sizingSmall\r\n },\r\n saveFooter: {\r\n textAlign: 'center'\r\n },\r\n stepperDesktop: {\r\n padding: `${Tokens.spacing50} ${Tokens.spacing50} 0 ${Tokens.spacing50}`\r\n }\r\n});\r\n\r\ntype PropsWithStyles = IApplicationHandlerProps & WithStyles;\r\n// #endregion\r\n\r\n// #region Component\r\n\r\nconst ApplicationHandler: React.FC = (props: PropsWithStyles): JSX.Element => {\r\n const {\r\n activeStep,\r\n classes,\r\n components,\r\n dateTimeCulture,\r\n errors,\r\n expanded,\r\n failedPayment,\r\n firstDayOfWeek,\r\n governmentIdFormat,\r\n paymentTransaction,\r\n saveMessage,\r\n shortDatePattern,\r\n showSaveButton,\r\n successPayment,\r\n\r\n onAddMore,\r\n onBackStep,\r\n onClickSave,\r\n onClickStep,\r\n onChangeCheckBox,\r\n onChangeDateTimeField,\r\n onChangeDropDown,\r\n onChangeExpansionPanel,\r\n onChangeListCheckbox,\r\n onChangeRadioGroup,\r\n onChangeTextField,\r\n onClickButton,\r\n onCloseFailedPayment,\r\n onDeleteItem,\r\n onNextStep,\r\n onSubmit,\r\n\r\n resources\r\n } = props;\r\n\r\n const noContent: JSX.Element = (\r\n \r\n );\r\n\r\n let content: IApplicationContent[] = [];\r\n if (components && components.steps && components.steps.length > 0) {\r\n content = Array(components.steps.length);\r\n components.steps.forEach((step, i) => {\r\n const fieldsGroupsElements: JSX.Element[] = [];\r\n if (step.fieldsGroups && step.fieldsGroups.length > 0) {\r\n step.fieldsGroups.forEach((fieldGroup, j) => {\r\n fieldsGroupsElements.push(\r\n \r\n );\r\n });\r\n }\r\n\r\n content[i] = {\r\n content: (\r\n \r\n \r\n {fieldsGroupsElements}\r\n \r\n ),\r\n instructions: step.instructions,\r\n title: step.title\r\n };\r\n });\r\n }\r\n\r\n const fieldsGroupsModal: JSX.Element[] = [];\r\n const footer: JSX.Element[] = [];\r\n if (components && components.fieldsGroups) {\r\n if (components.fieldsGroups.length > 0) {\r\n // Confirmation Dialog\r\n if (components.isCompletedApplication) {\r\n let confirmationGroup: IFieldsGroup | undefined;\r\n const confirmationIndex: number =\r\n components.fieldsGroups.findIndex(x => x.id === 'confirmationGroup');\r\n if (confirmationIndex > -1) {\r\n confirmationGroup = components.fieldsGroups[confirmationIndex];\r\n }\r\n\r\n fieldsGroupsModal.push(\r\n \r\n );\r\n }\r\n // Footer\r\n let footerGroup: IFieldsGroup | undefined;\r\n const footerGroupIndex: number =\r\n components.fieldsGroups.findIndex(x => x.id === 'footerGroup');\r\n if (footerGroupIndex > -1) {\r\n footerGroup = components.fieldsGroups[footerGroupIndex];\r\n }\r\n if (footerGroup) {\r\n footer.push(\r\n \r\n );\r\n }\r\n }\r\n }\r\n\r\n return (\r\n \r\n \r\n
\r\n \r\n {content.length > 0 ? (\r\n \r\n {(matches: boolean): JSX.Element => matches ? (\r\n \r\n {resources.lblNext}\r\n \r\n )\r\n }\r\n backButton={\r\n (\r\n \r\n {resources.lblBack}\r\n \r\n )\r\n }\r\n >\r\n
\r\n \r\n <>\r\n {components ? (\r\n <>\r\n {components.name || ''}\r\n {components.enableOnlinePayment\r\n && components.feeAmount ?\r\n (\r\n \r\n {Format.toString(components.isFlatFee\r\n ? resources.formatHasFee\r\n : resources.formatHasFees,\r\n [components.feeAmount])}\r\n \r\n )\r\n : undefined}\r\n \r\n ) : undefined}\r\n \r\n \r\n\r\n {activeStep !== content.length ? (\r\n <>\r\n \r\n \r\n {content[activeStep].title}\r\n \r\n \r\n {content[activeStep].content}\r\n \r\n ) : (\r\n <>\r\n \r\n {content.map((step, i) => (\r\n \r\n \r\n \r\n {step.title}\r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n {resources.lblSubmit}\r\n \r\n \r\n )\r\n }\r\n
\r\n \r\n ) : (\r\n <>\r\n {components ? (\r\n \r\n \r\n \r\n {components.name || ''}\r\n \r\n {components.enableOnlinePayment\r\n && components.feeAmount ?\r\n (\r\n \r\n {Format.toString(components.isFlatFee\r\n ? resources.formatHasFee\r\n : resources.formatHasFees, [components.feeAmount])}\r\n \r\n )\r\n : undefined}\r\n \r\n \r\n \r\n ) : undefined}\r\n \r\n {content.map((step, i) => (\r\n \r\n \r\n \r\n {step.title}\r\n \r\n \r\n \r\n {step.content}\r\n \r\n \r\n \r\n \r\n {resources.lblBack}\r\n \r\n \r\n {activeStep === content.length - 1\r\n ? resources.lblSubmit\r\n : resources.lblNext}\r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n )\r\n }\r\n
\r\n ) : noContent}\r\n {showSaveButton && onClickSave ?\r\n (\r\n
\r\n
\r\n \r\n \r\n {saveMessage}\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n {resources.lblSave}\r\n
\r\n \r\n
\r\n
\r\n )\r\n : undefined\r\n }\r\n
\r\n {footer}\r\n
\r\n {fieldsGroupsModal}\r\n
\r\n \r\n \r\n );\r\n};\r\n// #endregion\r\n\r\n// Export: Component\r\nexport default withStyles(styles)(ApplicationHandler);","/* Copyright 2019 Ellucian Company L.P. and its affiliates.\r\n * File: Attachments.tsx\r\n * Type: Presentation component */\r\n\r\n// #region Imports\r\nimport React from 'react';\r\n\r\n// Core components\r\nimport Button from '@hedtech/powercampus-design-system/react/core/Button';\r\nimport Card, { CardContent } from '@hedtech/powercampus-design-system/react/core/Card';\r\nimport Divider from '@hedtech/powercampus-design-system/react/core/Divider';\r\nimport Grid from '@hedtech/powercampus-design-system/react/core/Grid';\r\nimport Hidden from '@hedtech/powercampus-design-system/react/core/Hidden';\r\nimport Icon from '@hedtech/powercampus-design-system/react/core/Icon';\r\nimport IconButton from '@hedtech/powercampus-design-system/react/core/IconButton';\r\nimport MessageStyled from '@hedtech/powercampus-design-system/react/core/MessageStyled';\r\nimport Table, { TableBody, TableCell, TableHead, TableRow } from '@hedtech/powercampus-design-system/react/core/Table';\r\nimport Text from '@hedtech/powercampus-design-system/react/core/Text';\r\nimport Tooltip from '@hedtech/powercampus-design-system/react/core/Tooltip';\r\n\r\n// Helpers\r\nimport Format from '@hedtech/powercampus-design-system/helpers/Format';\r\nimport Tokens from '@hedtech/powercampus-design-system/react/core/styles/Tokens';\r\nimport { createStyles, Theme, withStyles, WithStyles } from '@hedtech/powercampus-design-system/react/core/styles/withStyles';\r\n\r\n// Types\r\nimport { IApplicationAttachment } from '../../../Types/Applications/IApplicationAttachment';\r\nimport { IAttachments } from '../../../Types/Resources/Admissions/IApplicationFormResources';\r\n// #endregion Imports\r\n// #region Types\r\n\r\nexport interface IAttachmentProps {\r\n attachments?: IApplicationAttachment[];\r\n numberOfAttachments: number;\r\n totalSize?: string;\r\n onClickContinue: (event: React.MouseEvent) => void;\r\n onClickInfo: (event: React.MouseEvent) => void;\r\n onClickOpenFolder: (event: React.MouseEvent) => void;\r\n onClickRemoveAttachment: (event: React.MouseEvent) => void;\r\n resources: IAttachments;\r\n}\r\n\r\nconst styles = (theme: Theme) => createStyles({\r\n buttonContainer: {\r\n marginTop: Tokens.spacing50\r\n },\r\n buttonStep: {\r\n marginRight: Tokens.spacing40\r\n },\r\n icon: {\r\n color: theme.palette.action.active,\r\n cursor: 'pointer'\r\n },\r\n inline: {\r\n display: 'inline'\r\n },\r\n marginLeft: {\r\n display: 'inline',\r\n marginLeft: Tokens.sizingSmall\r\n },\r\n marginRigth: {\r\n display: 'inline',\r\n marginRigth: Tokens.sizingSmall\r\n },\r\n table: {\r\n '& > tbody > tr > th:nth-child(1)': {\r\n width: '70%'\r\n },\r\n '& > tbody > tr > th:nth-child(2)': {\r\n width: '10%'\r\n },\r\n '& > tbody > tr > th:nth-child(3)': {\r\n width: '10%'\r\n },\r\n '& > tbody > tr > th:nth-child(4)': {\r\n width: '10%'\r\n }\r\n }\r\n});\r\n\r\ntype PropsWithStyles = IAttachmentProps & WithStyles;\r\n// #endregion Types\r\n\r\n// #region Component\r\nconst Attachment: React.FC = (props: PropsWithStyles): JSX.Element => {\r\n const {\r\n attachments,\r\n numberOfAttachments,\r\n classes,\r\n totalSize,\r\n onClickContinue,\r\n onClickInfo,\r\n onClickOpenFolder,\r\n onClickRemoveAttachment,\r\n resources\r\n } = props;\r\n\r\n let table: JSX.Element | undefined;\r\n if (attachments && attachments.length > 0) {\r\n table = (\r\n \r\n \r\n \r\n \r\n {resources.lblName}\r\n \r\n \r\n {resources.lblType}\r\n \r\n \r\n {resources.lblSize}\r\n \r\n \r\n {resources.lblDelete}\r\n \r\n \r\n \r\n \r\n {attachments.map((attachment, i) => (\r\n \r\n \r\n \r\n {attachment.attachmentTitle}\r\n \r\n \r\n \r\n \r\n {attachment.extension}\r\n \r\n \r\n \r\n \r\n {attachment.fileSize}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n );\r\n }\r\n\r\n let content: JSX.Element | undefined;\r\n if (resources) {\r\n content = (\r\n \r\n \r\n \r\n \r\n \r\n {resources.lblTitle}\r\n \r\n \r\n \r\n \r\n \r\n {Format.toString(resources.lblInstructions, [numberOfAttachments])}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n {resources.lblChooseFile}\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n {resources.lblSupportedFiles}\r\n \r\n \r\n \r\n \r\n {\r\n attachments && attachments.length > 0 ?\r\n (\r\n <>\r\n \r\n {resources.lblAttachments}\r\n \r\n {table}\r\n \r\n \r\n ) :\r\n (\r\n \r\n )\r\n }\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n {resources.lblContinue}\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n <>\r\n {content}\r\n \r\n );\r\n};\r\n// #endregion Component\r\n\r\n// Export: Component\r\nexport default withStyles(styles)(Attachment);","/* Copyright 2019 Ellucian Company L.P. and its affiliates.\r\n * File: ConfirmationSavedModal.tsx\r\n * Type: Presentation component */\r\n\r\n// #region Imports\r\nimport React from 'react';\r\n\r\n// Generic components\r\nimport Button from '@hedtech/powercampus-design-system/react/core/Button';\r\nimport Grid from '@hedtech/powercampus-design-system/react/core/Grid';\r\nimport Modal from '@hedtech/powercampus-design-system/react/core/Modal';\r\nimport Text from '@hedtech/powercampus-design-system/react/core/Text';\r\n\r\n// Types\r\nimport { IConfirmationSavedModal } from '../../../Types/Resources/Admissions/IApplicationFormResources';\r\n// #endregion Imports\r\n\r\n// #region Types\r\nexport interface IConfirmationSavedModalProps {\r\n confirmationMessage: string;\r\n open: boolean;\r\n resources: IConfirmationSavedModal;\r\n onCloseModal: () => void;\r\n}\r\n// #endregion Types\r\n\r\n// #region Component\r\nconst ConfirmationSavedModal: React.FC = (props: IConfirmationSavedModalProps): JSX.Element => {\r\n const {\r\n confirmationMessage,\r\n open,\r\n resources,\r\n onCloseModal\r\n } = props;\r\n\r\n return (\r\n \r\n {resources.btnOk}\r\n \r\n )}\r\n id=\"confirmationSaveModal\"\r\n header={resources.lblTitle}\r\n maxWidth=\"md\"\r\n open={open}\r\n onClose={onCloseModal}\r\n >\r\n \r\n \r\n \r\n {confirmationMessage}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n// #endregion Component\r\n\r\n// Export: Component\r\nexport default ConfirmationSavedModal;","/* Copyright 2019 Ellucian Company L.P. and its affiliates.\r\n * File: ETSSearchModal.tsx\r\n * Type: Presentation component */\r\n\r\n// #region Imports\r\nimport React from 'react';\r\n\r\n// Core components\r\nimport Button, { ButtonGroup } from '@hedtech/powercampus-design-system/react/core/Button';\r\nimport Dropdown from '@hedtech/powercampus-design-system/react/core/Dropdown';\r\nimport Grid from '@hedtech/powercampus-design-system/react/core/Grid';\r\nimport Link from '@hedtech/powercampus-design-system/react/core/Link';\r\nimport Modal from '@hedtech/powercampus-design-system/react/core/Modal';\r\nimport Pagination from '@hedtech/powercampus-design-system/react/core/Pagination';\r\nimport Table, { TableBody, TableCell, TableHead, TableRow } from '@hedtech/powercampus-design-system/react/core/Table';\r\nimport TextField from '@hedtech/powercampus-design-system/react/core/TextField';\r\n\r\n// Types\r\nimport { IDropDownOption } from '@hedtech/powercampus-design-system/types/IDropDownOption';\r\nimport { IInstitution } from '../../../Types/Applications/IInstitution';\r\nimport { IETSSearchModal } from '../../../Types/Resources/Admissions/IApplicationFormResources';\r\n\r\n// #endregion\r\n\r\n// #region Internal types\r\nexport interface IETSSearchModalProps {\r\n city?: string;\r\n countries: IDropDownOption[];\r\n country?: number;\r\n etsCode?: string;\r\n institutionName?: string;\r\n institutions?: IInstitution[];\r\n open: boolean;\r\n pageNumber: number;\r\n pageSize: number;\r\n rowsPerPageOptions: number[];\r\n state?: number;\r\n states: IDropDownOption[];\r\n totalInstitutions: number;\r\n\r\n // events\r\n onChangeDropDownETSSearch?: (optionSelected: IDropDownOption, id: string) => void;\r\n onChangePage: (event: any, page: number) => void;\r\n onChangeRowsPerPage: (event: any) => void;\r\n onChangeTextFieldETSSearch?: (event: any) => void;\r\n onClear: () => void;\r\n onClickLink: (institutionName?: string, etsCode?: string, ficeCode?: string,\r\n city?: string, stateProvinceId?: number, countryId?: number) => void;\r\n onClose: () => void;\r\n onSearch: () => void;\r\n\r\n // resources\r\n resources: IETSSearchModal;\r\n}\r\n// #endregion\r\n\r\n// #region Component\r\nconst ETSSearchModal: React.FC = (props: IETSSearchModalProps): JSX.Element => {\r\n const {\r\n city,\r\n countries,\r\n country,\r\n etsCode,\r\n institutionName,\r\n institutions,\r\n open,\r\n pageNumber,\r\n pageSize,\r\n rowsPerPageOptions,\r\n state,\r\n states,\r\n totalInstitutions,\r\n\r\n // events\r\n onChangeDropDownETSSearch,\r\n onChangePage,\r\n onChangeRowsPerPage,\r\n onChangeTextFieldETSSearch,\r\n onClear,\r\n onClickLink,\r\n onClose,\r\n onSearch,\r\n\r\n // resources\r\n resources\r\n } = props;\r\n\r\n const emptyOptionState: IDropDownOption = {\r\n description: resources.lblEmptyOptionState,\r\n value: ''\r\n };\r\n\r\n const emptyOptionCountry: IDropDownOption = {\r\n description: resources.lblEmptyOptionCountry,\r\n value: ''\r\n };\r\n\r\n const footerModal: JSX.Element = (\r\n \r\n \r\n {resources.btnSearch}\r\n \r\n \r\n {resources.btnClear}\r\n \r\n \r\n );\r\n\r\n let tableInstitutions: JSX.Element | undefined;\r\n if (institutions && institutions.length > 0) {\r\n tableInstitutions = (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {resources.lblInstitutionName}\r\n \r\n \r\n {resources.lblETSCode}\r\n \r\n \r\n {resources.lblFICECode}\r\n \r\n \r\n {resources.lblCity}\r\n \r\n \r\n {resources.lblState}\r\n \r\n \r\n {resources.lblCountry}\r\n \r\n \r\n \r\n \r\n {\r\n institutions.map(\r\n (row, i) => (\r\n \r\n \r\n \r\n \r\n {row.name}\r\n \r\n \r\n \r\n \r\n \r\n {row.etsCode}\r\n \r\n \r\n \r\n \r\n {row.ficeCode}\r\n \r\n \r\n \r\n \r\n {row.city}\r\n \r\n \r\n \r\n \r\n {row.stateDesc}\r\n \r\n \r\n \r\n \r\n {row.countryDesc}\r\n \r\n \r\n \r\n )\r\n )\r\n }\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n let paginationComponent: JSX.Element | undefined;\r\n if (institutions && institutions.length > 0) {\r\n paginationComponent = (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n let bodyModal: JSX.Element;\r\n bodyModal = (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n {footerModal}\r\n \r\n
\r\n
\r\n {tableInstitutions}\r\n {paginationComponent}\r\n \r\n );\r\n\r\n return (\r\n \r\n {bodyModal}\r\n \r\n );\r\n};\r\n// #endregion\r\n\r\n// Export: Component\r\nexport default ETSSearchModal;","/* Copyright 2019 Ellucian Company L.P. and its affiliates.\r\n* File: FieldsGroupHandler.tsx\r\n* Type: Presentation component */\r\n\r\n// #region Imports\r\nimport React from 'react';\r\n\r\n// Internal components\r\nimport { IApplicationHandler } from '../../../Types/Resources/Admissions/IApplicationFormResources';\r\nimport FieldsHandler from './FieldsHandler';\r\n\r\n// Core components\r\nimport Button from '@hedtech/powercampus-design-system/react/core/Button';\r\nimport Grid from '@hedtech/powercampus-design-system/react/core/Grid';\r\nimport Text from '@hedtech/powercampus-design-system/react/core/Text';\r\n\r\n// Helpers\r\nimport Tokens from '@hedtech/powercampus-design-system/react/core/styles/Tokens';\r\nimport { createStyles, withStyles, WithStyles } from '@hedtech/powercampus-design-system/react/core/styles/withStyles';\r\n\r\n// Types\r\nimport { IDropDownOption } from '@hedtech/powercampus-design-system/types/IDropDownOption';\r\nimport { IApplicationErrors } from '../../../Types/Applications/IApplicationErrors';\r\nimport { IFieldsGroup } from '../../../Types/Form/IFieldsGroup';\r\n// #endregion\r\n\r\n// #region Internal types\r\nexport interface IFieldsGroupHandlerProps {\r\n dateTimeCulture: string;\r\n errors: IApplicationErrors[];\r\n expanded: boolean | string;\r\n fieldGroup: IFieldsGroup;\r\n fieldGroupIndex: number;\r\n firstDayOfWeek: number;\r\n governmentIdFormat: string;\r\n isExpansionPanel: boolean;\r\n isHorizontalAligned: boolean;\r\n shortDatePattern: string;\r\n stepIndex: number;\r\n\r\n resources: IApplicationHandler;\r\n\r\n onAddMore: (fieldGroup: IFieldsGroup, stepIndex: number, fieldGroupIndex: number) => void;\r\n onChangeCheckBox: (event: React.ChangeEvent) => void;\r\n onChangeDateTimeField: (date: string, id: string, isValid: boolean) => void;\r\n onChangeDropDown: (optionSelected: IDropDownOption, id: string) => void;\r\n onChangeExpansionPanel: (label: string) => void;\r\n onChangeListCheckbox: (event: any) => void;\r\n onChangeRadioGroup: (event: React.ChangeEvent, value: string) => void;\r\n onChangeTextField: (event: React.ChangeEvent) => void;\r\n onClickButton: (event: React.MouseEvent) => void;\r\n onDeleteItem: (event: any) => void;\r\n}\r\n\r\nconst styles = (() => createStyles({\r\n buttonTop: {\r\n marginTop: Tokens.spacing30\r\n },\r\n groupTitleBottom: {\r\n marginBottom: 0\r\n }\r\n}));\r\n\r\ntype PropsWithStyles = IFieldsGroupHandlerProps & WithStyles;\r\n\r\n// #endregion\r\n\r\n// #region Component\r\nconst FieldsGroupHandler: React.FC = (props: PropsWithStyles): JSX.Element => {\r\n const {\r\n classes,\r\n dateTimeCulture,\r\n errors,\r\n expanded,\r\n fieldGroup,\r\n fieldGroupIndex,\r\n firstDayOfWeek,\r\n governmentIdFormat,\r\n isExpansionPanel,\r\n isHorizontalAligned,\r\n shortDatePattern,\r\n stepIndex,\r\n resources,\r\n\r\n onAddMore,\r\n onChangeCheckBox,\r\n onChangeDropDown,\r\n onChangeDateTimeField,\r\n onChangeExpansionPanel,\r\n onChangeListCheckbox,\r\n onChangeRadioGroup,\r\n onChangeTextField,\r\n onClickButton,\r\n onDeleteItem\r\n } = props;\r\n\r\n const isDisabled: boolean = fieldGroup.isDisableButton ? fieldGroup.isDisableButton : false;\r\n\r\n const content: JSX.Element[] = [];\r\n /* Field Id will be created in this way:\r\n * fieldId_sectionIndex_fieldIndex_positionInCollection\r\n * */\r\n const addMore = () => onAddMore(fieldGroup, stepIndex, fieldGroupIndex);\r\n if (fieldGroup.isMultiple) {\r\n content.push(\r\n \r\n \r\n \r\n );\r\n }\r\n let labelElement: JSX.Element | undefined;\r\n if (fieldGroup.label) {\r\n labelElement = (\r\n \r\n {fieldGroup.label}\r\n \r\n );\r\n }\r\n let instructionsElement: JSX.Element | undefined;\r\n if (fieldGroup.instructions) {\r\n instructionsElement = (\r\n \r\n {fieldGroup.instructions}\r\n \r\n );\r\n }\r\n\r\n content.push(\r\n \r\n {(fieldGroup.label !== '' || fieldGroup.instructions) &&\r\n fieldGroup.id !== 'confirmationGroup' ?\r\n (\r\n \r\n \r\n {labelElement}\r\n {instructionsElement}\r\n \r\n \r\n ) : undefined}\r\n \r\n \r\n );\r\n\r\n if (fieldGroup.isMultiple && Number(fieldGroup.maximumAllowed) !== 1) {\r\n content.push(\r\n \r\n \r\n \r\n {resources.lblAddNew}\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n <>\r\n {content}\r\n \r\n );\r\n};\r\n// #endregion\r\n\r\n// Export: Component\r\nexport default withStyles(styles)(FieldsGroupHandler);","/* Copyright 2018 - 2022 Ellucian Company L.P. and its affiliates.\r\n * File: FieldsHandle.tsx\r\n * Type: Presentation component */\r\n\r\n// #region Imports\r\nimport React from 'react';\r\n\r\n// Core components\r\nimport Button from '@hedtech/powercampus-design-system/react/core/Button';\r\nimport Checkbox from '@hedtech/powercampus-design-system/react/core/Checkbox';\r\nimport DatePicker from '@hedtech/powercampus-design-system/react/core/DatePicker';\r\nimport Dropdown from '@hedtech/powercampus-design-system/react/core/Dropdown';\r\nimport ExpansionPanel from '@hedtech/powercampus-design-system/react/core/ExpansionPanel';\r\nimport FormControl, { FormControlLabel, FormGroup } from '@hedtech/powercampus-design-system/react/core/FormControl';\r\nimport Grid from '@hedtech/powercampus-design-system/react/core/Grid';\r\nimport Icon from '@hedtech/powercampus-design-system/react/core/Icon';\r\nimport IconButton from '@hedtech/powercampus-design-system/react/core/IconButton';\r\nimport List from '@hedtech/powercampus-design-system/react/core/List';\r\nimport Paragraph, { TextColor, TextSize } from '@hedtech/powercampus-design-system/react/core/Paragraph';\r\nimport RadioGroup from '@hedtech/powercampus-design-system/react/core/RadioGroup';\r\nimport Text from '@hedtech/powercampus-design-system/react/core/Text';\r\nimport TextField from '@hedtech/powercampus-design-system/react/core/TextField';\r\nimport TextLink from '@hedtech/powercampus-design-system/react/core/TextLink';\r\n\r\n// Internal components\r\nimport { IApplicationHandler } from '../../../Types/Resources/Admissions/IApplicationFormResources';\r\n\r\n// Helpers\r\nimport Tokens from '@hedtech/powercampus-design-system/react/core/styles/Tokens';\r\nimport { createStyles, withStyles, WithStyles } from '@hedtech/powercampus-design-system/react/core/styles/withStyles';\r\nimport { isWidthUp, withWidth, WithWidth } from '@hedtech/powercampus-design-system/react/core/withWidth';\r\n\r\n// Types\r\nimport { IDropDownOption } from '@hedtech/powercampus-design-system/types/IDropDownOption';\r\nimport { IApplicationErrors } from '../../../Types/Applications/IApplicationErrors';\r\nimport { IApplicationIpeds } from '../../../Types/Applications/IApplicationIpeds';\r\nimport { IFieldForm } from '../../../Types/Form/IFieldForm';\r\n// #endregion\r\n\r\n// #region Internal types\r\nexport interface IFieldsHandlerProps {\r\n dateTimeCulture: string;\r\n errors: IApplicationErrors[];\r\n expandedPanelId: boolean | string;\r\n fields: IFieldForm[];\r\n governmentIdFormat: string;\r\n groupIndex: number;\r\n isExpansionPanel: boolean;\r\n isHorizontalAligned: boolean;\r\n shortDatePattern: string;\r\n stepIndex: number;\r\n\r\n resources: IApplicationHandler;\r\n\r\n onClickButton: (event: React.MouseEvent) => void;\r\n onChangeCheckBox: (event: React.ChangeEvent) => void;\r\n onChangeDateTimeField: (date: string, id: string, isValid: boolean) => void;\r\n onDeleteItem: (event: any) => void;\r\n onChangeDropDown: (optionSelected: IDropDownOption, id: string) => void;\r\n onChangeExpansionPanel: (label: string) => void;\r\n onChangeListCheckbox: (event: any) => void;\r\n onChangeRadioGroup: (event: React.ChangeEvent, value: string) => void;\r\n onChangeTextField: (event: React.ChangeEvent) => void;\r\n}\r\n\r\nconst styles = createStyles({\r\n category: {\r\n marginBottom: Tokens.spacing30,\r\n marginLeft: Tokens.spacing50\r\n },\r\n federalCategory: {\r\n '& > span:nth-child(2)': {\r\n fontWeight: Tokens.fontWeightBold\r\n },\r\n marginBottom: Tokens.spacing30\r\n }\r\n});\r\n\r\ntype PropsWithStyles = IFieldsHandlerProps & WithStyles & WithWidth;\r\n// #endregion\r\n\r\n// #region Component\r\nconst FieldsHandler: React.FC = (props: PropsWithStyles): JSX.Element => {\r\n const {\r\n classes,\r\n dateTimeCulture,\r\n errors,\r\n expandedPanelId,\r\n fields,\r\n governmentIdFormat,\r\n groupIndex,\r\n isExpansionPanel,\r\n isHorizontalAligned,\r\n resources,\r\n shortDatePattern,\r\n stepIndex,\r\n width,\r\n\r\n onChangeCheckBox,\r\n onChangeDropDown,\r\n onChangeDateTimeField,\r\n onChangeExpansionPanel,\r\n onChangeListCheckbox,\r\n onChangeRadioGroup,\r\n onChangeTextField,\r\n onClickButton,\r\n onDeleteItem\r\n } = props;\r\n\r\n const elements: JSX.Element[] = [];\r\n\r\n // General Sections Arrays\r\n let ids: string[] = [];\r\n const sectionIndexes: number[] = [];\r\n let sectionElements: JSX.Element[] = [];\r\n const sectionContainers: JSX.Element[] = [];\r\n let sectionIndex: number;\r\n\r\n // Header Arrays\r\n let headerDeleteElement: JSX.Element[] = [];\r\n let headerTitleElements: string[] = [];\r\n const firstHeaderTitleElement: string[] = [];\r\n\r\n const getId = (idStringArray: string[], index: number): number => Number(idStringArray[index]);\r\n\r\n const setHeaderTitleElements = (field: IFieldForm): void => {\r\n if (field.isExpansionPanelHeader) {\r\n if (field.value) {\r\n if (headerTitleElements[0] === resources.lblNew) {\r\n headerTitleElements.splice(0, 1);\r\n }\r\n if (field.componentType && field.componentType === 'Dropdown') {\r\n let selectedOption: number = 0;\r\n if (field.data && field.data.options && field.data.options.length > 0) {\r\n selectedOption =\r\n field.data.options.findIndex(x => x.value === field.value);\r\n if (selectedOption > -1) {\r\n headerTitleElements.push(`${field.data.options[selectedOption].description} `);\r\n }\r\n }\r\n }\r\n else {\r\n headerTitleElements.push(`${field.value} `);\r\n }\r\n }\r\n if (headerTitleElements.length === 0) {\r\n headerTitleElements.push(resources.lblNew);\r\n }\r\n }\r\n };\r\n\r\n const fillElements = (fieldElement: JSX.Element, field: IFieldForm): void => {\r\n if (isExpansionPanel && field.componentType === 'DeleteIconButton') {\r\n headerDeleteElement.push(fieldElement);\r\n }\r\n else {\r\n sectionElements.push(fieldElement);\r\n }\r\n };\r\n\r\n const setMultipleFields = (field: IFieldForm, fieldElement: JSX.Element, id: string) => {\r\n ids = field.data.id.split('|');\r\n sectionIndex = errors[getId(ids, 1)].groupErrors[getId(ids, 2)].sectionErrors.findIndex(\r\n section => section.sectionIndex === Number(getId(ids, 4))\r\n );\r\n // Verify if section exists\r\n if (sectionIndexes.includes(getId(ids, 4))) {\r\n setHeaderTitleElements(field);\r\n fillElements(fieldElement, field);\r\n }\r\n // Create a new section\r\n else {\r\n sectionElements = [];\r\n headerDeleteElement = [];\r\n headerTitleElements = [];\r\n\r\n setHeaderTitleElements(field);\r\n fillElements(fieldElement, field);\r\n sectionIndexes.push(getId(ids, 4));\r\n\r\n sectionContainers.push(\r\n isExpansionPanel ? (\r\n -1 ?\r\n errors[getId(ids, 1)].groupErrors[getId(ids, 2)].sectionErrors.length > 0 ?\r\n errors[getId(ids, 1)].groupErrors[getId(ids, 2)].sectionErrors[sectionIndex].isSectionError\r\n : false\r\n : false}\r\n background=\"gray\"\r\n expandIcon={}\r\n expanded={expandedPanelId === `panel|${stepIndex}|${groupIndex}|${getId(ids, 4)}`}\r\n header={(\r\n \r\n \r\n 0 && sectionIndex > -1 ?\r\n errors[getId(ids, 1)].groupErrors[getId(ids, 2)].sectionErrors[sectionIndex].isSectionError ?\r\n 'error' : undefined\r\n : undefined}\r\n >\r\n {headerTitleElements}\r\n \r\n \r\n \r\n {headerDeleteElement}\r\n \r\n \r\n )}\r\n key={`expansionPanel|${field.data.id}|${id}`}\r\n onChange={onChangeExpansionPanel(`panel|${stepIndex}|${groupIndex}|${getId(ids, 4)}`)}\r\n >\r\n \r\n {sectionElements}\r\n \r\n \r\n ) : (\r\n \r\n \r\n {sectionElements}\r\n \r\n \r\n )\r\n );\r\n }\r\n };\r\n if (errors) {\r\n if (errors[stepIndex].groupErrors[groupIndex].groupId === 'addressInformationGroup') {\r\n firstHeaderTitleElement.push(`${resources.lblPrimary} `);\r\n }\r\n }\r\n\r\n fields.forEach((field, j) => {\r\n let fieldElement: JSX.Element | undefined;\r\n\r\n let id: string;\r\n if (field.data.modified) {\r\n id = `${field.data.id}`;\r\n }\r\n else {\r\n id = `${field.data.id}|${stepIndex}|${groupIndex}|${j}`;\r\n }\r\n\r\n let fieldSize: false | 'auto' | true | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;\r\n switch (field.gridSize) {\r\n case 'XS':\r\n fieldSize = 2;\r\n break;\r\n case 'S':\r\n fieldSize = 3;\r\n break;\r\n case 'M':\r\n fieldSize = 4;\r\n break;\r\n case 'L':\r\n fieldSize = 6;\r\n break;\r\n case 'XL':\r\n fieldSize = 12;\r\n break;\r\n default:\r\n fieldSize = 12;\r\n }\r\n\r\n switch (field.componentType) {\r\n case 'Button':\r\n fieldSize = isHorizontalAligned ? 3 : fieldSize;\r\n fieldElement = (\r\n \r\n \r\n {field.data.label}\r\n \r\n \r\n );\r\n break;\r\n case 'TextField':\r\n if (id.substr(0, 'postalCodeId'.length) === 'postalCodeId' ||\r\n id.substr(0, 'educationEtsCodeId'.length) === 'educationEtsCodeId') {\r\n let buttonId: string = '';\r\n let isPostalCode: boolean = false;\r\n if (field.data.modified) {\r\n if (id.substr(0, 'postalCodeId'.length) === 'postalCodeId') {\r\n buttonId = id.replace('postalCodeId', 'postalCodeButtonId');\r\n }\r\n if (id.substr(0, 'educationEtsCodeId'.length) === 'educationEtsCodeId') {\r\n buttonId = id.replace('educationEtsCodeId', 'educationEtsCodeButtonId');\r\n }\r\n }\r\n else {\r\n if (id.substr(0, 'postalCodeId'.length) === 'postalCodeId') {\r\n buttonId = `postalCodeButtonId|${stepIndex}|${groupIndex}|${j + 1}`;\r\n isPostalCode = true;\r\n }\r\n if (id.substr(0, 'educationEtsCodeId'.length) === 'educationEtsCodeId') {\r\n buttonId = `educationEtsCodeButtonId|${stepIndex}|${groupIndex}|${j + 1}`;\r\n }\r\n }\r\n\r\n fieldElement = (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {resources.lblSearch}\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n else {\r\n let format: string | undefined;\r\n if (id.substr(0, 'governmentId'.length) === 'governmentId' && governmentIdFormat) {\r\n format = governmentIdFormat;\r\n }\r\n\r\n fieldElement = (\r\n \r\n \r\n \r\n );\r\n }\r\n break;\r\n\r\n case 'Dropdown':\r\n const emptyOption: IDropDownOption = {\r\n description: String(resources.lblSelect),\r\n value: ''\r\n };\r\n let exist: boolean = false;\r\n if (field.default && field.data.options) {\r\n field.data.options.forEach(option => {\r\n if (option.value.toString() === field.default.toString()) {\r\n exist = true;\r\n }\r\n });\r\n }\r\n fieldElement = (\r\n \r\n \r\n \r\n );\r\n break;\r\n\r\n case 'Checkbox':\r\n let checked: boolean = false;\r\n if (field.value !== undefined) {\r\n checked = field.value;\r\n }\r\n fieldElement = (\r\n \r\n \r\n \r\n );\r\n break;\r\n\r\n case 'DatePicker':\r\n fieldElement = (\r\n \r\n \r\n \r\n );\r\n break;\r\n\r\n case 'DeleteIconButton':\r\n fieldSize = isHorizontalAligned ? 1 : fieldSize;\r\n const idDelete: string = field.data.id;\r\n fieldElement = (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n break;\r\n\r\n case 'CheckboxList':\r\n let messageRequired: JSX.Element | undefined;\r\n if (field.data.error && field.isRequired) {\r\n messageRequired = (\r\n \r\n {field.data.helperText}\r\n \r\n );\r\n }\r\n else {\r\n messageRequired = undefined;\r\n }\r\n const chkElements: JSX.Element[] = [];\r\n let isCheck: boolean;\r\n if (field.data.options) {\r\n field.data.options.forEach((option, i) => {\r\n isCheck = false;\r\n if (field.value) {\r\n const array: string[] = Object.values(field.value.split(','));\r\n if (field.value && array.length > 0) {\r\n const index: number = array.findIndex(x => x === option.value.toString());\r\n if (index > -1) {\r\n isCheck = true;\r\n }\r\n }\r\n }\r\n chkElements.push(\r\n \r\n )\r\n }\r\n label={option.description}\r\n key={`${field.data.id}|list|${i}`}\r\n />\r\n );\r\n });\r\n }\r\n fieldElement = (\r\n \r\n {messageRequired}\r\n {field.data.label ? (\r\n \r\n {field.isRequired ? `${field.data.label} *` : `${field.data.label}`}\r\n \r\n ) : undefined}\r\n \r\n \r\n {chkElements}\r\n \r\n \r\n \r\n );\r\n break;\r\n\r\n case 'Text':\r\n const errorColor: TextColor | undefined = field.data.error ? 'error' : undefined;\r\n let colorText: TextColor | undefined;\r\n if (!errorColor) {\r\n colorText = field.color ? field.color : undefined;\r\n }\r\n else {\r\n colorText = errorColor;\r\n }\r\n const size: TextSize | undefined = field.size;\r\n\r\n if (!field.isWithLink) {\r\n fieldElement = (\r\n \r\n \r\n {field.data.label}\r\n \r\n \r\n );\r\n }\r\n else {\r\n if (field.actionUrl && field.data.label) {\r\n const actions: string[] = field.actionUrl.split('|');\r\n fieldElement = (\r\n \r\n {\r\n if (action.substr(0, 'mailto:'.length) === 'mailto:' ||\r\n action.substr(0, 'tel:'.length) === 'tel:') {\r\n return ((_event: React.MouseEvent) => {\r\n window.location.href = `${action}`;\r\n });\r\n }\r\n else {\r\n return ((_event: React.MouseEvent) => {\r\n window.open(`${action}`, '_blank');\r\n });\r\n }\r\n })\r\n }\r\n />\r\n \r\n );\r\n }\r\n }\r\n break;\r\n\r\n case 'RadioGroup':\r\n const options: IDropDownOption[] = [];\r\n fieldElement = (\r\n \r\n \r\n {field.data.label}\r\n \r\n \r\n \r\n );\r\n break;\r\n\r\n case 'NestedCheckboxList':\r\n const array: IApplicationIpeds[] = [];\r\n if (field.value) {\r\n const ipedsArray = field.value.split(',');\r\n ipedsArray.forEach(iped => {\r\n const ipedItem = iped.split('$');\r\n if (ipedItem[0] !== '') {\r\n if (ipedItem.length > 1) {\r\n array.push({\r\n ipedsEthnicityId: ipedItem[1],\r\n ipedsFederalCategoryId: ipedItem[0]\r\n });\r\n }\r\n else {\r\n array.push({\r\n ipedsFederalCategoryId: ipedItem[0]\r\n });\r\n }\r\n }\r\n });\r\n }\r\n let errorMessage: JSX.Element | undefined;\r\n if (field.data.error) {\r\n errorMessage = (\r\n \r\n {field.data.helperText}\r\n \r\n );\r\n }\r\n else {\r\n errorMessage = undefined;\r\n }\r\n const elementsList: JSX.Element[] = [];\r\n if (field.data.complexOptions && field.data.complexOptions.length > 0) {\r\n field.data.complexOptions.forEach(complexItem => {\r\n const elements: JSX.Element[] = [];\r\n if (complexItem.options && complexItem.options.length > 0) {\r\n complexItem.options.forEach(item => {\r\n let childIsChecked: boolean = false;\r\n if (array.length > 0) {\r\n let index: number = -1;\r\n index =\r\n array.findIndex(x =>\r\n (x.ipedsEthnicityId ?\r\n x.ipedsEthnicityId.toString() : '') === item.value.toString() &&\r\n x.ipedsFederalCategoryId.toString() === complexItem.value.toString());\r\n if (index > -1) {\r\n childIsChecked = true;\r\n }\r\n }\r\n elements.push(\r\n \r\n )\r\n }\r\n label={item.description}\r\n />\r\n );\r\n });\r\n }\r\n let parentIsChecked: boolean = false;\r\n if (array.length > 0) {\r\n let index: number = -1;\r\n index =\r\n array.findIndex(x =>\r\n (x.ipedsFederalCategoryId ?\r\n x.ipedsFederalCategoryId.toString() : '') === complexItem.value.toString());\r\n if (index > -1) {\r\n parentIsChecked = true;\r\n }\r\n }\r\n elementsList.push(\r\n <>\r\n \r\n )\r\n }\r\n label={complexItem.description}\r\n />\r\n {elements}\r\n \r\n );\r\n });\r\n }\r\n fieldElement = (\r\n \r\n {field.data.label ? (\r\n \r\n {field.isRequired ? `${field.data.label} *` : `${field.data.label}`}\r\n \r\n ) : undefined}\r\n \r\n {errorMessage}\r\n \r\n \r\n {elementsList}\r\n \r\n \r\n \r\n \r\n );\r\n break;\r\n case 'Link':\r\n if (field.data.label) {\r\n fieldElement = (\r\n \r\n \r\n {field.data.label}\r\n \r\n \r\n );\r\n }\r\n break;\r\n case 'IconLinkEmail':\r\n if (field.data.label) {\r\n fieldElement = (\r\n \r\n { if (field.actionUrl) { window.location.href = field.actionUrl } }}\r\n >\r\n {field.data.label}\r\n \r\n \r\n );\r\n }\r\n break;\r\n case 'IconLinkPhone':\r\n if (field.data.label) {\r\n fieldElement = (\r\n \r\n { if (field.actionUrl) { window.location.href = field.actionUrl } }}\r\n >\r\n {field.data.label}\r\n \r\n \r\n );\r\n }\r\n break;\r\n case 'Divider':\r\n fieldElement = (\r\n \r\n
\r\n
\r\n );\r\n break;\r\n case 'Image':\r\n fieldElement = (\r\n \r\n \r\n \r\n );\r\n break;\r\n case 'HtmlElement':\r\n fieldElement = (\r\n \r\n \r\n
\r\n \r\n \r\n );\r\n break;\r\n }\r\n\r\n /* Determines the expansion panel header\r\n * for the first element of a group */\r\n if (field.isExpansionPanelHeader && field.value) {\r\n if (!field.data.modified) {\r\n if (field.componentType && field.componentType === 'Dropdown') {\r\n let selectedOption: number = 0;\r\n if (field.data && field.data.options && field.data.options.length > 0) {\r\n selectedOption =\r\n field.data.options.findIndex(x => x.value === field.value);\r\n if (selectedOption > -1) {\r\n firstHeaderTitleElement.push(`${field.data.options[selectedOption].description} `);\r\n }\r\n }\r\n }\r\n else {\r\n firstHeaderTitleElement.push(`${field.value} `);\r\n }\r\n }\r\n }\r\n\r\n /* Determines if the element is copied */\r\n if (fieldElement) {\r\n if (field.data.modified) {\r\n setMultipleFields(field, fieldElement, id);\r\n }\r\n else {\r\n elements.push(fieldElement);\r\n }\r\n }\r\n });\r\n\r\n return (\r\n isExpansionPanel && sectionContainers.length > 0 ? (\r\n <>\r\n }\r\n header={(\r\n \r\n {firstHeaderTitleElement.length > 0 ? firstHeaderTitleElement : resources.lblNew}\r\n \r\n )}\r\n onChange={onChangeExpansionPanel(`panel|${stepIndex}|${groupIndex}`)}\r\n >\r\n \r\n {elements}\r\n \r\n \r\n {sectionContainers}\r\n \r\n ) : (\r\n <>\r\n \r\n {elements}\r\n \r\n {sectionContainers}\r\n \r\n\r\n ));\r\n};\r\n// #endregion\r\n\r\n// Export: Component\r\nexport default withStyles(styles)(withWidth()(FieldsHandler));","/* Copyright 2019 - 2021 Ellucian Company L.P. and its affiliates.\r\n * File: PaymentDetailModal.tsx\r\n * Type: Container component */\r\n\r\n// #region Imports\r\nimport classnames from 'classnames';\r\nimport React from 'react';\r\n\r\n// Core components\r\nimport Button, { ButtonGroup } from '@hedtech/powercampus-design-system/react/core/Button';\r\nimport Grid from '@hedtech/powercampus-design-system/react/core/Grid';\r\nimport Icon from '@hedtech/powercampus-design-system/react/core/Icon';\r\nimport IconButton from '@hedtech/powercampus-design-system/react/core/IconButton';\r\nimport Modal from '@hedtech/powercampus-design-system/react/core/Modal';\r\nimport RadioGroup from '@hedtech/powercampus-design-system/react/core/RadioGroup';\r\nimport Table, { TableBody, TableCell, TableFooter, TableHead, TableRow } from '@hedtech/powercampus-design-system/react/core/Table';\r\nimport Text from '@hedtech/powercampus-design-system/react/core/Text';\r\nimport TextField from '@hedtech/powercampus-design-system/react/core/TextField';\r\n\r\n// Internal components\r\nimport Print from './Print';\r\n\r\n// Helpers\r\nimport Constants from '@hedtech/powercampus-design-system/helpers/Constants';\r\nimport Format from '@hedtech/powercampus-design-system/helpers/Format';\r\nimport Tokens from '@hedtech/powercampus-design-system/react/core/styles/Tokens';\r\nimport { createStyles, Theme, withStyles, WithStyles } from '@hedtech/powercampus-design-system/react/core/styles/withStyles';\r\n\r\n// Types\r\nimport { IJsonResult } from '@hedtech/powercampus-design-system/types/IJsonResult';\r\nimport { ILogData } from '@hedtech/powercampus-design-system/types/ILogData';\r\nimport { IRadioOption } from '@hedtech/powercampus-design-system/types/IRadioOption';\r\nimport { PaymentOrigin } from '../../Types/Enum/PaymentOrigin';\r\nimport { IPaymentDiscountCoupon } from '../../Types/Payment/IPaymentDiscountCoupon';\r\nimport { IPaymentInfo } from '../../Types/Payment/IPaymentInfo';\r\nimport { IPaymentDetailModalResources } from '../../Types/Resources/Generic/IPaymentDetailModalResources';\r\nimport { IPrintResources } from '../../Types/Resources/Generic/IPrintResources';\r\n\r\n// Helpers\r\nimport LogData from '@hedtech/powercampus-design-system/helpers/LogData';\r\n\r\n// Requests\r\nimport RequestsLayout from '@hedtech/powercampus-design-system/requests/LayoutRequests';\r\nimport Resolver from '@hedtech/powercampus-design-system/helpers/Resolver';\r\n\r\n// State Management\r\nimport LayoutActions from '@hedtech/powercampus-design-system/flux/actions/LayoutActions';\r\n// #endregion Imports\r\n\r\n// #region Types\r\nexport interface IPaymentDetailModalProps {\r\n coupons: IPaymentDiscountCoupon[];\r\n enableOnlinePayment: boolean;\r\n open: boolean;\r\n paymentInfo: IPaymentInfo;\r\n paymentInfoNoChanges: IPaymentInfo;\r\n paymentMethod?: string;\r\n paymentOrigin: PaymentOrigin;\r\n titleName?: string;\r\n yearTerm?: string;\r\n onApplyCoupon?: () => void;\r\n onChangeCouponCode?: (event: any) => void;\r\n onChangePaymentAnotherAmount?: (event: any) => void;\r\n onChangePaymentMethod?: (event: any) => void;\r\n onClose: () => void;\r\n onPay: () => void;\r\n onRemoveCoupon?: (event: any) => void;\r\n}\r\n\r\ninterface IPaymentDetailModalRes extends IPaymentDetailModalResources {\r\n printing: IPrintResources;\r\n}\r\n\r\ninterface IPaymentDetailModalState {\r\n componentError: boolean;\r\n resources?: IPaymentDetailModalRes;\r\n}\r\n\r\nconst styles = (theme: Theme) => createStyles({\r\n amountContainer: {\r\n backgroundColor: Tokens.colorBrandNeutral200,\r\n height: '100px',\r\n marginBottom: Tokens.spacing50,\r\n paddingBottom: Tokens.spacing50,\r\n paddingLeft: Tokens.spacing40,\r\n paddingRight: Tokens.spacing40,\r\n paddingTop: Tokens.spacing50,\r\n width: 'auto'\r\n },\r\n discountApplied: {\r\n color: Tokens.colorTextAlertNeutral\r\n },\r\n footerPayment: {\r\n backgroundColor: Tokens.colorBrandNeutral200,\r\n paddingBottom: Tokens.spacing40,\r\n paddingTop: Tokens.spacing30\r\n },\r\n footerTextSpacing: {\r\n marginTop: Tokens.spacing30\r\n },\r\n instructionsContainer: {\r\n marginBottom: Tokens.sizingSmall,\r\n marginTop: Tokens.sizingSmall\r\n },\r\n noBottomBorder: {\r\n borderBottomColor: `${Tokens.colorBrandNeutral100}!important`\r\n },\r\n noDeleteButton: {\r\n width: Tokens.spacing70\r\n },\r\n table: {\r\n [theme.breakpoints.up('md')]: {\r\n // Width\r\n '& > thead > tr > th:nth-child(1)': {\r\n width: '50%'\r\n }\r\n }\r\n }\r\n});\r\n\r\ntype PropsWithStyles = IPaymentDetailModalProps & WithStyles;\r\n// #endregion Types\r\n\r\n// #region Component\r\nclass PaymentDetailModal extends React.Component {\r\n private idModule: string;\r\n private idPage: string;\r\n\r\n public readonly state: Readonly;\r\n\r\n public constructor(props) {\r\n super(props);\r\n\r\n // #region Initialize Variables and State\r\n this.idModule = 'Generic';\r\n this.idPage = 'PaymentDetailModal';\r\n this.state = this.getInitialState();\r\n // #endregion Initialize Variables and State\r\n }\r\n\r\n private getInitialState(): IPaymentDetailModalState {\r\n let resources: IPaymentDetailModalRes | undefined;\r\n if (this.state) {\r\n resources = this.state.resources;\r\n }\r\n return {\r\n componentError: false,\r\n resources: resources\r\n };\r\n }\r\n\r\n // #region Error Functions\r\n private logError(logData: ILogData): void {\r\n LayoutActions.setLogData(logData);\r\n }\r\n\r\n private redirectError(code: number): void {\r\n LayoutActions.setRedirectCode(code);\r\n }\r\n\r\n // #endregion Error Functions\r\n\r\n // #region Resolvers\r\n private resolveGetResources = (json: string): void => {\r\n try {\r\n const result: IJsonResult | undefined\r\n = Resolver(json, this.resolveGetResources.name);\r\n if (result?.status) {\r\n this.setState({\r\n resources: result.data\r\n });\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.resolveGetResources.name, e));\r\n }\r\n };\r\n // #endregion Resolvers\r\n\r\n // #region Lifecycle\r\n public componentDidMount(): void {\r\n try {\r\n RequestsLayout.getResources(this.idModule, this.idPage,\r\n this.resolveGetResources,\r\n this.logError);\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.componentDidMount.name, e));\r\n }\r\n }\r\n\r\n public componentDidCatch(error, info): void {\r\n this.setState({\r\n componentError: true\r\n }, () => {\r\n this.logError(LogData.fromComponentException(this.componentDidCatch.name, error, info));\r\n this.redirectError(500);\r\n });\r\n }\r\n // #endregion Lifecycle\r\n\r\n public render(): JSX.Element {\r\n const {\r\n classes,\r\n coupons,\r\n enableOnlinePayment,\r\n open,\r\n paymentInfo,\r\n paymentInfoNoChanges,\r\n paymentMethod,\r\n paymentOrigin,\r\n titleName,\r\n yearTerm,\r\n onApplyCoupon,\r\n onChangeCouponCode,\r\n onChangePaymentAnotherAmount,\r\n onChangePaymentMethod,\r\n onClose,\r\n onPay,\r\n onRemoveCoupon\r\n } = this.props;\r\n\r\n const {\r\n componentError,\r\n resources\r\n } = this.state;\r\n\r\n let contentPage: JSX.Element | undefined;\r\n if (!componentError && resources) {\r\n let paymentMethods: IRadioOption[] | undefined;\r\n let hasCharges: boolean = false;\r\n\r\n if (paymentOrigin === PaymentOrigin.Registration) {\r\n paymentMethods = [];\r\n hasCharges = paymentInfo.currentBalanceValue > 0 || paymentInfo.totalAmountValue > 0;\r\n\r\n if (hasCharges) {\r\n paymentMethods.push({\r\n description: Format.toString(resources.formatBalance, [paymentInfo.currentBalance]),\r\n disabled: paymentInfo.currentBalanceValue < 0,\r\n value: '1'\r\n } as IRadioOption);\r\n // TODO: Review if this code is useful for the next story about the total charges and taxes\r\n // paymentMethods.push({\r\n // description: Format.toString(resources.formatTotal, [paymentInfo.totalAmount]),\r\n // disabled: paymentInfo.totalAmountValue < 0,\r\n // value: '2'\r\n // } as IRadioOption);\r\n\r\n let errorAnotherAmount: boolean = false;\r\n let errorTextAnotherAmount: string | undefined;\r\n if (paymentMethod === '0' && paymentInfo.modified) {\r\n errorAnotherAmount = !Boolean(paymentInfo.anotherAmount)\r\n || paymentInfo.invalidAnotherAmount;\r\n errorTextAnotherAmount = !Boolean(paymentInfo.anotherAmount) ?\r\n resources.lblAnotherAmountRequired\r\n : (paymentInfo.invalidAnotherAmount ?\r\n resources.lblAnotherAmountInvalid\r\n : undefined);\r\n }\r\n\r\n paymentMethods.push({\r\n description: resources.lblAnotherAmount,\r\n nodeComplement: (\r\n \r\n ),\r\n value: '0'\r\n } as IRadioOption);\r\n }\r\n }\r\n else if (paymentOrigin === PaymentOrigin.ConEdRegistration && !paymentInfo.useTransactionChargesOnly) {\r\n hasCharges = paymentInfo.paymentDueValue > 0;\r\n }\r\n else {\r\n hasCharges = paymentInfo.totalAmountValue > 0;\r\n }\r\n\r\n let headerModal: JSX.Element;\r\n headerModal = (\r\n <>\r\n \r\n {Format.toString(resources.formatTitle, [yearTerm || titleName || ''])}\r\n \r\n \r\n \r\n \r\n {resources.lblInstructions}\r\n \r\n \r\n {((paymentOrigin === PaymentOrigin.Registration\r\n || paymentOrigin === PaymentOrigin.ConEdRegistration)\r\n && paymentInfo.statementNumber) && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n {paymentOrigin === PaymentOrigin.Registration\r\n && paymentMethods && hasCharges && (\r\n \r\n )}\r\n {paymentOrigin !== PaymentOrigin.Registration && (\r\n
\r\n \r\n {paymentOrigin === PaymentOrigin.ConEdRegistration\r\n && !paymentInfo.useTransactionChargesOnly ? (\r\n <>\r\n \r\n \r\n {paymentInfo.paymentDue}\r\n \r\n \r\n \r\n \r\n {resources.lblPaymentDue}\r\n \r\n \r\n \r\n ) : (\r\n <>\r\n \r\n {paymentInfoNoChanges.totalAmountValue !== paymentInfo.totalAmountValue ? (\r\n \r\n {paymentInfo.totalAmount}\r\n \r\n ) : (\r\n \r\n {paymentInfo.totalAmount}\r\n \r\n )}\r\n \r\n \r\n {paymentInfoNoChanges.totalAmountValue !== paymentInfo.totalAmountValue ? (\r\n \r\n {resources.lblDiscountedTotal}\r\n \r\n ) : (\r\n \r\n {resources.lblTotal}\r\n \r\n )}\r\n \r\n \r\n )}\r\n \r\n
\r\n )}\r\n
\r\n
\r\n \r\n );\r\n\r\n let footerModal: JSX.Element;\r\n footerModal = enableOnlinePayment && hasCharges ? (\r\n \r\n {!paymentInfo.requireOnlinePayment &&\r\n (paymentOrigin === PaymentOrigin.Registration\r\n || paymentOrigin === PaymentOrigin.ConEdRegistration) && (\r\n \r\n {resources.btnBillMeLater}\r\n \r\n )}\r\n \r\n {resources.btnPay}\r\n \r\n \r\n ) : (\r\n \r\n {resources.btnOk}\r\n \r\n );\r\n\r\n let rowClassName: string | undefined;\r\n let isFirstRow: boolean;\r\n contentPage = (\r\n \r\n {paymentOrigin === PaymentOrigin.ConEdRegistration && (\r\n \r\n \r\n \r\n {resources.lblDiscountTitle}\r\n \r\n \r\n {resources.lblDiscountInstructions}\r\n \r\n \r\n \r\n {coupons.map((coupon, ci) => (\r\n \r\n \r\n \r\n \r\n {!coupon.isNew ? (\r\n \r\n \r\n \r\n ) : (
)}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {!coupon.isApplied && (\r\n \r\n {resources.btnApplyCoupon}\r\n \r\n )}\r\n \r\n \r\n \r\n\r\n \r\n ))}\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n {resources.lblDetail}\r\n \r\n \r\n \r\n {paymentInfo.chargeCredits && (\r\n \r\n \r\n \r\n \r\n \r\n {paymentOrigin === PaymentOrigin.ConEdRegistration && (\r\n \r\n {resources.lblCourse}\r\n \r\n )}\r\n \r\n {resources.lblCharge}\r\n \r\n \r\n {resources.lblAmount}\r\n \r\n {paymentOrigin === PaymentOrigin.ConEdRegistration\r\n && paymentInfo.chargeCredits.find(c => c.isCredit)\r\n && (\r\n \r\n {resources.lblDiscount}\r\n \r\n )}\r\n \r\n \r\n \r\n {paymentInfo.chargeCredits.map((row, cci) => {\r\n if (paymentOrigin === PaymentOrigin.ConEdRegistration) {\r\n rowClassName = undefined;\r\n isFirstRow = true;\r\n if (cci < paymentInfo.chargeCredits.length - 1\r\n && row.sectionId === paymentInfo.chargeCredits[cci + 1].sectionId) {\r\n rowClassName = classes.noBottomBorder;\r\n }\r\n if (cci > 0\r\n && row.sectionId === paymentInfo.chargeCredits[cci - 1].sectionId) {\r\n isFirstRow = false;\r\n }\r\n }\r\n return (\r\n \r\n {paymentOrigin === PaymentOrigin.ConEdRegistration && (\r\n \r\n {isFirstRow && !row.isCredit && !row.isOther && (\r\n \r\n {(row.eventId && row.eventName) ? Format.toString(resources.formatTitleSection, [row.eventId, row.eventName]) : '' }\r\n \r\n )}\r\n {isFirstRow && row.isOther && (\r\n \r\n {resources.lblOthers}\r\n \r\n )}\r\n \r\n )}\r\n \r\n \r\n {row.description}\r\n \r\n {paymentOrigin === PaymentOrigin.Application\r\n && paymentInfo.chargeCredits\r\n && paymentInfo.chargeCredits.length > 0\r\n && paymentInfo.totalAmount !== paymentInfo.chargeCredits[0].amount && (\r\n <>\r\n
\r\n \r\n {resources.lblProgramFees}\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n {row.amount}\r\n \r\n \r\n {paymentOrigin === PaymentOrigin.ConEdRegistration\r\n && paymentInfo.chargeCredits.find(c => c.isCredit)\r\n && (\r\n \r\n \r\n {row.discountAmount || '-'}\r\n \r\n \r\n )}\r\n \r\n );\r\n })}\r\n
\r\n \r\n \r\n \r\n {paymentInfoNoChanges.totalAmountValue !== paymentInfo.totalAmountValue ? (\r\n \r\n {Format.toString(resources.formatDiscountedTotal, [paymentInfo.totalAmount])}\r\n \r\n ) : (\r\n \r\n {Format.toString(resources.formatTotal, [paymentInfo.totalAmount])}\r\n \r\n )}\r\n {paymentOrigin === PaymentOrigin.Registration && (\r\n \r\n {Format.toString(resources.formatPaymentDue, [paymentInfo.paymentDue])}\r\n \r\n )}\r\n {paymentOrigin === PaymentOrigin.ConEdRegistration\r\n && !paymentInfo.useTransactionChargesOnly && (\r\n \r\n {Format.toString(resources.formatPaymentDue, [paymentInfo.paymentDue])}\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n )}\r\n \r\n );\r\n }\r\n\r\n return (\r\n <>\r\n {contentPage}\r\n \r\n );\r\n }\r\n}\r\n// #endregion Component\r\n\r\n// Export: Component\r\nexport default withStyles(styles)(PaymentDetailModal);","/* Copyright 2019 Ellucian Company L.P. and its affiliates.\r\n * File: Print.tsx\r\n * Type: Presentation component */\r\n\r\n// #region Imports\r\nimport React, { useState } from 'react';\r\n\r\n// Core components\r\nimport Button from '@hedtech/powercampus-design-system/react/core/Button';\r\nimport Hidden from '@hedtech/powercampus-design-system/react/core/Hidden';\r\nimport Icon from '@hedtech/powercampus-design-system/react/core/Icon';\r\nimport IconButton from '@hedtech/powercampus-design-system/react/core/IconButton';\r\nimport Snackbar from '@hedtech/powercampus-design-system/react/core/Snackbar';\r\n\r\n// Types\r\nimport { ResultType } from '@hedtech/powercampus-design-system/types/ResultType';\r\nimport { IPrintResources } from '../../Types/Resources/Generic/IPrintResources';\r\n\r\n// #endregion Imports\r\n\r\n// #region Types\r\nexport interface IPrintProps {\r\n classNameButtonText?: string;\r\n classNameIconButton?: string;\r\n disabled?: boolean;\r\n lblPrint?: string;\r\n link: string;\r\n resources: IPrintResources;\r\n}\r\n// #endregion Types\r\n\r\n// #region Component\r\nconst Print: React.FC = (props: IPrintProps): JSX.Element => {\r\n const {\r\n classNameButtonText,\r\n classNameIconButton,\r\n disabled,\r\n lblPrint,\r\n link,\r\n resources\r\n } = props;\r\n\r\n const [open, setOpen] = useState(false);\r\n\r\n const onClickPrint = () => {\r\n setOpen(!open);\r\n window.location.assign(link);\r\n };\r\n\r\n const onClose = () => {\r\n setOpen(!open);\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n {lblPrint ? lblPrint : resources.lblPrint}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {resources.lblPrintProcess}\r\n \r\n )}\r\n open={open}\r\n type={ResultType.success}\r\n onClose={onClose}\r\n />\r\n \r\n );\r\n};\r\n// #endregion Component\r\n\r\n// Export: Component\r\nexport default Print;","/* Copyright 2019 - 2021 Ellucian Company L.P. and its affiliates.\r\n * File: ProcessPaymentModal.tsx\r\n * Type: Container component */\r\n\r\n// #region Imports\r\nimport React from 'react';\r\n\r\n// Core components\r\nimport Alert from '@hedtech/powercampus-design-system/react/core/Alert';\r\nimport Button, { ButtonGroup } from '@hedtech/powercampus-design-system/react/core/Button';\r\nimport Grid from '@hedtech/powercampus-design-system/react/core/Grid';\r\nimport Modal from '@hedtech/powercampus-design-system/react/core/Modal';\r\n\r\n// Types\r\nimport { IAlert } from '@hedtech/powercampus-design-system/types/IAlert';\r\nimport { IJsonResult } from '@hedtech/powercampus-design-system/types/IJsonResult';\r\nimport { ILogData } from '@hedtech/powercampus-design-system/types/ILogData';\r\nimport { ResultType } from '@hedtech/powercampus-design-system/types/ResultType';\r\nimport { PaymentOrigin } from '../../Types/Enum/PaymentOrigin';\r\nimport { IYearTerm } from '../../Types/Generic/IYearTerm';\r\nimport { IRequestTranscript } from '../../Types/Grades/IRequestTranscript';\r\nimport { IPaymentPeriod } from '../../Types/Payment/IPaymentPeriod';\r\nimport { IPaymentRequest } from '../../Types/Payment/IPaymentRequest';\r\nimport { IGiftCampaign } from '../../Types/MakeGift/IGiftCampaign';\r\nimport { IProcessPaymentModalResources } from '../../Types/Resources/Generic/IProcessPaymentModalResources';\r\n\r\n// Helpers\r\nimport LogData from '@hedtech/powercampus-design-system/helpers/LogData';\r\nimport Resolver from '@hedtech/powercampus-design-system/helpers/Resolver';\r\n\r\n// Requests\r\nimport RequestsLayout from '@hedtech/powercampus-design-system/requests/LayoutRequests';\r\nimport Requests from '../../Requests/Generic/ProcessPaymentModal';\r\n\r\n// State Management\r\nimport LayoutActions from '@hedtech/powercampus-design-system/flux/actions/LayoutActions';\r\n// #endregion Imports\r\n\r\n// #region Types\r\nexport interface IProcessPaymentModalProps {\r\n amount: number;\r\n applicationId?: number;\r\n conEdTransactionId?: number;\r\n giftCampaigns?: IGiftCampaign[];\r\n open: boolean;\r\n paymentOrigin: PaymentOrigin;\r\n personId?: number;\r\n requestTranscripts?: IRequestTranscript[];\r\n returnUrl?: string;\r\n termSessionId?: string;\r\n yearTerm?: string;\r\n onClose: () => void;\r\n}\r\n\r\ninterface IProcessPaymentModalState {\r\n componentError: boolean;\r\n resources?: IProcessPaymentModalResources;\r\n}\r\n// #endregion Types\r\n\r\n// #region Component\r\nclass ProcessPaymentModal extends React.Component {\r\n private idModule: string;\r\n private idPage: string;\r\n\r\n public readonly state: Readonly;\r\n\r\n public constructor(props) {\r\n super(props);\r\n\r\n // #region Initialize Variables and State\r\n this.idModule = 'Generic';\r\n this.idPage = 'ProcessPaymentModal';\r\n this.state = this.getInitialState();\r\n // #endregion Initialize Variables and State\r\n }\r\n\r\n private getInitialState(): IProcessPaymentModalState {\r\n let resources: IProcessPaymentModalResources | undefined;\r\n if (this.state) {\r\n resources = this.state.resources;\r\n }\r\n return {\r\n componentError: false,\r\n resources: resources\r\n };\r\n }\r\n\r\n // #region Events\r\n private onOk = (): void => {\r\n try {\r\n const {\r\n amount,\r\n applicationId,\r\n conEdTransactionId,\r\n giftCampaigns,\r\n paymentOrigin,\r\n personId,\r\n requestTranscripts,\r\n returnUrl,\r\n termSessionId,\r\n yearTerm\r\n } = this.props;\r\n\r\n const paymentRequest: IPaymentRequest = {\r\n amount: amount,\r\n applicationId: applicationId,\r\n conEdTransactionId: conEdTransactionId,\r\n paymentOrigin: paymentOrigin,\r\n personId: personId,\r\n returnUrl: returnUrl\r\n } as IPaymentRequest;\r\n if (termSessionId) {\r\n const periodId = termSessionId.split('/');\r\n paymentRequest.paymentPeriod = {\r\n sessionPeriodId: periodId[1] ? Number(periodId[1]) : null,\r\n termPeriodId: periodId[0] ? Number(periodId[0]) : null\r\n } as IPaymentPeriod;\r\n }\r\n else if (yearTerm) {\r\n const split = yearTerm.split('/');\r\n paymentRequest.yearTerm = {\r\n term: split[1],\r\n year: Number(split[0])\r\n } as IYearTerm;\r\n }\r\n if (requestTranscripts) {\r\n Requests.postProcessTranscriptPayment(paymentRequest, this.resolvePostProcessPayment, this.logError, requestTranscripts);\r\n }\r\n else if (giftCampaigns) {\r\n Requests.postProcessDonationPayment(paymentRequest, this.resolvePostProcessPayment, this.logError, giftCampaigns);\r\n }\r\n else {\r\n Requests.postProcessPayment(paymentRequest, this.resolvePostProcessPayment, this.logError);\r\n }\r\n LayoutActions.setLoading(true);\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onOk.name, e));\r\n }\r\n };\r\n // #endregion Events\r\n\r\n // #region Error Functions\r\n private logError(logData: ILogData): void {\r\n LayoutActions.setLogData(logData);\r\n }\r\n\r\n private redirectError(code: number): void {\r\n LayoutActions.setRedirectCode(code);\r\n }\r\n\r\n private showError(message?: string): void {\r\n LayoutActions.setAlert({ message: message, messageType: ResultType.error } as IAlert);\r\n }\r\n // #endregion Error Functions\r\n\r\n // #region Resolvers\r\n private resolveGetResources = (json: string): void => {\r\n try {\r\n const result: IJsonResult | undefined\r\n = Resolver(json, this.resolveGetResources.name);\r\n if (result?.status) {\r\n this.setState({\r\n resources: result.data\r\n });\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.resolveGetResources.name, e));\r\n }\r\n };\r\n\r\n private resolvePostProcessPayment = (json: string): void => {\r\n try {\r\n const result: IJsonResult | undefined\r\n = Resolver(json, this.resolvePostProcessPayment.name);\r\n if (result?.status) {\r\n if (result.data) {\r\n window.location.replace(encodeURI(result.data));\r\n LayoutActions.setLoading(false);\r\n }\r\n else {\r\n this.showError();\r\n }\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.resolvePostProcessPayment.name, e));\r\n }\r\n };\r\n // #endregion Resolvers\r\n\r\n // #region Lifecycle\r\n public componentDidMount(): void {\r\n try {\r\n RequestsLayout.getResources(this.idModule, this.idPage,\r\n this.resolveGetResources,\r\n this.logError);\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.componentDidMount.name, e));\r\n }\r\n }\r\n\r\n public componentDidCatch(error, info): void {\r\n this.setState({\r\n componentError: true\r\n }, () => {\r\n this.logError(LogData.fromComponentException(this.componentDidCatch.name, error, info));\r\n this.redirectError(500);\r\n });\r\n }\r\n // #endregion Lifecycle\r\n\r\n public render(): JSX.Element {\r\n const {\r\n open,\r\n onClose\r\n } = this.props;\r\n\r\n const {\r\n componentError,\r\n resources\r\n } = this.state;\r\n\r\n let contentPage: JSX.Element | undefined;\r\n if (!componentError && resources) {\r\n contentPage = (\r\n \r\n \r\n {resources.btnCancel}\r\n \r\n \r\n {resources.btnOk}\r\n \r\n \r\n )}\r\n maxWidth=\"sm\"\r\n open={open}\r\n showTitleBarClose={false}\r\n onClose={onClose}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n <>\r\n {contentPage}\r\n \r\n );\r\n }\r\n}\r\n// #endregion Component\r\n\r\n// Export: Component\r\nexport default ProcessPaymentModal;","/* Copyright 2019 - 2021 Ellucian Company L.P. and its affiliates.\r\n * File: SignIn.tsx\r\n * Type: Container component */\r\n\r\n// #region Imports\r\nimport URLSearchParams from '@ungap/url-search-params';\r\nimport React, { RefObject } from 'react';\r\nimport { setTimeout } from 'timers';\r\n\r\n// Core components\r\nimport Alert from '@hedtech/powercampus-design-system/react/core/Alert';\r\nimport Button, { ButtonGroup } from '@hedtech/powercampus-design-system/react/core/Button';\r\nimport Card, { CardContent } from '@hedtech/powercampus-design-system/react/core/Card';\r\nimport Grid from '@hedtech/powercampus-design-system/react/core/Grid';\r\nimport Modal from '@hedtech/powercampus-design-system/react/core/Modal';\r\nimport Paragraph from '@hedtech/powercampus-design-system/react/core/Paragraph';\r\nimport PasswordConfirmation from '@hedtech/powercampus-design-system/react/components/PasswordConfirmation';\r\nimport ReCAPTCHA from '@hedtech/powercampus-design-system/react/core/ReCaptcha';\r\nimport Text from '@hedtech/powercampus-design-system/react/core/Text';\r\nimport TextField from '@hedtech/powercampus-design-system/react/core/TextField';\r\n\r\n// Types\r\nimport { StoreMode } from '@hedtech/powercampus-design-system/types/Account/StoreMode';\r\nimport { IAlert } from '@hedtech/powercampus-design-system/types/IAlert';\r\nimport { IJsonResult } from '@hedtech/powercampus-design-system/types/IJsonResult';\r\nimport { ILogData } from '@hedtech/powercampus-design-system/types/ILogData';\r\nimport { ResultType } from '@hedtech/powercampus-design-system/types/ResultType';\r\nimport { ChangePasswordError } from '@hedtech/powercampus-design-system/types/PasswordConfirmation/ChangePasswordError';\r\nimport { IAccountValidations } from '@hedtech/powercampus-design-system/types/PasswordConfirmation/IAccountValidations';\r\nimport { IChangePasswordResponse } from '@hedtech/powercampus-design-system/types/PasswordConfirmation/IChangePasswordResponse';\r\nimport { IPasswordChange } from '../../Types/Account/IPasswordChange';\r\nimport { AuthStatus } from '../../Types/Enum/AuthStatus';\r\nimport { IAuthResponse } from '../../Types/Generic/IAuthResponse';\r\nimport { ISignInResources } from '../../Types/Resources/Generic/ISignInResources';\r\n\r\n// Helpers\r\nimport Format from '@hedtech/powercampus-design-system/helpers/Format';\r\nimport LogData from '@hedtech/powercampus-design-system/helpers/LogData';\r\nimport PasswordValidation from '@hedtech/powercampus-design-system/helpers/PasswordValidation';\r\nimport Redirect from '@hedtech/powercampus-design-system/helpers/Redirect';\r\nimport Resolver from '@hedtech/powercampus-design-system/helpers/Resolver';\r\nimport Tokens from '@hedtech/powercampus-design-system/react/core/styles/Tokens';\r\nimport { createStyles, withStyles, WithStyles } from '@hedtech/powercampus-design-system/react/core/styles/withStyles';\r\nimport { withWidth, WithWidth } from '@hedtech/powercampus-design-system/react/core/withWidth';\r\n\r\n// Requests\r\nimport RequestsLayout from '@hedtech/powercampus-design-system/requests/LayoutRequests';\r\nimport Requests from '../../Requests/Generic/SignIn';\r\n\r\n// State Management\r\nimport LayoutActions from '@hedtech/powercampus-design-system/flux/actions/LayoutActions';\r\nimport LayoutStore from '@hedtech/powercampus-design-system/flux/stores/LayoutStore';\r\nimport PasswordConfirmationActions from '@hedtech/powercampus-design-system/flux/actions/PasswordConfirmationActions';\r\nimport PasswordConfirmationStore from '@hedtech/powercampus-design-system/flux/stores/PasswordConfirmationStore';\r\n// #endregion Imports\r\n\r\n// #region Types\r\nexport interface ISignInProps {\r\n open?: boolean;\r\n userName?: string;\r\n onAfterSignIn?: () => void;\r\n onClose?: () => void;\r\n onGoSignUp?: () => void;\r\n}\r\n\r\ninterface ISignInState {\r\n accountValidations?: IAccountValidations;\r\n alert?: IAlert;\r\n authMode?: number;\r\n isLoading: boolean;\r\n isLoadingNext: boolean;\r\n isLoadingSignIn: boolean;\r\n password: string;\r\n passwordModified: boolean;\r\n resources?: ISignInResources;\r\n stepNumber: number;\r\n uiCulture: string;\r\n userName: string;\r\n userNameModified: boolean;\r\n variation: number;\r\n\r\n // #region Change Password\r\n errorCurrentPassword: boolean;\r\n isLoadingChangePassword: boolean;\r\n newPassword?: string;\r\n openChangePassword: boolean;\r\n // #endregion Change Password\r\n\r\n // #region Forgot Password\r\n emailSent: boolean;\r\n isForgotPasswordEnabled: boolean;\r\n isLoadingSendEmail: boolean;\r\n isReCaptchaEnabled: boolean;\r\n openForgotPassword: boolean;\r\n reCaptchaError: boolean;\r\n reCaptchaSiteKey: string;\r\n userNameRecovery: string;\r\n userNameRecoveryModified: boolean;\r\n // #endregion Forgot Password\r\n}\r\n\r\nconst styles = createStyles({\r\n forgotPasswordLink: {\r\n paddingTop: Tokens.spacing30\r\n },\r\n forgotText: {\r\n marginBottom: `${Tokens.spacing40}!important`\r\n },\r\n loginCard: {\r\n animation: 'slidein 1s',\r\n marginTop: Tokens.spacing80,\r\n maxWidth: '800px'\r\n },\r\n loginText: {\r\n marginTop: `${Tokens.spacing40}!important`\r\n },\r\n reCaptchaContent: {\r\n paddingBottom: Tokens.spacing30\r\n },\r\n reCaptchaErrorText: {\r\n paddingBottom: Tokens.spacing30\r\n },\r\n signInButton: {\r\n paddingTop: Tokens.spacing20\r\n },\r\n spacingAlert: {\r\n paddingBottom: Tokens.spacing20\r\n },\r\n spacingTitle: {\r\n paddingBottom: Tokens.spacing30\r\n }\r\n});\r\n\r\ntype PropsWithStyles = ISignInProps & WithStyles & WithWidth;\r\n// #endregion Types\r\n\r\n// #region Component\r\nclass SignIn extends React.Component {\r\n private idModule: string;\r\n private idPage: string;\r\n private passwordRef: RefObject;\r\n private reCaptchaRef: RefObject;\r\n private userNameRecoveryRef: RefObject;\r\n private userNameRef: RefObject;\r\n\r\n public readonly state: Readonly;\r\n\r\n public constructor(props) {\r\n super(props);\r\n\r\n // #region Initialize Variables and State\r\n this.idModule = 'Generic';\r\n this.idPage = 'SignIn';\r\n this.passwordRef = React.createRef();\r\n this.reCaptchaRef = React.createRef();\r\n this.userNameRecoveryRef = React.createRef();\r\n this.userNameRef = React.createRef();\r\n this.state = this.getInitialState(this.props.userName);\r\n // #endregion Initialize Variables and State\r\n\r\n // #region Bind State Management Listeners\r\n PasswordConfirmationStore.addPasswordValidationListener(this.onChangePasswordValidation);\r\n // #endregion State Management Listeners\r\n }\r\n\r\n private getInitialState(userName?: string): ISignInState {\r\n let isLoading: boolean = true;\r\n let resources: ISignInResources | undefined;\r\n let isForgotPasswordEnabled: boolean = false;\r\n let isReCaptchaEnabled: boolean = false;\r\n let reCaptchaSiteKey: string;\r\n if (this.state) {\r\n isForgotPasswordEnabled = this.state.isForgotPasswordEnabled;\r\n isLoading = this.state.isLoading;\r\n isReCaptchaEnabled = this.state.isReCaptchaEnabled;\r\n reCaptchaSiteKey = this.state.reCaptchaSiteKey;\r\n resources = this.state.resources;\r\n }\r\n else {\r\n reCaptchaSiteKey = '';\r\n resources = LayoutStore.getResourcesByKey(`${this.idModule}.${this.idPage}`);\r\n }\r\n return {\r\n accountValidations: undefined,\r\n alert: undefined,\r\n authMode: undefined,\r\n isLoading: isLoading,\r\n isLoadingNext: false,\r\n isLoadingSignIn: false,\r\n password: '',\r\n passwordModified: false,\r\n resources: resources,\r\n stepNumber: 1,\r\n uiCulture: LayoutStore.getCultures().uiCulture,\r\n userName: userName || '',\r\n userNameModified: false,\r\n variation: 0,\r\n\r\n // #region Change Password\r\n errorCurrentPassword: false,\r\n isLoadingChangePassword: false,\r\n openChangePassword: false,\r\n // #endregion Change Password\r\n\r\n // #region Forgot Password\r\n emailSent: false,\r\n isForgotPasswordEnabled: isForgotPasswordEnabled,\r\n isLoadingSendEmail: false,\r\n isReCaptchaEnabled: isReCaptchaEnabled,\r\n openForgotPassword: false,\r\n reCaptchaError: false,\r\n reCaptchaSiteKey: reCaptchaSiteKey,\r\n userNameRecovery: '',\r\n userNameRecoveryModified: false\r\n // #endregion Forgot Password\r\n };\r\n }\r\n\r\n // #region Events\r\n\r\n private OnFinishSignIn = (): void => {\r\n try {\r\n LayoutStore.setIsAuthenticated(true);\r\n LayoutStore.setMenuOptions(undefined);\r\n LayoutActions.showPageLoader();\r\n const {\r\n onAfterSignIn\r\n } = this.props;\r\n if (onAfterSignIn) {\r\n onAfterSignIn();\r\n }\r\n else {\r\n const urlParams: URLSearchParams = new URLSearchParams(window.location.search);\r\n const returnUrl: string | null = urlParams.get('ReturnUrl');\r\n const newState: ISignInState = this.getInitialState();\r\n newState.isLoading = true;\r\n this.setState(newState);\r\n if (returnUrl && !returnUrl.includes('LogOut')) {\r\n window.location.assign(returnUrl);\r\n }\r\n else {\r\n Redirect.toHome();\r\n }\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.OnFinishSignIn.name, e));\r\n }\r\n };\r\n\r\n private onChangePassword = (event: React.ChangeEvent): void => {\r\n try {\r\n this.setState({\r\n alert: undefined,\r\n password: event.target.value,\r\n passwordModified: true\r\n });\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onChangePassword.name, e));\r\n }\r\n };\r\n\r\n private onChangeUserName = (event: React.ChangeEvent): void => {\r\n try {\r\n this.setState({\r\n alert: undefined,\r\n userName: event.target.value,\r\n userNameModified: true\r\n });\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onChangeUserName.name, e));\r\n }\r\n };\r\n\r\n private onCloseModal = (): void => {\r\n try {\r\n const {\r\n onClose\r\n } = this.props;\r\n const {\r\n isLoadingNext,\r\n isLoadingSignIn\r\n } = this.state;\r\n\r\n if (onClose && !isLoadingNext && !isLoadingSignIn) {\r\n this.setState(this.getInitialState());\r\n onClose();\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onCloseModal.name, e));\r\n }\r\n };\r\n\r\n private onGoSignUpModal = (): void => {\r\n try {\r\n const {\r\n onGoSignUp\r\n } = this.props;\r\n\r\n const {\r\n isLoadingNext\r\n } = this.state;\r\n\r\n if (onGoSignUp && !isLoadingNext) {\r\n this.setState(this.getInitialState());\r\n onGoSignUp();\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onGoSignUpModal.name, e));\r\n }\r\n };\r\n\r\n private onNext = (): void => {\r\n try {\r\n const {\r\n userName\r\n } = this.state;\r\n\r\n this.setState({\r\n userNameModified: true\r\n });\r\n if (userName) {\r\n this.showLoaderNext();\r\n Requests.getAuthenticationMode(userName, this.resolveGetAuthenticationMode);\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onNext.name, e));\r\n }\r\n };\r\n\r\n private onSignIn = (): void => {\r\n try {\r\n const {\r\n authMode,\r\n password,\r\n userName,\r\n variation\r\n } = this.state;\r\n\r\n this.setState({\r\n passwordModified: true\r\n });\r\n\r\n if (userName && password) {\r\n this.showLoaderSignIn();\r\n if (variation === 2 && authMode) {\r\n Requests.authenticateUser(userName, password, this.resolveAuthenticateUser);\r\n }\r\n else {\r\n const timeout: number = Math.floor(Math.random() * 5 + 1) * 1000;\r\n setTimeout(() => {\r\n const {\r\n resources\r\n } = this.state;\r\n\r\n if (resources) {\r\n const alert: IAlert = {\r\n message: resources.lblInvalidCredentials,\r\n messageType: ResultType.error\r\n };\r\n this.setState({\r\n alert: alert\r\n });\r\n }\r\n else {\r\n this.showError();\r\n }\r\n this.hideLoaderSignIn();\r\n }, timeout);\r\n }\r\n }\r\n\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onSignIn.name, e));\r\n }\r\n };\r\n\r\n private onUseAnotherAccount = (): void => {\r\n try {\r\n this.setState(this.getInitialState(), () => {\r\n if (this.userNameRef?.current) {\r\n this.userNameRef.current.focus();\r\n }\r\n });\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onUseAnotherAccount.name, e));\r\n }\r\n };\r\n\r\n // #region Change Password\r\n private onChangePasswordButton = (): void => {\r\n try {\r\n const {\r\n accountValidations,\r\n errorCurrentPassword,\r\n newPassword,\r\n password,\r\n userName\r\n } = this.state;\r\n\r\n let isValid: boolean = true;\r\n if (accountValidations) {\r\n let validations: IAccountValidations = PasswordValidation.validatePassword(accountValidations, newPassword,\r\n PasswordConfirmationStore.getPasswordPolicy());\r\n validations = PasswordValidation.validateConfirmPassword(accountValidations, accountValidations.confirmPassword, newPassword);\r\n PasswordConfirmationActions.setPasswordValidation(newPassword, validations);\r\n\r\n if (validations.hasErrors || errorCurrentPassword) {\r\n validations.isCurrentPwdNewPwd = errorCurrentPassword;\r\n PasswordConfirmationActions.setPasswordValidation(newPassword, validations);\r\n isValid = false;\r\n }\r\n }\r\n\r\n if (isValid && newPassword) {\r\n this.showLoaderChangePassword();\r\n const passwordChange: IPasswordChange = {\r\n userName: userName,\r\n currentPassword: password,\r\n newPassword: newPassword\r\n };\r\n Requests.changePassword(passwordChange, this.resolveChangePassword);\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onChangePasswordButton.name, e));\r\n }\r\n };\r\n\r\n private onCloseChangePassword = (): void => {\r\n try {\r\n this.setState(this.getInitialState(), () => {\r\n if (this.userNameRef?.current) {\r\n this.userNameRef.current.focus();\r\n }\r\n });\r\n PasswordConfirmationActions.setPasswordValidation();\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onCloseChangePassword.name, e));\r\n }\r\n };\r\n\r\n private onChangePasswordValidation = (): void => {\r\n try {\r\n const {\r\n password\r\n } = this.state;\r\n\r\n this.setState({\r\n accountValidations: PasswordConfirmationStore.getPasswordValidation(),\r\n errorCurrentPassword: PasswordConfirmationStore.getPassword() === password,\r\n newPassword: PasswordConfirmationStore.getPassword()\r\n });\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onChangePasswordValidation.name, e));\r\n }\r\n };\r\n // #endregion Change Password\r\n\r\n // #region Forgot Password\r\n private onChangeUserNameRecovery = (event: React.ChangeEvent): void => {\r\n try {\r\n this.setState({\r\n userNameRecovery: event.target.value,\r\n userNameRecoveryModified: true\r\n });\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onChangeUserNameRecovery.name, e));\r\n }\r\n };\r\n\r\n private onClickForgotPassword = (): void => {\r\n try {\r\n this.setState({\r\n emailSent: false,\r\n openForgotPassword: true,\r\n userNameRecovery: '',\r\n userNameRecoveryModified: false\r\n }, () => {\r\n if (this.userNameRecoveryRef?.current) {\r\n this.userNameRecoveryRef.current.focus();\r\n }\r\n });\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onClickForgotPassword.name, e));\r\n }\r\n };\r\n\r\n private onCloseForgotPassword = (): void => {\r\n try {\r\n const {\r\n authMode,\r\n stepNumber\r\n } = this.state;\r\n\r\n this.setState({\r\n openForgotPassword: false,\r\n reCaptchaError: false\r\n }, () => {\r\n if (stepNumber === 2 && (authMode === StoreMode.Identity || authMode === StoreMode.ActiveDirectory)) {\r\n if (this.passwordRef?.current) {\r\n this.passwordRef.current.focus();\r\n }\r\n }\r\n else {\r\n if (this.userNameRef?.current) {\r\n this.userNameRef.current.focus();\r\n }\r\n }\r\n });\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onCloseForgotPassword.name, e));\r\n }\r\n };\r\n\r\n private onRecaptchaChange = (token: any): void => {\r\n try {\r\n this.setState({\r\n reCaptchaError: !Boolean(token)\r\n });\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onRecaptchaChange.name, e));\r\n }\r\n };\r\n\r\n private onReCaptchaError = (): void => {\r\n try {\r\n this.setState({\r\n reCaptchaError: true\r\n });\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onReCaptchaError.name, e));\r\n }\r\n };\r\n\r\n private onSendEmail = (): void => {\r\n try {\r\n const {\r\n isReCaptchaEnabled,\r\n userNameRecovery\r\n } = this.state;\r\n\r\n let reCaptchaResponse: string = '';\r\n if (isReCaptchaEnabled && this.reCaptchaRef?.current) {\r\n reCaptchaResponse = this.reCaptchaRef.current.getValue();\r\n this.setState({\r\n reCaptchaError: !Boolean(reCaptchaResponse),\r\n userNameRecoveryModified: true\r\n });\r\n }\r\n\r\n if (!isReCaptchaEnabled || reCaptchaResponse) {\r\n this.setState({\r\n reCaptchaError: false,\r\n userNameRecoveryModified: true\r\n });\r\n\r\n if (userNameRecovery) {\r\n this.showLoaderSendEmail();\r\n Requests.sendForgotPasswordEmail(userNameRecovery, reCaptchaResponse, this.resolveSendForgotPasswordEmail);\r\n }\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onSendEmail.name, e));\r\n }\r\n };\r\n // #endregion Forgot Password\r\n\r\n // #endregion Events\r\n\r\n // #region Loader Functions\r\n private hideAllLoaders = (): void => {\r\n this.setState({\r\n isLoading: false,\r\n isLoadingChangePassword: false,\r\n isLoadingNext: false,\r\n isLoadingSendEmail: false,\r\n isLoadingSignIn: false\r\n });\r\n };\r\n\r\n private hideLoader = (): void => {\r\n this.setState({\r\n isLoading: false\r\n });\r\n };\r\n\r\n private hideLoaderChangePassword = (): void => {\r\n this.setState({\r\n isLoadingChangePassword: false\r\n });\r\n };\r\n\r\n private hideLoaderNext = (): void => {\r\n this.setState({\r\n isLoadingNext: false\r\n });\r\n };\r\n\r\n private hideLoaderSendEmail = (): void => {\r\n this.setState({\r\n isLoadingSendEmail: false\r\n });\r\n };\r\n\r\n private hideLoaderSignIn = (): void => {\r\n this.setState({\r\n isLoadingSignIn: false\r\n });\r\n };\r\n\r\n private showLoaderChangePassword = (): void => {\r\n this.setState({\r\n isLoadingChangePassword: true\r\n });\r\n };\r\n\r\n private showLoaderNext = (): void => {\r\n this.setState({\r\n isLoadingNext: true\r\n });\r\n };\r\n\r\n private showLoaderSendEmail = (): void => {\r\n this.setState({\r\n isLoadingSendEmail: true\r\n });\r\n };\r\n\r\n private showLoaderSignIn = (): void => {\r\n this.setState({\r\n isLoadingSignIn: true\r\n });\r\n };\r\n // #endregion Loader Functions\r\n\r\n // #region Error Functions\r\n private logError(logData: ILogData): void {\r\n this.hideAllLoaders();\r\n LayoutActions.setLogData(logData);\r\n }\r\n\r\n private showError(message?: string): void {\r\n this.hideAllLoaders();\r\n LayoutActions.setAlert({ message: message, messageType: ResultType.error } as IAlert);\r\n }\r\n\r\n private showSignInError = (): void => {\r\n const {\r\n resources\r\n } = this.state;\r\n\r\n if (resources) {\r\n const alert: IAlert = {\r\n message: resources.lblGenericError,\r\n messageType: ResultType.error\r\n };\r\n this.setState({\r\n alert: alert\r\n });\r\n }\r\n else {\r\n this.showError();\r\n }\r\n }\r\n // #endregion Error Functions\r\n\r\n // #region Resolvers\r\n private resolveGetResources = (json: string): void => {\r\n try {\r\n const result: IJsonResult | undefined\r\n = Resolver(json, this.resolveGetResources.name, this.hideAllLoaders);\r\n if (result?.status) {\r\n this.setState({\r\n isLoading: false,\r\n resources: result.data\r\n });\r\n LayoutStore.setResourcesByKey(`${this.idModule}.${this.idPage}`, result.data);\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.resolveGetResources.name, e));\r\n }\r\n };\r\n\r\n private resolveGetAuthenticationMode = (json: string): void => {\r\n try {\r\n const result: IJsonResult | undefined\r\n = Resolver(json, this.resolveGetAuthenticationMode.name, this.hideAllLoaders);\r\n if (result?.status) {\r\n const mode: StoreMode = result.data.mode;\r\n const userName: string = result.data.userName;\r\n const variation: number = result.data.variation;\r\n\r\n this.setState({\r\n authMode: mode,\r\n variation: variation\r\n });\r\n\r\n if (variation === 2) {\r\n this.setState({\r\n stepNumber: 2\r\n }, () => {\r\n if (this.passwordRef?.current) {\r\n this.passwordRef.current.focus();\r\n }\r\n this.hideLoaderNext();\r\n });\r\n if (mode === StoreMode.ADFS) {\r\n Redirect.toADFSLogin(userName);\r\n }\r\n else if (mode === StoreMode.SAML) {\r\n Redirect.toSAMLLogin(userName);\r\n }\r\n }\r\n else if (variation === 1) {\r\n this.showSignInError();\r\n this.hideLoaderNext();\r\n }\r\n else {\r\n this.setState({\r\n stepNumber: 2\r\n }, () => {\r\n if (this.passwordRef?.current) {\r\n this.passwordRef.current.focus();\r\n }\r\n this.hideLoaderNext();\r\n });\r\n }\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.resolveGetAuthenticationMode.name, e));\r\n }\r\n };\r\n\r\n private resolveAuthenticateUser = (json: string): void => {\r\n try {\r\n const result: IJsonResult | undefined\r\n = Resolver(json, this.resolveAuthenticateUser.name, this.hideAllLoaders);\r\n if (result?.status) {\r\n const authResponse: IAuthResponse = result.data;\r\n\r\n if (authResponse && authResponse.success) {\r\n if (authResponse.status === AuthStatus.Success && authResponse.changePasswordAtNextLogon) {\r\n this.setState({\r\n openChangePassword: true\r\n });\r\n }\r\n else {\r\n this.OnFinishSignIn();\r\n }\r\n }\r\n else {\r\n const {\r\n resources\r\n } = this.state;\r\n\r\n if (resources) {\r\n let message: string = '';\r\n if (authResponse) {\r\n if (authResponse.status === AuthStatus.InvalidCredentials) {\r\n message = resources.lblInvalidCredentials;\r\n }\r\n else if (authResponse.status === AuthStatus.IsLocked) {\r\n if (authResponse.authResponseDetail?.attempt) {\r\n if (authResponse.authResponseDetail.attempt.remainingLockedOutTime) {\r\n message = Format.toString(resources.formatLockedAccount, [authResponse.authResponseDetail.attempt.remainingLockedOutTime]);\r\n }\r\n }\r\n if (!message) {\r\n message = resources.lblLocked;\r\n }\r\n }\r\n else if (authResponse.status === AuthStatus.InvalidPassword) {\r\n if (authResponse.authResponseDetail?.attempt) {\r\n if (authResponse.authResponseDetail.attempt.remainingAttempts) {\r\n message = Format.toString(resources.formatInvalidAttempts, [authResponse.authResponseDetail.attempt.remainingAttempts]);\r\n }\r\n }\r\n if (!message) {\r\n message = resources.lblInvalidCredentials;\r\n }\r\n }\r\n }\r\n\r\n if (!message) {\r\n message = resources.lblGenericError;\r\n }\r\n\r\n const alert: IAlert = {\r\n message: message,\r\n messageType: ResultType.error\r\n };\r\n this.setState({\r\n alert: alert\r\n });\r\n }\r\n else {\r\n this.showError();\r\n }\r\n this.hideLoaderSignIn();\r\n }\r\n\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.resolveAuthenticateUser.name, e));\r\n }\r\n };\r\n\r\n // #region Change Password\r\n private resolveChangePassword = (json: string): void => {\r\n try {\r\n const result: IJsonResult | undefined\r\n = Resolver(json, this.resolveChangePassword.name, this.hideAllLoaders);\r\n if (result?.status) {\r\n const {\r\n accountValidations,\r\n newPassword\r\n } = this.state;\r\n\r\n const response: IChangePasswordResponse = result.data;\r\n if (response.updatedSuccessfully) {\r\n PasswordConfirmationActions.setPasswordValidation();\r\n this.OnFinishSignIn();\r\n }\r\n else if (response.errors.length > 0) {\r\n switch (response.errors[0]) {\r\n case ChangePasswordError.AlreadyUsed:\r\n if (accountValidations) {\r\n accountValidations.isNotPreviousPassword = true;\r\n PasswordConfirmationActions.setPasswordValidation(newPassword, accountValidations);\r\n }\r\n break;\r\n default:\r\n this.showSignInError();\r\n break;\r\n }\r\n this.hideLoaderChangePassword();\r\n }\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.resolveChangePassword.name, e));\r\n }\r\n };\r\n // #endregion Change Password\r\n\r\n // #region Forgot Password\r\n private resolveIsForgotPasswordEnabled = (json: string): void => {\r\n try {\r\n const result: IJsonResult | undefined\r\n = Resolver(json, this.resolveIsForgotPasswordEnabled.name, this.hideAllLoaders);\r\n if (result?.status) {\r\n if (result.data) {\r\n this.setState({\r\n isForgotPasswordEnabled: result.data.isForgotPasswordEnabled,\r\n isReCaptchaEnabled: result.data.isReCaptchaEnabled,\r\n reCaptchaSiteKey: result.data.reCaptchaSiteKey || ''\r\n });\r\n }\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.resolveIsForgotPasswordEnabled.name, e));\r\n }\r\n };\r\n\r\n private resolveSendForgotPasswordEmail = (json: string): void => {\r\n try {\r\n const result: IJsonResult | undefined\r\n = Resolver(json, this.resolveSendForgotPasswordEmail.name, this.hideAllLoaders);\r\n if (result?.status) {\r\n if (!result.data) {\r\n const timeout: number = Math.floor(Math.random() * 15 + 1) * 1000;\r\n setTimeout(() => {\r\n this.setState({\r\n emailSent: true\r\n }, this.hideLoaderSendEmail);\r\n }, timeout);\r\n }\r\n else {\r\n this.setState({\r\n emailSent: true\r\n }, this.hideLoaderSendEmail);\r\n }\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.resolveSendForgotPasswordEmail.name, e));\r\n }\r\n };\r\n // #endregion Forgot Password\r\n\r\n // #endregion Resolvers\r\n\r\n // #region Lifecycle\r\n public componentDidMount(): void {\r\n try {\r\n const {\r\n resources,\r\n userName\r\n } = this.state;\r\n\r\n if (!resources) {\r\n RequestsLayout.getResources(this.idModule, this.idPage, this.resolveGetResources);\r\n }\r\n else {\r\n this.hideLoader();\r\n }\r\n Requests.isForgotPasswordEnabled(this.resolveIsForgotPasswordEnabled);\r\n\r\n if (userName) {\r\n this.onNext();\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.componentDidMount.name, e));\r\n }\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n PasswordConfirmationStore.removePasswordValidationListener(this.onChangePasswordValidation);\r\n }\r\n // #endregion Lifecycle\r\n\r\n public render(): JSX.Element {\r\n const {\r\n classes,\r\n open,\r\n width,\r\n onClose,\r\n onGoSignUp\r\n } = this.props;\r\n\r\n const {\r\n alert,\r\n authMode,\r\n isLoading,\r\n isLoadingChangePassword,\r\n isLoadingNext,\r\n isLoadingSignIn,\r\n password,\r\n passwordModified,\r\n resources,\r\n stepNumber,\r\n uiCulture,\r\n userName,\r\n userNameModified,\r\n\r\n // #region Change Password\r\n openChangePassword,\r\n // #endregion Change Password\r\n\r\n // #region Forgot Password\r\n emailSent,\r\n isForgotPasswordEnabled,\r\n isLoadingSendEmail,\r\n isReCaptchaEnabled,\r\n openForgotPassword,\r\n reCaptchaSiteKey,\r\n reCaptchaError,\r\n userNameRecovery,\r\n userNameRecoveryModified\r\n // #endregion Forgot Password\r\n } = this.state;\r\n\r\n let contentPage: JSX.Element | undefined;\r\n if (resources && !isLoading) {\r\n\r\n if (openChangePassword) {\r\n contentPage = (\r\n \r\n \r\n {resources.btnCancel}\r\n \r\n \r\n {resources.btnChangePassword}\r\n \r\n \r\n )}\r\n id=\"changePasswordModal\"\r\n header={resources.lblChangePassword}\r\n maxWidth=\"md\"\r\n open={openChangePassword}\r\n onClose={this.onCloseChangePassword}\r\n >\r\n \r\n \r\n \r\n {resources.lblChangePasswordInstructions}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n else {\r\n let title: JSX.Element | undefined;\r\n let content: JSX.Element | JSX.Element[] | undefined;\r\n let button: JSX.Element | undefined;\r\n\r\n if (openForgotPassword) {\r\n title = (\r\n \r\n \r\n \r\n {resources.lblForgotPasswordTitle}\r\n \r\n \r\n \r\n );\r\n\r\n button = emailSent ? (\r\n \r\n {resources.btnClose}\r\n \r\n )\r\n : (\r\n \r\n \r\n {resources.btnCancel}\r\n \r\n \r\n {resources.btnSendEmail}\r\n \r\n \r\n );\r\n\r\n content = (\r\n
\r\n \r\n \r\n {!onClose && (\r\n <>\r\n {title}\r\n \r\n )}\r\n \r\n {emailSent ?\r\n Format.toString(resources.formatEmailSent, [userNameRecovery])\r\n : resources.lblForgotPasswordInstructions}\r\n \r\n \r\n \r\n {!emailSent && (\r\n \r\n )}\r\n \r\n \r\n {isReCaptchaEnabled && Boolean(reCaptchaSiteKey) && !emailSent && !isLoadingSendEmail && (\r\n \r\n \r\n \r\n \r\n {reCaptchaError && (\r\n \r\n \r\n {resources.lblReCaptchaRequired}\r\n \r\n \r\n )}\r\n \r\n )}\r\n {!onClose && (\r\n \r\n \r\n {button}\r\n \r\n \r\n )}\r\n
\r\n );\r\n }\r\n else {\r\n title = (\r\n <>\r\n \r\n \r\n \r\n {resources.lblLogInTitle}\r\n \r\n \r\n \r\n {alert && (\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {Boolean(onGoSignUp && stepNumber === 1) && (\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {stepNumber === 2 && (\r\n \r\n \r\n \r\n {resources.lblUseAnotherAccount}\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n\r\n button = stepNumber === 1 ? (\r\n \r\n {resources.btnNext}\r\n \r\n ) : (stepNumber === 2\r\n && (!authMode || authMode === StoreMode.Identity || authMode === StoreMode.ActiveDirectory) ? (\r\n \r\n {resources.btnSingIn}\r\n \r\n ) : undefined);\r\n\r\n content = (\r\n
\r\n \r\n \r\n {!onClose && (\r\n <>\r\n {title}\r\n \r\n )}\r\n \r\n {stepNumber === 2\r\n && (!authMode || authMode === StoreMode.Identity || authMode === StoreMode.ActiveDirectory) && (\r\n \r\n )}\r\n \r\n \r\n {isForgotPasswordEnabled && (\r\n \r\n \r\n \r\n {resources.btnForgot}\r\n \r\n \r\n \r\n )}\r\n {!onClose && (\r\n \r\n \r\n {button}\r\n \r\n \r\n )}\r\n
\r\n );\r\n }\r\n\r\n if (onClose) {\r\n contentPage = (\r\n \r\n {content}\r\n \r\n );\r\n }\r\n else {\r\n contentPage = (\r\n \r\n \r\n {content}\r\n \r\n \r\n );\r\n }\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n {contentPage}\r\n \r\n );\r\n }\r\n}\r\n// #endregion Component\r\n\r\n// Export: Component\r\nexport default withStyles(styles)(withWidth()(SignIn));","/* Copyright 2019 - 2022 Ellucian Company L.P. and its affiliates.\r\n * File: SignUp.tsx\r\n * Type: Container component */\r\n\r\n// #region Imports\r\nimport React from 'react';\r\n\r\n// Core components\r\nimport Button from '@hedtech/powercampus-design-system/react/core/Button';\r\nimport Grid from '@hedtech/powercampus-design-system/react/core/Grid';\r\nimport Modal from '@hedtech/powercampus-design-system/react/core/Modal';\r\nimport Paragraph from '@hedtech/powercampus-design-system/react/core/Paragraph';\r\nimport PasswordConfirmation from '@hedtech/powercampus-design-system/react/components/PasswordConfirmation';\r\nimport Text from '@hedtech/powercampus-design-system/react/core/Text';\r\nimport TextField from '@hedtech/powercampus-design-system/react/core/TextField';\r\n\r\n// Types\r\nimport { IAccountValidations } from '@hedtech/powercampus-design-system/types/PasswordConfirmation/IAccountValidations';\r\nimport { IAlert } from '@hedtech/powercampus-design-system/types/IAlert';\r\nimport { IJsonResult } from '@hedtech/powercampus-design-system/types/IJsonResult';\r\nimport { ILogData } from '@hedtech/powercampus-design-system/types/ILogData';\r\nimport { ResultType } from '@hedtech/powercampus-design-system/types/ResultType';\r\nimport { IIdentityAccount, IIdentityAccountValidations } from '../../Types/Account/IIdentityAccount';\r\nimport { IPasswordPolicy, IPasswordPolicyResult, IPasswordPolicyErrors } from '../../Types/Generic/IPasswordPolicy';\r\nimport { ISignUpResources } from '../../Types/Resources/Generic/ISignUpResources';\r\n\r\n// Helpers\r\nimport Constants from '@hedtech/powercampus-design-system/helpers/Constants';\r\nimport { emailIsValid } from '@hedtech/powercampus-design-system/helpers/CharRegExp';\r\nimport LogData from '@hedtech/powercampus-design-system/helpers/LogData';\r\nimport PasswordValidation from '@hedtech/powercampus-design-system/helpers/PasswordValidation';\r\nimport Resolver from '@hedtech/powercampus-design-system/helpers/Resolver';\r\nimport Tokens from '@hedtech/powercampus-design-system/react/core/styles/Tokens';\r\nimport { createStyles, withStyles, WithStyles } from '@hedtech/powercampus-design-system/react/core/styles/withStyles';\r\n\r\n// Requests\r\nimport RequestsLayout from '@hedtech/powercampus-design-system/requests/LayoutRequests';\r\nimport Requests from '../../Requests/Generic/SignUp';\r\n\r\n// State Management\r\nimport LayoutActions from '@hedtech/powercampus-design-system/flux/actions/LayoutActions';\r\nimport PasswordConfirmationActions from '@hedtech/powercampus-design-system/flux/actions/PasswordConfirmationActions';\r\nimport PasswordConfirmationStore from '@hedtech/powercampus-design-system/flux/stores/PasswordConfirmationStore';\r\n// #endregion Imports\r\n\r\n// #region Types\r\nexport interface ISignUpProps {\r\n open?: boolean;\r\n type: 'ConEd' | 'Application' | 'SharedAccess';\r\n onAfterSignUp?: (userName?: string) => void;\r\n onClose?: () => void;\r\n onGoSignIn?: () => void;\r\n}\r\n\r\ninterface ISignUpState {\r\n anchorEl: any;\r\n account: IIdentityAccount;\r\n cannotCreateAccount: boolean;\r\n emailRegExp?: string;\r\n isLoading: boolean;\r\n isLoadingSave: boolean;\r\n password?: string;\r\n passwordPolicy?: IPasswordPolicy;\r\n resources?: ISignUpResources;\r\n accountValidations?: IAccountValidations;\r\n validations: IIdentityAccountValidations;\r\n}\r\n\r\nconst styles = createStyles({\r\n margin: {\r\n marginLeft: `-${Tokens.spacing40}`,\r\n marginTop: Tokens.spacing30,\r\n },\r\n popperText: {\r\n maxWidth: '15rem'\r\n },\r\n spacingButtons: {\r\n paddingTop: Tokens.spacing40\r\n },\r\n spacingInstructions: {\r\n paddingTop: Tokens.spacing40\r\n },\r\n textAlign: {\r\n textAlign: 'center'\r\n }\r\n});\r\n\r\ntype PropsWithStyles = ISignUpProps & WithStyles;\r\n// #endregion Types\r\n\r\n// #region Component\r\nclass SignUp extends React.Component {\r\n private idModule: string;\r\n private idPage: string;\r\n\r\n public readonly state: Readonly;\r\n\r\n public constructor(props) {\r\n super(props);\r\n\r\n // #region Initialize Variables and State\r\n this.idModule = 'Generic';\r\n this.idPage = 'SignUp';\r\n this.state = this.getInitialState();\r\n // #endregion Initialize Variables and State\r\n // #region Bind State Management Listeners\r\n PasswordConfirmationStore.addPasswordValidationListener(this.onChangePassword);\r\n // #endregion State Management Listeners\r\n }\r\n\r\n private getInitialState(): ISignUpState {\r\n let isLoading: boolean = true;\r\n let resources: ISignUpResources | undefined;\r\n if (this.state) {\r\n isLoading = this.state.isLoading;\r\n resources = this.state.resources;\r\n }\r\n return {\r\n account: {\r\n email: '',\r\n firstName: '',\r\n lastName: '',\r\n password: '',\r\n peopleId: ''\r\n },\r\n accountValidations: undefined,\r\n validations: {\r\n emailInvalid: false,\r\n emailModified: false,\r\n existingUser: false,\r\n firstNameModified: false,\r\n lastNameModified: false,\r\n },\r\n anchorEl: null,\r\n cannotCreateAccount: false,\r\n isLoading: isLoading,\r\n isLoadingSave: false,\r\n resources: resources\r\n };\r\n }\r\n\r\n // #region Events\r\n\r\n private onChangePassword = (): void => {\r\n try {\r\n const {\r\n account\r\n } = this.state;\r\n const password = PasswordConfirmationStore.getPassword();\r\n account.password = password;\r\n this.setState({\r\n password: password,\r\n account: account,\r\n accountValidations: PasswordConfirmationStore.getPasswordValidation()\r\n });\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onChangePassword.name, e));\r\n }\r\n };\r\n\r\n private onChangeTextField = (event: React.ChangeEvent): void => {\r\n try {\r\n const {\r\n account,\r\n validations,\r\n emailRegExp,\r\n } = this.state;\r\n\r\n const id: string = event.target.id;\r\n const value: string = event.target.value;\r\n switch (id) {\r\n case 'txtFirstName':\r\n account.firstName = value;\r\n validations.firstNameModified = true;\r\n break;\r\n case 'txtLastName':\r\n account.lastName = value;\r\n validations.lastNameModified = true;\r\n break;\r\n case 'txtEmail':\r\n account.email = value;\r\n if (emailRegExp && account.email) {\r\n validations.emailInvalid = !emailIsValid(account.email, emailRegExp);\r\n }\r\n else {\r\n validations.emailInvalid = false;\r\n }\r\n validations.emailModified = true;\r\n break;\r\n }\r\n this.setState({\r\n account: account,\r\n validations: validations\r\n });\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onChangeTextField.name, e));\r\n }\r\n };\r\n\r\n private onCloseModal = (): void => {\r\n try {\r\n const {\r\n onClose\r\n } = this.props;\r\n\r\n const {\r\n isLoadingSave\r\n } = this.state;\r\n\r\n if (onClose && !isLoadingSave) {\r\n this.setState(this.getInitialState());\r\n onClose();\r\n PasswordConfirmationActions.setPasswordValidation();\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onCloseModal.name, e));\r\n }\r\n };\r\n\r\n private onCreateAccount = (): void => {\r\n try {\r\n const {\r\n type\r\n } = this.props;\r\n const {\r\n account,\r\n accountValidations,\r\n isLoadingSave,\r\n password,\r\n validations\r\n } = this.state;\r\n let isValid: boolean = true;\r\n if (!isLoadingSave) {\r\n validations.emailModified = true;\r\n validations.firstNameModified = true;\r\n validations.lastNameModified = true;\r\n if (accountValidations) {\r\n let componentValidations: IAccountValidations = PasswordValidation.validatePassword(accountValidations, password,\r\n PasswordConfirmationStore.getPasswordPolicy());\r\n componentValidations = PasswordValidation.validateConfirmPassword(accountValidations, accountValidations.confirmPassword, password);\r\n PasswordConfirmationActions.setPasswordValidation(password, componentValidations);\r\n if (componentValidations.hasErrors) {\r\n isValid = false;\r\n }\r\n }\r\n if (isValid && Boolean(account.email)\r\n && !validations.emailInvalid\r\n && Boolean(account.firstName)\r\n && Boolean(account.lastName)\r\n && Boolean(account.password)) {\r\n this.showLoaderSave();\r\n switch (type) {\r\n case 'Application':\r\n Requests.postSignUpApplication(account, this.resolvePostSignUp, this.logError);\r\n break;\r\n case 'ConEd':\r\n Requests.postSignUpConed(account, this.resolvePostSignUp, this.logError);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onCreateAccount.name, e));\r\n }\r\n };\r\n\r\n private onGoSignInModal = (): void => {\r\n try {\r\n const {\r\n onGoSignIn\r\n } = this.props;\r\n\r\n const {\r\n isLoadingSave\r\n } = this.state;\r\n\r\n if (onGoSignIn && !isLoadingSave) {\r\n this.setState(this.getInitialState());\r\n onGoSignIn();\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.onGoSignInModal.name, e));\r\n }\r\n };\r\n\r\n // #endregion Events\r\n\r\n // #region Loader Functions\r\n private hideAllLoaders = (): void => {\r\n this.setState({\r\n isLoading: false,\r\n isLoadingSave: false\r\n });\r\n };\r\n\r\n private hideLoaderSave = (): void => {\r\n this.setState({\r\n isLoadingSave: false\r\n });\r\n };\r\n\r\n private showLoaderSave = (): void => {\r\n this.setState({\r\n isLoadingSave: true\r\n });\r\n };\r\n // #endregion Loader Functions\r\n\r\n // #region Error Functions\r\n private logError(logData: ILogData): void {\r\n this.hideAllLoaders();\r\n LayoutActions.setLogData(logData);\r\n }\r\n\r\n private showError(message?: string): void {\r\n this.hideAllLoaders();\r\n LayoutActions.setAlert({ message: message, messageType: ResultType.error } as IAlert);\r\n }\r\n // #endregion Error Functions\r\n\r\n // #region Resolvers\r\n private resolveGetEmailRegExp = (json: string): void => {\r\n try {\r\n const result: IJsonResult | undefined\r\n = Resolver(json, this.resolveGetEmailRegExp.name, this.hideAllLoaders);\r\n if (result?.status) {\r\n this.setState({\r\n emailRegExp: result.data\r\n });\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.resolveGetEmailRegExp.name, e));\r\n }\r\n };\r\n\r\n private resolveGetResources = (json: string): void => {\r\n try {\r\n const result: IJsonResult | undefined\r\n = Resolver(json, this.resolveGetResources.name, this.hideAllLoaders);\r\n if (result?.status) {\r\n this.setState({\r\n resources: result.data,\r\n isLoading: false,\r\n });\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.resolveGetResources.name, e));\r\n }\r\n };\r\n\r\n private resolvePostSignUp = (json: string): void => {\r\n try {\r\n const result: IJsonResult | undefined\r\n = Resolver(json, this.resolvePostSignUp.name, this.hideAllLoaders);\r\n if (result?.status) {\r\n const resultSignUp: IPasswordPolicyResult = result.data;\r\n if (resultSignUp.status === 0) {\r\n const {\r\n onAfterSignUp\r\n } = this.props;\r\n\r\n const {\r\n resources\r\n } = this.state;\r\n\r\n if (resources) {\r\n LayoutActions.setAlert({\r\n message: resources.lblCreatedSuccessfully,\r\n messageType: ResultType.success\r\n } as IAlert);\r\n if (onAfterSignUp) {\r\n onAfterSignUp(result.data.userName);\r\n }\r\n PasswordConfirmationActions.setPasswordValidation();\r\n this.setState(this.getInitialState());\r\n }\r\n }\r\n else if (resultSignUp.status === -1) {\r\n if (resultSignUp.userAccountStatus == IPasswordPolicyErrors.unableToDefineUserName) {\r\n this.setState({\r\n cannotCreateAccount: true\r\n });\r\n PasswordConfirmationActions.setPasswordValidation();\r\n }\r\n else if (resultSignUp.userAccountStatus == IPasswordPolicyErrors.userAlreadyExists) {\r\n const {\r\n validations\r\n } = this.state;\r\n\r\n if (validations) {\r\n validations.existingUser = true;\r\n this.setState({\r\n validations: validations,\r\n password: '',\r\n cannotCreateAccount: true\r\n });\r\n PasswordConfirmationActions.setPasswordValidation();\r\n }\r\n }\r\n }\r\n else {\r\n this.showError();\r\n }\r\n this.hideLoaderSave();\r\n }\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.resolvePostSignUp.name, e));\r\n }\r\n };\r\n // #endregion Resolvers\r\n\r\n // #region Lifecycle\r\n public componentDidMount(): void {\r\n try {\r\n RequestsLayout.getResources(this.idModule, this.idPage,\r\n this.resolveGetResources,\r\n this.logError);\r\n Requests.getEmailRegExp(this.resolveGetEmailRegExp, this.logError);\r\n }\r\n catch (e) {\r\n this.logError(LogData.fromException(this.componentDidMount.name, e));\r\n }\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n PasswordConfirmationStore.removePasswordValidationListener(this.onChangePassword);\r\n }\r\n\r\n // #endregion Lifecycle\r\n\r\n public render(): JSX.Element {\r\n const {\r\n classes,\r\n open,\r\n onClose,\r\n onGoSignIn,\r\n type,\r\n } = this.props;\r\n\r\n const {\r\n account,\r\n cannotCreateAccount,\r\n isLoading,\r\n isLoadingSave,\r\n resources,\r\n validations\r\n } = this.state;\r\n\r\n let contentPage: JSX.Element | undefined;\r\n if (resources && !isLoading) {\r\n let title: JSX.Element | undefined;\r\n let newAccountContent: JSX.Element | JSX.Element[] | undefined;\r\n let button: JSX.Element | undefined;\r\n\r\n // #region First Name\r\n let errorFirstName: boolean = false;\r\n let errorTextFirstName: string | undefined;\r\n if (validations.firstNameModified) {\r\n errorFirstName = !Boolean(account.firstName);\r\n errorTextFirstName = errorFirstName ?\r\n resources.lblFirstNameRequired\r\n : undefined;\r\n }\r\n // #endregion First Name\r\n\r\n // #region Last Name\r\n let errorLastName: boolean = false;\r\n let errorTextLastName: string | undefined;\r\n if (validations.lastNameModified) {\r\n errorLastName = !Boolean(account.lastName);\r\n errorTextLastName = errorLastName ?\r\n resources.lblLastNameRequired\r\n : undefined;\r\n }\r\n // #endregion Last Name\r\n\r\n // #region Email\r\n let errorEmail: boolean = false;\r\n let errorTextEmail: string | undefined;\r\n if (validations.emailModified) {\r\n errorEmail = !Boolean(account.email)\r\n || validations.emailInvalid\r\n || validations.existingUser;\r\n errorTextEmail = !Boolean(account.email) ?\r\n resources.lblEmailRequired\r\n : (validations.emailInvalid ?\r\n resources.lblEmailInvalid\r\n : validations.existingUser ?\r\n resources.lblExistingUser\r\n : undefined);\r\n }\r\n // #endregion Email\r\n\r\n if (!cannotCreateAccount) {\r\n title = (\r\n <>\r\n \r\n {resources.lblCreateAccount}\r\n \r\n {onGoSignIn && (\r\n \r\n )}\r\n \r\n );\r\n button = (\r\n \r\n {resources.btnCreateAccount}\r\n \r\n );\r\n }\r\n\r\n if (cannotCreateAccount) {\r\n title = (\r\n <>\r\n \r\n {resources.lblCreateAccount}\r\n \r\n \r\n );\r\n newAccountContent = (\r\n \r\n \r\n \r\n \r\n {resources.lblCannotCreateAccount}\r\n \r\n \r\n \r\n );\r\n }\r\n else {\r\n newAccountContent = (\r\n <>\r\n {!onClose && (\r\n \r\n \r\n {title}\r\n \r\n \r\n )}\r\n\r\n \r\n \r\n \r\n \r\n \r\n {resources.lblContactInformation}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )]}\r\n />\r\n \r\n \r\n\r\n {!onClose && (\r\n \r\n \r\n {button}\r\n \r\n \r\n )}\r\n \r\n );\r\n }\r\n\r\n\r\n if (onClose) {\r\n contentPage = (\r\n \r\n {newAccountContent}\r\n \r\n );\r\n }\r\n else {\r\n contentPage = (\r\n <>\r\n {newAccountContent}\r\n \r\n );\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n {contentPage}\r\n \r\n );\r\n }\r\n}\r\n// #endregion Component\r\n\r\n// Export: Component\r\nexport default withStyles(styles)(SignUp);","/* Copyright 2019 - 2021 Ellucian Company L.P. and its affiliates.\r\n* File: ApplicationForm.ts */\r\n\r\n// Types\r\nimport { ILogData } from '@hedtech/powercampus-design-system/types/ILogData';\r\nimport { IApplication } from '../../Types/Applications/IApplication';\r\nimport { IApplicationAttachment } from '../../Types/Applications/IApplicationAttachment';\r\nimport { ISavedApplication } from '../../Types/Applications/ISavedApplication';\r\nimport { IApplicationForm } from '../../Types/Form/IApplicationForm';\r\n\r\n// Helpers\r\nimport Request from '@hedtech/powercampus-design-system/helpers/Request';\r\n\r\n// Functions for requests\r\nconst ApplicationFormRequests = {\r\n // #region Addresses\r\n getAddresses(startIndex: number, length: number, zipCode?: string, resolver?: (json: string) => void,\r\n resolveError?: (logData: ILogData) => void): void {\r\n Request.post(this.getAddresses.name, '/Address',\r\n {\r\n length,\r\n startIndex,\r\n zipCode\r\n },\r\n resolver, resolveError);\r\n },\r\n // #endregion Addresses\r\n\r\n // #region ApplicationHandler\r\n getComponents(id: number, resolver: (json: string) => void, resolveError: (logData: ILogData) => void): void {\r\n Request.post(this.getComponents.name, '/Forms/Details',\r\n {\r\n id: id,\r\n type: 0\r\n },\r\n resolver, resolveError);\r\n },\r\n\r\n getSavedApplicationComponents(savedApplicationToken: string,\r\n resolver: (json: string) => void, resolveError: (logData: ILogData) => void): void {\r\n Request.post(this.getComponents.name, '/Forms/Saved',\r\n savedApplicationToken,\r\n resolver, resolveError);\r\n },\r\n\r\n postSubmit(application: IApplication,\r\n resolver: (json: string) => void, resolveError: (logData: ILogData) => void): void {\r\n Request.post(this.postSubmit.name, '/Applications/Create', application, resolver, resolveError);\r\n },\r\n\r\n postCreateSavedApplication(savedApplication: ISavedApplication,\r\n components: IApplicationForm, resolver: (json: string) => void, resolveError: (logData: ILogData) => void): void {\r\n Request.post(this.postCreateSavedApplication.name,\r\n '/Applications/CreateSavedApplication',\r\n {\r\n components,\r\n savedApplication\r\n },\r\n resolver,\r\n resolveError);\r\n },\r\n\r\n postCreateSaveApplicationNotification(urlToSend: string, email: string,\r\n formApplicationName: string, resolver: (json: string) => void, resolveError: (ILogData: ILogData) => void): void {\r\n Request.post(this.postCreateSaveApplicationNotification.name,\r\n '/Applications/CreateSaveApplicationNotification',\r\n {\r\n email: email,\r\n formApplicationName: formApplicationName,\r\n urlToSend: urlToSend\r\n },\r\n resolver,\r\n resolveError);\r\n },\r\n\r\n postCreateApplicationAttachment(applicationAttachment: IApplicationAttachment,\r\n resolver: (json: string) => void, resolveError: (logData: ILogData) => void): void {\r\n Request.post(this.postCreateApplicationAttachment.name,\r\n '/Applications/CreateApplicationAttachment',\r\n applicationAttachment,\r\n resolver,\r\n resolveError);\r\n },\r\n\r\n postListApplicationAttachments(applicationId: number,\r\n resolver: (json: string) => void, resolveError: (logData: ILogData) => void): void {\r\n Request.post(this.postListApplicationAttachments.name,\r\n '/Applications/ListApplicationAttachments',\r\n applicationId,\r\n resolver,\r\n resolveError);\r\n },\r\n\r\n postDeleteApplicationAttachment(attachmentId: number,\r\n resolver: (json: string) => void, resolveError: (logData: ILogData) => void): void {\r\n Request.post(this.postListApplicationAttachments.name,\r\n '/Applications/DeleteApplicationAttachment',\r\n attachmentId,\r\n resolver,\r\n resolveError);\r\n },\r\n\r\n getApplicationAttachments(applicationId: number,\r\n resolver: (json: string) => void, resolveError: (logData: ILogData) => void): void {\r\n Request.post(this.getApplicationAttachments.name,\r\n '/Applications/DeleteApplicationAttachment',\r\n applicationId,\r\n resolver,\r\n resolveError);\r\n },\r\n\r\n GetApplicationAttachmentTotals(applicationId: number,\r\n resolver: (json: string) => void, resolveError: (logData: ILogData) => void): void {\r\n Request.post(this.getApplicationAttachments.name,\r\n '/Applications/GetApplicationAttachmentTotals',\r\n applicationId,\r\n resolver,\r\n resolveError);\r\n },\r\n // #endregion\r\n\r\n // #region TestScores\r\n getChildOptions(url: string, id: number, step: string, group: string, targetId: string, isApplicationForm: boolean,\r\n resolver: (json: string) => void, resolveError: (logData: ILogData) => void,\r\n formId?: number): void {\r\n if (!formId) {\r\n Request.post(this.getChildOptions.name, `/${url}`, {\r\n group,\r\n id,\r\n step,\r\n targetId\r\n }, resolver, resolveError);\r\n }\r\n else {\r\n Request.post(this.getChildOptions.name, `/${url}`, {\r\n formId,\r\n group,\r\n id,\r\n step,\r\n targetId,\r\n isApplicationForm\r\n }, resolver, resolveError);\r\n }\r\n },\r\n getValidateScoreType(\r\n applicationId: number,\r\n test: any,\r\n group: string,\r\n componentId: string,\r\n resolver: (json: string) => void,\r\n resolveError: (logData: ILogData) => void): void {\r\n Request.post(this.getValidateScoreType.name,\r\n '/TestScores/ScoreType',\r\n { formId: applicationId, testId: test, group, componentId },\r\n resolver,\r\n resolveError);\r\n },\r\n // #endregion\r\n\r\n // #region Institutions\r\n getCountries(resolver: (json: string) => void, resolveError: (logData: ILogData) => void): void {\r\n Request.get(this.getCountries.name, '/Institutions/Countries', resolver, resolveError);\r\n },\r\n getStates(resolver: (json: string) => void, resolveError: (logData: ILogData) => void): void {\r\n Request.get(this.getCountries.name, '/Institutions/States', resolver, resolveError);\r\n },\r\n getInstitutions(startIndex: number, length: number, institutionName?: string, etsCode?: string,\r\n city?: string, stateId?: number, countryId?: number, resolver?: (json: string) => void,\r\n resolveError?: (logData: ILogData) => void): void {\r\n Request.post(this.getInstitutions.name, '/Institutions',\r\n {\r\n length,\r\n startIndex,\r\n institution: {\r\n city,\r\n countryId,\r\n etsCode,\r\n name: institutionName,\r\n stateProvinceId: stateId\r\n }\r\n },\r\n resolver, resolveError);\r\n },\r\n // #endregion\r\n\r\n // #region Settings\r\n getGeneralSettings(resolver: (json: string) => void): void {\r\n Request.get(this.getGeneralSettings.name, '/Settings/General', resolver);\r\n },\r\n // #endregion Settings\r\n\r\n};\r\n\r\n// Export object with the requests\r\nexport default ApplicationFormRequests;","/* Copyright 2019 - 2021 Ellucian Company L.P. and its affiliates.\r\n * File: Applications.ts */\r\n\r\n// Types\r\nimport { ILogData } from '@hedtech/powercampus-design-system/types/ILogData';\r\n\r\n// Helpers\r\nimport Request from '@hedtech/powercampus-design-system/helpers/Request';\r\nimport { ISavedApplication } from '../../Types/Applications/ISavedApplication';\r\nimport { IApplicationForm } from '../../Types/Form/IApplicationForm';\r\n\r\n// Functions for requests\r\nconst ApplicationsRequests = {\r\n\r\n // #region ApplicationHandler\r\n getApplications(resolver: (json: string) => void, resolveError: (logData: ILogData) => void): void {\r\n Request.post(this.getApplications.name, '/Forms/List', 0 , resolver, resolveError);\r\n },\r\n // #endregion\r\n\r\n postDeleteSavedApplication(savedApplicationId: number,\r\n resolver: (json: string) => void, resolveError: (logData: ILogData) => void): void {\r\n Request.post(this.postDeleteSavedApplication.name, '/Forms/DeleteSavedApplication',\r\n savedApplicationId, resolver, resolveError);\r\n },\r\n\r\n postUpdateSavedApplication(savedApplication: ISavedApplication,\r\n components: IApplicationForm, resolver: (json: string) => void,\r\n resolveError: (logData: ILogData) => void): void {\r\n Request.post(this.postUpdateSavedApplication.name, '/Forms/UpdateSavedApplication',\r\n {\r\n components: components,\r\n savedApplication: savedApplication\r\n },\r\n resolver, resolveError);\r\n },\r\n getStatusSettings(resolver: (json: string) => void): void {\r\n Request.post(this.getStatusSettings.name, '/Settings/ApplicationStatus', null, resolver);\r\n },\r\n getSubmittedApplications(resolver: (json: string) => void): void {\r\n Request.post(this.getSubmittedApplications.name, '/Applications/GetSubmittedApplications', null, resolver);\r\n },\r\n};\r\n\r\n// Export object with the requests\r\nexport default ApplicationsRequests;","/* Copyright 2019 Ellucian Company L.P. and its affiliates.\r\n * File: ProcessPaymentModal.ts */\r\n\r\n// Types\r\nimport { ILogData } from '@hedtech/powercampus-design-system/types/ILogData';\r\nimport { IGiftCampaign } from '../../Types/MakeGift/IGiftCampaign';\r\nimport { IRequestTranscript } from '../../Types/Grades/IRequestTranscript';\r\nimport { IPaymentRequest } from '../../Types/Payment/IPaymentRequest';\r\n\r\n// Helpers\r\nimport Request from '@hedtech/powercampus-design-system/helpers/Request';\r\n\r\n// Functions for requests\r\nconst ProcessPaymentModalRequests = {\r\n postProcessPayment(paymentRequest: IPaymentRequest,\r\n resolver: (json: string) => void,\r\n resolveError: (logData: ILogData) => void): void {\r\n Request.post(this.postProcessPayment.name, '/Payment/Process', { paymentRequest }, resolver, resolveError);\r\n },\r\n postProcessTranscriptPayment(paymentRequest: IPaymentRequest,\r\n resolver: (json: string) => void,\r\n resolveError: (logData: ILogData) => void,\r\n requestTranscripts?: IRequestTranscript[]): void {\r\n Request.post(this.postProcessTranscriptPayment.name, '/Payment/Process', { paymentRequest, requestTranscripts }, resolver, resolveError);\r\n },\r\n postProcessDonationPayment(paymentRequest: IPaymentRequest,\r\n resolver: (json: string) => void,\r\n resolveError: (logData: ILogData) => void,\r\n giftCampaigns?: IGiftCampaign[]): void {\r\n Request.post(this.postProcessTranscriptPayment.name, '/Payment/Process', { paymentRequest, giftCampaigns }, resolver, resolveError);\r\n }\r\n};\r\n\r\n// Export object with the requests\r\nexport default ProcessPaymentModalRequests;","/* Copyright 2019 - 2021 Ellucian Company L.P. and its affiliates.\r\n * File: SignIn.ts */\r\n\r\n// Types\r\nimport { IPasswordChange } from '../../Types/Account/IPasswordChange';\r\n\r\n// Helpers\r\nimport Request from '@hedtech/powercampus-design-system/helpers/Request';\r\n\r\n// Functions for requests\r\nconst SignInRequests = {\r\n authenticateUser(userName: string, password: string, resolver: (json: string) => void): void {\r\n Request.post(this.authenticateUser.name, '/SignIn/Authenticate', { userName, password }, resolver);\r\n },\r\n changePassword(passwordChange: IPasswordChange, resolver: (json: string) => void): void {\r\n Request.post(this.changePassword.name, '/Password/ChangePassword', passwordChange, resolver);\r\n },\r\n getAuthenticationMode(userName: string, resolver: (json: string) => void): void {\r\n Request.post(this.getAuthenticationMode.name, '/SignIn/GetAuthenticationMode', userName, resolver);\r\n },\r\n isForgotPasswordEnabled(resolver: (json: string) => void): void {\r\n Request.post(this.isForgotPasswordEnabled.name, '/SignIn/IsForgotPasswordEnabled', null, resolver);\r\n },\r\n sendForgotPasswordEmail(userName: string, reCaptchaResponse: string, resolver: (json: string) => void): void {\r\n Request.post(this.sendForgotPasswordEmail.name, '/SignIn/SendForgotPasswordEmail', { userName, reCaptchaResponse }, resolver);\r\n },\r\n};\r\n\r\n// Export object with the requests\r\nexport default SignInRequests;","/* Copyright 2019 - 2021 Ellucian Company L.P. and its affiliates.\r\n * File: SignUp.ts */\r\n\r\n// Types\r\nimport { ILogData } from '@hedtech/powercampus-design-system/types/ILogData';\r\nimport { IIdentityAccount } from '../../Types/Account/IIdentityAccount';\r\nimport { IValidatePassword } from '../../Types/Generic/IPasswordPolicy';\r\n\r\n// Helpers\r\nimport Request from '@hedtech/powercampus-design-system/helpers/Request';\r\n\r\n// Functions for requests\r\nconst SignUpRequests = {\r\n getEmailRegExp(resolver: (json: string) => void, resolveError: (logData: ILogData) => void): void {\r\n Request.post(this.getEmailRegExp.name, '/Settings/EmailRegExp', null, resolver, resolveError);\r\n },\r\n getPasswordPolicy(appArea: string,\r\n resolver: (json: string) => void,\r\n resolveError: (logData: ILogData) => void): void {\r\n Request.post(this.getPasswordPolicy.name, '/Password/Policy', appArea, resolver, resolveError);\r\n },\r\n postSignUpApplication(account: IIdentityAccount,\r\n resolver: (json: string) => void,\r\n resolveError: (logData: ILogData) => void): void {\r\n Request.post(this.postSignUpApplication.name, '/SignUp/Application', account, resolver, resolveError);\r\n },\r\n postSignUpConed(account: IIdentityAccount,\r\n resolver: (json: string) => void,\r\n resolveError: (logData: ILogData) => void): void {\r\n Request.post(this.postSignUpConed.name, '/SignUp/ConEd', account, resolver, resolveError);\r\n },\r\n postValidatePassword(passwordModel: IValidatePassword,\r\n resolver: (json: string) => void,\r\n resolveError: (logData: ILogData) => void): void {\r\n Request.post(this.postValidatePassword.name, '/Password/Validate', passwordModel, resolver, resolveError);\r\n },\r\n};\r\n\r\n// Export object with the requests\r\nexport default SignUpRequests;","/* Copyright 2021 Ellucian Company L.P. and its affiliates.\r\n * File: AuthStatus.ts */\r\n\r\nexport enum AuthStatus {\r\n None = 0,\r\n Success = 1,\r\n InvalidCredentials = 2,\r\n InvalidPassword = 3,\r\n NoIdentity = 4,\r\n InvalidConfiguration = 5,\r\n NoStoreAssigned = 6,\r\n Unknown = 7,\r\n IsLocked = 8\r\n}","/* Copyright 2019 Ellucian Company L.P. and its affiliates.\r\n * File: PaymentOrigin.ts */\r\n\r\nexport enum PaymentOrigin {\r\n Registration = 0,\r\n ConEdRegistration = 1,\r\n MakePayment = 2,\r\n TranscriptRequest = 3,\r\n OnlineDonation = 4,\r\n Application = 5,\r\n PowerCampusReceipt = 6,\r\n PowerCampusGift = 7,\r\n SharedAccessMakePayment = 8\r\n}","/* Copyright 2021 Ellucian Company L.P. and its affiliates.\r\n * File: IPasswordPolicy.ts */\r\n\r\nexport interface IPasswordPolicy {\r\n changePasswordUrl: string\r\n isLowerCaseRequired: boolean;\r\n isNumbersRequired: boolean;\r\n isSpecialCharacterRequired: boolean;\r\n isUpperCaseRequired: boolean;\r\n minimumLength: number;\r\n}\r\n\r\nexport interface IValidatePassword {\r\n areaName: string;\r\n password: string;\r\n}\r\n\r\nexport interface IPasswordPolicyResult {\r\n passwordValidation: IPasswordPolicyErrors;\r\n passwordMinLength: number;\r\n userAccountStatus: IPasswordPolicyErrors;\r\n status: number;\r\n userName: string;\r\n}\r\n\r\nexport enum IPasswordPolicyErrors {\r\n digits = 0,\r\n isEmpty = 1,\r\n lowerCase = 2,\r\n minLength = 3,\r\n specialCharacters = 4,\r\n upperCase = 5,\r\n newPasswordValid = 6,\r\n currentPasswordInvalid = 7,\r\n success = 8,\r\n unableToDefineUserName = 15,\r\n userAlreadyExists = 17,\r\n}","var map = {\n\t\"./af\": \"./node_modules/moment/locale/af.js\",\n\t\"./af.js\": \"./node_modules/moment/locale/af.js\",\n\t\"./ar\": \"./node_modules/moment/locale/ar.js\",\n\t\"./ar-dz\": \"./node_modules/moment/locale/ar-dz.js\",\n\t\"./ar-dz.js\": \"./node_modules/moment/locale/ar-dz.js\",\n\t\"./ar-kw\": \"./node_modules/moment/locale/ar-kw.js\",\n\t\"./ar-kw.js\": \"./node_modules/moment/locale/ar-kw.js\",\n\t\"./ar-ly\": \"./node_modules/moment/locale/ar-ly.js\",\n\t\"./ar-ly.js\": \"./node_modules/moment/locale/ar-ly.js\",\n\t\"./ar-ma\": \"./node_modules/moment/locale/ar-ma.js\",\n\t\"./ar-ma.js\": \"./node_modules/moment/locale/ar-ma.js\",\n\t\"./ar-sa\": \"./node_modules/moment/locale/ar-sa.js\",\n\t\"./ar-sa.js\": \"./node_modules/moment/locale/ar-sa.js\",\n\t\"./ar-tn\": \"./node_modules/moment/locale/ar-tn.js\",\n\t\"./ar-tn.js\": \"./node_modules/moment/locale/ar-tn.js\",\n\t\"./ar.js\": \"./node_modules/moment/locale/ar.js\",\n\t\"./az\": \"./node_modules/moment/locale/az.js\",\n\t\"./az.js\": \"./node_modules/moment/locale/az.js\",\n\t\"./be\": \"./node_modules/moment/locale/be.js\",\n\t\"./be.js\": \"./node_modules/moment/locale/be.js\",\n\t\"./bg\": \"./node_modules/moment/locale/bg.js\",\n\t\"./bg.js\": \"./node_modules/moment/locale/bg.js\",\n\t\"./bm\": \"./node_modules/moment/locale/bm.js\",\n\t\"./bm.js\": \"./node_modules/moment/locale/bm.js\",\n\t\"./bn\": \"./node_modules/moment/locale/bn.js\",\n\t\"./bn-bd\": \"./node_modules/moment/locale/bn-bd.js\",\n\t\"./bn-bd.js\": \"./node_modules/moment/locale/bn-bd.js\",\n\t\"./bn.js\": \"./node_modules/moment/locale/bn.js\",\n\t\"./bo\": \"./node_modules/moment/locale/bo.js\",\n\t\"./bo.js\": \"./node_modules/moment/locale/bo.js\",\n\t\"./br\": \"./node_modules/moment/locale/br.js\",\n\t\"./br.js\": \"./node_modules/moment/locale/br.js\",\n\t\"./bs\": \"./node_modules/moment/locale/bs.js\",\n\t\"./bs.js\": \"./node_modules/moment/locale/bs.js\",\n\t\"./ca\": \"./node_modules/moment/locale/ca.js\",\n\t\"./ca.js\": \"./node_modules/moment/locale/ca.js\",\n\t\"./cs\": \"./node_modules/moment/locale/cs.js\",\n\t\"./cs.js\": \"./node_modules/moment/locale/cs.js\",\n\t\"./cv\": \"./node_modules/moment/locale/cv.js\",\n\t\"./cv.js\": \"./node_modules/moment/locale/cv.js\",\n\t\"./cy\": \"./node_modules/moment/locale/cy.js\",\n\t\"./cy.js\": \"./node_modules/moment/locale/cy.js\",\n\t\"./da\": \"./node_modules/moment/locale/da.js\",\n\t\"./da.js\": \"./node_modules/moment/locale/da.js\",\n\t\"./de\": \"./node_modules/moment/locale/de.js\",\n\t\"./de-at\": \"./node_modules/moment/locale/de-at.js\",\n\t\"./de-at.js\": \"./node_modules/moment/locale/de-at.js\",\n\t\"./de-ch\": \"./node_modules/moment/locale/de-ch.js\",\n\t\"./de-ch.js\": \"./node_modules/moment/locale/de-ch.js\",\n\t\"./de.js\": \"./node_modules/moment/locale/de.js\",\n\t\"./dv\": \"./node_modules/moment/locale/dv.js\",\n\t\"./dv.js\": \"./node_modules/moment/locale/dv.js\",\n\t\"./el\": \"./node_modules/moment/locale/el.js\",\n\t\"./el.js\": \"./node_modules/moment/locale/el.js\",\n\t\"./en-au\": \"./node_modules/moment/locale/en-au.js\",\n\t\"./en-au.js\": \"./node_modules/moment/locale/en-au.js\",\n\t\"./en-ca\": \"./node_modules/moment/locale/en-ca.js\",\n\t\"./en-ca.js\": \"./node_modules/moment/locale/en-ca.js\",\n\t\"./en-gb\": \"./node_modules/moment/locale/en-gb.js\",\n\t\"./en-gb.js\": \"./node_modules/moment/locale/en-gb.js\",\n\t\"./en-ie\": \"./node_modules/moment/locale/en-ie.js\",\n\t\"./en-ie.js\": \"./node_modules/moment/locale/en-ie.js\",\n\t\"./en-il\": \"./node_modules/moment/locale/en-il.js\",\n\t\"./en-il.js\": \"./node_modules/moment/locale/en-il.js\",\n\t\"./en-in\": \"./node_modules/moment/locale/en-in.js\",\n\t\"./en-in.js\": \"./node_modules/moment/locale/en-in.js\",\n\t\"./en-nz\": \"./node_modules/moment/locale/en-nz.js\",\n\t\"./en-nz.js\": \"./node_modules/moment/locale/en-nz.js\",\n\t\"./en-sg\": \"./node_modules/moment/locale/en-sg.js\",\n\t\"./en-sg.js\": \"./node_modules/moment/locale/en-sg.js\",\n\t\"./eo\": \"./node_modules/moment/locale/eo.js\",\n\t\"./eo.js\": \"./node_modules/moment/locale/eo.js\",\n\t\"./es\": \"./node_modules/moment/locale/es.js\",\n\t\"./es-do\": \"./node_modules/moment/locale/es-do.js\",\n\t\"./es-do.js\": \"./node_modules/moment/locale/es-do.js\",\n\t\"./es-mx\": \"./node_modules/moment/locale/es-mx.js\",\n\t\"./es-mx.js\": \"./node_modules/moment/locale/es-mx.js\",\n\t\"./es-us\": \"./node_modules/moment/locale/es-us.js\",\n\t\"./es-us.js\": \"./node_modules/moment/locale/es-us.js\",\n\t\"./es.js\": \"./node_modules/moment/locale/es.js\",\n\t\"./et\": \"./node_modules/moment/locale/et.js\",\n\t\"./et.js\": \"./node_modules/moment/locale/et.js\",\n\t\"./eu\": \"./node_modules/moment/locale/eu.js\",\n\t\"./eu.js\": \"./node_modules/moment/locale/eu.js\",\n\t\"./fa\": \"./node_modules/moment/locale/fa.js\",\n\t\"./fa.js\": \"./node_modules/moment/locale/fa.js\",\n\t\"./fi\": \"./node_modules/moment/locale/fi.js\",\n\t\"./fi.js\": \"./node_modules/moment/locale/fi.js\",\n\t\"./fil\": \"./node_modules/moment/locale/fil.js\",\n\t\"./fil.js\": \"./node_modules/moment/locale/fil.js\",\n\t\"./fo\": \"./node_modules/moment/locale/fo.js\",\n\t\"./fo.js\": \"./node_modules/moment/locale/fo.js\",\n\t\"./fr\": \"./node_modules/moment/locale/fr.js\",\n\t\"./fr-ca\": \"./node_modules/moment/locale/fr-ca.js\",\n\t\"./fr-ca.js\": \"./node_modules/moment/locale/fr-ca.js\",\n\t\"./fr-ch\": \"./node_modules/moment/locale/fr-ch.js\",\n\t\"./fr-ch.js\": \"./node_modules/moment/locale/fr-ch.js\",\n\t\"./fr.js\": \"./node_modules/moment/locale/fr.js\",\n\t\"./fy\": \"./node_modules/moment/locale/fy.js\",\n\t\"./fy.js\": \"./node_modules/moment/locale/fy.js\",\n\t\"./ga\": \"./node_modules/moment/locale/ga.js\",\n\t\"./ga.js\": \"./node_modules/moment/locale/ga.js\",\n\t\"./gd\": \"./node_modules/moment/locale/gd.js\",\n\t\"./gd.js\": \"./node_modules/moment/locale/gd.js\",\n\t\"./gl\": \"./node_modules/moment/locale/gl.js\",\n\t\"./gl.js\": \"./node_modules/moment/locale/gl.js\",\n\t\"./gom-deva\": \"./node_modules/moment/locale/gom-deva.js\",\n\t\"./gom-deva.js\": \"./node_modules/moment/locale/gom-deva.js\",\n\t\"./gom-latn\": \"./node_modules/moment/locale/gom-latn.js\",\n\t\"./gom-latn.js\": \"./node_modules/moment/locale/gom-latn.js\",\n\t\"./gu\": \"./node_modules/moment/locale/gu.js\",\n\t\"./gu.js\": \"./node_modules/moment/locale/gu.js\",\n\t\"./he\": \"./node_modules/moment/locale/he.js\",\n\t\"./he.js\": \"./node_modules/moment/locale/he.js\",\n\t\"./hi\": \"./node_modules/moment/locale/hi.js\",\n\t\"./hi.js\": \"./node_modules/moment/locale/hi.js\",\n\t\"./hr\": \"./node_modules/moment/locale/hr.js\",\n\t\"./hr.js\": \"./node_modules/moment/locale/hr.js\",\n\t\"./hu\": \"./node_modules/moment/locale/hu.js\",\n\t\"./hu.js\": \"./node_modules/moment/locale/hu.js\",\n\t\"./hy-am\": \"./node_modules/moment/locale/hy-am.js\",\n\t\"./hy-am.js\": \"./node_modules/moment/locale/hy-am.js\",\n\t\"./id\": \"./node_modules/moment/locale/id.js\",\n\t\"./id.js\": \"./node_modules/moment/locale/id.js\",\n\t\"./is\": \"./node_modules/moment/locale/is.js\",\n\t\"./is.js\": \"./node_modules/moment/locale/is.js\",\n\t\"./it\": \"./node_modules/moment/locale/it.js\",\n\t\"./it-ch\": \"./node_modules/moment/locale/it-ch.js\",\n\t\"./it-ch.js\": \"./node_modules/moment/locale/it-ch.js\",\n\t\"./it.js\": \"./node_modules/moment/locale/it.js\",\n\t\"./ja\": \"./node_modules/moment/locale/ja.js\",\n\t\"./ja.js\": \"./node_modules/moment/locale/ja.js\",\n\t\"./jv\": \"./node_modules/moment/locale/jv.js\",\n\t\"./jv.js\": \"./node_modules/moment/locale/jv.js\",\n\t\"./ka\": \"./node_modules/moment/locale/ka.js\",\n\t\"./ka.js\": \"./node_modules/moment/locale/ka.js\",\n\t\"./kk\": \"./node_modules/moment/locale/kk.js\",\n\t\"./kk.js\": \"./node_modules/moment/locale/kk.js\",\n\t\"./km\": \"./node_modules/moment/locale/km.js\",\n\t\"./km.js\": \"./node_modules/moment/locale/km.js\",\n\t\"./kn\": \"./node_modules/moment/locale/kn.js\",\n\t\"./kn.js\": \"./node_modules/moment/locale/kn.js\",\n\t\"./ko\": \"./node_modules/moment/locale/ko.js\",\n\t\"./ko.js\": \"./node_modules/moment/locale/ko.js\",\n\t\"./ku\": \"./node_modules/moment/locale/ku.js\",\n\t\"./ku.js\": \"./node_modules/moment/locale/ku.js\",\n\t\"./ky\": \"./node_modules/moment/locale/ky.js\",\n\t\"./ky.js\": \"./node_modules/moment/locale/ky.js\",\n\t\"./lb\": \"./node_modules/moment/locale/lb.js\",\n\t\"./lb.js\": \"./node_modules/moment/locale/lb.js\",\n\t\"./lo\": \"./node_modules/moment/locale/lo.js\",\n\t\"./lo.js\": \"./node_modules/moment/locale/lo.js\",\n\t\"./lt\": \"./node_modules/moment/locale/lt.js\",\n\t\"./lt.js\": \"./node_modules/moment/locale/lt.js\",\n\t\"./lv\": \"./node_modules/moment/locale/lv.js\",\n\t\"./lv.js\": \"./node_modules/moment/locale/lv.js\",\n\t\"./me\": \"./node_modules/moment/locale/me.js\",\n\t\"./me.js\": \"./node_modules/moment/locale/me.js\",\n\t\"./mi\": \"./node_modules/moment/locale/mi.js\",\n\t\"./mi.js\": \"./node_modules/moment/locale/mi.js\",\n\t\"./mk\": \"./node_modules/moment/locale/mk.js\",\n\t\"./mk.js\": \"./node_modules/moment/locale/mk.js\",\n\t\"./ml\": \"./node_modules/moment/locale/ml.js\",\n\t\"./ml.js\": \"./node_modules/moment/locale/ml.js\",\n\t\"./mn\": \"./node_modules/moment/locale/mn.js\",\n\t\"./mn.js\": \"./node_modules/moment/locale/mn.js\",\n\t\"./mr\": \"./node_modules/moment/locale/mr.js\",\n\t\"./mr.js\": \"./node_modules/moment/locale/mr.js\",\n\t\"./ms\": \"./node_modules/moment/locale/ms.js\",\n\t\"./ms-my\": \"./node_modules/moment/locale/ms-my.js\",\n\t\"./ms-my.js\": \"./node_modules/moment/locale/ms-my.js\",\n\t\"./ms.js\": \"./node_modules/moment/locale/ms.js\",\n\t\"./mt\": \"./node_modules/moment/locale/mt.js\",\n\t\"./mt.js\": \"./node_modules/moment/locale/mt.js\",\n\t\"./my\": \"./node_modules/moment/locale/my.js\",\n\t\"./my.js\": \"./node_modules/moment/locale/my.js\",\n\t\"./nb\": \"./node_modules/moment/locale/nb.js\",\n\t\"./nb.js\": \"./node_modules/moment/locale/nb.js\",\n\t\"./ne\": \"./node_modules/moment/locale/ne.js\",\n\t\"./ne.js\": \"./node_modules/moment/locale/ne.js\",\n\t\"./nl\": \"./node_modules/moment/locale/nl.js\",\n\t\"./nl-be\": \"./node_modules/moment/locale/nl-be.js\",\n\t\"./nl-be.js\": \"./node_modules/moment/locale/nl-be.js\",\n\t\"./nl.js\": \"./node_modules/moment/locale/nl.js\",\n\t\"./nn\": \"./node_modules/moment/locale/nn.js\",\n\t\"./nn.js\": \"./node_modules/moment/locale/nn.js\",\n\t\"./oc-lnc\": \"./node_modules/moment/locale/oc-lnc.js\",\n\t\"./oc-lnc.js\": \"./node_modules/moment/locale/oc-lnc.js\",\n\t\"./pa-in\": \"./node_modules/moment/locale/pa-in.js\",\n\t\"./pa-in.js\": \"./node_modules/moment/locale/pa-in.js\",\n\t\"./pl\": \"./node_modules/moment/locale/pl.js\",\n\t\"./pl.js\": \"./node_modules/moment/locale/pl.js\",\n\t\"./pt\": \"./node_modules/moment/locale/pt.js\",\n\t\"./pt-br\": \"./node_modules/moment/locale/pt-br.js\",\n\t\"./pt-br.js\": \"./node_modules/moment/locale/pt-br.js\",\n\t\"./pt.js\": \"./node_modules/moment/locale/pt.js\",\n\t\"./ro\": \"./node_modules/moment/locale/ro.js\",\n\t\"./ro.js\": \"./node_modules/moment/locale/ro.js\",\n\t\"./ru\": \"./node_modules/moment/locale/ru.js\",\n\t\"./ru.js\": \"./node_modules/moment/locale/ru.js\",\n\t\"./sd\": \"./node_modules/moment/locale/sd.js\",\n\t\"./sd.js\": \"./node_modules/moment/locale/sd.js\",\n\t\"./se\": \"./node_modules/moment/locale/se.js\",\n\t\"./se.js\": \"./node_modules/moment/locale/se.js\",\n\t\"./si\": \"./node_modules/moment/locale/si.js\",\n\t\"./si.js\": \"./node_modules/moment/locale/si.js\",\n\t\"./sk\": \"./node_modules/moment/locale/sk.js\",\n\t\"./sk.js\": \"./node_modules/moment/locale/sk.js\",\n\t\"./sl\": \"./node_modules/moment/locale/sl.js\",\n\t\"./sl.js\": \"./node_modules/moment/locale/sl.js\",\n\t\"./sq\": \"./node_modules/moment/locale/sq.js\",\n\t\"./sq.js\": \"./node_modules/moment/locale/sq.js\",\n\t\"./sr\": \"./node_modules/moment/locale/sr.js\",\n\t\"./sr-cyrl\": \"./node_modules/moment/locale/sr-cyrl.js\",\n\t\"./sr-cyrl.js\": \"./node_modules/moment/locale/sr-cyrl.js\",\n\t\"./sr.js\": \"./node_modules/moment/locale/sr.js\",\n\t\"./ss\": \"./node_modules/moment/locale/ss.js\",\n\t\"./ss.js\": \"./node_modules/moment/locale/ss.js\",\n\t\"./sv\": \"./node_modules/moment/locale/sv.js\",\n\t\"./sv.js\": \"./node_modules/moment/locale/sv.js\",\n\t\"./sw\": \"./node_modules/moment/locale/sw.js\",\n\t\"./sw.js\": \"./node_modules/moment/locale/sw.js\",\n\t\"./ta\": \"./node_modules/moment/locale/ta.js\",\n\t\"./ta.js\": \"./node_modules/moment/locale/ta.js\",\n\t\"./te\": \"./node_modules/moment/locale/te.js\",\n\t\"./te.js\": \"./node_modules/moment/locale/te.js\",\n\t\"./tet\": \"./node_modules/moment/locale/tet.js\",\n\t\"./tet.js\": \"./node_modules/moment/locale/tet.js\",\n\t\"./tg\": \"./node_modules/moment/locale/tg.js\",\n\t\"./tg.js\": \"./node_modules/moment/locale/tg.js\",\n\t\"./th\": \"./node_modules/moment/locale/th.js\",\n\t\"./th.js\": \"./node_modules/moment/locale/th.js\",\n\t\"./tk\": \"./node_modules/moment/locale/tk.js\",\n\t\"./tk.js\": \"./node_modules/moment/locale/tk.js\",\n\t\"./tl-ph\": \"./node_modules/moment/locale/tl-ph.js\",\n\t\"./tl-ph.js\": \"./node_modules/moment/locale/tl-ph.js\",\n\t\"./tlh\": \"./node_modules/moment/locale/tlh.js\",\n\t\"./tlh.js\": \"./node_modules/moment/locale/tlh.js\",\n\t\"./tr\": \"./node_modules/moment/locale/tr.js\",\n\t\"./tr.js\": \"./node_modules/moment/locale/tr.js\",\n\t\"./tzl\": \"./node_modules/moment/locale/tzl.js\",\n\t\"./tzl.js\": \"./node_modules/moment/locale/tzl.js\",\n\t\"./tzm\": \"./node_modules/moment/locale/tzm.js\",\n\t\"./tzm-latn\": \"./node_modules/moment/locale/tzm-latn.js\",\n\t\"./tzm-latn.js\": \"./node_modules/moment/locale/tzm-latn.js\",\n\t\"./tzm.js\": \"./node_modules/moment/locale/tzm.js\",\n\t\"./ug-cn\": \"./node_modules/moment/locale/ug-cn.js\",\n\t\"./ug-cn.js\": \"./node_modules/moment/locale/ug-cn.js\",\n\t\"./uk\": \"./node_modules/moment/locale/uk.js\",\n\t\"./uk.js\": \"./node_modules/moment/locale/uk.js\",\n\t\"./ur\": \"./node_modules/moment/locale/ur.js\",\n\t\"./ur.js\": \"./node_modules/moment/locale/ur.js\",\n\t\"./uz\": \"./node_modules/moment/locale/uz.js\",\n\t\"./uz-latn\": \"./node_modules/moment/locale/uz-latn.js\",\n\t\"./uz-latn.js\": \"./node_modules/moment/locale/uz-latn.js\",\n\t\"./uz.js\": \"./node_modules/moment/locale/uz.js\",\n\t\"./vi\": \"./node_modules/moment/locale/vi.js\",\n\t\"./vi.js\": \"./node_modules/moment/locale/vi.js\",\n\t\"./x-pseudo\": \"./node_modules/moment/locale/x-pseudo.js\",\n\t\"./x-pseudo.js\": \"./node_modules/moment/locale/x-pseudo.js\",\n\t\"./yo\": \"./node_modules/moment/locale/yo.js\",\n\t\"./yo.js\": \"./node_modules/moment/locale/yo.js\",\n\t\"./zh-cn\": \"./node_modules/moment/locale/zh-cn.js\",\n\t\"./zh-cn.js\": \"./node_modules/moment/locale/zh-cn.js\",\n\t\"./zh-hk\": \"./node_modules/moment/locale/zh-hk.js\",\n\t\"./zh-hk.js\": \"./node_modules/moment/locale/zh-hk.js\",\n\t\"./zh-mo\": \"./node_modules/moment/locale/zh-mo.js\",\n\t\"./zh-mo.js\": \"./node_modules/moment/locale/zh-mo.js\",\n\t\"./zh-tw\": \"./node_modules/moment/locale/zh-tw.js\",\n\t\"./zh-tw.js\": \"./node_modules/moment/locale/zh-tw.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./node_modules/moment/locale sync recursive ^\\\\.\\\\/.*$\";","/* (ignored) */","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t\"ApplicationForm\": 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunk_hedtech_powercampus_self_service\"] = self[\"webpackChunk_hedtech_powercampus_self_service\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [\"AdmissionsVendors\"], () => (__webpack_require__(\"./ClientApp/Components/Admissions/ApplicationForm/ApplicationFormView.tsx\")))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n",""],"names":[],"sourceRoot":""}