{"version":3,"file":"static/js/792.f81c6c57.js","mappings":"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OAAOnY,EAAO,EAAGogC,CAAQ,EAErChzC,IAAW,CACTgI,OAAQirC,EACRpiD,QAASgiD,GAAYrsD,EAAOwsD,GAAU3sD,GAAI2sD,EAAUT,GAAuB/rD,EAAMqK,QAASqiD,EAAS7sD,EAAE,CAAC,CACxG,CAAC,CACH,CAAE,CACH,CAAC,CACG,KACP6R,EAAAA,KAAC46C,GAAY,CAACt0C,SAAUA,GAAUhY,MAAOA,EAAOosB,MAAOA,EAAO3J,MAAOA,EAAOjJ,SAAUA,CAAS,CAAE,KACjG9H,EAAAA,KAACqO,EAAAA,EAAK,CAAAjO,YACJJ,EAAAA,KAAC0I,EAAAA,EAAM,CACLmkC,aAAW7sC,EAAAA,KAACi7C,GAAAA,EAAa,EAAE,EAC3B30C,SAAUA,IAAa6sC,GAAmBj9B,UAAYwE,IAAU,EAChEva,QAASA,IACP2H,IAAW,CACTgI,OAAQxhB,EAAMwhB,OAAOrX,OAAQ4a,GAAMA,IAAMtC,CAAK,EAC9CpY,QAASrK,EAAMqK,QAAQK,IAAKJ,GAAO+2C,GAAS/2C,EAAGmY,EAAM5iB,EAAE,EAAI,CAAE,GAAGyK,EAAGmY,MAAOzd,MAAU,EAAIsF,CAAE,CAC5F,CAAC,EACFwH,SACF,gBAED,CAAQ,CAAC,CACJ,CAAC,EACH,CAEX,ECpEa86C,GAAoC,CAC/C,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IAAI,ECrOOC,GAAkBA,CAAC,CAAE7sD,MAAAA,EAAOyiB,MAAAA,EAAO2J,MAAAA,EAAOy4B,kBAAAA,EAAmB7sC,SAAAA,EAAUwB,SAAAA,EAAgB,IAAM,CACxG,KAAM,CAAE3N,EAAAA,CAAE,KAAIO,EAAAA,IAAe,EAEvB+yB,GAAQ0lB,GAAiB,MAAjBA,EAAmBj9B,UAAYwE,IAAU,EAAIvgB,EAAE,YAAY,EAAIA,EAAE,OAAO,EAAI,IAAIugB,EAAQ,CAAC,GAEvG,SACE7X,EAAAA,MAACwL,EAAAA,EAAK,CAA6BC,UAAS,GAACqE,QAAS,EAAG/R,WAAW,SAAQR,SAAA,IAC1EJ,EAAAA,KAACqO,EAAAA,EAAK,CAAC5N,GAAI,CAAEe,MAAO,GAAI,EAAEpB,YACxBJ,EAA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iBACA,OACA,QACA,QACA,YACA,YACA,UACA,SACA,MACA,KACA,MACA,aACA,MACA,QACA,KACA,YACA,KACA,OACA,SACA,QACA,OACA,OACA,MACA,OACA,KACA,OACA,OACA,aACA,KACA,UACA,WACA,KACA,UACA,OACA,UACA,QACA,UACA,SACA,OACA,QACA,KACA,MACA,KACA,MACA,KACA,QACA,KACA,OACA,QACA,UACA,OACA,OACA,MACA,YACA,cACA,WACA,WACA,WACA,WACA,aACA,UACA,SACA,KACA,MACA,MACA,OACA,MACA,MACA,KACA,KACA,QACA,SACA,OACA,UACA,SACA,OACA,UACA,MACA,KACA,KACA,KACA,SACA,KACA,QACA,MACA,OACA,OACA,QACA,MACA,MACA,KACA,QACA,cACA,cACA,OACA,YACA,OACA,KACA,MACA,MACA,KACA,aACA,KACA,QACA,aACA,OACA,MACA,OACA,MACA,OACA,UACA,QACA,SACA,SACA,MACA,WACA,MACA,KACA,WACA,cACA,WACA,SACA,UACA,WACA,KACA,KACA,QACA,WACA,WACA,MACA,OACA,KACA,KACA,KACA,KACA,MACA,KACA,MACA,OACA,MACA,OACA,cACA,MACA,SACA,OACA,QACA,WACA,UACA,aACA,MACA,UACA,QACA,OACA,SACA,UACA,OACA,OACA,OACA,OACA,SACA,MACA,WACA,WACA,MACA,MACA,OACA,KACA,KACA,SACA,MACA,OACA,KACA,MACA,MACA,KACA,KACA,SACA,UACA,UACA,QACA,OACA,QACA,UACA,YACA,SACA,SACA,KACA,WACA,SACA,QACA,UACA,OACA,QACA,OACA,KACA,KACA,SACA,WACA,QACA,SACA,WACA,WACA,QACA,OACA,UACA,KACA,KACA,KACA,QACA,QACA,SACA,UACA,UACA,MACA,WACA,YACA,UACA,UACA,WACA,SACA,SACA,eACA,aACA,UACA,cACA,UACA,OACA,OACA,UACA,UACA,SACA,UACA,UACA,MACA,KACA,SACA,aACA,cACA,UACA,QACA,MACA,SACA,UACA,KACA,aACA,KACA,KACA,KACA,KACA,QACA,OACA,KACA,QACA,MACA,QACA,OACA,OACA,SACA,SACA,MACA,OACA,MACA,KACA,OACA,SACA,QACA,SACA,WACA,OACA,WACA,QACA,WACA,SACA,UACA,OACA,SACA,MACA,MACA,WACA,OACA,UACA,SACA,YACA,WACA,WACA,OACA,MACA,KACA,KACA,KACA,MACA,KACA,OACA,SACA,MACA,UACA,MACA,WACA,QACA,MACA,QACA,SACA,SACA,SACA,OACA,MACA,KACA,QACA,MACA,KACA,MACA,QACA,MACA,YACA,KACA,KACA,QACA,SACA,SACA,WACA,cACA,cACA,QACA,YACA,KACA,WACA,OACA,KACA,MACA,SACA,KACA,KACA,aACA,MACA,SACA,WACA,SACA,UACA,UACA,aACA,OACA,OACA,YACA,QACA,SACA,MACA,OACA,OACA,UACA,UACA,OACA,QACA,WACA,UACA,UACA,KACA,WACA,OACA,OACA,QACA,UACA,YACA,OACA,YACA,WACA,OACA,UACA,MACA,UACA,KACA,KACA,SACA,UACA,OACA,UACA,UACA,MACA,KACA,KACA,MACA,OACA,WACA,OACA,QACA,UACA,QACA,aACA,MACA,KACA,OACA,YACA,MACA,UACA,WACA,MACA,UACA,MACA,OACA,YACA,SACA,MACA,KACA,MACA,UACA,QACA,SACA,OACA,QACA,MACA,SACA,MACA,KACA,OACA,KACA,MACA,KACA,MACA,OACA,UACA,SACA,KACA,KACA,OACA,KACA,KACA,OACA,QACA,QACA,SACA,KACA,QACA,MACA,SACA,QACA,KACA,QACA,OACA,MACA,MACA,KACA,UACA,OACA,YACA,OACA,MACA,WACA,OACA,SACA,MACA,MACA,MACA,KACA,KACA,KACA,WACA,WACA,SACA,QACA,QACA,UACA,QACA,KACA,KACA,KACA,QACA,OACA,QACA,UACA,OACA,KACA,KACA,OACA,UACA,UACA,OACA,MACA,OACA,WACA,SACA,aACA,OACA,WACA,OACA,SACA,SACA,YACA,UACA,MACA,KACA,MACA,KACA,KACA,SACA,WACA,UACA,YACA,YACA,QACA,YACA,QACA,QACA,WACA,OACA,UACA,MACA,SACA,UACA,QACA,MACA,KACA,OACA,KACA,KACA,SACA,QACA,UACA,MACA,OACA,MACA,MACA,KACA,KACA,OACA,MACA,QACA,KACA,KACA,SACA,OACA,OACA,aACA,KACA,MACA,aACA,WACA,OACA,MACA,MACA,YACA,YACA,SACA,MACA,gBACA,SACA,cACA,KACA,WACA,KACA,KACA,QACA,KACA,UACA,MACA,WACA,KACA,OACA,MACA,SACA,OACA,MACA,KACA,OACA,QACA,UACA,MACA,MACA,KACA,MACA,MACA,KACA,OACA,SACA,MACA,MACA,KACA,WACA,OACA,SACA,UACA,SACA,OACA,KACA,cACA,iBACA,kBACA,MACA,KACA,KACA,KACA,MACA,OACA,MACA,SACA,UACA,OACA,KACA,KACA,QACA,UACA,SACA,KACA,OACA,MACA,KACA,MACA,OACA,YACA,KACA,KACA,QACA,KACA,KACA,UACA,cACA,QACA,YACA,OACA,YACA,UACA,UACA,MACA,SACA,UACA,MACA,SACA,KACA,KACA,MACA,QACA,UACA,SACA,QACA,OACA,QACA,OACA,KACA,OACA,OACA,gBACA,YACA,WACA,OACA,QACA,UACA,OACA,UACA,OACA,QACA,OACA,SACA,KACA,MACA,MACA,OACA,QACA,SACA,QACA,MACA,SACA,QACA,QACA,OACA,MACA,eACA,KACA,KACA,KACA,MACA,OACA,KACA,WACA,OACA,SACA,KACA,KACA,KACA,SACA,OACA,SACA,SACA,MACA,aACA,QACA,MACA,SACA,YACA,UACA,WACA,YACA,SACA,MACA,KACA,WACA,KACA,KACA,MACA,QACA,OACA,YACA,OACA,WACA,MACA,OACA,WACA,KACA,KACA,QACA,YACA,MACA,OACA,OACA,MACA,aACA,KACA,KACA,MACA,MACA,KACA,MACA,KACA,KACA,OACA,SACA,OACA,MACA,MACA,MACA,SACA,QACA,UACA,SACA,WACA,SACA,OACA,cACA,MACA,QACA,KACA,KACA,KACA,KACA,MACA,KACA,MACA,MACA,KACA,SACA,QACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,SACA,OACA,SACA,OACA,MACA,KACA,KACA,MACA,MACA,UACA,UACA,UACA,UACA,MACA,OACA,OACA,aACA,QACA,KACA,MACA,KACA,MACA,MACA,KACA,OACA,OACA,QACA,QACA,SACA,SACA,KACA,KACA,QACA,SACA,MACA,SACA,QACA,KACA,KACA,MACA,MACA,MACA,KACA,MACA,KACA,MACA,WACA,SACA,UACA,SACA,cACA,OACA,KACA,QACA,MACA,MACA,MACA,SACA,MACA,OACA,SACA,SACA,MACA,UACA,UACA,QACA,SACA,MACA,MACA,KACA,OACA,YACA,QACA,OACA,WACA,QACA,QACA,MACA,OACA,KACA,MACA,KACA,SACA,KACA,KACA,WACA,MACA,UACA,QACA,QACA,cACA,SACA,SACA,OACA,SACA,WACA,MACA,MACA,OACA,OACA,UACA,QACA,KACA,KACA,QACA,OACA,cACA,WACA,OACA,KACA,KACA,MACA,OACA,QACA,UACA,OACA,OACA,KACA,YACA,QACA,QACA,QACA,MACA,OACA,cACA,OACA,cACA,QACA,aACA,WACA,aACA,MACA,aACA,KACA,KACA,MACA,KACA,MACA,KACA,KACA,OACA,SACA,QACA,SACA,QACA,KACA,OACA,aACA,UACA,SACA,UACA,MACA,WACA,cACA,QACA,QACA,SACA,OACA,WACA,MACA,OACA,UACA,SACA,SACA,aACA,OACA,aACA,SACA,UACA,UACA,OACA,YACA,QACA,MACA,MACA,MACA,KACA,QACA,QACA,SACA,OACA,KACA,OACA,KACA,QACA,OACA,MACA,KACA,MACA,SACA,KACA,WACA,OACA,SACA,SACA,OACA,QACA,WACA,UACA,UACA,kBACA,SACA,MACA,OACA,MACA,OACA,OACA,KACA,MACA,MACA,KACA,MACA,aACA,UACA,eACA,SACA,SACA,UACA,UACA,OACA,KACA,KACA,SACA,OACA,SACA,WACA,OACA,SACA,QACA,WACA,QACA,MACA,MACA,OACA,MACA,KACA,KACA,YACA,QACA,OACA,QACA,OACA,UACA,QACA,OACA,WACA,SACA,OACA,KACA,OACA,OACA,UACA,OACA,KACA,KACA,MACA,OACA,MACA,QACA,KACA,QACA,KACA,QACA,QACA,KACA,OACA,KACA,SACA,SACA,WACA,WACA,OACA,QACA,YACA,OACA,OACA,MACA,MACA,QACA,QACA,OACA,KACA,MACA,KACA,KACA,QACA,UACA,OACA,YACA,YACA,MACA,WACA,YACA,UACA,QACA,SACA,SACA,QACA,QACA,KACA,QACA,WACA,SACA,UACA,OACA,UACA,SACA,KACA,SACA,QACA,KACA,KACA,SACA,UACA,KACA,MACA,SACA,OACA,SACA,SACA,aACA,QACA,SACA,MACA,OACA,KACA,MACA,KACA,MACA,OACA,OACA,aACA,MACA,UACA,SACA,OACA,KACA,KACA,KACA,MACA,UACA,UACA,OACA,UACA,SACA,OACA,QACA,QACA,KACA,SACA,MACA,KACA,SACA,KACA,KACA,QACA,KACA,KACA,QACA,QACA,QACA,MACA,QACA,UACA,QACA,QACA,OACA,SACA,OACA,KACA,QACA,UACA,WACA,SACA,YACA,qBACA,QACA,MACA,KACA,OACA,MACA,QACA,QACA,KACA,MACA,KACA,KACA,KACA,QACA,MACA,KACA,KACA,SACA,aACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,YACA,OACA,WACA,KACA,KACA,QACA,WACA,WACA,eACA,MACA,KACA,KACA,SACA,QACA,MACA,SACA,SACA,MACA,MACA,SACA,OACA,SACA,OACA,OACA,aACA,KACA,QACA,QACA,OACA,SACA,OACA,SACA,KACA,QACA,UACA,SACA,OACA,UACA,QACA,UACA,UACA,iBACA,SACA,QACA,UACA,MACA,UACA,QACA,OACA,KACA,UACA,OACA,OACA,cACA,MACA,UACA,OACA,UACA,MACA,gBACA,WACA,OACA,QACA,QACA,MACA,KACA,MACA,MACA,OACA,QACA,SACA,MACA,cACA,cACA,cACA,cACA,aACA,cACA,cACA,eACA,cACA,aACA,cACA,eACA,cACA,aACA,eACA,aACA,iBACA,cACA,aACA,oBACA,aACA,cACA,iBACA,eACA,cACA,iBACA,eACA,aACA,eACA,aACA,WACA,YACA,aACA,aACA,cACA,iBACA,oBACA,YACA,aACA,cACA,gBACA,aACA,yBACA,cACA,aACA,aACA,cACA,YACA,YACA,gBACA,cACA,cACA,YACA,iBACA,aACA,aACA,aACA,cACA,cACA,gBACA,gBACA,mBACA,cACA,eACA,cACA,cACA,iBACA,cACA,gBACA,cACA,kBACA,cACA,aACA,YACA,YACA,cACA,iBACA,cACA,kBACA,cACA,cACA,aACA,YACA,kBACA,eACA,iBACA,kBACA,mBACA,iBACA,eACA,oBACA,oBACA,iBACA,cACA,iBACA,kBACA,iBACA,mBACA,oBACA,eACA,iBACA,eACA,eACA,cACA,iBACA,cACA,eACA,aACA,eACA,eACA,YACA,WACA,YACA,kBACA,cACA,aACA,eACA,cACA,YACA,WACA,cACA,aACA,aACA,cACA,eACA,YACA,WACA,cACA,cACA,iBACA,cACA,cACA,cACA,YACA,gBACA,aACA,0BACA,2BACA,YACA,cACA,uBACA,cACA,aACA,aACA,cACA,mBACA,oBACA,aACA,gBACA,gBACA,cACA,MACA,MACA,SACA,QACA,UACA,SACA,KACA,YACA,OACA,WACA,MACA,UACA,KACA,MACA,KACA,SACA,OACA,OACA,MACA,KACA,OACA,UACA,KACA,EAAE,ECt6CEC,EAAU,yEACVC,EAAY,+EAELC,EAAc52D,GAA2B,CACpD,MAAM0Y,EAAQ1Y,EAAMmY,MAAM,GAAG,EAE7B,GAAIO,EAAM7tB,SAAW,EACnB,MAAO,GAGT,KAAM,CAAC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","sources":["amplify-env.ts","api/email.ts","api/event.ts","api/http.ts","api/payment.ts","api/registration.ts","api/user.ts","assets/Theme.ts","hooks/useAdminEventRegistrationDates.ts","hooks/useDebouncedCallback.ts","hooks/useEventTitle.ts","i18n/config.ts","i18n/dates.ts","i18n/formatters.ts","i18n/locales/fi/auth.ts","i18n/index.ts","pages/components/SnackbarCloseButton.tsx","pages/ErrorPage.tsx","pages/components/Banner.tsx","pages/homePage/Version.tsx","pages/HomePage.tsx","pages/PaymentResultPage.tsx","pages/RegistrationEditPage.tsx","pages/registrationListPage/ConfirmDialog.tsx","pages/components/icons/PaymentIcon.tsx","pages/registrationListPage/RegistrationList.tsx","pages/RegistrationListPage.tsx","pages/searchPage/EventFilter.tsx","pages/searchPage/eventList/EmptyResult.tsx","pages/searchPage/eventList/eventTableRow/EventPlaces.tsx","pages/components/TimeLeft.tsx","pages/searchPage/eventList/eventInfo/EventClassPlaces.tsx","pages/searchPage/eventList/eventInfo/EventClassPlacesHeader.tsx","pages/searchPage/eventList/EventInfo.tsx","pages/searchPage/eventList/EventStateInfo.tsx","pages/searchPage/eventList/EventListItem.tsx","pages/searchPage/EventList.tsx","pages/SearchPage.tsx","pages/StartListPage.tsx","pages/SupportPage.tsx","pages/TermsPage.tsx","routes.tsx","App.tsx","index.tsx","lib/client/error.ts","lib/client/rum.ts","lib/env.ts","lib/event.ts","lib/judge.ts","lambda/lib/string.ts","lib/payment.ts","lib/priority.ts","i18n/lambda.ts","lib/registration.ts","lib/typeGuards.ts","lib/utils.ts","pages/LoadingPage.tsx","hooks/useAdminEventRegistrationsInfo.ts","hooks/useAdminEventRegistrationGroups.ts","pages/components/NullComponent.tsx","pages/admin/recoil/registrations/actions.ts","pages/admin/eventViewPage/classEntrySelection/dnd.ts","pages/admin/eventViewPage/classEntrySelection/dropableDataGrid/DragableRow.tsx","pages/admin/eventViewPage/classEntrySelection/DropableDataGrid.tsx","pages/admin/eventViewPage/classEntrySelection/groupColors/GroupColorTooltip.tsx","pages/admin/eventViewPage/classEntrySelection/GroupColors.tsx","pages/admin/eventViewPage/classEntrySelection/GroupHeader.tsx","pages/admin/eventViewPage/classEntrySelection/NoRowsOverlay.tsx","pages/admin/eventViewPage/classEntrySelection/UnlockArrange.tsx","lib/money.ts","pages/admin/eventViewPage/classEntrySelection/useClassEntrySectionColumns.tsx","pages/admin/eventViewPage/ClassEntrySelection.tsx","pages/admin/eventViewPage/EventDetailsDialog.tsx","pages/admin/eventViewPage/InfoPanel.tsx","pages/admin/eventViewPage/refundDialog/RefundFooter.tsx","pages/admin/eventViewPage/refundDialog/useRefundColumns.tsx","pages/admin/eventViewPage/RefundDialog.tsx","pages/admin/components/AuditTrail.tsx","pages/admin/eventViewPage/RegistrationDialogBase.tsx","pages/admin/eventViewPage/RegistrationCreateDialog.tsx","pages/admin/eventViewPage/RegistrationEditDialog.tsx","hooks/useRegistrationEmailTemplateData.ts","pages/admin/eventViewPage/sendMessageDialog/ContactInfoGroup.tsx","pages/admin/eventViewPage/SendMessageDialog.tsx","pages/admin/eventViewPage/TabPanel.tsx","pages/admin/eventViewPage/Title.tsx","pages/admin/EventViewPage.tsx","pages/admin/components/eventForm/AdditionalInfoSection.tsx","pages/admin/components/eventForm/basicInfoSection/HelpPopover.tsx","pages/admin/components/eventForm/components/EventClasses.tsx","pages/admin/components/eventForm/components/EventProperty.tsx","pages/admin/components/eventForm/BasicInfoSection.tsx","pages/admin/components/eventForm/contactInfoSection/ContactInfoSelect.tsx","pages/admin/components/eventForm/ContactInfoSection.tsx","pages/admin/components/eventForm/entrySection/eventDates/ClassGroups.tsx","hooks/useAdminEventDatesOptions.ts","pages/admin/components/eventForm/entrySection/eventDates/EventGroups.tsx","pages/admin/components/eventForm/entrySection/EventDates.tsx","pages/admin/components/eventForm/entrySection/eventFormPlaces/PlacesDisplay.tsx","pages/admin/components/eventForm/entrySection/EventFormPlaces.tsx","pages/admin/components/eventForm/EntrySection.tsx","pages/admin/components/eventForm/HeadquartersSection.tsx","pages/admin/components/eventForm/judgeSection/utils.ts","pages/admin/components/eventForm/judgeSection/JudgeClasses.tsx","pages/admin/components/eventForm/judgeSection/OfficialJudge.tsx","lib/countries.ts","pages/admin/components/eventForm/judgeSection/UnofficialJudge.tsx","pages/admin/components/eventForm/JudgesSection.tsx","pages/admin/components/eventForm/components/EventPrice.tsx","pages/admin/components/eventForm/PaymentSection.tsx","pages/admin/components/EventForm.tsx","pages/admin/components/FullPageFlex.tsx","pages/admin/components/eventForm/validation.ts","pages/admin/recoil/events/effects.ts","pages/admin/recoil/events/selectors.ts","pages/admin/recoil/events/atoms.ts","pages/admin/recoil/events/actions.ts","pages/admin/recoil/emailTemplates/effects.ts","pages/admin/recoil/emailTemplates/selectors.ts","pages/admin/recoil/emailTemplates/atoms.ts","pages/admin/recoil/emailTemplates/actions.ts","api/eventType.ts","pages/admin/recoil/eventTypes/effects.ts","pages/admin/recoil/eventTypes/atoms.ts","pages/admin/recoil/eventTypes/actions.ts","pages/admin/recoil/eventTypes/selectors.ts","api/judge.ts","pages/admin/recoil/judges/effects.ts","pages/admin/recoil/judges/atoms.ts","pages/admin/recoil/judges/actions.ts","pages/admin/recoil/judges/selectors.ts","api/official.ts","pages/admin/recoil/officials/effects.ts","pages/admin/recoil/officials/atoms.ts","pages/admin/recoil/officials/actions.ts","pages/admin/recoil/officials/selectors.ts","pages/admin/recoil/registrations/atoms2.ts","api/organizer.ts","pages/admin/recoil/organizers/effects.ts","pages/admin/recoil/organizers/atoms.ts","pages/admin/recoil/organizers/actions.ts","pages/admin/recoil/organizers/selectors.ts","pages/admin/recoil/registrations/effects.ts","pages/admin/recoil/registrations/atoms.ts","pages/admin/recoil/registrations/selectors.ts","pages/admin/recoil/user/effects.ts","pages/admin/recoil/user/atoms.ts","pages/admin/recoil/user/actions.ts","pages/admin/recoil/user/selectors.ts","pages/components/AsyncButton.tsx","pages/components/AutocompleteMulti.tsx","pages/components/AutocompleteSingle.tsx","pages/components/CancelDialog.tsx","pages/components/CollapsibleSection.tsx","pages/components/CostInfo.tsx","pages/components/DateRange.tsx","hooks/useEventStatus.ts","pages/components/EntryStatus.tsx","pages/components/ErrorInfo.tsx","pages/components/header/AppBarButton.tsx","pages/components/header/HelpMenu.tsx","pages/components/header/languageMenu/LanguageMenuItem.tsx","pages/components/header/LanguageMenu.tsx","pages/components/header/userMenu/LoggedInUserMenu.tsx","pages/components/header/userMenu/LoginButton.tsx","pages/components/header/UserMenu.tsx","pages/components/Header.tsx","pages/components/IconsTooltip.tsx","pages/components/LinkButton.tsx","pages/components/LoadingIndicator.tsx","pages/components/NumberInput.tsx","pages/components/PriorityChips.tsx","pages/components/RankingPoints.tsx","pages/components/RegistrationEventInfo.tsx","pages/components/registrationForm/AdditionalInfo.tsx","api/dog.ts","pages/recoil/dog/atoms.ts","pages/recoil/dog/actions.ts","pages/recoil/dog/selectors.ts","pages/components/registrationForm/hooks/useDogCache.ts","pages/components/registrationForm/hooks/useDogCacheKey.ts","pages/components/registrationForm/BreederInfo.tsx","pages/components/registrationForm/dogInfo/TitlesAndName.tsx","pages/components/registrationForm/DogInfo.tsx","pages/components/registrationForm/EntryInfo.tsx","pages/components/registrationForm/HandlerInfo.tsx","pages/components/registrationForm/MembershipInfo.tsx","pages/components/registrationForm/OwnerInfo.tsx","pages/components/registrationForm/PayerInfo.tsx","pages/components/registrationForm/qualifyingResultsInfo/utils.ts","pages/components/registrationForm/qualifyingResultsInfo/QualifyingResultRow.tsx","pages/components/registrationForm/QualifyingResultsInfo.tsx","pages/components/RegistrationForm.tsx","pages/components/StyledDataGrid.tsx","pages/components/icons/PriorityIcon.tsx","pages/components/icons/constants.ts","lib/topLevelDomains.ts","lib/email.ts","pages/components/registrationForm/validation.ts","pages/recoil/effects/log.ts","lib/storage.ts","lib/version.ts","pages/recoil/effects/storageCleaners.ts","pages/recoil/effects/storage.ts","pages/recoil/events/filters.ts","pages/recoil/events/effects.ts","pages/recoil/events/atoms.ts","pages/recoil/events/selectors.ts","pages/recoil/registration/effects.ts","pages/recoil/registration/selectors.ts","pages/recoil/registration/atoms.ts","pages/recoil/registration/actions.ts","pages/recoil/user/actions.ts","pages/recoil/user/atoms.ts","pages/recoil/user/effects.ts","pages/recoil/user/selectors.ts","routeConfig.ts","rules.ts","rules_ch.ts"],"sourcesContent":["import type { ResourcesConfig } from 'aws-amplify'\nimport type { AwsRumConfig } from 'aws-rum-web'\n\nimport { isDevEnv } from './lib/env'\n\nexport const AWSConfig: ResourcesConfig = {\n Geo: {\n LocationService: {\n region: process.env.REACT_APP_REGION ?? '',\n },\n },\n Auth: {\n Cognito: {\n // REQUIRED - Amazon Cognito Identity Pool ID\n identityPoolId: process.env.REACT_APP_IDENTITY_POOL_ID ?? '',\n // REQUIRED - Amazon Cognito Region\n // region: process.env.REACT_APP_REGION,\n // OPTIONAL - Amazon Cognito User Pool ID\n userPoolId: process.env.REACT_APP_USER_POOL_ID ?? '',\n // OPTIONAL - Amazon Cognito Web Client ID (26-char alphanumeric string)\n userPoolClientId: process.env.REACT_APP_CLIENT_ID ?? '',\n loginWith: {\n oauth: {\n domain: process.env.REACT_APP_OAUTH_DOMAIN ?? '',\n redirectSignIn: [process.env.REACT_APP_REDIRECT_SIGNIN ?? ''],\n redirectSignOut: [process.env.REACT_APP_REDIRECT_SIGNOUT ?? ''],\n responseType: 'code',\n scopes: ['email', 'openid', 'profile'],\n },\n },\n },\n },\n}\n\nif (!AWSConfig.Auth?.Cognito.identityPoolId && isDevEnv()) {\n throw new Error('Please configure environment variables in .env (use .env_sample as reference')\n}\n\nexport const RUM_CONFIG: AwsRumConfig = {\n sessionSampleRate: 0.25,\n guestRoleArn: process.env.REACT_APP_RUM_ROLE_ARN,\n identityPoolId: process.env.REACT_APP_RUM_IDENTITY_POOL_ID,\n endpoint: process.env.REACT_APP_RUM_ENDPOINT,\n telemetries: [/*'performance', */ 'errors', 'http'],\n allowCookies: true,\n enableXRay: false,\n}\n\nexport const RUM_APPLICATION_ID = process.env.REACT_APP_RUM_APPLICATION_ID\nexport const RUM_REGION = process.env.REACT_APP_REGION ?? ''\n","import type { EmailTemplate, EventClass, EventState, Registration, RegistrationMessage } from '../types'\n\nimport http, { withToken } from './http'\n\nconst PATH = '/admin/email-templates'\n\nexport async function getEmailTemplates(token?: string, signal?: AbortSignal) {\n return http.get>(PATH, withToken({ signal }, token))\n}\n\nexport async function putEmailTemplate(template: EmailTemplate, token?: string, signal?: AbortSignal) {\n return http.post(PATH, template, withToken({ signal }, token))\n}\n\nexport async function sendTemplatedEmail(message: RegistrationMessage, token?: string, signal?: AbortSignal) {\n return http.post<\n RegistrationMessage,\n { ok: string[]; failed: string[]; state: EventState; classes: EventClass[]; registrations: Registration[] }\n >('/admin/email-send', message, withToken({ signal }, token))\n}\n","import type { DogEvent, PublicDogEvent } from '../types'\n\nimport { addDays, nextSaturday } from 'date-fns'\n\nimport { zonedStartOfDay } from '../i18n/dates'\n\nimport http, { withToken } from './http'\n\nconst PATH = '/event/'\nconst ADMIN_PATH = '/admin/event/'\n\nexport async function getEvents(signal?: AbortSignal): Promise {\n return http.get(PATH, { signal })\n}\n\nexport async function getAdminEvents(token?: string, lastModified?: number, signal?: AbortSignal): Promise {\n const qs = lastModified ? `?since=${lastModified}` : ''\n return http.get(ADMIN_PATH + qs, withToken({ signal }, token))\n}\n\nexport async function getEvent(id: string, signal?: AbortSignal): Promise {\n return http.get(`${PATH}${id}`, { signal })\n}\n\nexport async function getAdminEvent(id: string, token?: string, signal?: AbortSignal): Promise {\n return http.get(`${ADMIN_PATH}${id}`, withToken({ signal }, token))\n}\n\nexport async function putEvent(event: Partial, token?: string, signal?: AbortSignal): Promise {\n return http.post, DogEvent>(ADMIN_PATH, event, withToken({ signal }, token))\n}\n\nexport async function putInvitationAttachment(\n eventId: string,\n file: File,\n token?: string,\n signal?: AbortSignal\n): Promise {\n const data = new FormData()\n data.append('file', file, file.name)\n\n return http.postRaw(`/admin/file/invitation/${eventId}`, data, withToken({ signal }, token))\n}\n\nexport async function copyEventWithRegistrations(eventId: string, token?: string, signal?: AbortSignal) {\n return http.post<{ id: string; startDate: Date }, DogEvent>(\n ADMIN_PATH + 'copy',\n { id: eventId, startDate: zonedStartOfDay(nextSaturday(addDays(Date.now(), 90))) },\n withToken({ signal }, token)\n )\n}\n","import { fetchAuthSession } from 'aws-amplify/auth'\nimport { enqueueSnackbar } from 'notistack'\n\nimport { reportError } from '../lib/client/error'\nimport { parseJSON } from '../lib/utils'\nimport { API_BASE_URL } from '../routeConfig'\n\nexport class APIError extends Error {\n status: number\n statusText: string\n body?: any\n\n constructor(response: Response, body: any) {\n const jsonStatus = body?.message ?? body\n const statusText = response.statusText || jsonStatus\n const message = `${response.status} ${statusText}`\n super(message)\n this.status = response.status\n this.statusText = statusText\n this.body = body\n }\n}\n\nfunction anySignal(signals: AbortSignal[]): AbortSignal {\n const controller = new AbortController()\n\n for (const signal of signals) {\n if (signal.aborted) {\n controller.abort(signal.reason)\n break\n }\n\n signal.addEventListener('abort', () => controller.abort(signal.reason), {\n signal: controller.signal,\n })\n }\n\n return controller.signal\n}\n\nasync function httpWithTimeout(path: string, init: RequestInit, reviveDates: boolean = true): Promise {\n const url = API_BASE_URL + path\n\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort('timeout'), 10_000)\n const signal = init.signal ? anySignal([controller.signal, init.signal]) : controller.signal\n\n try {\n const response = await fetch(url, {\n ...init,\n headers: {\n ...init.headers,\n Accept: 'application/json',\n },\n signal,\n })\n\n clearTimeout(timer)\n\n const text = await response.text()\n if (!response.ok) {\n let json = text\n try {\n json = parseJSON(text, reviveDates)\n } catch (e) {\n reportError(e)\n }\n throw new APIError(response, json)\n }\n const parsed = parseJSON(text, reviveDates)\n return parsed\n } catch (err) {\n clearTimeout(timer)\n\n if (controller.signal.aborted && controller.signal.reason === 'timeout') {\n throw new APIError(new Response(null, { status: 408, statusText: `timeout loading ${url}` }), {})\n }\n\n throw err\n }\n}\n\nasync function http(path: string, init: RequestInit, reviveDates: boolean = true): Promise {\n try {\n const result = await httpWithTimeout(path, init, reviveDates)\n\n return result\n } catch (err) {\n if (!(err instanceof APIError)) {\n enqueueSnackbar(`${err}`, { variant: 'error' })\n } else if (err.status === 401) {\n const msg = err.body?.message ?? err.body ?? err.message\n if (msg == 'The incoming token has expired' && init.headers && 'Authorization' in init.headers) {\n // token expired, try to refresh\n const session = await fetchAuthSession({ forceRefresh: true })\n const idToken = session.tokens?.idToken?.toString()\n if (idToken) {\n const key = 'idToken'\n const newValue = JSON.stringify(idToken)\n localStorage.setItem(key, newValue)\n dispatchEvent(new StorageEvent('storage', { storageArea: localStorage, key, newValue }))\n // retry with new token after a little delay\n await new Promise((resolve) => setTimeout(resolve, 50))\n init = withToken(init, idToken)\n return http(path, init, reviveDates)\n }\n }\n }\n\n reportError(err)\n throw err\n }\n}\n\nconst HTTP = {\n async get(path: string, init?: RequestInit, reviveDates: boolean = true): Promise {\n return http(path, { method: 'get', ...init }, reviveDates)\n },\n async post(path: string, body: T, init?: RequestInit, reviveDates: boolean = true): Promise {\n return http(path, { method: 'post', body: JSON.stringify(body), ...init }, reviveDates)\n },\n async postRaw(\n path: string,\n body: T,\n init?: RequestInit,\n reviveDates: boolean = true\n ): Promise {\n return http(path, { method: 'post', body, ...init }, reviveDates)\n },\n async put(path: string, body: T, init?: RequestInit, reviveDates: boolean = true): Promise {\n return http(path, { method: 'put', body: JSON.stringify(body), ...init }, reviveDates)\n },\n async delete(path: string, body: T, init?: RequestInit, reviveDates: boolean = true): Promise {\n return http(path, { method: 'delete', body: JSON.stringify(body), ...init }, reviveDates)\n },\n}\n\nexport const withToken = (init: RequestInit, token?: string): RequestInit => ({\n ...init,\n headers: {\n ...init.headers,\n ...(token ? { Authorization: `Bearer ${token}` } : undefined),\n },\n})\n\nexport default HTTP\n","import type { CreatePaymentResponse, RefundPaymentResponse, VerifyPaymentResponse } from '../types'\n\nimport http, { withToken } from './http'\n\nexport const createPayment = async (\n eventId: string,\n registrationId: string,\n token?: string,\n signal?: AbortSignal\n): Promise =>\n http.post(`/payment/create`, { eventId, registrationId }, withToken({ signal }, token), false)\n\nexport const verifyPayment = async (\n params: Record,\n token?: string,\n signal?: AbortSignal\n): Promise => http.post(`/payment/verify`, params, withToken({ signal }, token))\n\nexport const createRefund = async (\n transactionId: string,\n amount: number,\n token: string,\n signal?: AbortSignal\n): Promise =>\n http.post('/refund/create', { transactionId, amount }, withToken({ signal }, token))\n","import type {\n AuditRecord,\n ConfirmedEvent,\n PublicRegistration,\n Registration,\n RegistrationGroupInfo,\n Transaction,\n} from '../types'\n\nimport http, { withToken } from './http'\n\nexport async function getRegistrations(eventId: string, token: string, signal?: AbortSignal): Promise {\n return http.get(`/admin/registration/${eventId}`, withToken({ signal }, token))\n}\n\nexport async function getRegistration(\n eventId: string,\n id: string,\n token?: string,\n signal?: AbortSignal\n): Promise {\n return http.get(`/registration/${eventId}/${id}`, withToken({ signal }, token))\n}\n\nexport const getRegistrationAuditTrail = async (\n eventId: string,\n id: string,\n token: string,\n signal?: AbortSignal\n): Promise =>\n http.get(`/admin/registration/audit/${eventId}/${id}`, withToken({ signal }, token))\n\nexport async function putRegistration(\n registration: Registration,\n token?: string,\n signal?: AbortSignal\n): Promise {\n return http.post('/registration/', registration, withToken({ signal }, token))\n}\n\nexport async function putAdminRegistration(\n registration: Registration,\n token: string,\n signal?: AbortSignal\n): Promise {\n return http.post('/admin/registration/', registration, withToken({ signal }, token))\n}\n\ntype RegistrationInternalNotes = Pick\nexport async function putAdminRegistrationNotes(\n registration: RegistrationInternalNotes,\n token: string,\n signal?: AbortSignal\n): Promise {\n return http.post(\n '/admin/registration/note',\n registration,\n withToken({ signal }, token)\n )\n}\n\nexport async function putRegistrationGroups(\n eventId: string,\n groups: RegistrationGroupInfo[],\n token: string,\n signal?: AbortSignal\n): Promise<\n Pick & {\n items: Registration[]\n invitedOk: string[]\n invitedFailed: string[]\n pickedOk: string[]\n pickedFailed: string[]\n reserveOk: string[]\n reserveFailed: string[]\n cancelledOk: string[]\n cancelledFailed: string[]\n }\n> {\n return http.post(`/admin/reg-groups/${eventId}`, groups, withToken({ signal }, token))\n}\n\nexport async function getStartList(\n eventId: string,\n token?: string,\n signal?: AbortSignal\n): Promise {\n return http.get(`/startlist/${eventId}`, withToken({ signal }, token))\n}\n\nexport const getRegistrationTransactions = async (\n eventId: string,\n id: string,\n token: string,\n signal?: AbortSignal\n): Promise =>\n http.get(`/admin/registration/transactions/${eventId}/${id}`, withToken({ signal }, token))\n","import type { User, UserRole } from '../types'\n\nimport http, { withToken } from './http'\n\nexport const getUser = async (token: string, signal?: AbortSignal) =>\n http.get('/user', withToken({ signal }, token))\n\nexport const getUsers = async (token: string, signal?: AbortSignal) =>\n http.get('/admin/user', withToken({ signal }, token))\n\nexport const putUser = async (user: User, token?: string, signal?: AbortSignal): Promise =>\n http.post('/admin/user', user, withToken({ signal }, token))\n\nexport const putAdmin = async (\n item: { userId: string; admin: boolean },\n token: string | undefined,\n signal?: AbortSignal\n): Promise =>\n http.post<{ userId: string; admin: boolean }, User>('/admin/user/admin', item, withToken({ signal }, token))\n\nexport interface RoleItem {\n userId: string\n orgId: string\n role: UserRole | 'none'\n}\n\nexport const putRole = async (item: RoleItem, token: string | undefined, signal?: AbortSignal): Promise =>\n http.post('/admin/user/role', item, withToken({ signal }, token))\n","import type {} from '@mui/x-data-grid/themeAugmentation'\nimport type {} from '@mui/x-date-pickers/themeAugmentation'\n\nimport { red } from '@mui/material/colors'\nimport { createTheme, responsiveFontSizes } from '@mui/material/styles'\n\ndeclare module '@mui/material/styles/createPalette' {\n interface TypeBackground {\n form: string\n oddRow: string\n tableHead: string\n ok: string\n hover: string\n selected: string\n }\n}\n\nexport const HEADER_HEIGHT = '36px'\n\nconst theme = createTheme({\n breakpoints: {\n values: {\n xs: 0,\n sm: 600,\n md: 900,\n lg: 1200,\n xl: 1900,\n },\n },\n components: {\n MuiDatePicker: {\n defaultProps: {\n desktopModeMediaQuery: '(min-width:600px)',\n },\n },\n MuiDataGrid: {\n defaultProps: {\n rowHeight: 40,\n },\n },\n MuiStack: {\n defaultProps: {\n useFlexGap: true,\n },\n },\n MuiSwitch: {\n defaultProps: {\n color: 'success',\n },\n },\n MuiToggleButtonGroup: {\n defaultProps: {\n color: 'success',\n },\n },\n },\n mixins: {\n MuiDataGrid: {\n containerBackground: '#d8d8d8',\n },\n },\n palette: {\n primary: {\n light: '#547463',\n main: '#222',\n dark: '#1d392a',\n contrastText: '#fff',\n },\n secondary: {\n light: '#f7ebcf',\n main: '#fcfcfc', // '#98A59E',\n dark: '#aca189',\n contrastText: '#000',\n },\n error: {\n main: red.A400,\n },\n background: {\n default: '#fcfdfd',\n form: '#f2f2f2',\n oddRow: '#f8f8f8',\n tableHead: '#d8d8d8',\n ok: '#c1d4c9',\n hover: '#AFC1B7',\n selected: '#D5E1DB',\n },\n },\n typography: {\n button: {\n textTransform: 'none',\n },\n },\n zIndex: {\n snackbar: 2200,\n drawer: 1000,\n },\n})\n\nexport default responsiveFontSizes(theme)\n","import type { PublicDogEvent } from '../types'\n\nimport { useMemo } from 'react'\nimport { useRecoilValue } from 'recoil'\n\nimport { getEventDays } from '../lib/event'\nimport { adminEventTypeGroupsSelector } from '../pages/admin/recoil'\n\nexport const useAdminEventRegistrationDates = (\n event: Pick &\n Partial>,\n eventClass?: string\n) => {\n const eventTypeGroups = useRecoilValue(adminEventTypeGroupsSelector(event.eventType))\n const defaultGroups = useMemo(\n () => (eventTypeGroups.length > 1 ? eventTypeGroups.filter((g) => g !== 'kp') : eventTypeGroups),\n [eventTypeGroups]\n )\n\n if (event.classes?.length) {\n return event.classes\n .filter((c) => (eventClass ? c.class === eventClass : true))\n .flatMap((c) => (c.groups ?? defaultGroups).map((time) => ({ date: c.date, time })))\n }\n\n if (event.dates) return event.dates\n\n return getEventDays(event).flatMap((date) => defaultGroups.map((time) => ({ date, time })))\n}\n","import { useCallback, useEffect, useRef } from 'react'\n\nexport default function useDebouncedCallback ReturnType>(\n callback?: T,\n wait = 100\n): (...args: Parameters) => unknown {\n const timeout = useRef()\n const cb = useRef(callback)\n cb.current = callback\n\n useEffect(\n () => () => {\n window.clearTimeout(timeout.current)\n timeout.current = undefined\n },\n [wait]\n )\n\n return useCallback(\n (...args) => {\n clearTimeout(timeout.current)\n timeout.current = window.setTimeout(() => {\n timeout.current = undefined\n cb.current?.apply(null, args)\n }, wait)\n },\n [wait]\n )\n}\n","import type { TFunction } from 'i18next'\nimport type { DogEvent } from '../types'\n\nimport { useTranslation } from 'react-i18next'\n\nimport { isEntryClosed, isEntryOpen, isEventOngoing, isEventOver } from '../lib/utils'\n\nexport function getEventTitle(event: DogEvent, t: TFunction<'translation'>): string {\n if (event.state === 'confirmed') {\n if (isEventOver(event)) {\n return t('event.states.confirmed_eventOver')\n }\n if (isEntryOpen(event)) {\n return t('event.states.confirmed_entryOpen')\n }\n if (isEntryClosed(event)) {\n return t('event.states.confirmed_entryClosed')\n }\n if (isEventOngoing(event)) {\n return t('event.states.confirmed_eventOngoing')\n }\n }\n\n return t(`event.states.${event.state || 'draft'}`)\n}\n\nexport default function useEventTitle(event: DogEvent): string {\n const { t } = useTranslation()\n\n return getEventTitle(event, t)\n}\n","import type { InitOptions } from 'i18next'\n\nimport { isDevEnv } from '../lib/env'\n\nimport { en, enBreed, enBreedAbbr, enCountry, fi, fiBreed, fiBreedAbbr, fiCountry } from './locales'\n\nexport const i18nInit: InitOptions = {\n lng: 'fi',\n ns: ['translation', 'breed', 'breedAbbr', 'country'],\n resources: {\n fi: { translation: fi, breed: fiBreed, breedAbbr: fiBreedAbbr, country: fiCountry },\n en: { translation: en, breed: enBreed, breedAbbr: enBreedAbbr, country: enCountry },\n },\n fallbackLng: 'fi',\n supportedLngs: ['fi', 'en'],\n debug: isDevEnv(),\n interpolation: {\n escapeValue: false,\n },\n}\n","import type { Locale } from 'date-fns'\nimport type { Language } from '../types'\n\nimport { tz } from '@date-fns/tz'\nimport {\n endOfDay,\n format,\n formatDistanceToNowStrict,\n isSameDay,\n isSameMonth,\n isSameYear,\n isValid,\n parseISO,\n startOfDay,\n} from 'date-fns'\nimport { enGB as en, fi } from 'date-fns/locale'\n\nexport type DateType = Date | number | string\n\nexport interface DateFormatOptions {\n timeZone?: string\n locale?: Locale\n}\n\nexport const TIME_ZONE = 'Europe/Helsinki'\n\nexport const locales: Record = { en, fi }\n\nexport function formatDate(\n date: Date | string,\n formatStr: string,\n { timeZone = TIME_ZONE, locale = fi }: DateFormatOptions = {}\n): string {\n if (typeof date === 'string') {\n date = parseISO(date)\n }\n\n if (!isValid(date)) {\n return ''\n }\n\n return format(date, formatStr, { in: tz(timeZone), locale })\n}\n\nexport const getDateFormatter =\n (fmt: string) =>\n (date: Date | string, lng: string | undefined): string => {\n const locale = locales[lng as Language]\n\n return formatDate(date, fmt, { locale })\n }\n\nexport function formatDateSpan(\n start: Date | string,\n lng: string | undefined,\n { end, noYear }: { end: Date | string; noYear?: boolean },\n timeZone = TIME_ZONE\n): string {\n const y = noYear ? '' : 'yyyy'\n const opts = { in: tz(timeZone) }\n if (typeof start === 'string') {\n start = parseISO(start)\n }\n if (typeof end === 'string') {\n end = parseISO(end)\n }\n if (!isValid(start)) {\n return ''\n }\n if (!isValid(end)) {\n end = start\n }\n if (isSameDay(start, end, opts)) {\n return format(start, `d.M.${y}`, opts)\n }\n if (isSameMonth(start, end, opts)) {\n return format(start, 'd.', opts) + '–' + format(end, `d.M.${y}`, opts)\n }\n if (isSameYear(start, end)) {\n return format(start, 'd.M.', opts) + '–' + format(end, `d.M.${y}`, opts)\n }\n return format(start, `d.M.${y}`, opts) + '–' + format(end, `d.M.${y}`, opts)\n}\n\nexport function formatDistance(date?: Date, lng?: string): string {\n const locale = locales[lng as Language]\n return formatDistanceToNowStrict(date ?? new Date(), { locale })\n}\n\nexport const currentFinnishTime = (): string => formatDate(new Date(), \"yyyy-MM-dd'T'HH:mm:ssxxx\")\n\nexport const zonedStartOfDay = (date: DateType, timeZone = TIME_ZONE) => startOfDay(date, { in: tz(timeZone) })\nexport const zonedEndOfDay = (date: DateType, timeZone = TIME_ZONE) => endOfDay(date, { in: tz(timeZone) })\n","import type { i18n } from 'i18next'\n\nimport { formatDateSpan, formatDistance, getDateFormatter } from './dates'\n\nexport const registerFormatters = (i18n: i18n) => {\n i18n.services.formatter?.add('dtshort', getDateFormatter('eeeeee d.M. HH:mm'))\n i18n.services.formatter?.add('wdshort', getDateFormatter('eeeeee d.M.'))\n i18n.services.formatter?.add('weekday', getDateFormatter('eeeeee'))\n i18n.services.formatter?.add('short', getDateFormatter('dd.MM.'))\n i18n.services.formatter?.add('datespan', formatDateSpan)\n i18n.services.formatter?.add('distance', formatDistance)\n i18n.services.formatter?.add('lowercase', (value) => value.toLowerCase())\n i18n.services.formatter?.add('date', getDateFormatter('d.M.yyyy'))\n i18n.services.formatter?.add('isodate', getDateFormatter('dd.MM.yyyy'))\n i18n.services.formatter?.add('long', getDateFormatter('dd.MM.yyyy HH:mm'))\n}\n","export const fiAuthenticationDict = {\n 'Back to Sign In': 'Takaisin kirjautumiseen',\n 'Change Password': 'Vaihda salasana',\n Code: 'Koodi',\n 'Code *': 'Sähköpostiisi lähetetty koodi',\n 'Confirm Password': 'Salasana uudelleen',\n 'Create Account': 'Rekisteröidy',\n Email: 'Sähköposti',\n 'Enter your Email': 'Kirjoita sähköpostiosoitteesi',\n 'Enter your email': 'Kirjoita sähköpostiosoitteesi',\n 'Enter your Password': 'Kirjoita haluamasi salasana',\n 'Forgot your password?': 'Unohditko salasanasi?',\n 'Invalid verification code provided, please try again.': 'Virheellinen koodi, yritä uudelleen.',\n 'New password': 'Uusi salasana',\n 'New Password': 'Uusi salasana',\n or: 'tai',\n Password: 'Salasana',\n 'Please confirm your Password': 'Kirjoita haluamasi salasanasi uudelleen',\n 'Resend Code': 'Lähetä uusi koodi sähköpostiin',\n 'Reset Password': 'Vaihda salasana',\n 'Send code': 'Lähetä koodi sähköpostiin',\n Sending: 'Lähetetään',\n 'Sign In with Google': 'Kirjaudu Google-tilillä',\n 'Sign in': 'Kirjaudu',\n 'Sign In': 'Kirjaudu',\n 'Sign Up with Google': 'Rekisteröidy Google-tilillä',\n 'Signing in': 'Kirjaudutaan',\n Submit: 'Lähetä',\n Submitting: 'Lähetetään',\n}\n","import type { Localization } from '@mui/material/locale'\nimport type { Language } from '../types'\nimport type { fi } from './locales'\n\nimport { initReactI18next } from 'react-i18next'\nimport { I18n } from '@aws-amplify/core'\nimport { enUS, fiFI } from '@mui/material/locale'\nimport { enUS as genUS, fiFI as gfiFI } from '@mui/x-data-grid/locales'\nimport { enUS as denUS, fiFI as dfiFI } from '@mui/x-date-pickers/locales'\nimport i18n from 'i18next'\n\nimport { fiAuthenticationDict } from './locales/fi/auth'\nimport { i18nInit } from './config'\nimport { locales } from './dates'\nimport { registerFormatters } from './formatters'\n\nexport { locales }\nexport type { Language }\nexport type ValidationErrorKey = typeof fi.validation\n\nexport const muiLocales: Record = {\n fi: { ...fiFI, components: { ...fiFI.components, ...gfiFI.components, ...dfiFI.components } },\n en: { ...enUS, components: { ...enUS.components, ...genUS.components, ...denUS.components } },\n}\n\ni18n\n .use(initReactI18next)\n .init(i18nInit)\n .catch((reason) => console.error(reason))\n\n// additional formats\nregisterFormatters(i18n)\n\nI18n.putVocabularies({ fi: fiAuthenticationDict })\nI18n.setLanguage('fi')\n","import type { SnackbarKey } from 'notistack'\n\nimport Close from '@mui/icons-material/Close'\nimport IconButton from '@mui/material/IconButton'\nimport { useSnackbar } from 'notistack'\n\ninterface Props {\n readonly snackbarKey: SnackbarKey\n}\n\nfunction SnackbarCloseButton({ snackbarKey }: Props) {\n const { closeSnackbar } = useSnackbar()\n\n return (\n closeSnackbar(snackbarKey)}>\n \n \n )\n}\n\nexport default SnackbarCloseButton\n","import Box from '@mui/material/Box'\n\nimport { ErrorInfo } from './components/ErrorInfo'\n\nexport const ErrorPage = () => {\n return (\n \n \n \n )\n}\n","import type { CSSProperties } from 'react'\n\nimport { useCallback, useEffect, useState } from 'react'\nimport Box from '@mui/material/Box'\n\nimport banner512 from '../../assets/banner_w512.webp'\nimport banner889 from '../../assets/banner_w889.webp'\nimport banner1504 from '../../assets/banner_w1504.webp'\n\nexport const BANNER_HEIGHT = 'min(25vh, 32vw)'\n\nconst Banner = () => {\n const [loading, setLoading] = useState()\n // show the actual banner after its been loaded\n const onLoad = useCallback(() => setLoading(false), [])\n\n // start loading the actual banner after first render\n useEffect(() => {\n if (loading === undefined) {\n setLoading(true)\n }\n }, [loading])\n\n const commonImgStyles: CSSProperties = {\n width: '100%',\n height: BANNER_HEIGHT,\n objectFit: 'contain',\n objectPosition: '50% 30px',\n }\n\n return (\n \n {loading !== undefined && (\n \n )}\n \n )\n}\n\n/*\nconst Banner = () => \n return (\n \n )\n}\n*/\nexport default Banner\n","import Box from '@mui/material/Box'\nimport { lightFormat } from 'date-fns'\nimport preval from 'preval.macro'\n\nimport pkg from '../../../package.json'\nimport { HEADER_HEIGHT } from '../../assets/Theme'\n\nconst buildTimestamp = preval`module.exports = new Date().getTime();` as number\n\nexport default function Version() {\n const date = lightFormat(buildTimestamp, 'dd.MM.yyyy')\n const time = lightFormat(buildTimestamp, 'HH:mm')\n return (\n \n v{pkg.version}\n
\n {date}\n
\n {time}\n \n )\n}\n","import { Suspense, useEffect } from 'react'\nimport { Outlet, useLocation } from 'react-router-dom'\nimport Box from '@mui/material/Box'\n\nimport { rum } from '../lib/client/rum'\n\nimport Banner from './components/Banner'\nimport Header from './components/Header'\nimport LoadingIndicator from './components/LoadingIndicator'\nimport Version from './homePage/Version'\n\nexport function HomePage() {\n const location = useLocation()\n\n useEffect(() => {\n rum()?.recordPageView(location.pathname)\n }, [location])\n\n return (\n <>\n
\n \n \n }>\n \n \n \n \n \n )\n}\n","import type { LoaderFunctionArgs } from 'react-router-dom'\n\nimport { redirect } from 'react-router-dom'\nimport { t } from 'i18next'\nimport { enqueueSnackbar } from 'notistack'\n\nimport { verifyPayment } from '../api/payment'\nimport { reportError } from '../lib/client/error'\nimport { Path } from '../routeConfig'\n\nexport const paymentResultLoader = async ({ request }: LoaderFunctionArgs) => {\n const url = new URL(request.url)\n const keys = Array.from(url.searchParams.keys())\n .filter((key) => key.startsWith('checkout-'))\n .concat('signature')\n const params = keys.reduce>((acc, key) => {\n const value = url.searchParams.get(key)\n if (value) acc[key] = value\n return acc\n }, {})\n\n try {\n const response = await verifyPayment(params)\n\n if (response?.eventId && response.registrationId) {\n if (response.status === 'ok') {\n return redirect(Path.registrationOk({ eventId: response.eventId, id: response.registrationId }))\n }\n if (response.paymentStatus === 'fail') {\n enqueueSnackbar(t('registration.notifications.paymentFailed'), { variant: 'info' })\n }\n return redirect(Path.payment({ eventId: response.eventId, id: response.registrationId }))\n }\n } catch (e) {\n reportError(e)\n }\n return redirect(Path.home)\n}\n","import type { Registration } from '../types'\n\nimport { useCallback, useEffect, useMemo } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useNavigate, useParams } from 'react-router-dom'\nimport Typography from '@mui/material/Typography'\nimport { useRecoilState, useRecoilValue, useResetRecoilState } from 'recoil'\n\nimport { hasChanges, isEntryClosed, isEventOngoing, isEventOver } from '../lib/utils'\n\nimport LinkButton from './components/LinkButton'\nimport RegistrationEventInfo from './components/RegistrationEventInfo'\nimport RegistrationForm from './components/RegistrationForm'\nimport { useRegistrationActions } from './recoil/registration/actions'\nimport { LoadingPage } from './LoadingPage'\nimport { confirmedEventSelector, editableRegistrationByIdsAtom, registrationByIdsAtom, spaAtom } from './recoil'\n\nexport default function RegistrationEditPage() {\n const { t } = useTranslation()\n const navigate = useNavigate()\n const params = useParams()\n const event = useRecoilValue(confirmedEventSelector(params.id))\n const ids = `${params.id ?? ''}:${params.registrationId ?? ''}`\n const [savedRegistration, setSavedRegistration] = useRecoilState(registrationByIdsAtom(ids))\n const [registration, setRegistration] = useRecoilState(editableRegistrationByIdsAtom(ids))\n const resetRegistration = useResetRecoilState(editableRegistrationByIdsAtom(ids))\n const spa = useRecoilValue(spaAtom)\n const actions = useRegistrationActions()\n const disabled =\n !event || isEntryClosed(event) || isEventOngoing(event) || isEventOver(event) || savedRegistration?.cancelled\n const changes = useMemo(\n () => !disabled && !!savedRegistration && hasChanges(savedRegistration, registration),\n [registration, savedRegistration, disabled]\n )\n\n const handleChange = useCallback(\n (newState: Registration) => {\n if (hasChanges(registration, newState)) {\n setRegistration(newState)\n }\n },\n [registration, setRegistration]\n )\n\n const handleSave = useCallback(async () => {\n if (!registration || !event || disabled) {\n return\n }\n try {\n const saved = await actions.save(registration)\n setSavedRegistration(saved)\n resetRegistration()\n navigate(-1)\n } catch (error) {\n console.error(error)\n }\n }, [actions, disabled, event, navigate, registration, resetRegistration, setSavedRegistration])\n\n const handleCancel = useCallback(() => {\n resetRegistration()\n navigate(-1)\n return true\n }, [navigate, resetRegistration])\n\n useEffect(() => {\n if (event === null) {\n throw new Response('Event not found', { status: 404, statusText: t('error.eventNotFound') })\n } else if (registration === null) {\n throw new Response('Registration not found', { status: 404, statusText: t('error.registrationNotFound') })\n }\n }, [event, registration, t])\n\n if (!event || !registration) {\n return \n }\n\n return (\n <>\n \n \n {registration.cancelled ? (\n \n {t('registration.state.cancelled')}\n \n ) : null}\n \n \n )\n}\n","import type { PublicDogEvent, Registration } from '../../types'\n\nimport { useTranslation } from 'react-i18next'\nimport Button from '@mui/material/Button'\nimport Dialog from '@mui/material/Dialog'\nimport DialogActions from '@mui/material/DialogActions'\nimport DialogContent from '@mui/material/DialogContent'\nimport DialogContentText from '@mui/material/DialogContentText'\nimport DialogTitle from '@mui/material/DialogTitle'\n\nimport { isConfirmedEvent } from '../../lib/typeGuards'\n\ninterface Props {\n readonly event: PublicDogEvent | null | undefined\n readonly onConfirm: () => void\n readonly onClose: () => void\n readonly open: boolean\n readonly registration: Registration | null | undefined\n}\n\nexport function ConfirmDialog({ event, onConfirm, onClose, open, registration }: Props) {\n const { t } = useTranslation()\n\n if (!event || !registration || !isConfirmedEvent(event)) {\n return null\n }\n\n return (\n \n {t('registration.confirmDialog.title')}\n \n \n {t('registration.confirmDialog.text', { registration, event })}\n \n \n {t('registration.confirmDialog.confirmation')}\n \n \n \n \n \n \n \n )\n}\n","import type { SvgIconProps } from '@mui/material'\nimport type { Registration } from '../../../types'\n\nimport EuroOutlined from '@mui/icons-material/EuroOutlined'\nimport PauseCircleOutline from '@mui/icons-material/PauseCircleOutline'\n\nimport { DIM_OPACITY } from './constants'\n\ninterface PaymentIconProps extends SvgIconProps {\n dim?: boolean\n paymentStatus: Registration['paymentStatus']\n}\n\nexport const PaymentIcon = ({ paymentStatus: status, dim, ...props }: PaymentIconProps) => {\n const Icon = status === 'PENDING' ? PauseCircleOutline : EuroOutlined\n const opacity = !dim || status === 'PENDING' || status === 'SUCCESS' ? 1 : DIM_OPACITY\n\n return \n}\n","import type { Theme } from '@mui/material'\nimport type { GridColDef } from '@mui/x-data-grid'\nimport type { BreedCode, PublicDogEvent, Registration } from '../../types'\nimport type { TooltipContent } from '../components/IconsTooltip'\n\nimport { useTranslation } from 'react-i18next'\nimport { useNavigate } from 'react-router-dom'\nimport CancelOutlined from '@mui/icons-material/CancelOutlined'\nimport EditOutlined from '@mui/icons-material/EditOutlined'\nimport EuroOutlined from '@mui/icons-material/EuroOutlined'\nimport { useMediaQuery } from '@mui/material'\nimport Paper from '@mui/material/Paper'\nimport Typography from '@mui/material/Typography'\nimport { Box } from '@mui/system'\nimport { GridActionsCellItem } from '@mui/x-data-grid'\n\nimport { getPaymentStatus } from '../../lib/payment'\nimport { hasPriority } from '../../lib/registration'\nimport { Path } from '../../routeConfig'\nimport { PaymentIcon } from '../components/icons/PaymentIcon'\nimport { PriorityIcon } from '../components/icons/PriorityIcon'\nimport { IconsTooltip } from '../components/IconsTooltip'\nimport StyledDataGrid from '../components/StyledDataGrid'\n\ninterface Props {\n readonly disabled?: boolean\n readonly event: PublicDogEvent\n readonly rows: Registration[]\n readonly onUnregister: (registration: Registration) => void\n}\n\nconst Icons = ({ event, registration }: { event: PublicDogEvent; registration: Registration }) => {\n const { t } = useTranslation()\n const priority = hasPriority(event, registration)\n const items: TooltipContent[] = [\n {\n text: priority ? 'Olen etusijalla' : 'En ole etusijalla',\n icon: ,\n },\n {\n text: t(getPaymentStatus(registration)),\n icon: ,\n },\n ]\n return (\n \n \n \n \n \n \n )\n}\n\nexport default function RegistrationList({ event, disabled, rows, onUnregister }: Props) {\n const { t } = useTranslation()\n const { t: breed } = useTranslation('breed')\n const sm = useMediaQuery((theme: Theme) => theme.breakpoints.down('sm'))\n const navigate = useNavigate()\n\n const onEdit = (registration: Registration) => {\n navigate(`${Path.registration(registration)}/edit`)\n }\n\n const allColumns: GridColDef[] = [\n {\n field: 'dog.name',\n valueGetter: (_value, row) => row.dog.name,\n headerName: t('dog.name'),\n renderCell: (params) => {params.value},\n flex: 1,\n },\n {\n type: sm ? 'custom' : 'string',\n field: 'dog.regNo',\n valueGetter: (_value, row) => row.dog.regNo,\n headerName: t('dog.regNo'),\n width: 160,\n },\n {\n type: sm ? 'custom' : 'string',\n field: 'dog.breedCode',\n valueGetter: (_value, row) => breed(row.dog.breedCode as BreedCode),\n headerName: t('dog.breed'),\n width: 160,\n },\n {\n field: 'icons',\n width: 48,\n headerName: '',\n renderCell: (params) => ,\n },\n {\n field: 'actions',\n type: 'actions',\n width: 116,\n getActions: (params: { row: Registration }) => {\n if (params.row.cancelled) {\n return [\n \n {t('event.states.cancelled')}\n ,\n ]\n }\n const always = [\n }\n label=\"Muokkaa ilmoittautumista\"\n onClick={() => onEdit(params.row)}\n />,\n }\n label=\"Peru ilmoittautuminen\"\n onClick={() => onUnregister(params.row)}\n />,\n ]\n if (params.row.paymentStatus !== 'SUCCESS' && params.row.paymentStatus !== 'PENDING') {\n return [\n }\n label=\"Maksa ilmoittautuminen\"\n onClick={() => navigate(Path.payment(params.row))}\n />,\n ...always,\n ]\n }\n return always\n },\n },\n ]\n\n const columns = allColumns.filter((c) => c.type !== 'custom')\n\n return (\n \n Ilmoitetut koirat\n \n row.id}\n getRowClassName={(params) => (params.row.cancelled ? 'cancelled' : '')}\n sx={{\n '& .MuiDataGrid-cell': {\n px: { xs: 0.5, sm: 1 },\n },\n }}\n />\n \n \n )\n}\n","import type { PublicDogEvent, Registration } from '../types'\n\nimport { useCallback, useEffect, useMemo, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useLocation, useNavigate, useParams } from 'react-router-dom'\nimport CheckOutlined from '@mui/icons-material/CheckOutlined'\nimport EuroOutlined from '@mui/icons-material/EuroOutlined'\nimport PersonOutline from '@mui/icons-material/PersonOutline'\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport Grid2 from '@mui/material/Grid2'\nimport List from '@mui/material/List'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemIcon from '@mui/material/ListItemIcon'\nimport ListItemText from '@mui/material/ListItemText'\nimport Paper from '@mui/material/Paper'\nimport Typography from '@mui/material/Typography'\nimport { isPast, subDays } from 'date-fns'\nimport { enqueueSnackbar } from 'notistack'\nimport { useRecoilState, useRecoilValue } from 'recoil'\n\nimport { getPaymentStatus } from '../lib/payment'\nimport { hasPriority } from '../lib/registration'\nimport { isConfirmedEvent } from '../lib/typeGuards'\nimport { Path } from '../routeConfig'\n\nimport CancelDialog from './components/CancelDialog'\nimport Header from './components/Header'\nimport LinkButton from './components/LinkButton'\nimport RegistrationEventInfo from './components/RegistrationEventInfo'\nimport { useRegistrationActions } from './recoil/registration/actions'\nimport { ConfirmDialog } from './registrationListPage/ConfirmDialog'\nimport RegistrationList from './registrationListPage/RegistrationList'\nimport { LoadingPage } from './LoadingPage'\nimport { eventSelector, registrationSelector, spaAtom } from './recoil'\n\ninterface Props {\n readonly cancel?: boolean\n readonly confirm?: boolean\n readonly invitation?: boolean\n}\n\nexport function RegistrationListPage({ cancel, confirm, invitation }: Props) {\n const params = useParams()\n const location = useLocation()\n const navigate = useNavigate()\n const event = useRecoilValue(eventSelector(params.id))\n const [registration, setRegistration] = useRecoilState(\n registrationSelector(`${params.id ?? ''}:${params.registrationId ?? ''}`)\n )\n const spa = useRecoilValue(spaAtom)\n const { t } = useTranslation()\n const [cancelOpen, setCancelOpen] = useState(!!cancel)\n const [confirmOpen, setConfirmOpen] = useState(!!confirm)\n const [redirecting, setRedirecting] = useState(false)\n const [reloadCount, setReloadCount] = useState(0)\n const actions = useRegistrationActions()\n const allDisabled = useMemo(() => !event || !isConfirmedEvent(event) || isPast(event.endDate), [event])\n const cancelDisabled = useMemo(\n () => !event || allDisabled || isPast(subDays(event.startDate, 2)),\n [allDisabled, event]\n )\n\n const handleCancel = useCallback(\n (reason: string) => {\n if (allDisabled || !registration) {\n return\n }\n actions.cancel(registration, reason).then(\n (saved) => {\n setRegistration(saved)\n setCancelOpen(false)\n },\n (reason) => {\n console.error(reason)\n }\n )\n },\n [actions, allDisabled, registration, setRegistration]\n )\n\n const handleConfirm = useCallback(() => {\n if (allDisabled || !registration || registration.confirmed || registration.cancelled) {\n return\n }\n actions.confirm(registration).then(\n (saved) => {\n setRegistration(saved)\n setConfirmOpen(false)\n },\n (reason) => {\n console.error(reason)\n }\n )\n }, [actions, allDisabled, registration, setRegistration])\n\n const handleCalcelClose = useCallback(() => setCancelOpen(false), [])\n const handleConfirmClose = useCallback(() => setConfirmOpen(false), [])\n\n useEffect(() => {\n if (cancelOpen && registration?.cancelled) {\n setCancelOpen(false)\n }\n if (confirmOpen && (registration?.confirmed || registration?.cancelled)) {\n setConfirmOpen(false)\n }\n if (invitation && registration && event && !redirecting) {\n setRedirecting(true)\n actions.invitationRead(registration).then(\n (saved) => {\n if (saved !== registration) {\n setRegistration(saved)\n }\n if (registration.invitationAttachment && event.state === 'invited') {\n window.location.replace(Path.invitationAttachment(registration))\n } else {\n navigate(Path.registration(registration))\n }\n },\n (reason) => {\n console.error(reason)\n }\n )\n }\n }, [cancelOpen, confirmOpen, registration, invitation, event, actions, setRegistration, navigate, redirecting])\n\n useEffect(() => {\n if (event === null) {\n throw new Response('Event not found', { status: 404, statusText: t('error.eventNotFound') })\n } else if (registration === null) {\n throw new Response('Registration not found', { status: 404, statusText: t('error.registrationNotFound') })\n }\n }, [event, registration, t])\n\n useEffect(() => {\n if (!registration) return\n\n if (location.pathname.endsWith('/saved')) {\n const emails = [registration.handler.email]\n if (registration.owner.email !== registration.handler.email) {\n emails.push(registration.owner.email)\n }\n\n if (registration.paymentStatus === 'SUCCESS') {\n enqueueSnackbar(\n t('registration.saved', {\n count: emails.length,\n to: emails.join('\\n'),\n }),\n { variant: 'success', style: { whiteSpace: 'pre-line' } }\n )\n }\n navigate(Path.registration(registration), { replace: true })\n }\n }, [location.pathname, navigate, registration, t])\n\n useEffect(() => {\n if (registration?.paymentStatus !== 'PENDING' || reloadCount >= 5) {\n return\n }\n\n const reload = async () => {\n const reg = await actions.reload(registration)\n setReloadCount((old) => old + 1)\n setRegistration(reg)\n }\n\n const timeout = setTimeout(reload, 10_000)\n\n return () => clearTimeout(timeout)\n }, [actions, registration, reloadCount, setRegistration])\n\n if (!event || !registration) {\n return \n }\n\n return (\n <>\n
\n \n \n \n \n \n Ilmoittautumistiedot\n \n \n \n \n \n \n \n \n \n \n \n \n navigate(Path.payment(registration))}\n >\n {t('registration.cta.pay')}\n \n ) : null\n }\n >\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n setCancelOpen(true)}\n />\n \n \n \n \n )\n}\n\nfunction priorityIconColor(event: PublicDogEvent, registration: Registration) {\n if (hasPriority(event, registration)) {\n return 'primary.main'\n }\n return 'transparent'\n}\n\nfunction priorityStatus(event: PublicDogEvent, registration: Registration) {\n if (hasPriority(event, registration)) {\n return 'Olen etusijalla'\n }\n return 'En ole etusijalla'\n}\n\nfunction paymentIconColor(registration: Registration) {\n return registration.paymentStatus === 'SUCCESS' ? 'primary.main' : 'transparent'\n}\n\nfunction registrationStatus(registration: Registration) {\n if (registration.cancelled) {\n return 'Olen perunut ilmoittautumiseni'\n }\n return registration.confirmed ? 'Olen vahvistanut osallistumiseni' : 'Ilmoittautuminen vastaanotettu'\n}\n","import type { Theme } from '@mui/material'\nimport type { SyntheticEvent } from 'react'\nimport type { Organizer, PublicJudge, RegistrationClass } from '../../types'\nimport type { DateValue } from '../components/DateRange'\nimport type { FilterProps } from '../recoil'\n\nimport { useCallback, useMemo, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport ExpandMore from '@mui/icons-material/ExpandMore'\nimport { useMediaQuery } from '@mui/material'\nimport Accordion from '@mui/material/Accordion'\nimport AccordionDetails from '@mui/material/AccordionDetails'\nimport AccordionSummary from '@mui/material/AccordionSummary'\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport FormControlLabel from '@mui/material/FormControlLabel'\nimport Grid2 from '@mui/material/Grid2'\nimport Stack from '@mui/material/Stack'\nimport Switch from '@mui/material/Switch'\nimport Typography from '@mui/material/Typography'\n\nimport { HEADER_HEIGHT } from '../../assets/Theme'\nimport AutocompleteMulti from '../components/AutocompleteMulti'\nimport DateRange from '../components/DateRange'\nimport { filterString } from '../recoil'\n\ninterface Props {\n readonly eventTypes: string[]\n readonly eventClasses: RegistrationClass[]\n readonly filter: FilterProps\n readonly judges: PublicJudge[]\n readonly onChange?: (filter: FilterProps) => void\n readonly organizers: Organizer[]\n}\n\nconst MIN_DATE = new Date(2020, 0, 1)\n\nexport const EventFilter = ({ judges, organizers, eventTypes, eventClasses, filter, onChange }: Props) => {\n const { t } = useTranslation()\n const md = useMediaQuery((theme: Theme) => theme.breakpoints.up('sm'))\n const [expanded, setExpanded] = useState(md)\n const filterText = useMemo(() => filterString(filter, t), [filter, t])\n\n const setFilter = useCallback(\n (props: Partial) => onChange && onChange({ ...filter, ...props }),\n [filter, onChange]\n )\n const handleDateRangeChange = useCallback(\n (start: DateValue, end: DateValue) => setFilter({ start, end }),\n [setFilter]\n )\n const handleEventTypeChange = useCallback(\n (event: SyntheticEvent, value: readonly string[]) => setFilter({ eventType: [...value] }),\n [setFilter]\n )\n const handleEventClassChange = useCallback(\n (event: SyntheticEvent, value: readonly RegistrationClass[]) =>\n setFilter({ eventClass: [...value] }),\n [setFilter]\n )\n const handleOrganizerChange = useCallback(\n (event: SyntheticEvent, value: readonly Organizer[]) =>\n setFilter({ organizer: value.map((v) => v.id) }),\n [setFilter]\n )\n const handleJudgeChange = useCallback(\n (event: SyntheticEvent, value: readonly PublicJudge[]) =>\n setFilter({ judge: value.map((v) => v.name) }),\n [setFilter]\n )\n const handleWithEntryOpenChange = useCallback(\n (event: SyntheticEvent, checked: boolean) =>\n setFilter({\n withOpenEntry: checked,\n withClosingEntry: checked && filter.withClosingEntry,\n withFreePlaces: checked && filter.withFreePlaces,\n }),\n [filter.withClosingEntry, filter.withFreePlaces, setFilter]\n )\n const handleWithUpcomingEntryChange = useCallback(\n (event: SyntheticEvent, checked: boolean) =>\n setFilter({\n withUpcomingEntry: checked,\n }),\n [setFilter]\n )\n const getName = useCallback((o?: { name?: string }) => o?.name ?? '', [])\n const getJudgeName = useCallback(\n (o?: PublicJudge) => (o?.name ?? '') + (o?.foreing && o.country ? ` (${t(o.country, { ns: 'country' })})` : ''),\n [t]\n )\n const getString = useCallback((o?: string) => o ?? '', [])\n const compareId = useCallback((o?: { id?: number | string }, v?: { id?: number | string }) => o?.id === v?.id, [])\n const compareJudge = useCallback((o?: PublicJudge, v?: PublicJudge) => o?.name === v?.name, [])\n\n return (\n \n setExpanded(expanded)}>\n }\n sx={{\n bgcolor: 'background.selected',\n minHeight: '28px',\n '&.Mui-expanded': { minHeight: '28px' },\n '& .MuiAccordionSummary-content': { margin: 0, overflow: 'hidden' },\n '& .MuiAccordionSummary-content.Mui-expanded': { margin: 0 },\n }}\n >\n \n {filterText}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n filter.organizer.includes(o.id))}\n />\n \n \n filter.judge.includes(j.name))}\n />\n \n \n \n \n \n }\n label={t('entryOpen')}\n name=\"withOpenEntry\"\n onChange={handleWithEntryOpenChange}\n />\n }\n label={t('entryUpcoming')}\n labelPlacement=\"end\"\n name=\"withUpcomingEntry\"\n onChange={handleWithUpcomingEntryChange}\n />\n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import { useTranslation } from 'react-i18next'\nimport Box from '@mui/material/Box'\n\nexport function EmptyResult() {\n const { t } = useTranslation()\n return {t('noResults')}\n}\n","import type { PublicDogEvent } from '../../../../types'\n\nimport { useMemo } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport Box from '@mui/material/Box'\n\nimport { isEntryOpen } from '../../../../lib/utils'\n\nexport const EventPlaces = ({ event }: { event: PublicDogEvent }) => {\n const { t } = useTranslation()\n\n const text = useMemo(() => {\n if (event.places) {\n if (event.entries || isEntryOpen(event)) {\n return `${event.entries ?? 0} / ${event.places}`\n }\n return event.places + ' ' + t('toltaPlaces')\n }\n return ''\n }, [event, t])\n\n return {text}\n}\n","import { useTranslation } from 'react-i18next'\nimport Typography from '@mui/material/Typography'\n\ninterface Props {\n date?: Date\n}\n\nexport const TimeLeft = ({ date }: Props) => {\n const { t } = useTranslation()\n\n if (!date) return null\n\n return (\n \n {t('dateFormat.distanceLeft', { date })}\n \n )\n}\n","import type { PublicDogEvent } from '../../../../types'\n\nimport { useMemo } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { styled } from '@mui/material'\nimport Grid2 from '@mui/material/Grid2'\n\nconst TextGrid = styled(Grid2)({\n paddingLeft: 4,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n})\nconst NumberGrid = styled(Grid2)({ paddingRight: 4, textAlign: 'right' })\n\nexport type MinimalEvent = Pick\n\nexport const EventClassPlaces = ({ event, eventClass }: { event: MinimalEvent; eventClass: string }) => {\n const { t } = useTranslation()\n\n const classes = event.classes.filter((c) => c.class === eventClass)\n\n const dates = classes.map((c) => c.date ?? event.startDate ?? new Date())\n const entryStatus = useMemo(() => {\n const status = classes.reduce(\n (acc, c) => {\n acc.places += c.places ?? 0\n\n // entries and members are already summarized per class\n acc.entries = c.entries ?? 0\n acc.members = c.members ?? 0\n return acc\n },\n { entries: 0, places: 0, members: 0 }\n )\n\n if (event.classes.length <= 1) {\n status.places = event.places\n\n status.entries = event.entries ?? status.entries\n status.members = event.members ?? 0\n }\n return status\n }, [classes, event.classes.length, event.entries, event.members, event.places])\n\n return (\n \n {eventClass}\n {dates.length ? (\n {dates.map((date) => t('dateFormat.wdshort', { date })).join(', ')}\n ) : null}\n {entryStatus.entries}\n {entryStatus.places}\n {entryStatus.members}\n \n )\n}\n","import type { TypographyProps } from '@mui/material/Typography'\nimport type { PublicDogEvent } from '../../../../types'\n\nimport { useTranslation } from 'react-i18next'\nimport { styled } from '@mui/material'\nimport Grid2 from '@mui/material/Grid2'\nimport Typography from '@mui/material/Typography'\n\nconst Caption = (props: TypographyProps) => \n\nconst HeaderText = styled(Caption)(({ theme }) => ({\n paddingLeft: 4,\n paddingRight: 4,\n paddingTop: 0,\n paddingBottom: 0,\n width: '100%',\n display: 'block',\n backgroundColor: theme.palette.background.tableHead,\n}))\n\nexport const EventClassPlacesHeader = ({ event }: { event: PublicDogEvent }) => {\n const { t } = useTranslation()\n\n const showDates = event.classes.length > 0\n\n return (\n \n \n {t('event.classPlacesHeader.name')}\n \n {showDates ? (\n \n {t('event.classPlacesHeader.dates')}\n \n ) : null}\n \n {t('event.classPlacesHeader.entries')}\n \n \n {t('event.classPlacesHeader.places')}\n \n \n {t('event.classPlacesHeader.members')}\n \n \n )\n}\n","import type { Grid2Props } from '@mui/material'\nimport type { ReactNode } from 'react'\nimport type { PublicDogEvent, PublicJudge } from '../../../types'\n\nimport { useMemo } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport Box from '@mui/material/Box'\nimport Grid2 from '@mui/material/Grid2'\nimport Typography from '@mui/material/Typography'\n\nimport { zonedEndOfDay } from '../../../i18n/dates'\nimport { judgeName } from '../../../lib/judge'\nimport { isEntryOpen, printContactInfo, unique } from '../../../lib/utils'\nimport { getRankingPeriod } from '../../../rules_ch'\nimport CostInfo from '../../components/CostInfo'\nimport { EntryStatus } from '../../components/EntryStatus'\nimport { PriorityChips } from '../../components/PriorityChips'\nimport { TimeLeft } from '../../components/TimeLeft'\n\nimport { EventClassPlaces } from './eventInfo/EventClassPlaces'\nimport { EventClassPlacesHeader } from './eventInfo/EventClassPlacesHeader'\n\ninterface Props {\n readonly event: PublicDogEvent\n}\n\nconst InfoItem = ({ label, children, ...props }: { label: string; children: ReactNode } & Grid2Props) => (\n \n \n {label}\n \n {children}\n \n)\n\nconst judgeClasses = (judge: PublicJudge, event: PublicDogEvent) => {\n const classes = unique(\n event.classes\n .filter((c) => (Array.isArray(c.judge) ? c.judge.find((j) => j.id === judge.id) : c.judge?.id === judge.id))\n .map((c) => c.class)\n )\n return classes.length ? ` (${classes.join(', ')})` : ''\n}\n\nexport const EventInfo = ({ event }: Props) => {\n const { t } = useTranslation()\n const official = useMemo(() => printContactInfo(event.contactInfo?.official), [event.contactInfo?.official])\n const secretary = useMemo(() => printContactInfo(event.contactInfo?.secretary), [event.contactInfo?.secretary])\n const classes = useMemo(\n () => (event.classes.length ? unique(event.classes.map((c) => c.class)) : [event.eventType]),\n [event.classes, event.eventType]\n )\n const judges = useMemo(() => event.judges.map((j) => `${judgeName(j, t)}${judgeClasses(j, event)}`), [event, t])\n const rankingPeriod = getRankingPeriod(event.eventType, event.entryOrigEndDate ?? event.entryEndDate)\n\n return (\n \n \n {t('dateFormat.datespan', { start: event.entryStartDate, end: event.entryEndDate })}\n \n {isEntryOpen(event) ? : ''}\n \n {classes.length ? (\n \n \n {classes.map((c) => (\n \n ))}\n \n ) : null}\n \n {judges.map((j) => (\n {j}\n ))}\n \n {official ? (\n \n {official}\n \n ) : null}\n {secretary ? (\n \n {secretary}\n \n ) : null}\n {event.cost ? (\n \n \n \n ) : null}\n {event.priority?.length ? (\n \n \n \n ) : null}\n {rankingPeriod ? (\n \n {t('dateFormat.datespan', { start: rankingPeriod.minResultDate, end: rankingPeriod.maxResultDate })}\n \n ) : null}\n {event.description ? (\n \n {event.description}\n \n ) : null}\n \n )\n}\n","import type { EventState } from '../../../types'\n\nimport { useTranslation } from 'react-i18next'\nimport Box from '@mui/material/Box'\n\nimport { Path } from '../../../routeConfig'\nimport LinkButton from '../../components/LinkButton'\n\ninterface Props {\n readonly id: string\n readonly state: EventState\n readonly text?: string | null\n}\n\nexport function EventStateInfo({ id, state, text = null }: Props) {\n const { t } = useTranslation()\n\n if (state === 'invited' || state === 'started') {\n return \n }\n\n return (\n \n {state === 'tentative' || state === 'cancelled' ? t(`event.states.${state}_info`) : text}\n \n )\n}\n","import type { PublicDogEvent } from '../../../types'\n\nimport { useCallback, useMemo } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport KeyboardArrowDown from '@mui/icons-material/KeyboardArrowDown'\nimport KeyboardArrowRight from '@mui/icons-material/KeyboardArrowRight'\nimport Box from '@mui/material/Box'\nimport Collapse from '@mui/material/Collapse'\nimport Grid2 from '@mui/material/Grid2'\nimport IconButton from '@mui/material/IconButton'\nimport Typography from '@mui/material/Typography'\nimport { useRecoilState } from 'recoil'\n\nimport { zonedStartOfDay } from '../../../i18n/dates'\nimport { isEntryClosed, isEntryOpen, isEventOver, isValidForEntry } from '../../../lib/utils'\nimport { Path } from '../../../routeConfig'\nimport LinkButton from '../../components/LinkButton'\nimport { openedEventAtom } from '../../recoil'\n\nimport { EventPlaces } from './eventTableRow/EventPlaces'\nimport { EventInfo } from './EventInfo'\nimport { EventStateInfo } from './EventStateInfo'\n\ninterface Props {\n readonly event: PublicDogEvent\n readonly odd?: boolean\n}\n\nexport const EventListItem = ({ event, odd }: Props) => {\n const [open, setOpen] = useRecoilState(openedEventAtom(event.id))\n const { t } = useTranslation()\n\n const infoText = useMemo(() => {\n if (isEntryOpen(event)) return t('dateFormat.datespan', { start: event.entryStartDate, end: event.entryEndDate })\n if (isEventOver(event)) return t('event.states.confirmed_eventOver')\n\n if (event.state === 'picked') return t('event.states.picked')\n\n if (isEntryClosed(event)) return t('event.states.confirmed_entryClosed_info')\n\n return null\n }, [event, t])\n\n const showPlaces = useMemo(\n (): boolean =>\n !!event.entryStartDate && zonedStartOfDay(event.entryStartDate) <= new Date() && isValidForEntry(event.state),\n [event]\n )\n\n const handleClick = useCallback(() => setOpen(!open), [open, setOpen])\n\n return (\n \n \n \n \n {open ? : }\n \n \n \n \n \n \n {event.organizer.name}\n \n \n \n {showPlaces ? : null}\n \n \n \n {t('dateFormat.datespan', { start: event.startDate, end: event.endDate })}\n \n {event.eventType}\n \n \n {showPlaces ? : null}\n \n \n \n {event.location}\n \n {event.name ? event.name : ''}\n \n \n \n {isEntryOpen(event) ? (\n \n ) : (\n \n )}\n \n \n \n \n \n \n \n \n \n )\n}\n","import type { PublicDogEvent } from '../../types'\n\nimport { EmptyResult } from './eventList/EmptyResult'\nimport { EventListItem } from './eventList/EventListItem'\n\ninterface Props {\n readonly events: PublicDogEvent[]\n}\n\nexport const EventList = ({ events }: Props) =>\n !events.length ? (\n \n ) : (\n <>\n {events.map((event, i) => (\n \n ))}\n \n )\n","import { useEffect } from 'react'\nimport { useLocation } from 'react-router-dom'\nimport { useRecoilState, useRecoilValue, useSetRecoilState, waitForAll } from 'recoil'\n\nimport { EventFilter } from './searchPage/EventFilter'\nimport { EventList } from './searchPage/EventList'\nimport {\n deserializeFilter,\n eventFilterAtom,\n filteredEventsSelector,\n filterEventClassesSelector,\n filterEventTypesSelector,\n filterJudgesSelector,\n filterOrganizersSelector,\n spaAtom,\n} from './recoil'\n\nexport function SearchPage() {\n const [filter, setFilter] = useRecoilState(eventFilterAtom)\n const setSpa = useSetRecoilState(spaAtom)\n const [organizers, activeJudges, activeEventTypes, activeEventClasses, events] = useRecoilValue(\n waitForAll([\n filterOrganizersSelector,\n filterJudgesSelector,\n filterEventTypesSelector,\n filterEventClassesSelector,\n filteredEventsSelector,\n ])\n )\n const location = useLocation()\n\n useEffect(() => setSpa(true), [setSpa])\n useEffect(() => {\n // Only replace the filter based on url, don't clear it\n if (location.search) {\n setFilter(deserializeFilter(location.search))\n }\n }, [location, setFilter])\n\n return (\n <>\n \n \n \n )\n}\n","import type { Params } from 'react-router-dom'\nimport type { PublicRegistration } from '../types'\n\nimport { useTranslation } from 'react-i18next'\nimport { useLoaderData, useParams } from 'react-router-dom'\nimport Box from '@mui/material/Box'\nimport Grid2 from '@mui/material/Grid2'\nimport { styled } from '@mui/material/styles'\nimport Table from '@mui/material/Table'\nimport TableBody from '@mui/material/TableBody'\nimport TableCell from '@mui/material/TableCell'\nimport TableRow from '@mui/material/TableRow'\nimport { useRecoilValue } from 'recoil'\n\nimport { getStartList } from '../api/registration'\nimport { judgeName } from '../lib/judge'\n\nimport { confirmedEventSelector } from './recoil'\n\nexport const startListLoader = async ({ params }: { params: Params }) =>\n params.id ? getStartList(params.id) : []\n\nconst StyledTableRow = styled(TableRow)(({ theme }) => ({\n '& td, & th': {\n border: 0,\n },\n '&.top-border': {\n '& td:not(:first-of-type), & th:not(:first-of-type)': {\n borderTop: '1px dotted #aaa',\n },\n },\n}))\n\nexport const StartListPage = () => {\n const { t } = useTranslation()\n const { id } = useParams()\n const event = useRecoilValue(confirmedEventSelector(id))\n const participants = useLoaderData() as PublicRegistration[]\n const now = new Date()\n\n if (!event) {\n return <>Tapahtumaa {id} ei löydy.\n }\n\n if (!participants?.length) {\n return <>Starttilistaa ei ole saatavilla tälle tapahtumalle\n }\n\n let lastDate: Date | undefined\n let lastClass: PublicRegistration['class']\n let lastTime: string | undefined\n let index = 0\n\n return (\n \n \n \n

\n {event.eventType} {event.location} {event.name ? `(${event.name})` : ''}\n

\n
\n \n {t('dateFormat.dtshort', { date: now })}\n \n
\n \n \n {participants.map((reg) => {\n const result: JSX.Element[] = []\n if (reg.group.date?.valueOf() !== lastDate?.valueOf()) {\n const date = reg.group.date ?? event?.startDate ?? new Date()\n result.push(\n \n \n

\n {t('dateFormat.weekday', { date })} {t('dateFormat.date', { date })}\n

\n
\n
\n )\n lastDate = reg.group.date\n lastTime = undefined\n index = 0\n }\n if (lastClass !== reg.class) {\n if (reg.class) {\n result.push(\n \n \n {reg.class}{' '}\n {event.classes\n .filter((c) => c.class === reg.class && c.date?.valueOf() === lastDate?.valueOf())\n .map((c) =>\n Array.isArray(c.judge)\n ? c.judge.map((j) => judgeName(j, t)).join(', ')\n : judgeName(c.judge, t)\n )\n .filter(Boolean)\n .join(', ')}\n \n \n )\n }\n lastClass = reg.class\n index = 0\n }\n if (lastTime !== reg.group.time) {\n if (reg.group.time) {\n result.push(\n \n \n {t(`registration.timeLong.${reg.group.time}`)}\n \n \n )\n }\n lastTime = reg.group.time\n index = 0\n }\n if (reg.cancelled) {\n result.push(\n \n {reg.group.number}.\n PERUTTU\n \n )\n } else {\n result.push(\n 0 ? 'top-border' : ''}>\n \n {reg.group.number}.\n \n \n {reg.dog.breedCode && reg.dog.gender\n ? t(`${reg.dog.breedCode}.${reg.dog.gender}`, {\n ns: 'breedAbbr',\n defaultValue: reg.dog.breedCode,\n })\n : ''}\n \n {reg.dog.titles}\n {reg.dog.name}\n {reg.dog.regNo}\n s. {reg.dog.dob ? t('dateFormat.date', { date: reg.dog.dob }) : '?'}\n \n )\n result.push(\n \n \n \n (i. {reg.dog.sire?.titles} {reg.dog.sire?.name}, e. {reg.dog.dam?.titles} {reg.dog.dam?.name})\n \n \n )\n result.push(\n \n \n \n {reg.ownerHandles ? 'om. & ohj. ' + reg.owner : 'om. ' + reg.owner + ', ohj. ' + reg.handler}\n \n kasv. {reg.breeder}\n \n )\n index++\n }\n\n return result\n })}\n
\n
\n
\n )\n}\n","import { useEffect } from 'react'\nimport { useLocation } from 'react-router'\nimport Box from '@mui/material/Box'\nimport Link from '@mui/material/Link'\nimport Typography from '@mui/material/Typography'\n\nimport { HEADER_HEIGHT } from '../assets/Theme'\nimport { rum } from '../lib/client/rum'\n\nimport Header from './components/Header'\n\nconst issueHref = 'https://koekalenteri.atlassian.net/servicedesk/customer/portal/1/group/1/create/1'\nconst supportEmail = 'support@koekalenteri.atlassian.net'\n\nexport const SupportPage = () => {\n const location = useLocation()\n\n useEffect(() => {\n rum()?.recordPageView(location.pathname)\n }, [location])\n\n return (\n <>\n
\n \n \n \n Huomasitko, että koekalenteri toimii oudosti tai ei toimi niinkuin pitää?\n \n \n Voit lähettää virheraportin suoraan täältä\n \n \n Tai voit lähettää sähköpostia osoitteeseen{' '}\n {supportEmail}\n \n \n \n \n )\n}\n","import Paper from '@mui/material/Paper'\n\nexport const TermsPage = () => {\n return (\n \n

\n 1. Tapahtumaan ilmoittautuminen\n

\n
    \n
  • \n {' '}\n Ilmoittautuminen on Suomen Kennelliiton sääntöjen mukaisesti aina sitova. Ilmoittautuminen velvoittaa\n ilmoittajan maksamaan tapahtuman järjestäjän määräämän osallistumismaksun.\n
  • \n
  • \n {' '}\n Peruutuskäytäntö ja käytäntö maksujen palauttamisessa ovat samat niin ilmoittautumisaikana kuin sen jälkeenkin\n
  • \n
  • \n {' '}\n Vain ilmoittautumisaikana maksettu ilmoittautuminen hyväksytään, ellei tapahtuman järjestäjä ole toisin\n ilmoittanut\n
  • \n
\n

\n 2. Osallistujan osallistumisoikeus\n

\n
    \n
  • \n {' '}\n Ilmoittautumalla kokeeseen ja/tai kilpailuun ilmoittaja vakuuttaa, että ilmoitetulla osallistujalla on\n osallistumisoikeus ko. tapahtumaan.\n
  • \n
  • \n {' '}\n Ilmoittautumisessa on aina ilmoitettava osallistujan paras/korkein lajissa saavutettu tulos, vaikka tämä tulos\n oikeuttaisi osallistumisen ylempään koe- tai kilpailuluokkaan.\n
  • \n
  • \n {' '}\n Jos ilmoittaja jättää ilmoittamatta osallistujan parhaan ko. koelajin tuloksen ilmoittautumishetkellä voi\n kokeen ja/tai kilpailun järjestäjä mitätöidä ilmoittautumisen. Asian ilmetessä tapahtuman jälkeen voi\n tapahtuman järjestäjä pyytää Suomen Kennelliitolta kokeessa ja/tai kilpailussa saavutetun tuloksen\n mitätöimistä ilmoittautumistietojen ollessa näiden ehtojen vastaisia. \n
  • \n
\n

\n 3. Rokotusmääräykset ja antidopingmääräykset\n

\n
    \n
  • \n {' '}\n Ilmoittautumalla kokeeseen ja/tai kilpailuun ilmoittaja sitoutuu noudattamaan Suomen Kennelliiton voimassa\n olevia rokotusmääräyksiä ja koe-/testi- ja antidopingsääntöjä sekä niitä täydentäviä ohjeita.\n
  • \n
\n

\n 4. Kokeen ja/tai kilpailun tulosten julkaiseminen\n

\n
    \n
  • \n {' '}\n Ilmoittautumalla kokeeseen ja/tai kilpailuun ilmoittaja suostuu siihen, että tapahtuman järjestäjä tai tämän\n edustaja, Suomen Kennelliitto tai rotuyhdistykset saavat julkaista osallistujan koe-/kilpailu-/testituloksen.\n
  • \n
\n

\n 5. Ilmoittautumisen peruuttaminen\n

\n
    \n
  • \n {' '}\n Ilman pätevää syytä osallistumismaksua ei palauteta. Päteviksi syiksi poisjäämiseen katsotaan osallistuvan\n koiran alkanut kiima sekä koiran tai omistajan sairaus. Sairauden syy on todistettava lääkärintodistuksella,\n joka on päivätty viimeistään koetta seuraavana arkipäivänä.\n
  • \n
  • \n {' '}\n Lääkärintodistus on toimitettava kokeen ja/tai kilpailun järjestäjälle viimeistään 14 vrk:n kuluessa\n tapahtumasta.\n
  • \n
  • \n {' '}\n Poisjäämisestä on välittömästi ilmoitettava kokeen ja/tai kilpailun järjestäjälle, kuitenkin viimeistään ennen\n kokeen alkua.\n
  • \n
\n

\n 6. Osallistumismaksujen palauttaminen\n

\n
    \n
  • \n {' '}\n Kokeen ja/tai kilpailun järjestäjä palauttaa osallistumismaksut siihen oikeutetuille mahdollisimman pian\n tapahtuman jälkeen\n
  • \n
  • Tapahtuman järjestäjällä on oikeus vähentää palautettavasta summasta käsittelykuluina 5€.
  • \n
\n

\n 7. Osallistumispaikkojen jakoperusteet\n

\n \n
\n )\n}\n","import type { RouteObject } from 'react-router-dom'\n\nimport { Navigate } from 'react-router-dom'\n\nimport { ErrorPage } from './pages/ErrorPage'\nimport { HomePage } from './pages/HomePage'\nimport { paymentResultLoader } from './pages/PaymentResultPage'\nimport RegistrationEditPage from './pages/RegistrationEditPage'\nimport { RegistrationListPage } from './pages/RegistrationListPage'\nimport { SearchPage } from './pages/SearchPage'\nimport { startListLoader, StartListPage } from './pages/StartListPage'\nimport { SupportPage } from './pages/SupportPage'\nimport { TermsPage } from './pages/TermsPage'\nimport { Path } from './routeConfig'\n\nconst routes: RouteObject[] = [\n {\n path: '/',\n element: ,\n errorElement: ,\n children: [\n {\n index: true,\n element: ,\n },\n ...['event/:eventType/:id/:class/:date', 'event/:eventType/:id/:class', 'event/:eventType/:id'].map(\n (path) => ({\n path,\n lazy: () => import('./pages/RegistrationCreatePage'),\n })\n ),\n {\n path: 'p/:id/:registrationId',\n lazy: () => import('./pages/PaymentPage'),\n },\n {\n path: 'p/success',\n loader: paymentResultLoader,\n element: <>loading...,\n },\n {\n path: 'p/cancel',\n loader: paymentResultLoader,\n element: <>loading...,\n },\n {\n path: 'r/:id/:registrationId/cancel',\n element: ,\n },\n {\n path: 'r/:id/:registrationId/confirm',\n element: ,\n },\n {\n path: 'r/:id/:registrationId/edit',\n element: ,\n },\n {\n path: 'r/:id/:registrationId/saved',\n element: ,\n },\n {\n path: 'r/:id/:registrationId',\n element: ,\n },\n ],\n },\n {\n path: 'r/:id/:registrationId/invitation',\n lazy: () => import('./pages/RegistrationInvitation'),\n errorElement: ,\n },\n {\n path: Path.login,\n lazy: () => import('./pages/LoginPage'),\n errorElement: ,\n },\n { path: Path.logout, element: , errorElement: },\n {\n path: Path.admin.root,\n lazy: async () => ({\n Component: (await import(/* webpackChunkName: \"admin\" */ './pages/admin/AdminHomePage')).default,\n }),\n errorElement: ,\n children: [\n {\n index: true,\n element: ,\n },\n {\n path: Path.admin.events,\n lazy: async () => ({\n Component: (await import(/* webpackChunkName: \"admin\" */ './pages/admin/EventListPage')).default,\n }),\n },\n {\n path: Path.admin.newEvent,\n lazy: async () => ({\n Component: (await import(/* webpackChunkName: \"admin\" */ './pages/admin/EventCreatePage')).default,\n }),\n },\n {\n path: Path.admin.editEvent(':id'),\n lazy: async () => ({\n Component: (await import(/* webpackChunkName: \"admin\" */ './pages/admin/EventEditPage')).default,\n }),\n },\n {\n path: Path.admin.viewEvent(':id'),\n lazy: async () => ({\n Component: (await import(/* webpackChunkName: \"admin\" */ './pages/admin/EventViewPage')).default,\n }),\n },\n {\n path: Path.admin.orgs,\n lazy: async () => ({\n Component: (await import(/* webpackChunkName: \"admin\" */ './pages/admin/OrganizerListPage')).default,\n }),\n },\n {\n path: Path.admin.officials,\n lazy: async () => ({\n Component: (await import(/* webpackChunkName: \"admin\" */ './pages/admin/OfficialListPage')).default,\n }),\n },\n {\n path: Path.admin.users,\n lazy: async () => ({\n Component: (await import(/* webpackChunkName: \"admin\" */ './pages/admin/UsersPage')).default,\n }),\n },\n {\n path: Path.admin.judges,\n lazy: async () => ({\n Component: (await import(/* webpackChunkName: \"admin\" */ './pages/admin/JudgeListPage')).default,\n }),\n },\n {\n path: Path.admin.eventTypes,\n lazy: async () => ({\n Component: (await import(/* webpackChunkName: \"admin\" */ './pages/admin/EventTypeListPage')).default,\n }),\n },\n {\n path: Path.admin.emailTemplates,\n lazy: async () => ({\n Component: (await import(/* webpackChunkName: \"admin\" */ './pages/admin/EmailTemplateListPage')).default,\n }),\n },\n ],\n },\n {\n path: Path.admin.startList(':id'),\n lazy: async () => ({\n Component: (await import(/* webpackChunkName: \"admin\" */ './pages/admin/StartListPage')).default,\n }),\n errorElement: ,\n },\n {\n path: Path.startList(':id'),\n loader: startListLoader,\n element: ,\n errorElement: ,\n },\n {\n path: 'support',\n element: ,\n },\n {\n path: 'terms',\n element: ,\n },\n // Move users with old bookmarks to front page\n {\n path: 'frmEtusivu.aspx',\n element: ,\n },\n {\n path: 'frmKoekalenteri.aspx',\n element: ,\n },\n {\n path: 'frmKalenteri.aspx',\n element: ,\n },\n]\n\nexport default routes\n","import type { SnackbarKey } from 'notistack'\n\nimport { Suspense, useCallback } from 'react'\nimport { createBrowserRouter, RouterProvider } from 'react-router-dom'\nimport { Authenticator } from '@aws-amplify/ui-react'\nimport { createTheme, ThemeProvider } from '@mui/material/styles'\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFnsV3'\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider'\nimport { Amplify } from 'aws-amplify'\nimport { ConfirmProvider } from 'material-ui-confirm'\nimport { SnackbarProvider } from 'notistack'\nimport { useRecoilValue } from 'recoil'\n\nimport { reportError } from './lib/client/error'\nimport SnackbarCloseButton from './pages/components/SnackbarCloseButton'\nimport { LoadingPage } from './pages/LoadingPage'\nimport { languageAtom } from './pages/recoil'\nimport { AWSConfig } from './amplify-env'\nimport { locales, muiLocales } from './i18n'\nimport routes from './routes'\n\ntry {\n Amplify.configure(AWSConfig)\n} catch (e) {\n reportError(e)\n}\n\nconst router = createBrowserRouter(routes)\n\nfunction App() {\n const language = useRecoilValue(languageAtom)\n const closeAction = useCallback((snackbarKey: SnackbarKey) => , [])\n\n return (\n createTheme(outerTheme, muiLocales[language])}>\n \n \n \n \n }>\n \n \n \n \n \n \n \n )\n}\n\nexport default App\n","import { StrictMode } from 'react'\nimport { createRoot } from 'react-dom/client'\nimport { ThemeProvider } from '@mui/material'\nimport CssBaseline from '@mui/material/CssBaseline'\nimport StyledEngineProvider from '@mui/material/StyledEngineProvider'\nimport { RecoilEnv, RecoilRoot } from 'recoil'\n\nimport './i18n'\n\nimport theme from './assets/Theme'\nimport { isDevEnv } from './lib/env'\nimport App from './App'\n\nimport './index.css'\n\nconst container = document.getElementById('root')\n\nif (!container) {\n throw new Error('root element not found!')\n}\n\nif (isDevEnv()) {\n // Recoil: disable \"duplicate atom key\" checking / logging in development. (Tests will log these)\n RecoilEnv.RECOIL_DUPLICATE_ATOM_KEY_CHECKING_ENABLED = false\n}\n\nconst root = createRoot(container)\nroot.render(\n \n \n \n \n \n \n \n \n \n \n)\n","import { rum } from './rum'\n\nexport const reportError = (e: unknown) => {\n const r = rum()\n if (r) {\n r.recordError(e)\n } else {\n console.error('reportError', e)\n }\n}\n","import { AwsRum } from 'aws-rum-web'\n\nimport pkg from '../../../package.json'\nimport { RUM_APPLICATION_ID, RUM_CONFIG, RUM_REGION } from '../../amplify-env'\n\nlet awsRum: AwsRum | undefined\n\nexport const rum = (): AwsRum | undefined => {\n if (RUM_APPLICATION_ID && !awsRum) {\n try {\n awsRum = new AwsRum(RUM_APPLICATION_ID, pkg.version, RUM_REGION, RUM_CONFIG)\n } catch (e) {\n console.error(e)\n }\n }\n\n return awsRum\n}\n","export const isDevEnv = () => process.env.NODE_ENV === 'development' && typeof jest === 'undefined'\n\nexport const isTestEnv = () => process.env.NODE_ENV === 'test' || typeof jest !== 'undefined'\n\nexport const isProdEnv = () => process.env.NODE_ENV === 'production'\n","import type {\n ConfirmedEvent,\n DogEvent,\n JsonDogEvent,\n RegistrationClass,\n RegistrationDate,\n RegistrationTime,\n SanitizedJsonPublicDogEvent,\n SanitizedPublicConfirmedDogEvent,\n SanitizedPublicDogEvent,\n} from '../types'\n\nimport { addDays, differenceInDays, eachDayOfInterval, isSameDay, nextSaturday, sub } from 'date-fns'\n\nimport { zonedStartOfDay } from '../i18n/dates'\n\nimport { unique } from './utils'\n\nconst EntryStartWeeks = 6\nconst EntryEndWeeks = 3\n\nexport const defaultEntryStartDate = (eventStartDate: Date) => sub(eventStartDate, { weeks: EntryStartWeeks })\nexport const defaultEntryEndDate = (eventStartDate: Date) => sub(eventStartDate, { weeks: EntryEndWeeks })\n\nexport const newEventStartDate = zonedStartOfDay(nextSaturday(addDays(Date.now(), 90)))\nexport const newEventEntryStartDate = defaultEntryStartDate(newEventStartDate)\nexport const newEventEntryEndDate = defaultEntryEndDate(newEventStartDate)\n\nexport const isDetaultEntryStartDate = (date: Date | undefined, eventStartDate: Date) =>\n !date || isSameDay(defaultEntryStartDate(eventStartDate), date)\nexport const isDetaultEntryEndDate = (date: Date | undefined, eventStartDate: Date) =>\n !date || isSameDay(defaultEntryEndDate(eventStartDate), date)\n\nexport const getEventDays = ({ startDate, endDate }: Pick) =>\n eachDayOfInterval({\n start: startDate,\n end: endDate,\n })\n\nexport const getUniqueEventClasses = ({ classes }: Pick) =>\n unique(classes?.map((c) => c?.class) ?? []).filter(Boolean)\n\nexport const getEventClassesByDays = (event: Pick) =>\n getEventDays(event).map((day) => ({\n day,\n classes: event.classes?.filter((c) => isSameDay(c.date ?? event.startDate, day)) ?? [],\n }))\n\nexport const eventRegistrationDateKey = (rd: RegistrationDate) => rd.date.toISOString().slice(0, 10) + '-' + rd.time\n\nexport function sanitizeDogEvent(event: JsonDogEvent): SanitizedJsonPublicDogEvent\nexport function sanitizeDogEvent(event: ConfirmedEvent): SanitizedPublicConfirmedDogEvent\nexport function sanitizeDogEvent(event: DogEvent): SanitizedPublicDogEvent\nexport function sanitizeDogEvent(\n event: DogEvent | JsonDogEvent\n): SanitizedPublicDogEvent | SanitizedJsonPublicDogEvent {\n const {\n createdBy,\n deletedAt,\n deletedBy,\n headquarters,\n kcId,\n invitationAttachment,\n modifiedBy,\n secretary,\n official,\n ...publicFields\n } = event\n\n return publicFields\n}\n\nconst groupDates = (dates: RegistrationDate[]): Record =>\n dates.reduce(\n (acc, cur) => {\n if (!cur.time) return acc\n\n const dateValue = cur.date.valueOf()\n const group = acc[dateValue] || (acc[dateValue] = [])\n group.push(cur.time)\n return acc\n },\n {} as Record\n )\n\nconst resolveTimes = (newTimes: RegistrationTime[], oldTimes?: RegistrationTime[]): RegistrationTime[] => {\n // 'kp' is a special group that can not exist with other groups\n if (newTimes.includes('kp')) {\n if (newTimes.length > 1 && oldTimes?.includes('kp')) {\n // for those dates that previously included 'kp' and now include something more, remove 'kp'\n return newTimes.filter((t) => t !== 'kp')\n } else {\n // othervice keep only 'kp'\n return ['kp']\n }\n }\n return newTimes\n}\n\nexport const applyNewGroupsToDogEventClass = (\n { classes }: Pick,\n eventClass: RegistrationClass,\n defaultGroups: RegistrationTime[],\n newDates: RegistrationDate[]\n): Pick => {\n const newByDate = groupDates(newDates)\n const newClasses = classes.map((c) => ({\n ...c,\n groups: c.class === eventClass ? [] : (c.groups ?? defaultGroups),\n }))\n\n for (const [dateString, newTimes] of Object.entries(newByDate)) {\n const dateValue = +dateString\n const nc = newClasses.find((c) => c.class === eventClass && c.date.valueOf() === dateValue)\n if (!nc) continue\n const oc = classes.find((c) => c.class === eventClass && c.date.valueOf() === dateValue)\n nc.groups = resolveTimes(newTimes, oc?.groups)\n }\n\n // for dates that do not have any times selected, use defaults or 'kp' if last removed value vas something else than 'kp'\n for (const nc of newClasses) {\n if (!nc.groups.length) {\n if (\n classes\n .find((c) => c.class === nc.class && c.date.valueOf() === nc.date.valueOf())\n ?.groups?.filter((t) => t !== 'kp').length\n )\n nc.groups = ['kp']\n else nc.groups = [...defaultGroups]\n }\n }\n\n return { classes: newClasses, dates: undefined }\n}\n\nexport const applyNewGroupsToDogEventDates = (\n { dates, startDate, endDate }: Pick,\n defaultGroups: RegistrationTime[],\n newDates: RegistrationDate[]\n): Pick => {\n const dateValues = getEventDays({ startDate, endDate }).map((date) => date.valueOf())\n const oldByDate = groupDates(dates ?? [])\n const newByDate = groupDates(newDates)\n const finalDates: RegistrationDate[] = []\n\n for (const [dateString, newTimes] of Object.entries(newByDate)) {\n const dateValue = +dateString\n if (!dateValues.includes(dateValue)) continue\n const date = new Date(dateValue)\n const oldTimes = oldByDate[dateValue]\n\n resolveTimes(newTimes, oldTimes).forEach((time) => finalDates.push({ date, time }))\n }\n // for dates that do not have any times selected, use defaults or 'kp' if last removed value vas something else than 'kp'\n for (const dateValue of dateValues) {\n if (!newByDate[dateValue]?.length) {\n const date = new Date(dateValue)\n if (oldByDate[dateValue]?.filter((t) => t !== 'kp').length) finalDates.push({ date, time: 'kp' })\n else defaultGroups.forEach((time) => finalDates.push({ date, time }))\n }\n }\n\n finalDates.sort((a, b) =>\n a.date.valueOf() === b.date.valueOf()\n ? (a.time?.localeCompare(b.time ?? '') ?? 0)\n : a.date.valueOf() - b.date.valueOf()\n )\n\n return { classes: [], dates: finalDates }\n}\n\nexport const copyDogEvent = (event: DogEvent): DogEvent => {\n const copy = structuredClone(event)\n const origStartDate = event.startDate\n const days = differenceInDays(copy.endDate, copy.startDate)\n\n copy.id = ''\n copy.name = 'Kopio - ' + (copy.name ?? '')\n copy.state = 'draft'\n copy.entries = copy.members = 0\n\n copy.classes.forEach((c) => {\n c.entries = c.members = 0\n if (c.date) {\n c.date = addDays(newEventStartDate, differenceInDays(c.date, origStartDate))\n }\n delete c.state\n })\n\n copy.dates?.forEach((d) => {\n d.date = addDays(newEventStartDate, differenceInDays(d.date, origStartDate))\n })\n\n copy.startDate = newEventStartDate\n copy.endDate = addDays(newEventStartDate, days)\n copy.entryStartDate = newEventEntryStartDate\n copy.entryEndDate = newEventEntryEndDate\n\n delete copy.kcId\n delete copy.entryOrigEndDate\n delete copy.invitationAttachment\n\n return copy\n}\n","import type { TFunction } from 'i18next'\nimport type { PublicJudge } from '../types'\n\nexport const judgeName = (judge: PublicJudge | undefined, t: TFunction) =>\n judge ? judge.name + (judge.foreing && judge.country ? ` (${t(judge.country, { ns: 'country' })})` : '') : ''\n","export function capitalize(s?: string): string {\n return s?.toLowerCase().replace(/(^|[ -])[^ -]/g, (l: string) => l.toUpperCase()) ?? ''\n}\n\nexport function reverseName(name?: string): string {\n const [last = '', first = ''] = name?.split(' ') ?? []\n return `${first} ${last}`.trim()\n}\n\nexport const splitName = (name?: string): { firstName: string; lastName: string } => {\n const parts = name?.trim().split(' ').filter(Boolean)\n const lastName = parts?.pop()?.trim() ?? ''\n const firstName = parts?.shift()?.trim() ?? ''\n\n return { firstName, lastName }\n}\n","import type { Registration } from '../types'\n\nimport { capitalize } from '../lambda/lib/string'\n\nexport const PROVIDER_NAMES: Record = {\n 'apple-pay': 'Apple Pay',\n 'danske-business': 'Danske B2B',\n 'email refund': 'Sähköposti + tilisiirto',\n 'nordea-business': 'Nordea B2B',\n 'op-tililuotto': 'OP Tililuotto',\n aktia: 'Aktia',\n alandsbanken: 'Ålandsbanken',\n alisa: 'Alisa Yrityslasku',\n amex: 'American Express',\n collectorb2b: 'Walley B2B',\n collectorb2c: 'Walley',\n creditcard: 'Visa / Mastercard',\n handelsbanken: 'Handkesbanken',\n jousto: 'Jousto',\n mobilepay: 'MobilePay',\n nordea: 'Nordea',\n omasp: 'OmaSP',\n oplasku: 'OP Lasku',\n osuuspankki: 'OP',\n paypal: 'PayPal',\n pivo: 'Pivo',\n pop: 'POP Pankki',\n saastopankki: 'Säästöpankki',\n siirto: 'Siirto',\n spankki: 'S-Pankki',\n}\n\nconst hasName = (provider?: string): provider is keyof typeof PROVIDER_NAMES => !!provider && provider in PROVIDER_NAMES\n\nexport const getProviderName = (provider?: string) =>\n hasName(provider) ? PROVIDER_NAMES[provider] : capitalize(provider ?? '')\n\nexport const getPaymentStatus = (registration: Pick) => {\n if (registration.paymentStatus === 'SUCCESS') return 'paymentStatus.success'\n if (registration.paymentStatus === 'PENDING') return 'paymentStatus.pending'\n return 'paymentStatus.missing'\n}\n","import type { ParseKeys, TFunction } from 'i18next'\nimport type { BreedCode, PublicDogEvent } from '../types'\n\nimport { unique } from './utils'\n\nexport interface Priority {\n group: Extract, `priorityGroup.${string}`>\n name: Extract, `priority.${string}`> | `breed:${ParseKeys<'breed'>}`\n value: string\n}\n\nexport const PRIORITY_MEMBER = 'member'\nexport const PRIORITY_INVITED = 'invited'\nexport const PRIORIZED_BREED_CODES: BreedCode[] = ['110', '111', '121', '122', '263', '312']\n\nexport const PRIORITY: Priority[] = [\n { group: 'priorityGroup.members', name: 'priority.members', value: 'member' },\n { group: 'priorityGroup.breed', name: 'breed:110', value: '110' },\n { group: 'priorityGroup.breed', name: 'breed:111', value: '111' },\n { group: 'priorityGroup.breed', name: 'breed:121', value: '121' },\n { group: 'priorityGroup.breed', name: 'breed:122', value: '122' },\n { group: 'priorityGroup.breed', name: 'breed:263', value: '263' },\n { group: 'priorityGroup.breed', name: 'breed:312', value: '312' },\n { group: 'priorityGroup.invited', name: 'priority.invited', value: 'invited' },\n]\n\nexport const priorityValuesToPriority = (values: Partial = []) => {\n const result: Priority[] = []\n if (!Array.isArray(values)) return result\n\n for (const value of unique(values)) {\n const priority = PRIORITY.find((p) => p.value === value)\n if (priority) {\n result.push(priority)\n }\n }\n return result\n}\n\nexport const getPrioritySort =\n (t: TFunction<['translation', 'breed']>) =>\n (a: Priority, b: Priority): number => {\n const group = t(a.group).localeCompare(t(b.group))\n return group === 0 ? t(a.name).localeCompare(t(b.name)) : group\n }\n","import type { Language } from '../types'\nimport type { fi } from './locales'\n\nimport i18n from 'i18next'\n\nimport { i18nInit } from './config'\nimport { locales } from './dates'\nimport { registerFormatters } from './formatters'\n\nexport { locales }\nexport { i18n }\nexport type { Language }\nexport type ValidationErrorKey = typeof fi.validation\n\ni18n.init(i18nInit).catch((reason) => console.error(reason))\n\n// additional formats\nregisterFormatters(i18n)\n","import type { TFunction } from 'i18next'\nimport type {\n DogEvent,\n JsonConfirmedEvent,\n JsonRegistration,\n JsonRegistrationGroup,\n PublicDogEvent,\n Registration,\n RegistrationTemplateContext,\n} from '../types'\n\nimport { diff } from 'deep-object-diff'\n\nimport { i18n } from '../i18n/lambda'\n\nimport { PRIORITY_INVITED, PRIORITY_MEMBER } from './priority'\n\nexport const GROUP_KEY_CANCELLED = 'cancelled'\nexport const GROUP_KEY_RESERVE = 'reserve'\n\nexport const NOME_B_CH_qualification_start_date = new Date('2023-08-17T21:00:00Z') // TODO: get this date from last NOME-B SM event\n\nconst REFUNDABLE_GROUP_KEYS = [GROUP_KEY_CANCELLED, GROUP_KEY_RESERVE]\n\ntype RegistrationPriorityFields = Pick & {\n owner?: Pick\n handler?: Pick\n dog?: Pick\n qualifyingResults?: Registration['qualifyingResults'] | JsonRegistration['qualifyingResults']\n}\n\ntype PriorityCheckFn = (\n event: Partial>,\n registration: RegistrationPriorityFields\n) => T\n\nconst hasMembershipPriority: PriorityCheckFn = (event, registration) =>\n Boolean(\n event.priority?.includes(PRIORITY_MEMBER) && (registration.handler?.membership || registration.owner?.membership)\n )\n\nconst hasInvitationPriority: PriorityCheckFn = (event, registration) =>\n Boolean(event.priority?.includes(PRIORITY_INVITED) && registration.priorityByInvitation)\n\nconst hasBreedPriority: PriorityCheckFn = (event, registration) =>\n Boolean(registration.dog?.breedCode && event.priority?.includes(registration.dog.breedCode))\n\nconst hasNomeBSMPriority: PriorityCheckFn = (event, registration) => {\n if (event.eventType === 'NOME-B SM') {\n const count = registration.qualifyingResults?.reduce((acc, r) => acc + (r.result === 'VOI1' ? 1 : 0), 0) ?? 0\n const kvaDateOrString = registration.qualifyingResults?.find((r) => r.result === 'FI KVA-B')?.date\n const kvaDate = typeof kvaDateOrString === 'string' ? new Date(kvaDateOrString) : kvaDateOrString\n if (count >= 3) return 'b-sm.3'\n if (kvaDate && kvaDate.valueOf() < NOME_B_CH_qualification_start_date.valueOf() && count === 2) return 'b-sm.2'\n }\n return false\n}\n\nexport const hasPriority: PriorityCheckFn = (event, registration) => {\n if (hasMembershipPriority(event, registration)) {\n if (registration.handler?.membership && registration.owner?.membership) return true\n return 0.5\n }\n if (\n hasInvitationPriority(event, registration) ||\n hasBreedPriority(event, registration) ||\n hasNomeBSMPriority(event, registration)\n ) {\n return true\n }\n return false\n}\n\nexport const priorityDescriptionKey: PriorityCheckFn<\n 'member' | 'invited' | 'breed' | 'b-sm.3' | 'b-sm.2' | undefined\n> = (event, registration) => {\n if (hasMembershipPriority(event, registration)) return PRIORITY_MEMBER\n\n if (hasInvitationPriority(event, registration)) return PRIORITY_INVITED\n\n if (hasBreedPriority(event, registration)) return 'breed'\n\n const nomeBSMPriority = hasNomeBSMPriority(event, registration)\n\n if (nomeBSMPriority) return nomeBSMPriority\n}\n\nexport type SortableRegistration = Pick\n\nconst byTimeAndNumber = (a: T, b: T): number =>\n a.group?.time === b.group?.time\n ? (a.group?.number ?? 999) - (b.group?.number ?? 999)\n : (a.group?.time ?? '').localeCompare(b.group?.time ?? '')\n\nconst byClassTimeAndNumber = (a: T, b: T): number =>\n (a.class ?? '') === (b.class ?? '') ? byTimeAndNumber(a, b) : (a.class ?? '').localeCompare(b.class ?? '')\n\nexport const sortRegistrationsByDateClassTimeAndNumber = (a: T, b: T): number =>\n a.group?.date === b.group?.date\n ? byClassTimeAndNumber(a, b)\n : (a.group?.date ?? '').localeCompare(b.group?.date ?? '')\n\nexport const getRegistrationNumberingGroupKey = (\n reg: Pick\n) => {\n const classOrType = reg.class ?? reg.eventType\n if (reg.cancelled) {\n return `${GROUP_KEY_CANCELLED}-${classOrType}`\n }\n if (reg.group?.date) {\n return 'participants'\n }\n return `${GROUP_KEY_RESERVE}-${classOrType}`\n}\n\nexport const getRegistrationGroupKey = (\n reg: Pick\n) => {\n if (reg.cancelled) {\n return GROUP_KEY_CANCELLED\n }\n return reg.group?.key ?? GROUP_KEY_RESERVE\n}\n\nexport const canRefund = (\n reg: Pick\n): boolean =>\n (reg.paidAmount ?? 0) > (reg.refundAmount ?? 0) && REFUNDABLE_GROUP_KEYS.includes(getRegistrationGroupKey(reg))\n\nexport const getRegistrationEmailTemplateData = (\n registration: JsonRegistration | Registration,\n confirmedEvent: JsonConfirmedEvent | DogEvent,\n origin: string | undefined,\n context: RegistrationTemplateContext,\n text: string | undefined,\n t: TFunction,\n previousGroup?: JsonRegistrationGroup\n) => {\n const eventDate = t('dateFormat.datespan', { start: confirmedEvent.startDate, end: confirmedEvent.endDate })\n const reserveText = t(`registration.reserveChoises.${registration.reserve || 'ANY'}`)\n const dogBreed = registration.dog.breedCode ? t(`${registration.dog.breedCode}`, { ns: 'breed' }) : ''\n const regDates = registration.dates\n .map((d) => t('dateFormat.short', { date: d.date }) + (d.time ? ' ' + t(`registration.time.${d.time}`) : ''))\n .join(', ')\n const link = `${origin}/r/${registration.eventId}/${registration.id}`\n const paymentLink = `${origin}/p/${registration.eventId}/${registration.id}`\n const qualifyingResults = registration.qualifyingResults.map((r) => ({\n ...r,\n date: t('dateFormat.date', { date: r.date }),\n }))\n\n // Group information. Use previous group when provided.\n const group = previousGroup ?? registration.group\n const groupDate = group?.date ? t('dateFormat.wdshort', { date: group.date }) : ''\n const groupTime = group?.time ? t(`registration.timeLong.${group.time}`) : ''\n const groupNumber = group?.number ?? '?'\n\n const invitationLink = `${origin}/r/${registration.eventId}/${registration.id}/invitation`\n const cancelReason = isPredefinedReason(registration.cancelReason)\n ? t(`registration.cancelReason.${registration.cancelReason}`)\n : (registration.cancelReason ?? '')\n\n return {\n subject: t('registration.email.subject', { context, defaultValue: '' }),\n title: t('registration.email.title', { context, defaultValue: '' }),\n dogBreed,\n link,\n paymentLink,\n event: confirmedEvent,\n eventDate,\n invitationLink,\n qualifyingResults,\n reg: registration,\n regDates,\n reserveText,\n groupDate,\n groupTime,\n groupNumber,\n text,\n origin,\n cancelReason,\n }\n}\n\nexport const getRegistrationChanges = (existing: JsonRegistration, data: JsonRegistration) => {\n const t = i18n.getFixedT('fi')\n const changes: Partial = diff(existing, data)\n console.debug('Audit changes', changes)\n const keys = ['class', 'dog', 'breeder', 'owner', 'handler', 'qualifyingResults', 'notes'] as const\n const modified: string[] = []\n\n for (const key of keys) {\n if (changes[key]) {\n modified.push(t(`registration.${key}`))\n }\n }\n\n return modified.length ? 'Muutti: ' + modified.join(', ') : ''\n}\n\nexport const isPredefinedReason = (v?: string): v is 'dog-heat' | 'handler-sick' | 'dog-sick' | 'gdpr' =>\n !!v && ['dog-heat', 'handler-sick', 'dog-sick', 'gdpr'].includes(v)\n","import type { AtLeastOne, ConfirmedEvent, DogEvent, KeysOf } from '../types'\n\nexport const isConfirmedEvent = (event?: Partial | null): event is ConfirmedEvent =>\n ['confirmed', 'picked', 'invited', 'started', 'ended', 'completed'].includes(event?.state ?? '')\n\nexport const isDefined = (value: T | undefined): value is T => value !== undefined\n\nexport const keysOf = (o: o) => Object.keys(o) as KeysOf[]\n\nexport const exhaustiveStringTuple =\n () =>\n >(\n ...x: L extends any ? (Exclude extends never ? L : Exclude[]) : never\n ) =>\n x\n","import type {\n DeepPartial,\n EventState,\n JsonValue,\n PublicContactInfo,\n PublicDogEvent,\n RegistrationDate,\n RegistrationTime,\n} from '../types'\n\nimport { eachDayOfInterval, subDays } from 'date-fns'\nimport { diff } from 'deep-object-diff'\n\nimport { zonedEndOfDay, zonedStartOfDay } from '../i18n/dates'\n\ntype EventVitals = Partial>\n\nexport const isValidForEntry = (state?: EventState) => !['draft', 'tentative', 'cancelled'].includes(state ?? '')\n\nexport const isEventUpcoming = ({ startDate }: EventVitals, now = new Date()) => !!startDate && startDate > now\n\nexport const isEntryUpcoming = ({ entryStartDate, state }: EventVitals, now = new Date()) =>\n !!entryStartDate && entryStartDate > now && (isValidForEntry(state) || state === 'tentative')\n\nexport const isEntryOpen = ({ entryStartDate, entryEndDate, state }: EventVitals, now = new Date()) =>\n !!entryStartDate &&\n !!entryEndDate &&\n zonedStartOfDay(entryStartDate) <= now &&\n zonedEndOfDay(entryEndDate) >= now &&\n isValidForEntry(state)\n\nexport const isEntryClosing = (event: EventVitals, now = new Date()) =>\n !!event.entryEndDate &&\n isEntryOpen(event, now) &&\n subDays(event.entryEndDate, 7) <= zonedEndOfDay(now) &&\n isValidForEntry(event.state)\n\nexport const isEntryClosed = ({ startDate, entryEndDate }: EventVitals, now = new Date()) =>\n !!startDate && !!entryEndDate && zonedEndOfDay(entryEndDate) < now && zonedStartOfDay(startDate) > now\n\nexport const isEventOngoing = ({ startDate, endDate, state }: EventVitals, now = new Date()) =>\n !!startDate &&\n !!endDate &&\n zonedStartOfDay(startDate) <= now &&\n zonedEndOfDay(endDate) >= now &&\n isValidForEntry(state) &&\n state !== 'confirmed'\n\nexport const isEventOver = ({ endDate }: EventVitals, now = new Date()) => !!endDate && zonedEndOfDay(endDate) < now\n\nexport const eventDates = (event?: Pick) => {\n if (!event) return []\n return event.classes.length\n ? uniqueDate(event.classes.map((c) => c.date ?? event.startDate))\n : eachDayOfInterval({ start: event.startDate, end: event.endDate })\n}\n\nexport const uniqueClasses = (event?: Pick) =>\n unique((event?.classes ?? []).map((c) => c.class))\n\nexport const placesForClass = (\n event: DeepPartial> | undefined,\n cls: string\n) => {\n if (!event) {\n return 0\n }\n\n return (\n (event.classes ?? []).filter((c) => c.class === cls).reduce((acc, cur) => acc + (Number(cur.places) || 0), 0) ||\n Number(event.places) ||\n 0\n )\n}\n\nexport const uniqueClassDates = (event: PublicDogEvent, cls: string) =>\n cls === event.eventType\n ? eventDates(event)\n : uniqueDate(event.classes.filter((c) => c.class === cls).map((c) => c.date ?? event.startDate))\n\nexport const registrationDates = (event: PublicDogEvent, times: RegistrationTime[], cls?: string | null) =>\n (cls ? uniqueClassDates(event, cls) : eventDates(event)).flatMap((date) =>\n times.map((time) => ({ date, time }))\n )\n\nexport const unique = (arr: T[]): T[] => arr.filter((c, i, a) => a.indexOf(c) === i)\n\nexport const uniqueFn = (arr: T[], cmp: (a: T, b: T) => boolean): T[] =>\n arr.filter((c, i, a) => a.findIndex((f) => cmp(f, c)) === i)\n\nexport const uniqueDate = (arr: Date[]) => [...new Set(arr.map((d) => d.valueOf()))].map((v) => new Date(v))\n\nconst DATE_RE = /^\\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2][1-9]|[1-3]0|3[01])$/\nconst TIME_RE = /^(?:[0-1]\\d|2[0-3])(?::[0-6]\\d)(?::[0-6]\\d)?(?:\\.\\d{3})?(?:[+-][0-2]\\d:[0-5]\\d|Z)?$/\n\nexport const isDateString = (value: unknown): value is string => {\n if (typeof value !== 'string') {\n return false\n }\n const [date, time] = value.split('T')\n return DATE_RE.test(date) && TIME_RE.test(time)\n}\n\nfunction dateReviver(_key: string, value: JsonValue): JsonValue | Date {\n if (isDateString(value)) {\n const dateObj = new Date(value)\n if (!isNaN(+dateObj)) {\n return dateObj\n }\n }\n return value\n}\n\nexport const parseJSON = (json: string, reviveDates: boolean = true) =>\n json ? JSON.parse(json, reviveDates ? dateReviver : undefined) : undefined\n\nexport type AnyObject = Record\nexport type EmptyObject = Record\nexport type Entries = {\n [K in keyof T]: [K, T[K]]\n}[keyof T][]\n\nexport const isEmpty = (o: AnyObject): o is EmptyObject => Object.keys(o).length === 0\n\nexport const isObject = (o: unknown): o is AnyObject =>\n o !== null && Object.prototype.toString.call(o) === '[object Object]'\n\nexport const isEmptyObject = (o: unknown): o is EmptyObject => isObject(o) && isEmpty(o)\n\nexport const hasChanges = (a: object | undefined | null, b: object | undefined | null): boolean =>\n !isEmptyObject(diff(a ?? {}, b ?? {}))\n\nexport const clone = (a: T): T => ({ ...a })\n\nexport const merge = (a: T, b: DeepPartial): T => {\n const result = isObject(a) ? clone(a) : ({} as T)\n if (!isObject(b)) {\n return result\n }\n for (const [key, value] of Object.entries(b) as Entries) {\n if (isObject(value)) {\n const old = result[key]\n result[key] = isObject(old) ? merge(old, value) : value\n } else {\n result[key] = value\n }\n }\n return result\n}\n\nexport const printContactInfo = (info?: PublicContactInfo) =>\n [info?.name, info?.phone, info?.email].filter(Boolean).join(', ')\n","import Box from '@mui/material/Box'\nimport CircularProgress from '@mui/material/CircularProgress'\n\nexport function LoadingPage() {\n return (\n \n \n \n )\n}\n","import type { DogEvent, EventState, Registration } from '../types'\n\nimport { useMemo } from 'react'\n\nimport { getRegistrationGroupKey, GROUP_KEY_CANCELLED, GROUP_KEY_RESERVE } from '../lib/registration'\nimport { eventDates, placesForClass, unique, uniqueClasses } from '../lib/utils'\n\ninterface EventClassInfoNumbers {\n places: number\n participants: number\n reserve: number\n cancelled: number\n value: number\n invalid: boolean\n}\n\nexport default function useAdminEventRegistrationInfo(event: DogEvent | undefined, registrations: Registration[]) {\n const dates = useMemo(() => eventDates(event), [event])\n\n const registrationClasses = unique(registrations.map((r) => r.class ?? r.eventType))\n\n const reserveByClass: Record = useMemo(() => {\n const byClass: Record = {}\n const allReserve = registrations.filter((r) => getRegistrationGroupKey(r) === GROUP_KEY_RESERVE)\n for (const reg of allReserve) {\n const c = reg.class ?? reg.eventType\n if (!(c in byClass)) {\n byClass[c] = []\n }\n byClass[c].push(reg)\n }\n return byClass\n }, [registrations])\n\n const eventClasses = useMemo(() => {\n const classes = uniqueClasses(event)\n if (event && !classes.length) {\n return [event.eventType]\n }\n return classes\n }, [event])\n\n const missingClasses = useMemo(\n () => registrationClasses.filter((c) => !eventClasses.includes(c)),\n [eventClasses, registrationClasses]\n )\n\n const numbersByClass = useMemo(() => {\n const result: { [key: string]: EventClassInfoNumbers } = {}\n for (const c of eventClasses) {\n const places = placesForClass(event, c)\n const classRegs = registrations.filter((r) => (r.class ?? r.eventType) === c)\n const regs = classRegs.filter((r) => r.group && !r.cancelled && r.group.key !== GROUP_KEY_RESERVE).length\n const reserve = classRegs.filter((r) => !r.cancelled && (!r.group || r.group.key === GROUP_KEY_RESERVE)).length\n const cancelled = classRegs.filter((r) => r.cancelled).length\n result[c] = {\n places,\n participants: regs,\n reserve,\n cancelled,\n value: places ? Math.round(100 * (regs / places)) : 0,\n invalid: places > 0 && regs > places,\n }\n }\n return result\n }, [registrations, event, eventClasses])\n\n const selectedByClass = useMemo(() => {\n const byClass: Record = {}\n const allSelected = registrations.filter(\n (r) => !r.cancelled && r.group && r.group.key !== GROUP_KEY_RESERVE && r.group.key !== GROUP_KEY_CANCELLED\n )\n for (const reg of allSelected) {\n const c = reg.class ?? reg.eventType\n if (!(c in byClass)) {\n byClass[c] = []\n }\n byClass[c].push(reg)\n }\n return byClass\n }, [registrations])\n\n const stateByClass = useMemo(() => {\n if (!event) {\n return {}\n }\n const byClass: Record = { [event.eventType]: event.state }\n for (const c of event.classes) {\n byClass[c.class] = c.state ?? event.state\n }\n return byClass\n }, [event])\n\n return { dates, eventClasses, missingClasses, reserveByClass, numbersByClass, selectedByClass, stateByClass }\n}\n","import type { PublicDogEvent } from '../types'\n\nimport { eventRegistrationDateKey } from '../lib/event'\n\nimport { useAdminEventRegistrationDates } from './useAdminEventRegistrationDates'\n\nexport const useAdminEventRegistrationGroups = (\n event: Pick & Partial>,\n eventClass?: string\n) => {\n const dates = useAdminEventRegistrationDates(event, eventClass)\n\n return dates.map((date) => ({ ...date, key: eventRegistrationDateKey(date), number: 0 }))\n}\n","export const NullComponent = () => null\n","import type { PublicDogEvent, Registration, RegistrationGroupInfo } from '../../../../types'\n\nimport { useSnackbar } from 'notistack'\nimport { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil'\n\nimport { createRefund } from '../../../../api/payment'\nimport {\n getRegistrationTransactions,\n putAdminRegistration,\n putAdminRegistrationNotes,\n putRegistrationGroups,\n} from '../../../../api/registration'\nimport { reportError } from '../../../../lib/client/error'\nimport { GROUP_KEY_CANCELLED } from '../../../../lib/registration'\nimport { idTokenAtom } from '../../../recoil'\nimport { adminEventSelector } from '../events'\n\nimport { adminBackgroundActionsRunningAtom } from './atoms'\nimport { adminEventRegistrationsSelector } from './selectors'\n\nexport const useAdminRegistrationActions = (eventId: string) => {\n const [eventRegistrations, setEventRegistrations] = useRecoilState(adminEventRegistrationsSelector(eventId))\n const [event, setEvent] = useRecoilState(adminEventSelector(eventId))\n const setBackgroundActionsRunning = useSetRecoilState(adminBackgroundActionsRunningAtom)\n const token = useRecoilValue(idTokenAtom)\n const { enqueueSnackbar } = useSnackbar()\n\n const updateAdminRegistration = (saved: Registration) => {\n const regs = [...eventRegistrations]\n const index = regs.findIndex((r) => r.id === saved.id)\n const insert = index === -1\n regs.splice(insert ? regs.length : index, insert ? 0 : 1, saved)\n setEventRegistrations([...regs])\n }\n\n return {\n async save(reg: Registration) {\n if (!token) throw new Error('missing token')\n const regWithOverrides = {\n ...reg,\n handler: reg.ownerHandles ? { ...reg.owner } : reg.handler,\n payer: reg.ownerPays ? { ...reg.owner } : reg.payer,\n }\n const saved = await putAdminRegistration(regWithOverrides, token)\n updateAdminRegistration(saved)\n return saved\n },\n\n update(updated: Registration[]) {\n const regs = [...eventRegistrations]\n for (const reg of updated) {\n const index = regs.findIndex((r) => r.id === reg.id)\n const insert = index === -1\n regs.splice(insert ? regs.length : index, insert ? 0 : 1, reg)\n }\n setEventRegistrations([...regs])\n },\n\n async cancel(eventId: string, id: string, cancelReason: string, number: number) {\n const reg = eventRegistrations.find((r) => r.id === id)\n if (!reg) throw new Error('unexpected error occured')\n\n await this.saveGroups(eventId, [\n { eventId, id, group: { key: GROUP_KEY_CANCELLED, number }, cancelled: true, cancelReason },\n ])\n },\n\n async saveGroups(eventId: string, groups: RegistrationGroupInfo[]) {\n try {\n if (!token) throw new Error('missing token')\n\n // early update for respinsiveness\n const regs = [...eventRegistrations]\n for (const group of groups) {\n const index = regs.findIndex((r) => r.id === group.id)\n if (index === -1) continue\n const reg = regs[index]\n regs.splice(index, 1, { ...reg, ...group })\n }\n setEventRegistrations([...regs])\n setBackgroundActionsRunning(true)\n\n const {\n items,\n classes,\n entries,\n invitedOk,\n invitedFailed,\n pickedOk,\n pickedFailed,\n reserveOk,\n reserveFailed,\n cancelledOk,\n cancelledFailed,\n } = await putRegistrationGroups(eventId, groups, token)\n\n if (pickedOk.length) {\n enqueueSnackbar('Koepaikkailmoitus lähetetty onnistuneesti\\n\\n' + pickedOk.join('\\n'), {\n variant: 'success',\n style: { whiteSpace: 'pre-line' },\n })\n }\n if (invitedOk.length) {\n enqueueSnackbar('Koekutsu lähetetty onnistuneesti\\n\\n' + invitedOk.join('\\n'), {\n variant: 'success',\n style: { whiteSpace: 'pre-line' },\n })\n }\n if (reserveOk.length) {\n enqueueSnackbar('Varasijailmoitus lähetetty onnistuneesti\\n\\n' + reserveOk.join('\\n'), {\n variant: 'success',\n style: { whiteSpace: 'pre-line' },\n })\n }\n if (cancelledOk.length) {\n enqueueSnackbar('Peruutusilmoitus lähetetty onnistuneesti\\n\\n' + reserveOk.join('\\n'), {\n variant: 'success',\n style: { whiteSpace: 'pre-line' },\n })\n }\n if (pickedFailed.length) {\n enqueueSnackbar('Koepaikkailmoituksen lähetys epäonnistui 💩\\n\\n' + pickedFailed.join('\\n'), {\n variant: 'success',\n style: { whiteSpace: 'pre-line' },\n })\n }\n if (invitedFailed.length) {\n enqueueSnackbar('Koekutsun lähetys epäonnistui 💩\\n\\n' + invitedFailed.join('\\n'), {\n variant: 'success',\n style: { whiteSpace: 'pre-line' },\n })\n }\n if (pickedFailed.length) {\n enqueueSnackbar('Varasijailmoituksen lähetys epäonnistui 💩\\n\\n' + reserveFailed.join('\\n'), {\n variant: 'success',\n style: { whiteSpace: 'pre-line' },\n })\n }\n if (cancelledFailed.length) {\n enqueueSnackbar('Peruutusilmoitukse lähetys epäonnistui 💩\\n\\n' + reserveFailed.join('\\n'), {\n variant: 'success',\n style: { whiteSpace: 'pre-line' },\n })\n }\n setEventRegistrations(items)\n if (event) {\n setEvent({ ...event, classes, entries })\n }\n setBackgroundActionsRunning(false)\n } catch (e) {\n reportError(e)\n return false\n }\n },\n\n async transactions(eventId: PublicDogEvent['id'], registrationId: Registration['id']) {\n if (!token) throw new Error('missing token')\n\n return getRegistrationTransactions(eventId, registrationId, token)\n },\n\n async refund(reg: Registration, transactionId: string, amount: number) {\n if (!token) throw new Error('missing token')\n\n const result = await createRefund(transactionId, amount, token)\n\n if (result?.status === 'pending' || result?.status === 'ok') {\n updateAdminRegistration({\n ...reg,\n refundAt: new Date().toISOString(),\n refundStatus: result?.status === 'pending' || result.provider === 'email refund' ? 'PENDING' : 'SUCCESS',\n refundAmount: (reg.refundAmount ?? 0) + amount / 100,\n })\n }\n\n return result\n },\n\n async putInternalNotes(\n eventId: Registration['eventId'],\n id: Registration['id'],\n internalNotes: Registration['internalNotes']\n ) {\n if (!token) throw new Error('missing token')\n\n const reg = eventRegistrations.find((r) => r.id === id)\n if (!reg) throw new Error('unexpected error occured')\n\n await putAdminRegistrationNotes({ eventId, id, internalNotes }, token)\n updateAdminRegistration({ ...reg, internalNotes })\n },\n }\n}\n","import type { Registration, RegistrationGroup, RegistrationGroupInfo } from '../../../../types'\nimport type { DragItem } from './dropableDataGrid/DragableRow'\n\nimport { GROUP_KEY_CANCELLED, GROUP_KEY_RESERVE } from '../../../../lib/registration'\n\nexport const determineChangesFromDrop = (\n item: DragItem,\n targetGroup: RegistrationGroup,\n reg: Pick,\n regs: Pick[],\n canArrangeReserve: boolean\n): RegistrationGroupInfo[] => {\n // by default, assume new location is last in group\n const newGroup = { ...targetGroup, number: regs.length + 1 }\n\n if (item.groupKey !== newGroup.key) {\n // move from list to another (always last)\n return [{ eventId: reg.eventId, id: reg.id, group: newGroup, cancelled: newGroup.key === GROUP_KEY_CANCELLED }]\n }\n\n if (targetGroup.key === GROUP_KEY_CANCELLED || (targetGroup.key === GROUP_KEY_RESERVE && !canArrangeReserve)) {\n // user can not re-order items in cancelled or reserve groups\n delete item.targetGroupKey\n return []\n }\n\n if (item.targetGroupKey && item.targetGroupKey === item.groupKey) {\n const targetIndex = item.targetIndex ?? 0\n // if moving down, substract 1 (bevause this reg is not included in regs)\n const directionModifier = item.index < targetIndex ? -1 : 0\n // modifier based on if hovered above or below the target\n const hoverModifier = item.position === 'before' ? -0.5 : 0.5\n // final position\n const pos = targetIndex + directionModifier\n // take the number from registration in that position\n newGroup.number = regs[pos]?.group?.number ?? 0\n\n // moved as last, set number to last + 1\n if (item.position === 'after' && pos > 0 && newGroup.number === 0) {\n newGroup.number = (regs[regs.length - 1]?.group?.number ?? 0) + 1\n }\n\n // apply 0.5 modifier based on position. backend will fix the numbers.\n return [\n {\n eventId: reg.eventId,\n id: reg.id,\n group: { ...newGroup, number: newGroup.number + hoverModifier },\n },\n ]\n }\n\n return []\n}\n","import type { GridRowId, GridRowProps } from '@mui/x-data-grid'\nimport type { Identifier, XYCoord } from 'dnd-core'\n\nimport { useRef } from 'react'\nimport { useDrag, useDragDropManager, useDrop } from 'react-dnd'\nimport { GridRow } from '@mui/x-data-grid'\n\nexport interface DragItem {\n id: GridRowId\n index: number\n groupKey?: string\n groups: string[]\n targetGroupKey?: string\n targetIndex?: number\n position?: 'before' | 'after'\n}\n\ninterface Props extends GridRowProps {\n readonly groupKey?: string\n}\n\nconst DragableRow = ({ groupKey, ...props }: Props) => {\n const manager = useDragDropManager()\n const ref = useRef(null)\n const [{ handlerId, hovered, position }, drop] = useDrop<\n DragItem,\n void,\n { handlerId: Identifier | null; hovered: boolean; position: 'before' | 'after' | undefined }\n >({\n accept: 'row',\n collect: (monitor) => {\n const item = monitor.getItem()\n return {\n handlerId: monitor.getHandlerId(),\n hovered: monitor.isOver() && !!item && !!item.targetGroupKey,\n position: item?.position,\n }\n },\n hover(item: DragItem, monitor) {\n if (!ref.current) {\n return\n }\n const sameGroup = item.groupKey === groupKey\n const dragIndex = item.index\n const hoverIndex = props.index\n\n if (dragIndex === hoverIndex && sameGroup) {\n delete item.targetGroupKey\n return\n }\n\n let position: 'before' | 'after' = 'before'\n if (sameGroup && dragIndex === hoverIndex - 1) {\n position = 'after'\n } else if (sameGroup && dragIndex === hoverIndex + 1) {\n position = 'before'\n } else {\n const hoverBoundingRect = ref.current.getBoundingClientRect()\n const mod = item.position === 'before' ? 3 : item.position === 'after' ? -3 : 0\n const hoverMiddleY = (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2 + mod\n const clientOffset = monitor.getClientOffset()\n const hoverClientY = (clientOffset as XYCoord).y - hoverBoundingRect.top\n position = hoverClientY < hoverMiddleY ? 'before' : 'after'\n }\n item.targetGroupKey = groupKey\n item.targetIndex = hoverIndex\n if (item.position !== position) {\n item.position = position\n manager.getActions().hover([])\n }\n },\n })\n\n const [{ opacity }, drag] = useDrag({\n type: 'row',\n item: { id: props.rowId, groups: props.row?.dropGroups, index: props.index, groupKey: groupKey },\n collect: (monitor) => ({\n opacity: monitor.isDragging() ? 0.4 : 1,\n }),\n })\n\n drag(drop(ref))\n\n return (\n \n \n \n )\n}\n\nexport default DragableRow\n","import type { DataGridProps } from '@mui/x-data-grid'\nimport type { DropTargetMonitor } from 'react-dnd'\nimport type { DragItem } from './dropableDataGrid/DragableRow'\n\nimport { useMemo } from 'react'\nimport { useDrop } from 'react-dnd'\n\nimport StyledDataGrid from '../../../components/StyledDataGrid'\n\nimport DragableRow from './dropableDataGrid/DragableRow'\n\ninterface Props extends DataGridProps {\n readonly canDrop?: (item?: DragItem) => boolean\n readonly onDrop?: (item: DragItem) => any\n readonly onReject?: (item: DragItem) => any\n readonly group?: string\n readonly flex?: number\n}\n\ninterface DragCollect {\n canDrop: boolean\n isOver: boolean\n isDragging: boolean\n}\n\nconst DropableDataGrid = (props: Props) => {\n const getCanDrop = (item?: DragItem) =>\n (!props.group || !!item?.groups.includes(props.group)) && props.canDrop?.(item) !== false\n const [{ canDrop, isOver, isDragging }, ref] = useDrop(\n () => ({\n accept: 'row',\n collect: (monitor) => {\n const item = monitor.getItem()\n return {\n isOver: monitor.isOver(),\n canDrop: getCanDrop(item),\n isDragging: item !== null,\n }\n },\n drop: (item: DragItem, monitor: DropTargetMonitor) => {\n if (getCanDrop(item)) {\n if (item.targetGroupKey && item.targetGroupKey !== (props.group ?? 'reserve')) {\n // clean up possible stale move information from different group\n delete item.targetGroupKey\n }\n props.onDrop?.(item)\n } else {\n props.onReject?.(item)\n }\n },\n }),\n [props.onDrop]\n )\n\n const className = useMemo(() => {\n const result = []\n if (canDrop) {\n result.push('accept')\n } else if (isDragging) {\n result.push('reject')\n }\n if (isOver) {\n result.push('over')\n }\n return result.join(' ')\n }, [canDrop, isDragging, isOver])\n\n return (\n
\n
\n )\n}\n\nexport default DropableDataGrid\n","import type { ReactElement } from 'react'\nimport type { RegistrationDate } from '../../../../../types'\n\nimport { useMemo } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport Tooltip from '@mui/material/Tooltip'\n\ninterface Props {\n readonly children: ReactElement\n readonly selected: RegistrationDate[]\n}\n\nconst GroupColorTooltip = ({ selected, children }: Props) => {\n const { t } = useTranslation()\n const title = useMemo(\n () =>\n selected.length &&\n 'Sopivat ryhmät: ' +\n selected\n .map(\n (s) => t('dateFormat.weekday', { date: s.date }) + (s.time ? ' ' + t(`registration.time.${s.time}`) : '')\n )\n .join(', '),\n [selected, t]\n )\n\n return {children}\n}\n\nexport default GroupColorTooltip\n","import type { RegistrationDate } from '../../../../types'\n\nimport Box from '@mui/material/Box'\nimport Stack from '@mui/material/Stack'\n\nimport { HEADER_HEIGHT } from '../../../../assets/Theme'\n\nimport GroupColorTooltip from './groupColors/GroupColorTooltip'\n\nexport const GROUP_COLORS = ['#2D9CDB', '#BB6BD9', '#F2994A', '#27AE60', '#828282', '#56CCF2']\n\nexport const availableGroups = (dates: Date[]) =>\n dates.reduce((acc, date) => [...acc, { date, time: 'ap' }, { date, time: 'ip' }], [])\n\ninterface Props {\n readonly available: RegistrationDate[]\n readonly disableTooltip?: boolean\n readonly selected: RegistrationDate[]\n}\n\nconst GroupColors = ({ available, selected, disableTooltip = false }: Props) => {\n if (disableTooltip) {\n const selIdx = available.findIndex(\n (dt) => selected[0].date.getTime() === dt.date.getTime() && selected[0].time === dt.time\n )\n return (\n \n )\n }\n return (\n \n \n {available.map((dt, index) => {\n const color = GROUP_COLORS[index % GROUP_COLORS.length]\n const isSelected = !!selected.find((s) => s.date.getTime() === dt.date.getTime() && s.time === dt.time)\n return \n })}\n \n \n )\n}\n\nexport default GroupColors\n","import type { RegistrationDate } from '../../../../types'\n\nimport { useTranslation } from 'react-i18next'\nimport Stack from '@mui/material/Stack'\n\nimport GroupColors from './GroupColors'\n\ninterface Props {\n readonly available: RegistrationDate[]\n readonly group: RegistrationDate\n}\n\nconst GroupHeader = ({ available, group }: Props) => {\n const { t } = useTranslation()\n\n return (\n \n \n \n {t('dateFormat.wdshort', { date: group.date }) +\n (group.time ? ' ' + t(`registration.timeLong.${group.time}`) : '')}\n \n \n )\n}\n\nexport default GroupHeader\n","import Box from '@mui/material/Box'\n\nconst NoRowsOverlay = () => {\n return (\n \n Raahaa osallistujat tähän!\n \n )\n}\n\nexport default NoRowsOverlay\n","import type { Dispatch, SetStateAction } from 'react'\n\nimport InfoOutlined from '@mui/icons-material/InfoOutlined'\nimport FormControl from '@mui/material/FormControl'\nimport FormControlLabel from '@mui/material/FormControlLabel'\nimport Switch from '@mui/material/Switch'\nimport Tooltip from '@mui/material/Tooltip'\n\ninterface Props {\n checked?: boolean\n disabled?: boolean\n onChange?: Dispatch>\n}\n\nconst UnlockArrange = ({ checked, disabled, onChange }: Props) => {\n if (disabled) return null\n\n return (\n \n }\n disableTypography\n label=\"Järjestä varasijoja, vaikka varasijailmoitukset on jo lähetetty\"\n onChange={(e, checked) => onChange?.(checked)}\n sx={{ fontSize: '0.82rem', lineHeight: 1 }}\n />\n \n

\n Jos varasijojen järjestykseen jäi virhe, voit uudelleenjärjestellä varasijoja, vaikka varasijailmoitukset\n on jo lähetetty.\n

\n

Käytä varoen, koska varasijoille olijoille on jo kerrottu heidän varasijansa.

\n

Jos haluat, voit lähettää heille uuden varasijailmoituksen, jossa on päivitetty varasijanumero.

\n \n }\n >\n \n \n
\n )\n}\n\nexport default UnlockArrange\n","const currency = 'EUR'\nconst moneyFormatter = Intl.NumberFormat('fi-FI', { style: 'currency', currency })\nconst moneyCodeFormatter = Intl.NumberFormat('fi-FI', { style: 'currency', currency, currencyDisplay: 'code' })\n\nexport const formatMoney = (amount: number) => moneyFormatter.format(amount)\nexport const formatMoneyWithoutCurrency = (amount: number) =>\n moneyCodeFormatter.format(amount).replace(currency, '').trim()\n","import type { GridColDef } from '@mui/x-data-grid'\nimport type { ReactElement } from 'react'\nimport type { PublicDogEvent, Registration, RegistrationDate } from '../../../../types'\nimport type { TooltipContent } from '../../../components/IconsTooltip'\n\nimport { useMemo } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport CheckOutlined from '@mui/icons-material/CheckOutlined'\nimport CommentOutlined from '@mui/icons-material/CommentOutlined'\nimport DragIndicatorOutlined from '@mui/icons-material/DragIndicatorOutlined'\nimport EditOutlined from '@mui/icons-material/EditOutlined'\nimport ErrorOutlineOutlined from '@mui/icons-material/ErrorOutlineOutlined'\nimport EuroOutlined from '@mui/icons-material/EuroOutlined'\nimport EventBusyOutlined from '@mui/icons-material/EventBusyOutlined'\nimport MarkEmailReadOutlined from '@mui/icons-material/MarkEmailReadOutlined'\nimport PersonOutline from '@mui/icons-material/PersonOutline'\nimport SavingsOutlined from '@mui/icons-material/SavingsOutlined'\nimport SpeakerNotesOutlined from '@mui/icons-material/SpeakerNotesOutlined'\nimport Stack from '@mui/material/Stack'\nimport { GridActionsCellItem } from '@mui/x-data-grid'\n\nimport { formatMoney } from '../../../../lib/money'\nimport { canRefund, hasPriority, isPredefinedReason, priorityDescriptionKey } from '../../../../lib/registration'\nimport { PriorityIcon } from '../../../components/icons/PriorityIcon'\nimport { IconsTooltip } from '../../../components/IconsTooltip'\nimport RankingPoints from '../../../components/RankingPoints'\n\nimport GroupColors from './GroupColors'\n\ninterface RegistrationIconsProps {\n event: PublicDogEvent\n reg: Registration\n}\nconst RegistrationIcons = ({ event, reg }: RegistrationIconsProps) => {\n const { t } = useTranslation()\n const priority = hasPriority(event, reg)\n\n const manualResultCount = useMemo(\n () => reg.qualifyingResults.filter((r) => !r.official).length,\n [reg.qualifyingResults]\n )\n const rankingPoints = useMemo(() => reg.qualifyingResults.reduce((acc, r) => acc + (r.points ?? 0), 0), [reg])\n\n const tooltipContent: TooltipContent[] = useMemo(() => {\n const result: TooltipContent[] = []\n\n if (priority) {\n const key = priorityDescriptionKey(event, reg)\n const descr = key && t(`priorityDescription.${key}`)\n const info50 =\n priority === 0.5 ? (reg.owner.membership ? '(vain omistaja on jäsen)' : '(vain ohjaaja on jäsen)') : ''\n result.push({\n icon: ,\n text: `Ilmoittautuja on etusijalla: ${descr} ${info50}`.trim(),\n })\n }\n if (reg.owner.membership) {\n result.push({\n icon: ,\n text: 'Omistaja on järjestävän yhdistyksen jäsen',\n })\n }\n if (reg.handler.membership) {\n result.push({\n icon: ,\n text: 'Ohjaaja on järjestävän yhdistyksen jäsen',\n })\n }\n if (reg.paidAt) {\n if (reg.refundStatus === 'PENDING') {\n result.push({\n icon: ,\n text: `Palautuksen käsittely on kesken. Palautetaan ${formatMoney(reg.refundAmount ?? 0)}, maksoi ${formatMoney(reg.paidAmount ?? 0)}`,\n })\n } else if (reg.refundAt) {\n result.push({\n icon: ,\n text: `Ilmoittautumismaksua on palautettu. Palautettu ${formatMoney(reg.refundAmount ?? 0)}, maksoi ${formatMoney(reg.paidAmount ?? 0)}`,\n })\n } else {\n result.push({\n icon: ,\n text: `Ilmoittautuja on maksanut ilmoittautumisen: ${formatMoney(reg.paidAmount ?? 0)}`,\n })\n }\n }\n if (reg.confirmed) {\n result.push({\n icon: ,\n text: 'Ilmoittautuja on vahvistanut ottavansa koepaikan vastaan',\n })\n }\n if (reg.invitationRead) {\n result.push({\n icon: ,\n text: 'Ilmoittautuja on kuitannut koekutsun',\n })\n }\n if (manualResultCount > 0) {\n result.push({\n icon: ,\n text: 'Ilmoittautuja on lisännyt koetuloksia',\n })\n }\n if (reg.notes.trim()) {\n result.push({\n icon: ,\n text: 'Ilmoittautuja on lisännyt lisätietoja',\n })\n }\n if (reg.internalNotes?.trim()) {\n result.push({\n icon: ,\n text: 'Sisäinen kommentti: ' + reg.internalNotes,\n })\n }\n if (reg.internalNotes?.trim()) {\n result.push({\n icon: ,\n text: 'Sisäinen kommentti: ' + reg.internalNotes,\n })\n }\n if (rankingPoints > 0) {\n result.push({\n icon: ,\n text: 'Karsintapisteet: ' + rankingPoints,\n })\n }\n return result\n }, [event, manualResultCount, priority, rankingPoints, reg, t])\n\n return (\n \n \n \n \n {reg.refundAt || reg.refundStatus === 'PENDING' ? (\n \n ) : (\n \n )}\n \n \n \n \n \n \n \n \n )\n}\n\nexport function useClassEntrySelectionColumns(\n available: RegistrationDate[],\n event: PublicDogEvent,\n openEditDialog?: (id: string) => void,\n cancelRegistration?: (id: string) => void,\n refundRegistration?: (id: string) => void\n) {\n const { t } = useTranslation()\n\n return useMemo(() => {\n const entryColumns: GridColDef[] = [\n {\n cellClassName: 'nopad',\n field: 'dates',\n headerName: '',\n width: 56,\n minWidth: 56,\n display: 'flex',\n renderCell: (p) => (\n <>\n \n \n \n ),\n sortable: false,\n },\n {\n align: 'right',\n cellClassName: 'nopad',\n field: 'number',\n headerAlign: 'right',\n headerClassName: 'nopad',\n headerName: '#',\n width: 20,\n minWidth: 20,\n sortable: false,\n valueGetter: (_value, row) => (row.group?.number ? `${row.group.number}.` : ''),\n },\n {\n field: 'dog.name',\n headerName: t('dog.name'),\n width: 250,\n flex: 1,\n sortable: false,\n valueGetter: (_value, row) => row.dog.name,\n },\n {\n field: 'dog.regNo',\n headerName: t('dog.regNo'),\n width: 130,\n sortable: false,\n valueGetter: (_value, row) => row.dog.regNo,\n },\n {\n field: 'dob.breed',\n headerName: t('dog.breed'),\n width: 150,\n sortable: false,\n valueGetter: (_value, row) =>\n row.dog?.breedCode && row.dog?.gender\n ? t(`${row.dog.breedCode}.${row.dog.gender}`, { ns: 'breedAbbr', defaultValue: row.dog.breedCode })\n : '',\n },\n {\n field: 'handler',\n headerName: t('registration.handler'),\n width: 150,\n flex: 1,\n sortable: false,\n valueGetter: (_value, row) => row.handler.name,\n },\n {\n field: 'lastEmail',\n headerName: 'Viesti',\n width: 130,\n flex: 1,\n sortable: false,\n valueGetter: (_value, row) => row.lastEmail ?? '',\n },\n {\n field: 'icons',\n headerName: '',\n width: 200, // icons * 20 + 20 for padding\n align: 'center',\n renderCell: (p) => ,\n sortable: false,\n },\n {\n cellClassName: 'nopad',\n field: 'actions',\n type: 'actions',\n headerName: '',\n width: 30,\n minWidth: 30,\n sortable: false,\n getActions: (p) =>\n [\n }\n label={t('edit')}\n onClick={() => openEditDialog?.(p.row.id)}\n showInMenu\n />,\n p.row.cancelled ? null : (\n }\n label={t('withdraw')}\n onClick={() => cancelRegistration?.(p.row.id)}\n showInMenu\n />\n ),\n canRefund(p.row) ? (\n }\n label={t('refund')}\n onClick={() => refundRegistration?.(p.row.id)}\n showInMenu\n disabled={(p.row.refundAmount ?? 0) === (p.row.paidAmount ?? 0)}\n />\n ) : null,\n ].filter((a): a is ReactElement => a !== null),\n },\n ]\n\n const participantColumns: GridColDef[] = [...entryColumns]\n\n const cancelledColumns: GridColDef[] = [...participantColumns]\n cancelledColumns.splice(cancelledColumns.length - 2, 0, {\n field: 'cancelReason',\n headerName: 'Perumisen syy',\n width: 150,\n valueFormatter: (v: string) => (isPredefinedReason(v) ? t(`registration.cancelReason.${v}`) : v),\n })\n\n return { cancelledColumns, entryColumns, participantColumns }\n }, [available, cancelRegistration, event, openEditDialog, refundRegistration, t])\n}\n","import type { GridCallbackDetails, GridCellParams, GridRowSelectionModel, MuiEvent } from '@mui/x-data-grid'\nimport type { Dispatch, SetStateAction } from 'react'\nimport type React from 'react'\nimport type { SetterOrUpdater } from 'recoil'\nimport type { DogEvent, EventClassState, EventState, Registration, RegistrationGroup } from '../../../types'\nimport type { DragItem } from './classEntrySelection/dropableDataGrid/DragableRow'\n\nimport { useCallback, useMemo, useState } from 'react'\nimport { DndProvider } from 'react-dnd'\nimport { HTML5Backend } from 'react-dnd-html5-backend'\nimport withScrolling from 'react-dnd-scrolling'\nimport { useTranslation } from 'react-i18next'\nimport Box from '@mui/material/Box'\nimport Stack from '@mui/material/Stack'\nimport Typography from '@mui/material/Typography'\nimport { isSameDay } from 'date-fns'\nimport { useConfirm } from 'material-ui-confirm'\nimport { useSnackbar } from 'notistack'\n\nimport { useAdminEventRegistrationDates } from '../../../hooks/useAdminEventRegistrationDates'\nimport { useAdminEventRegistrationGroups } from '../../../hooks/useAdminEventRegistrationGroups'\nimport { rum } from '../../../lib/client/rum'\nimport { eventRegistrationDateKey } from '../../../lib/event'\nimport { getRegistrationGroupKey, GROUP_KEY_CANCELLED, GROUP_KEY_RESERVE } from '../../../lib/registration'\nimport { uniqueDate } from '../../../lib/utils'\nimport { NullComponent } from '../../components/NullComponent'\nimport StyledDataGrid from '../../components/StyledDataGrid'\nimport { useAdminRegistrationActions } from '../recoil/registrations/actions'\n\nimport { determineChangesFromDrop } from './classEntrySelection/dnd'\nimport DragableDataGrid from './classEntrySelection/DropableDataGrid'\nimport GroupHeader from './classEntrySelection/GroupHeader'\nimport NoRowsOverlay from './classEntrySelection/NoRowsOverlay'\nimport UnlockArrange from './classEntrySelection/UnlockArrange'\nimport { useClassEntrySelectionColumns } from './classEntrySelection/useClassEntrySectionColumns'\n\ninterface Props {\n readonly event: DogEvent\n readonly eventClass: string\n readonly registrations?: Registration[]\n readonly setOpen?: Dispatch>\n readonly setCancelOpen?: Dispatch>\n readonly setRefundOpen?: Dispatch>\n readonly selectedRegistrationId?: string\n readonly setSelectedRegistrationId?: SetterOrUpdater\n readonly state?: EventClassState | EventState\n}\n\ninterface RegistrationWithGroups extends Registration {\n groups: string[]\n dropGroups: string[]\n}\n\ndeclare module '@mui/x-data-grid' {\n interface ToolbarPropsOverrides {\n available: any // TODO: use proper type\n group: any // TODO: use proper type\n }\n}\n\nconst ScrollDiv = withScrolling('div')\n\nconst listKey = (reg: Registration, eventGroups: RegistrationGroup[]) => {\n const key = getRegistrationGroupKey(reg)\n\n if (key === GROUP_KEY_CANCELLED) return GROUP_KEY_CANCELLED\n\n if (eventGroups.find((eg) => eg.key === key)) {\n return key\n }\n\n return GROUP_KEY_RESERVE\n}\n\nconst ClassEntrySelection = ({\n event,\n eventClass,\n registrations = [],\n setOpen,\n setCancelOpen,\n setRefundOpen,\n selectedRegistrationId,\n setSelectedRegistrationId,\n state,\n}: Props) => {\n const confirm = useConfirm()\n const { t } = useTranslation()\n const { enqueueSnackbar } = useSnackbar()\n const actions = useAdminRegistrationActions(event.id)\n const [unlockArrange, setUnlockArrange] = useState(false)\n\n const handleOpen = useCallback(\n (id: string) => {\n setSelectedRegistrationId?.(id)\n setOpen?.(true)\n },\n [setOpen, setSelectedRegistrationId]\n )\n\n const handleCancel = useCallback(\n (id: string) => {\n setSelectedRegistrationId?.(id)\n setCancelOpen?.(true)\n },\n [setCancelOpen, setSelectedRegistrationId]\n )\n\n const handleRefund = useCallback(\n async (id: string) => {\n setSelectedRegistrationId?.(id)\n setRefundOpen?.(true)\n },\n [setRefundOpen, setSelectedRegistrationId]\n )\n\n const dates = useAdminEventRegistrationDates(event, eventClass)\n\n const { cancelledColumns, entryColumns, participantColumns } = useClassEntrySelectionColumns(\n dates,\n event,\n handleOpen,\n handleCancel,\n handleRefund\n )\n\n const groups = useAdminEventRegistrationGroups(event, eventClass)\n\n const registrationsByGroup: Record = useMemo(() => {\n const byGroup: Record = { cancelled: [], reserve: [] }\n for (const reg of registrations) {\n const key = listKey(reg, groups)\n const regDates = uniqueDate(reg.dates.map((rd) => rd.date))\n byGroup[key] = byGroup[key] ?? [] // make sure the array exists\n byGroup[key].push({\n ...reg,\n groups: reg.dates.map((rd) => eventRegistrationDateKey(rd)),\n dropGroups: groups.filter((g) => regDates.find((d) => !g.date || isSameDay(g.date, d))).map((g) => g.key),\n })\n }\n for (const regs of Object.values(byGroup)) {\n regs.sort((a, b) => (a.group?.number || 999) - (b.group?.number || 999))\n }\n return byGroup\n }, [groups, registrations])\n\n const reserveNotNotified = useMemo(\n () => !registrationsByGroup.reserve.some((r) => r.reserveNotified),\n [registrationsByGroup.reserve]\n )\n const canArrangeReserve = reserveNotNotified || unlockArrange\n\n const handleDrop = (group: RegistrationGroup) => async (item: DragItem) => {\n const reg = registrations.find((r) => r.id === item.id)\n if (!reg) {\n return\n }\n\n if (\n (state === 'picked' || state === 'invited') &&\n group.key !== GROUP_KEY_CANCELLED &&\n group.key !== GROUP_KEY_RESERVE &&\n ((item.targetGroupKey && item.targetGroupKey !== group.key) || item.groupKey !== group.key)\n ) {\n const extra = state === 'invited' ? ' sekä koekutsu' : ''\n try {\n await confirm({\n title: `Olet lisäämässä koiraa ${reg.dog.name} osallistujiin`,\n description: `Kun koirakko on lisätty, koirakolle lähtee vahvistusviesti koepaikasta${extra}. Oletko varma että haluat lisätä koiran ${reg.dog.name} osallistujiin?`,\n confirmationText: 'Lisää osallistujiin',\n cancellationText: t('cancel'),\n })\n } catch {\n return\n }\n }\n\n // make sure the dropped registration is selected, so its intuitive to user\n setSelectedRegistrationId?.(reg.id)\n\n // determine all the other registrations in group\n const regs = registrations.filter((r) => r.group?.key === group.key && r.id !== reg.id)\n // determine changes\n const save = determineChangesFromDrop(item, group, reg, regs, canArrangeReserve)\n\n // send all the updates to backend\n if (save.length) {\n if (save.length === 1 && save[0].cancelled) handleCancel(save[0].id)\n else await actions.saveGroups(reg.eventId, save)\n }\n }\n\n const handleReject = (group: RegistrationGroup) => (item: DragItem) => {\n const reg = registrations.find((r) => r.id === item.id)\n if (!reg) return\n if (getRegistrationGroupKey(reg) === group.key) {\n if (group.key === GROUP_KEY_RESERVE) {\n enqueueSnackbar(`Varasijalla olevia koiria ei voi enää järjestellä, kun varasijailmoituksia on lähetetty`, {\n variant: 'info',\n })\n }\n return\n }\n if (state === 'picked' && group.key === GROUP_KEY_RESERVE) {\n enqueueSnackbar(`Kun koepaikat on vahvistettu, ei koirakkoa voi enää siirtää osallistujista varasijalle.`, {\n variant: 'warning',\n })\n } else {\n console.log(reg.group?.key, group.key, reg.dates)\n rum()?.recordEvent('dnd-group-rejected', {\n eventId: reg.eventId,\n registrationId: reg.id,\n targetGroup: group.key,\n sourceGroup: reg.group?.key,\n regGroups: reg.dates.map((rd) => eventRegistrationDateKey(rd)).join(', '),\n dropGroups: item.groups.join(', '),\n })\n enqueueSnackbar(`Koira ${reg.dog.name} ei ole ilmoittautunut tähän ryhmään`, { variant: 'error' })\n }\n }\n\n const handleSelectionModeChange = useCallback(\n (selection: GridRowSelectionModel, details: GridCallbackDetails) => {\n const value = typeof selection[0] === 'string' ? selection[0] : undefined\n if (value) {\n const reg = registrations.find((r) => r.id === value)\n setSelectedRegistrationId?.(reg?.id)\n }\n },\n [registrations, setSelectedRegistrationId]\n )\n\n const handleCellClick = useCallback(\n async (params: GridCellParams, event: MuiEvent) => {\n if (params.field === 'dog.regNo') {\n event.defaultMuiPrevented = true\n await navigator.clipboard.writeText(params.value as string)\n enqueueSnackbar({\n message: 'Rekisterinumero kopioitu',\n variant: 'info',\n autoHideDuration: 1000,\n anchorOrigin: {\n horizontal: 'center',\n vertical: 'bottom',\n },\n })\n }\n },\n [enqueueSnackbar]\n )\n\n const handleDoubleClick = useCallback(() => setOpen?.(true), [setOpen])\n\n return (\n \n \n Osallistujat {eventClass} {state ? ' - ' + t(`event.states.${state}`) : ''}\n \n {/* column headers only */}\n \n \n \n \n {groups.map((group) => (\n {\n return state !== 'started' || item?.groupKey === GROUP_KEY_RESERVE\n }}\n flex={registrationsByGroup[group.key]?.length}\n key={group.key}\n group={group.key}\n columns={participantColumns}\n hideFooter\n columnHeaderHeight={0}\n rows={registrationsByGroup[group.key] ?? []}\n onRowSelectionModelChange={handleSelectionModeChange}\n rowSelectionModel={selectedRegistrationId ? [selectedRegistrationId] : []}\n onCellClick={handleCellClick}\n onRowDoubleClick={handleDoubleClick}\n slots={{\n toolbar: GroupHeader,\n noRowsOverlay: NoRowsOverlay,\n }}\n slotProps={{\n toolbar: {\n available: groups,\n group: group,\n },\n row: {\n groupKey: group.key,\n },\n }}\n onDrop={handleDrop(group)}\n onReject={handleReject(group)}\n />\n ))}\n \n Ilmoittautuneet\n \n \n \n (state !== 'picked' && item?.groupKey !== GROUP_KEY_RESERVE) ||\n item?.groupKey === GROUP_KEY_CANCELLED ||\n (item?.groupKey === GROUP_KEY_RESERVE && canArrangeReserve)\n }\n columns={entryColumns}\n slotProps={{\n row: {\n groupKey: 'reserve',\n },\n }}\n hideFooter\n rows={registrationsByGroup.reserve}\n onRowSelectionModelChange={handleSelectionModeChange}\n rowSelectionModel={selectedRegistrationId ? [selectedRegistrationId] : []}\n onCellClick={handleCellClick}\n onRowDoubleClick={handleDoubleClick}\n onDrop={handleDrop({ key: 'reserve', number: registrationsByGroup.reserve.length + 1 })}\n onReject={handleReject({ key: 'reserve', number: 0 })}\n />\n Peruneet\n item?.groupKey !== GROUP_KEY_CANCELLED}\n columns={cancelledColumns}\n slotProps={{\n row: {\n groupKey: GROUP_KEY_CANCELLED,\n },\n }}\n hideFooter\n rows={registrationsByGroup.cancelled}\n onRowSelectionModelChange={handleSelectionModeChange}\n rowSelectionModel={selectedRegistrationId ? [selectedRegistrationId] : []}\n onCellClick={handleCellClick}\n onRowDoubleClick={handleDoubleClick}\n onDrop={handleDrop({ key: GROUP_KEY_CANCELLED, number: registrationsByGroup.cancelled.length + 1 })}\n />\n \n \n )\n}\n\nexport default ClassEntrySelection\n","import type { ConfirmedEvent, DogEvent } from '../../../types'\n\nimport { useCallback, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport Dialog from '@mui/material/Dialog'\nimport DialogContent from '@mui/material/DialogContent'\nimport DialogTitle from '@mui/material/DialogTitle'\nimport { useSnackbar } from 'notistack'\nimport { useRecoilState, useResetRecoilState } from 'recoil'\n\nimport { hasChanges } from '../../../lib/utils'\nimport EventForm from '../components/EventForm'\nimport { adminEditableEventByIdAtom, adminEventSelector, useAdminEventActions } from '../recoil'\n\ninterface Props {\n readonly eventId: string\n readonly onClose?: () => void\n readonly open: boolean\n}\n\nexport default function EventDetailsDialog({ eventId, onClose, open }: Props) {\n const { t } = useTranslation()\n const { enqueueSnackbar } = useSnackbar()\n const actions = useAdminEventActions()\n const [storedEvent, setStoredEvent] = useRecoilState(adminEventSelector(eventId))\n const [event, setEvent] = useRecoilState(adminEditableEventByIdAtom(eventId))\n const resetEvent = useResetRecoilState(adminEditableEventByIdAtom(eventId))\n const [changes, setChanges] = useState(hasChanges(storedEvent, event))\n\n const handleChange = useCallback(\n (newState: DogEvent) => {\n setChanges(hasChanges(storedEvent, newState))\n setEvent(newState)\n },\n [setEvent, storedEvent]\n )\n\n const handleCancel = useCallback(() => {\n resetEvent()\n setChanges(false)\n onClose?.()\n }, [onClose, resetEvent])\n\n const handleSave = useCallback(async () => {\n if (!event) {\n return\n }\n try {\n const saved = await actions.save(event)\n resetEvent()\n setStoredEvent(saved)\n enqueueSnackbar(t(`event.saved`), { variant: 'info' })\n onClose?.()\n } catch (error) {\n console.error(error)\n }\n }, [actions, enqueueSnackbar, event, onClose, resetEvent, setStoredEvent, t])\n\n if (!event) {\n return null\n }\n\n return (\n \n {event.name}\n \n \n \n \n )\n}\n","import type { ChangeEvent, SyntheticEvent } from 'react'\nimport type { DogEvent, EmailTemplateId, Registration } from '../../../types'\n\nimport { useCallback, useState } from 'react'\nimport ExpandMore from '@mui/icons-material/ExpandMore'\nimport PictureAsPdfOutlined from '@mui/icons-material/PictureAsPdfOutlined'\nimport Accordion from '@mui/material/Accordion'\nimport AccordionDetails from '@mui/material/AccordionDetails'\nimport AccordionSummary from '@mui/material/AccordionSummary'\nimport Button from '@mui/material/Button'\nimport Link from '@mui/material/Link'\nimport Paper from '@mui/material/Paper'\nimport Tab from '@mui/material/Tab'\nimport Table from '@mui/material/Table'\nimport TableBody from '@mui/material/TableBody'\nimport TableCell from '@mui/material/TableCell'\nimport TableContainer from '@mui/material/TableContainer'\nimport TableHead from '@mui/material/TableHead'\nimport TableRow from '@mui/material/TableRow'\nimport Tabs from '@mui/material/Tabs'\nimport Typography from '@mui/material/Typography'\nimport { useRecoilValue, useSetRecoilState } from 'recoil'\n\nimport { putInvitationAttachment } from '../../../api/event'\nimport useAdminEventRegistrationInfo from '../../../hooks/useAdminEventRegistrationsInfo'\nimport { API_BASE_URL } from '../../../routeConfig'\nimport { idTokenAtom } from '../../recoil'\nimport { adminEventSelector } from '../recoil'\n\ninterface Props {\n readonly event: DogEvent\n readonly registrations: Registration[]\n readonly onOpenMessageDialog?: (recipients: Registration[], templateId?: EmailTemplateId) => void\n}\n\nconst InfoPanel = ({ event, registrations, onOpenMessageDialog }: Props) => {\n const token = useRecoilValue(idTokenAtom)\n const [attachmentKey, setAttachmentKey] = useState(event.invitationAttachment)\n const setEvent = useSetRecoilState(adminEventSelector(event.id))\n const [expanded, setExpanded] = useState(true)\n const [tab, setTab] = useState(0)\n const { reserveByClass, numbersByClass, selectedByClass, stateByClass } = useAdminEventRegistrationInfo(\n event,\n registrations\n )\n const handleExpandedChange = useCallback((event: React.SyntheticEvent, value: boolean) => {\n setExpanded(value)\n }, [])\n const handleTabChange = useCallback((e: SyntheticEvent, v: number) => {\n e.stopPropagation()\n setTab(v)\n }, [])\n const handleInvitationUpload = useCallback(\n async (e: ChangeEvent) => {\n if (!e.target.files) return\n const fileKey = await putInvitationAttachment(event.id, e.target.files[0], token)\n setAttachmentKey(fileKey)\n setEvent({ ...event, invitationAttachment: fileKey })\n },\n [event, setEvent, token]\n )\n\n return (\n \n }\n sx={{\n minHeight: '28px',\n '& .MuiAccordionSummary-content': { m: 0.5 },\n }}\n >\n {expanded ? (\n \n \n \n \n ) : (\n Tehtäviä tekemättä: ?/?\n )}\n \n \n \n \n \n \n )\n}\n\nexport default InfoPanel\n","import type { BoxProps } from '@mui/material'\n\nimport { useCallback } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { styled } from '@mui/material'\nimport Box from '@mui/material/Box'\nimport InputAdornment from '@mui/material/InputAdornment'\nimport Table from '@mui/material/Table'\nimport TableBody from '@mui/material/TableBody'\nimport TableCell from '@mui/material/TableCell'\nimport TableRow from '@mui/material/TableRow'\nimport { GridFooterContainer } from '@mui/x-data-grid'\n\nimport { formatMoney, formatMoneyWithoutCurrency } from '../../../../lib/money'\nimport { NumberInput } from '../../../components/NumberInput'\n\nconst FooterCell = (props: BoxProps) => \n\ninterface RefundFooterProps {\n canHaveHandlingCosts: boolean\n handlingCost: number\n onHandlingCostChange: (value?: number) => void\n total: number\n selectedTotal: number\n}\n\ndeclare module '@mui/x-data-grid' {\n interface FooterPropsOverrides extends RefundFooterProps {\n blah?: never\n }\n}\n\nconst ValueCell = styled(TableCell)(() => ({\n paddingRight: 10,\n}))\n\nexport const RefundFooter = ({\n canHaveHandlingCosts,\n total,\n selectedTotal,\n handlingCost,\n onHandlingCostChange,\n}: RefundFooterProps) => {\n const { t } = useTranslation()\n const parseAmount = useCallback((value: string) => {\n return Math.round(parseFloat(value.replace(',', '.')) * 100)\n }, [])\n const formatAmount = useCallback((amount: number | undefined) => formatMoneyWithoutCurrency((amount ?? 0) / 100), [])\n\n const refundBase = Math.min(total, selectedTotal)\n const refundTotal = refundBase - handlingCost\n\n return (\n \n \n \n \n \n \n Tapahtumat yhteensä:\n {formatMoney(total / 100)}\n \n \n Käsittelykulu:\n \n \n €\n \n ),\n inputProps: {\n style: { fontSize: 14 },\n },\n },\n }}\n onChange={onHandlingCostChange}\n value={handlingCost}\n variant=\"standard\"\n error={handlingCost < 0}\n sx={{ width: 60, fontSize: 14, '.MuiInputBase-root': { fontSize: 14 } }}\n />\n \n \n \n Palautetaan:\n refundBase ? 'error.main' : undefined,\n }}\n >\n {selectedTotal > 0 && refundTotal !== 0 ? formatMoney(refundTotal / 100) : '-'}\n \n \n \n
\n
\n
\n )\n}\n","import type { GridColDef } from '@mui/x-data-grid'\nimport type { Transaction } from '../../../../types'\n\nimport { useMemo } from 'react'\nimport { useTranslation } from 'react-i18next'\n\nimport { formatDate } from '../../../../i18n/dates'\nimport { formatMoney } from '../../../../lib/money'\nimport { getProviderName } from '../../../../lib/payment'\n\n/*\n\"bankReference\": \"7062825129\",\n\"status\": \"ok\",\n\"statusAt\": \"2024-04-07T09:43:48.857Z\",\n\"createdAt\": \"2024-04-07T09:43:42.823Z\",\n\"amount\": 100,\n\"provider\": \"nordea\",\n\"stamp\": \"3JTgKQg60_6_TXboRAgVY\",\n\"transactionId\": \"520fd8c2-f4c3-11ee-a323-d325ebd1b830\",\n\"reference\": \"L5qGrAvfcD:qGhvZdDYqF\",\n\"type\": \"payment\"\n*/\n\nexport const useRefundColumns = (): readonly GridColDef[] => {\n const { t } = useTranslation()\n\n return useMemo[]>(\n () => [\n {\n field: 'createdAt',\n width: 140,\n valueFormatter: (value) => formatDate(value, 'dd.MM.yy HH:mm:ss'),\n headerName: t('registration.refundDialog.columns.statusAt'),\n },\n {\n field: 'provider',\n flex: 1,\n headerName: t('registration.refundDialog.columns.provider'),\n valueFormatter: getProviderName,\n },\n { field: 'status', width: 60, headerName: t('registration.refundDialog.columns.status') },\n { field: 'bankReference', width: 120, headerName: t('registration.refundDialog.columns.bankReference') },\n {\n field: 'type',\n width: 80,\n headerName: t('registration.refundDialog.columns.type'),\n valueFormatter: (value) => (value === 'payment' ? 'Maksu' : 'Palautus'),\n },\n {\n align: 'right',\n field: 'amount',\n valueGetter: (value, row) =>\n row.status === 'ok' ? formatMoney(value / (row.type === 'refund' ? -100 : 100)) : '',\n width: 100,\n headerName: t('registration.refundDialog.columns.amount'),\n },\n ],\n [t]\n )\n}\n","import type { GridRowSelectionModel } from '@mui/x-data-grid'\nimport type { ChangeEventHandler } from 'react'\nimport type { Registration, Transaction } from '../../../types'\n\nimport { useCallback, useEffect, useMemo, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport Button from '@mui/material/Button'\nimport Dialog from '@mui/material/Dialog'\nimport DialogActions from '@mui/material/DialogActions'\nimport DialogContent from '@mui/material/DialogContent'\nimport DialogContentText from '@mui/material/DialogContentText'\nimport DialogTitle from '@mui/material/DialogTitle'\nimport TextField from '@mui/material/TextField'\nimport { useSnackbar } from 'notistack'\n\nimport { APIError } from '../../../api/http'\nimport useDebouncedCallback from '../../../hooks/useDebouncedCallback'\nimport { formatMoney } from '../../../lib/money'\nimport { NullComponent } from '../../components/NullComponent'\nimport StyledDataGrid from '../../components/StyledDataGrid'\nimport { useAdminRegistrationActions } from '../recoil/registrations/actions'\n\nimport { RefundFooter } from './refundDialog/RefundFooter'\nimport { useRefundColumns } from './refundDialog/useRefundColumns'\n\ninterface Props {\n readonly registration: Registration\n readonly open?: boolean\n readonly onClose?: () => void\n}\n\nconst transactionAmount = (t: Transaction) => (t.type === 'refund' ? -1 * t.amount : t.amount)\n\nexport const RefundDailog = ({ open, registration, onClose }: Props) => {\n const { t } = useTranslation()\n const { enqueueSnackbar } = useSnackbar()\n const [loading, setLoading] = useState(false)\n const [loadedId, setLoadedId] = useState('')\n const [transactions, setTransactions] = useState([])\n const [selection, setSelection] = useState()\n const [handlingCost, setHandlingCost] = useState(0)\n const [internalNotes, setInternalNotes] = useState(registration.internalNotes ?? '')\n const actions = useAdminRegistrationActions(registration.eventId)\n const columns = useRefundColumns()\n\n const okTransactions = useMemo(() => transactions.filter((t) => t.status === 'ok'), [transactions])\n\n const selectedTransactions = useMemo(\n () => okTransactions.filter((t) => selection?.includes(t.transactionId)),\n [selection, okTransactions]\n )\n\n const total = useMemo(\n () => okTransactions.reduce((total, transaction) => total + transactionAmount(transaction), 0),\n [okTransactions]\n )\n const refundAmount = useMemo(\n () => selectedTransactions.reduce((total, transaction) => total + transactionAmount(transaction), 0),\n [selectedTransactions]\n )\n\n const canHaveHandlingCosts = selectedTransactions.some((t) => !!t.items)\n\n useEffect(() => {\n if (!open || !registration || registration.id === loadedId || loading) return\n\n setLoading(true)\n\n actions\n .transactions(registration.eventId, registration.id)\n .then((loaded) => {\n setTransactions((loaded ?? []).filter((t) => t.status !== 'fail' && t.status !== 'new'))\n setLoading(false)\n setLoadedId(registration.id)\n })\n .catch(() => {\n setTransactions([])\n setLoading(false)\n setLoadedId(registration.id)\n })\n }, [actions, loadedId, loading, open, registration])\n\n useEffect(() => {\n const payments = okTransactions.filter((t) => t.type === 'payment')\n if (payments.length === 1) {\n setSelection([payments[0].transactionId!])\n if (!payments[0].items && handlingCost) {\n setHandlingCost(0)\n }\n }\n }, [handlingCost, okTransactions])\n\n useEffect(() => {\n setInternalNotes(registration.internalNotes ?? '')\n }, [registration.internalNotes])\n\n const dispatchNotesChange = useDebouncedCallback(async (notes: string) => {\n await actions.putInternalNotes(registration.eventId, registration.id, notes)\n }, 1000)\n\n const handleNotesChange = useCallback>(\n (e) => {\n const newValue = e.target.value\n setInternalNotes(newValue)\n dispatchNotesChange(newValue)\n },\n [dispatchNotesChange]\n )\n\n const handleCostChange = useCallback((value?: number) => setHandlingCost(value ?? 0), [])\n\n const handleClose = useCallback(() => {\n setLoading(false)\n setLoadedId('')\n setTransactions([])\n setSelection(undefined)\n onClose?.()\n }, [onClose])\n\n const handleRefund = useCallback(async () => {\n const transaction = selectedTransactions[0]\n try {\n const amount = Math.min(total, transaction.amount) - handlingCost\n const response = await actions.refund(registration, transaction.transactionId, amount)\n if (response?.status === 'ok') {\n if (response.provider === 'email refund') {\n enqueueSnackbar(\n 'Maksun palautus on kesken. Ilmoittautujalle on lähetetty sähköposti rahojen palautuksen viimeistelyä varten. Näet audit trailista, kun palautus on käsitelty loppuun.',\n { variant: 'success' }\n )\n } else {\n enqueueSnackbar('Maksu palautettu', { variant: 'success' })\n }\n handleClose()\n } else if (response?.status === 'pending') {\n if (response.provider === 'email refund') {\n enqueueSnackbar(\n 'Maksun palautus on aloitettu. Ilmoittautujalle on lähetetty sähköposti rahojen palautuksen viimeistelyä varten. Näet audit trailista, kun palautus on käsitelty loppuun.',\n { variant: 'success' }\n )\n } else {\n enqueueSnackbar('Maksun palautus on aloitettu. Näet audit trailista, kun palautus on käsitelty loppuun.', {\n variant: 'success',\n })\n }\n handleClose()\n } else {\n enqueueSnackbar(\n 'MMaksun palautus epäonnistui. Tarkista että Paytrailin tilillä on tarpeeksi katetta palautukseen, tai yritä myöhemmin uudelleen.',\n { variant: 'error' }\n )\n }\n } catch (e) {\n if (e instanceof APIError) {\n if (e.status === 404) {\n enqueueSnackbar('Maksutapahtumaa ei löydy. Tapahtuma on todennäköisesti liian vanha palautettavaksi.', {\n variant: 'error',\n })\n return\n }\n if (e.status === 400) {\n const details = JSON.parse(e.body?.error)\n if (details?.message === 'Refund amount exceeds the remaining refund balance') {\n const remaining = details?.meta?.invalidRefunds?.[0].remainingRefundBalance\n const remainingAmount = remaining ? formatMoney(remaining / 100) : '(ei tiedossa)'\n enqueueSnackbar(\n `Palautettava määrä ylittää palauttamattoman maksun osuuden. Palauttamatta: ${remainingAmount}`,\n {\n variant: 'error',\n }\n )\n return\n }\n }\n enqueueSnackbar(\n 'Maksun palautus epäonnistui. Tarkista että Paytrailin tilillä on tarpeeksi katetta palautukseen, tai yritä myöhemmin uudelleen.',\n {\n variant: 'error',\n }\n )\n }\n }\n }, [selectedTransactions, total, handlingCost, actions, registration, enqueueSnackbar, handleClose])\n\n return (\n \n \n {t('registration.refundDialog.title', { regNo: registration.dog.regNo, payer: registration.payer.name })}\n \n \n {t('registration.refundDialog.text')}\n row.transactionId}\n hideFooterPagination\n hideFooterSelectedRowCount\n initialState={{\n sorting: {\n sortModel: [{ field: 'createdAt', sort: 'asc' }],\n },\n }}\n isRowSelectable={(params) => params.row.status === 'ok' && params.row.type === 'payment' && total > 0}\n onRowSelectionModelChange={setSelection}\n rows={transactions}\n rowSelectionModel={selection}\n slots={{\n footer: RefundFooter,\n noRowsOverlay: NullComponent,\n }}\n slotProps={{\n footer: {\n canHaveHandlingCosts,\n total,\n selectedTotal: refundAmount,\n handlingCost: handlingCost ?? 0,\n onHandlingCostChange: handleCostChange,\n },\n }}\n >\n \n {t(canHaveHandlingCosts ? 'registration.refundDialog.costsText' : 'registration.refundDialog.noCostsText')}\n \n \n \n \n \n {t('refund')}\n \n \n \n \n )\n}\n","import type { AuditRecord } from '../../../types'\n\nimport { forwardRef } from 'react'\n\nimport { formatDate } from '../../../i18n/dates'\nimport CollapsibleSection from '../../components/CollapsibleSection'\nimport { NullComponent } from '../../components/NullComponent'\nimport StyledDataGrid from '../../components/StyledDataGrid'\n\ninterface Props {\n auditTrail?: AuditRecord[]\n}\n\nexport const AuditTrail = ({ auditTrail }: Props) => {\n if (!auditTrail) return null\n\n return (\n \n formatDate(value, 'dd.MM.yyyy HH:mm:ss'), //formatDate(, 'dd.MM.yy HH:mm:ss'),\n width: 160,\n },\n {\n field: 'user',\n width: 160,\n },\n { field: 'message', flex: 1 },\n ]}\n density=\"compact\"\n autoHeight\n getRowId={(r) => r.timestamp.toISOString()}\n hideFooter\n rows={auditTrail}\n slots={{\n columnHeaders: forwardRef((_props, _ref) => ),\n }}\n />\n \n )\n}\n","import type { Resetter, SetterOrUpdater } from 'recoil'\nimport type { AuditRecord, ConfirmedEvent, DogEvent, Registration } from '../../../types'\n\nimport { useCallback, useMemo } from 'react'\nimport Dialog from '@mui/material/Dialog'\nimport DialogContent from '@mui/material/DialogContent'\nimport DialogTitle from '@mui/material/DialogTitle'\nimport Stack from '@mui/material/Stack'\nimport Typography from '@mui/material/Typography'\n\nimport { hasChanges } from '../../../lib/utils'\nimport RegistrationForm from '../../components/RegistrationForm'\nimport { AuditTrail } from '../components/AuditTrail'\nimport { useAdminRegistrationActions } from '../recoil/registrations/actions'\n\ninterface Props {\n readonly auditTrail?: AuditRecord[]\n readonly changes: boolean\n readonly classDisabled?: boolean\n readonly event: DogEvent\n readonly onClose?: () => void\n readonly open: boolean\n readonly registration?: Registration\n readonly savedRegistration?: Registration\n readonly resetRegistration: Resetter\n readonly setRegistration: SetterOrUpdater\n}\n\nexport default function RegistrationDialogBase({\n auditTrail,\n changes,\n classDisabled,\n event,\n onClose,\n open,\n registration,\n savedRegistration,\n resetRegistration,\n setRegistration,\n}: Props) {\n const actions = useAdminRegistrationActions(event.id)\n\n const handleChange = useCallback(\n (newState: Registration) => {\n if (hasChanges(registration, newState)) {\n setRegistration(newState)\n }\n },\n [registration, setRegistration]\n )\n\n const handleSave = useCallback(async () => {\n if (!registration || !event) {\n return\n }\n try {\n await actions.save(registration)\n resetRegistration()\n onClose?.()\n } catch (error) {\n console.error(error)\n }\n }, [actions, event, onClose, registration, resetRegistration])\n\n const handleCancel = useCallback(() => {\n resetRegistration()\n onClose?.()\n }, [onClose, resetRegistration])\n\n const title = useMemo(() => {\n const prefix = registration?.cancelled ? 'PERUTTU: ' : ''\n if (registration?.dog?.name) {\n const handlerName = registration?.ownerHandles ? registration?.owner?.name : (registration?.handler?.name ?? '')\n if (handlerName) {\n return `${prefix}${registration.dog.name} / ${handlerName}`\n }\n return `${prefix}registration.dog.name`\n }\n return ''\n }, [\n registration?.cancelled,\n registration?.dog.name,\n registration?.handler?.name,\n registration?.owner?.name,\n registration?.ownerHandles,\n ])\n\n if (!registration) {\n return null\n }\n\n return (\n \n \n \n {title} ({registration.language}){registration.id}\n \n \n \n \n \n \n \n )\n}\n","import type { DogEvent, RegistrationClass } from '../../../types'\n\nimport { useEffect } from 'react'\nimport { useRecoilState, useResetRecoilState } from 'recoil'\n\nimport { adminNewRegistrationAtom } from '../recoil'\n\nimport RegistrationDialogBase from './RegistrationDialogBase'\n\ninterface Props {\n readonly event: DogEvent\n readonly eventClass?: RegistrationClass\n readonly onClose?: () => void\n readonly open: boolean\n}\n\nexport default function RegistrationCreateDialog({ event, eventClass, open, onClose }: Props) {\n const [registration, setRegistration] = useRecoilState(adminNewRegistrationAtom)\n const resetRegistration = useResetRecoilState(adminNewRegistrationAtom)\n\n useEffect(() => {\n if (!registration || !open) {\n return\n }\n if (\n registration.eventId !== event.id ||\n registration.eventType !== event.eventType ||\n (eventClass && registration.class !== eventClass)\n ) {\n setRegistration({\n ...registration,\n eventId: event.id,\n eventType: event.eventType,\n class: eventClass,\n })\n }\n }, [registration, event, setRegistration, eventClass, open])\n\n return (\n \n )\n}\n","import type { AuditRecord, DogEvent } from '../../../types'\n\nimport { useEffect, useMemo, useState } from 'react'\nimport { useRecoilState, useRecoilValue, useResetRecoilState } from 'recoil'\n\nimport { getRegistrationAuditTrail } from '../../../api/registration'\nimport { reportError } from '../../../lib/client/error'\nimport { hasChanges } from '../../../lib/utils'\nimport { idTokenAtom } from '../../recoil'\nimport { adminEditableEventRegistrationByEventIdAndIdAtom, adminEventRegistrationSelector } from '../recoil'\n\nimport RegistrationDialogBase from './RegistrationDialogBase'\n\ninterface Props {\n readonly event: DogEvent\n readonly onClose?: () => void\n readonly open: boolean\n readonly registrationId: string\n}\n\nexport default function RegistrationEditDialog({ event, registrationId, open, onClose }: Props) {\n const savedRegistration = useRecoilValue(adminEventRegistrationSelector({ eventId: event.id, id: registrationId }))\n const key = { eventId: event.id, id: registrationId }\n const [registration, setRegistration] = useRecoilState(adminEditableEventRegistrationByEventIdAndIdAtom(key))\n const resetRegistration = useResetRecoilState(adminEditableEventRegistrationByEventIdAndIdAtom(key))\n const token = useRecoilValue(idTokenAtom)\n const changes = useMemo(\n () => !!registration && !!savedRegistration && hasChanges(savedRegistration, registration),\n [registration, savedRegistration]\n )\n const [auditTrail, setAuditTrail] = useState([])\n\n useEffect(() => {\n if (!open || !token) return\n resetRegistration()\n getRegistrationAuditTrail(event.id, registrationId, token)\n .then((at) => setAuditTrail(at ?? []))\n .catch((e) => {\n reportError(e)\n setAuditTrail([])\n })\n }, [registrationId, savedRegistration, resetRegistration, event.id, open, token])\n\n return (\n \n )\n}\n","import type { DogEvent, Registration, RegistrationTemplateContext } from '../types'\n\nimport { useTranslation } from 'react-i18next'\n\nimport { getRegistrationEmailTemplateData } from '../lib/registration'\n\nexport const useRegistrationEmailTemplateData = (\n registration: Registration,\n event: DogEvent,\n context: RegistrationTemplateContext,\n text: string\n) => {\n const { t } = useTranslation()\n\n if (!registration || !event) {\n return {}\n }\n\n return getRegistrationEmailTemplateData(registration, event, '', context, text, t)\n}\n","import type { Dispatch, SetStateAction } from 'react'\nimport type { ContactInfo, DogEvent } from '../../../../types'\n\nimport { useTranslation } from 'react-i18next'\nimport { styled } from '@mui/material'\nimport Checkbox from '@mui/material/Checkbox'\nimport FormControlLabel from '@mui/material/FormControlLabel'\nimport FormGroup from '@mui/material/FormGroup'\nimport FormLabel from '@mui/material/FormLabel'\n\ninterface Props {\n contactInfo: Partial | undefined\n event: DogEvent\n group: 'secretary' | 'official'\n setContactInfo: Dispatch | undefined>>\n}\n\nconst CONTACT_INFO_PROPS = ['name', 'email', 'phone'] as const\nconst ContactInfoCheckbox = styled(Checkbox)({ paddingTop: 0, paddingBottom: 0 })\n\nconst ContactInfoGroup = ({ contactInfo, event, group, setContactInfo }: Props) => {\n const { t } = useTranslation()\n\n return (\n
\n {t(`event.${group}`)}\n \n {CONTACT_INFO_PROPS.map((prop) => (\n }\n label={t(`contact.${prop}`)}\n checked={Boolean(contactInfo?.[group]?.[prop])}\n disabled={!event?.[group]?.[prop]}\n onChange={(e, checked) =>\n setContactInfo((old) => ({\n ...old,\n [group]: {\n ...old?.[group],\n [prop]: checked\n ? // prefer contactInfo from event, fall back to actual contact info\n event?.contactInfo?.[group]?.[prop] || event?.[group]?.[prop]\n : undefined,\n },\n }))\n }\n />\n ))}\n \n
\n )\n}\n\nexport default ContactInfoGroup\n","import type { DogEvent, EmailTemplate, EmailTemplateId, Language, Registration } from '../../../types'\n\nimport { useCallback, useEffect, useMemo, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport ArrowForwardIosSharp from '@mui/icons-material/ArrowForwardIosSharp'\nimport { styled } from '@mui/material'\nimport Accordion from '@mui/material/Accordion'\nimport AccordionDetails from '@mui/material/AccordionDetails'\nimport AccordionSummary from '@mui/material/AccordionSummary'\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport Checkbox from '@mui/material/Checkbox'\nimport Dialog from '@mui/material/Dialog'\nimport DialogActions from '@mui/material/DialogActions'\nimport DialogContent from '@mui/material/DialogContent'\nimport DialogTitle from '@mui/material/DialogTitle'\nimport FormControl from '@mui/material/FormControl'\nimport FormGroup from '@mui/material/FormGroup'\nimport FormLabel from '@mui/material/FormLabel'\nimport List from '@mui/material/List'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemText from '@mui/material/ListItemText'\nimport Paper from '@mui/material/Paper'\nimport Stack from '@mui/material/Stack'\nimport TextField from '@mui/material/TextField'\nimport Typography from '@mui/material/Typography'\n// @ts-expect-error handlebars 4.8 should fix this issue\nimport Handlebars from 'handlebars/dist/cjs/handlebars.js'\nimport { useConfirm } from 'material-ui-confirm'\nimport { useSnackbar } from 'notistack'\nimport { useRecoilValue, useSetRecoilState } from 'recoil'\n\nimport { sendTemplatedEmail } from '../../../api/email'\nimport { useRegistrationEmailTemplateData } from '../../../hooks/useRegistrationEmailTemplateData'\nimport { AsyncButton } from '../../components/AsyncButton'\nimport AutocompleteSingle from '../../components/AutocompleteSingle'\nimport { idTokenAtom } from '../../recoil'\nimport { adminEmailTemplatesAtom, adminEventSelector } from '../recoil'\nimport { useAdminRegistrationActions } from '../recoil/registrations/actions'\n\nimport ContactInfoGroup from './sendMessageDialog/ContactInfoGroup'\n\ninterface Props {\n readonly registrations: Registration[]\n readonly templateId?: EmailTemplateId\n readonly open: boolean\n readonly event: DogEvent\n readonly onClose?: () => void\n}\n\nconst CONTACT_INFO_GROUPS = ['secretary', 'official'] as const\nconst CONTACT_INFO_PROPS = ['name', 'email', 'phone'] as const\nconst ContactInfoCheckbox = styled(Checkbox)({ paddingTop: 0, paddingBottom: 0 })\n\nexport default function SendMessageDialog({ event, registrations, templateId, open, onClose }: Props) {\n const confirm = useConfirm()\n const { i18n, t } = useTranslation()\n const { enqueueSnackbar } = useSnackbar()\n const [contactInfo, setContactInfo] = useState(event.contactInfo)\n const [text, setText] = useState('')\n const token = useRecoilValue(idTokenAtom)\n const templates = useRecoilValue(adminEmailTemplatesAtom)\n const actions = useAdminRegistrationActions(event.id)\n const setEvent = useSetRecoilState(adminEventSelector(event.id))\n const [selectedTemplate, setSelectedTemplate] = useState(\n templates.find((t) => t.id === templateId)\n )\n const [compiledTemplate, compiledSubject] = useMemo(() => {\n const ses = selectedTemplate?.ses?.[i18n.language as Language]\n if (!ses) {\n return [undefined, undefined]\n }\n return [Handlebars.compile(ses.HtmlPart), Handlebars.compile(ses.SubjectPart)]\n }, [i18n.language, selectedTemplate?.ses])\n const previewData = useRegistrationEmailTemplateData(registrations[0], { ...event, contactInfo }, '', text)\n\n useEffect(() => {\n if (templateId && templates?.length) {\n if (templateId !== selectedTemplate?.id) {\n setSelectedTemplate(templates.find((t) => t.id === templateId))\n }\n }\n }, [templates, templateId, selectedTemplate])\n\n const handleTemplateChange = (value: EmailTemplate | null) => setSelectedTemplate(value ?? undefined)\n const preview = useMemo(() => {\n if (!previewData || !compiledTemplate || !compiledSubject) {\n return { subject: '', html: '' }\n }\n return {\n subject: compiledSubject(previewData),\n html: compiledTemplate(previewData),\n }\n }, [compiledTemplate, compiledSubject, previewData])\n\n const handleSend = useCallback(async () => {\n if (!selectedTemplate) {\n return\n }\n try {\n try {\n await confirm({\n title: 'Viestin lähettäminen',\n content: (\n
\n Olet lähettämässä viestiä {t(`emailTemplate.${selectedTemplate.id}`)} {registrations.length}{' '}\n ilmoittautumiseen.\n
\n Oletko varma, että haluat lähettää viestin?\n
\n ),\n confirmationText: 'Lähetä',\n cancellationText: t('cancel'),\n })\n } catch (e) {\n console.error(e)\n return // cancelled\n }\n\n const {\n ok = [],\n failed = [],\n state = event.state,\n classes = event.classes,\n registrations: updatedRegistrations,\n } = await sendTemplatedEmail(\n {\n template: selectedTemplate.id,\n eventId: event.id,\n contactInfo,\n registrationIds: registrations.map((r) => r.id),\n text,\n },\n token\n )\n if (ok.length) {\n enqueueSnackbar('Viesti lähetetty onnistuneesti\\n\\n' + ok.join('\\n'), {\n variant: 'success',\n style: { whiteSpace: 'pre-line' },\n })\n }\n if (failed.length) {\n enqueueSnackbar('Viestin lähetys epäonnistui 💩\\n\\n' + failed.join('\\n'), {\n variant: 'success',\n style: { whiteSpace: 'pre-line' },\n })\n }\n setEvent({ ...event, state, classes })\n actions.update(updatedRegistrations)\n onClose?.()\n } catch (error) {\n enqueueSnackbar('Viestin lähetys epäonnistui 💩', { variant: 'error' })\n console.log(error)\n }\n }, [\n actions,\n confirm,\n contactInfo,\n enqueueSnackbar,\n event,\n onClose,\n registrations,\n selectedTemplate,\n setEvent,\n t,\n text,\n token,\n ])\n\n return (\n \n Viestin lähettäminen\n \n \n \n \n }\n sx={{\n px: 1,\n minHeight: 32,\n flexDirection: 'row-reverse',\n '& .MuiAccordionSummary-expandIconWrapper.Mui-expanded': {\n transform: 'rotate(90deg)',\n },\n '& .MuiAccordionSummary-content': {\n marginX: 1,\n marginY: 0,\n },\n }}\n >\n Vastaanottajat: {registrations.length}\n \n \n \n {registrations.map((r) => (\n \n \n \n ))}\n \n \n \n\n Viesti\n\n \n (o ? t(`emailTemplate.${o.id}`) : '')}\n isOptionEqualToValue={(o, v) => o?.id === v?.id}\n options={templates}\n onChange={handleTemplateChange}\n label={'Viestin tyyppi'}\n value={selectedTemplate}\n />\n \n Voit lisätä tähän halutessasi lisäviestin:\n setText(e.target.value)} />\n \n \n Yhteystiedot:\n \n {CONTACT_INFO_GROUPS.map((group) => (\n \n ))}\n \n \n \n \n \n Esikatselu\n \n Aihe: {preview.subject}\n
\n \n \n \n \n \n \n Lähetä\n \n \n \n
\n )\n}\n\nfunction listEmails(r: Registration): string {\n if (r.ownerHandles || r.owner.email === r.handler.email) {\n return r.owner.email\n }\n return [r.owner.email, r.handler.email].join(', ')\n}\n","import type { ReactNode } from 'react'\n\ninterface Props {\n readonly index: number\n readonly activeTab: number\n readonly children?: ReactNode\n}\n\nconst TabPanel = ({ index, activeTab, children }: Props) => {\n return (\n \n {index === activeTab && <>{children}}\n \n )\n}\n\nexport default TabPanel\n","import type { DogEvent } from '../../../types'\n\nimport { useTranslation } from 'react-i18next'\nimport Box from '@mui/material/Box'\nimport Typography from '@mui/material/Typography'\n\nimport useEventTitle from '../../../hooks/useEventTitle'\n\nexport default function Title({ event }: { readonly event: DogEvent }) {\n const { t } = useTranslation()\n const title = useEventTitle(event)\n\n return (\n \n {event.eventType}, {t('dateFormat.datespan', { start: event.startDate, end: event.endDate })}, {event.location}\n {title}\n \n )\n}\n","import type { EmailTemplateId, Registration, RegistrationClass } from '../../types'\n\nimport { Suspense, useCallback, useEffect, useMemo, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useParams } from 'react-router-dom'\nimport AddCircleOutline from '@mui/icons-material/AddCircleOutline'\nimport EditOutlined from '@mui/icons-material/EditOutlined'\nimport EmailOutlined from '@mui/icons-material/EmailOutlined'\nimport FormatListBulleted from '@mui/icons-material/FormatListBulleted'\nimport FormatListNumberedOutlined from '@mui/icons-material/FormatListNumberedOutlined'\nimport Alert from '@mui/material/Alert'\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport CircularProgress from '@mui/material/CircularProgress'\nimport Divider from '@mui/material/Divider'\nimport Grid2 from '@mui/material/Grid2'\nimport Modal from '@mui/material/Modal'\nimport Stack from '@mui/material/Stack'\nimport Tab from '@mui/material/Tab'\nimport Tabs from '@mui/material/Tabs'\nimport { useRecoilState, useRecoilValue } from 'recoil'\n\nimport useAdminEventRegistrationInfo from '../../hooks/useAdminEventRegistrationsInfo'\nimport { getRegistrationGroupKey, GROUP_KEY_CANCELLED } from '../../lib/registration'\nimport { Path } from '../../routeConfig'\nimport CancelDialog from '../components/CancelDialog'\nimport LoadingIndicator from '../components/LoadingIndicator'\n\nimport FullPageFlex from './components/FullPageFlex'\nimport ClassEntrySelection from './eventViewPage/ClassEntrySelection'\nimport EventDetailsDialog from './eventViewPage/EventDetailsDialog'\nimport InfoPanel from './eventViewPage/InfoPanel'\nimport { RefundDailog } from './eventViewPage/RefundDialog'\nimport RegistrationCreateDialog from './eventViewPage/RegistrationCreateDialog'\nimport RegistrationEditDialog from './eventViewPage/RegistrationEditDialog'\nimport SendMessageDialog from './eventViewPage/SendMessageDialog'\nimport TabPanel from './eventViewPage/TabPanel'\nimport Title from './eventViewPage/Title'\nimport { useAdminRegistrationActions } from './recoil/registrations/actions'\nimport {\n adminBackgroundActionsRunningAtom,\n adminEventClassAtom,\n adminEventRegistrationsSelector,\n adminEventSelector,\n adminRegistrationIdAtom,\n} from './recoil'\n\nconst REG_CLASSES = ['ALO', 'AVO', 'VOI']\n\nexport const isRegistrationClass = (cls?: string | null): cls is RegistrationClass =>\n !!(cls && REG_CLASSES.includes(cls))\n\nexport default function EventViewPage() {\n const { t } = useTranslation()\n const [open, setOpen] = useState(false)\n const [detailsOpen, setDetailsOpen] = useState(false)\n const [createOpen, setCreateOpen] = useState(false)\n const [msgDlgOpen, setMsgDlgOpen] = useState(false)\n const [refundOpen, setRefundOpen] = useState(false)\n const [cancelOpen, setCancelOpen] = useState(false)\n\n const params = useParams()\n const eventId = params.id ?? ''\n const event = useRecoilValue(adminEventSelector(eventId))\n const actions = useAdminRegistrationActions(eventId)\n\n const [selectedEventClass, setSelectedEventClass] = useRecoilState(adminEventClassAtom)\n const [selectedRegistrationId, setSelectedRegistrationId] = useRecoilState(adminRegistrationIdAtom)\n const allRegistrations = useRecoilValue(adminEventRegistrationsSelector(eventId))\n const registrations = useMemo(\n () =>\n allRegistrations.filter(\n (r) => (r.class ?? undefined) === selectedEventClass || (!r.class && r.eventType === selectedEventClass)\n ),\n [allRegistrations, selectedEventClass]\n )\n const selectedRegistration = useMemo(\n () => selectedRegistrationId && registrations.find((r) => r.id === selectedRegistrationId),\n [registrations, selectedRegistrationId]\n )\n const [recipientRegistrations, setRecipientRegistrations] = useState([])\n const [messageTemplateId, setMessageTemplateId] = useState()\n const { eventClasses, stateByClass, missingClasses } = useAdminEventRegistrationInfo(event, allRegistrations)\n const allClasses = useMemo(() => eventClasses.concat(missingClasses), [eventClasses, missingClasses])\n const backgroundActionsRunning = useRecoilValue(adminBackgroundActionsRunningAtom)\n\n const activeTab = useMemo(\n () => Math.max(allClasses.findIndex((c) => c === selectedEventClass) ?? 0, 0),\n [allClasses, selectedEventClass]\n )\n\n const handleTabChange = useCallback(\n (_: React.SyntheticEvent, newValue: number) => {\n setSelectedEventClass(allClasses[newValue])\n },\n [allClasses, setSelectedEventClass]\n )\n\n const handleClose = useCallback(() => setOpen(false), [])\n const handleCancelClose = useCallback(() => setCancelOpen(false), [])\n const handleCreateClose = useCallback(() => setCreateOpen(false), [])\n const handleDetailsClose = useCallback(() => setDetailsOpen(false), [])\n const handleRefundClose = useCallback(() => setRefundOpen(false), [])\n const closeMsgDlg = useCallback(() => setMsgDlgOpen(false), [])\n\n const handleOpenMsgDialog = (recipients: Registration[], templateId?: EmailTemplateId) => {\n setRecipientRegistrations(recipients)\n setMessageTemplateId(templateId)\n setMsgDlgOpen(true)\n }\n\n const handleCancel = useCallback(\n async (reason: string) => {\n if (!selectedRegistration) return\n const regs = registrations.filter(\n (r) => getRegistrationGroupKey(r) === GROUP_KEY_CANCELLED && r.id !== selectedRegistration.id\n )\n setCancelOpen(false)\n await actions.cancel(selectedRegistration.eventId, selectedRegistration.id, reason, regs.length + 1)\n },\n [actions, registrations, selectedRegistration]\n )\n\n useEffect(() => {\n if (selectedEventClass && !allClasses.includes(selectedEventClass)) {\n setSelectedEventClass(allClasses[0])\n }\n }, [allClasses, selectedEventClass, setSelectedEventClass])\n\n if (!event) {\n return <>duh\n }\n\n return (\n <>\n \n \n \n \n </Grid2>\n <Grid2 size=\"auto\">\n <InfoPanel event={event} registrations={allRegistrations} onOpenMessageDialog={handleOpenMsgDialog} />\n </Grid2>\n </Grid2>\n\n <Stack direction=\"row\" spacing={2}>\n <Button startIcon={<FormatListBulleted />} onClick={() => setDetailsOpen(true)}>\n Näytä tapahtuman tiedot\n </Button>\n <Button\n startIcon={<EmailOutlined />}\n onClick={() => handleOpenMsgDialog(selectedRegistration ? [selectedRegistration] : [])}\n >\n Lähetä viesti\n </Button>\n <Divider orientation=\"vertical\"></Divider>\n <Button startIcon={<FormatListNumberedOutlined />} href={Path.admin.startList(eventId)} target=\"_blank\">\n Katso sihteerin starttilista\n </Button>\n <Divider orientation=\"vertical\"></Divider>\n <Button\n startIcon={<AddCircleOutline />}\n onClick={() => {\n setCreateOpen(true)\n }}\n >\n {t('createRegistration')}\n </Button>\n <Button\n startIcon={<EditOutlined />}\n disabled={!selectedRegistrationId}\n onClick={() => {\n setOpen(true)\n }}\n >\n {t('editRegistration')}\n </Button>\n </Stack>\n\n <Box sx={{ borderBottom: 1, borderColor: 'divider', mr: 2 }}>\n <Stack direction=\"row\" alignItems=\"center\" justifyContent=\"space-between\">\n <Tabs value={activeTab} onChange={handleTabChange}>\n {allClasses.map((eventClass) => (\n <Tab\n key={`tab-${eventClass}`}\n id={`tab-${eventClass}`}\n sx={{\n borderLeft: '1px solid',\n borderLeftColor: 'divider',\n bgcolor: missingClasses.includes(eventClass) ? '#fdeded' : undefined,\n }}\n label={eventClass}\n ></Tab>\n ))}\n </Tabs>\n <CircularProgress\n size={20}\n color=\"info\"\n sx={{ opacity: backgroundActionsRunning ? 1 : 0, transition: 'opacity 0.1s ease-in-out' }}\n />\n </Stack>\n </Box>\n\n <Box\n sx={{\n display: 'flex',\n flexGrow: 1,\n width: '100%',\n height: '100%',\n maxHeight: '70vh',\n }}\n >\n {allClasses.map((eventClass, index) => (\n <TabPanel key={`tabPanel-${eventClass}`} index={index} activeTab={activeTab}>\n {missingClasses.includes(eventClass) ? (\n <Alert severity=\"info\" sx={{ m: 1 }}>\n Nämä ilmoittautumiset ovat koeluokassa, jota ei enää ole kokeessa. Ilmoittautumisten luokat täytyy\n korjata.\n </Alert>\n ) : null}\n <ClassEntrySelection\n event={event}\n eventClass={eventClass}\n registrations={registrations}\n setOpen={setOpen}\n setCancelOpen={setCancelOpen}\n setRefundOpen={setRefundOpen}\n selectedRegistrationId={selectedRegistrationId}\n setSelectedRegistrationId={setSelectedRegistrationId}\n state={stateByClass[eventClass]}\n />\n </TabPanel>\n ))}\n </Box>\n </FullPageFlex>\n <Suspense\n fallback={\n <Modal open>\n <>\n <LoadingIndicator />\n </>\n </Modal>\n }\n >\n <RegistrationEditDialog\n event={event}\n onClose={handleClose}\n open={open}\n registrationId={open ? (selectedRegistrationId ?? '') : ''}\n />\n <RegistrationCreateDialog\n event={event}\n eventClass={\n isRegistrationClass(selectedEventClass) && eventClasses.includes(selectedEventClass)\n ? selectedEventClass\n : undefined\n }\n onClose={handleCreateClose}\n open={createOpen}\n />\n <SendMessageDialog\n event={event}\n onClose={closeMsgDlg}\n open={msgDlgOpen}\n registrations={recipientRegistrations}\n templateId={messageTemplateId}\n />\n <EventDetailsDialog eventId={eventId} open={detailsOpen} onClose={handleDetailsClose} />\n {selectedRegistration && (\n <RefundDailog registration={selectedRegistration} open={refundOpen} onClose={handleRefundClose} />\n )}\n {selectedRegistration && (\n <CancelDialog\n event={event}\n open={cancelOpen}\n onClose={handleCancelClose}\n onCancel={handleCancel}\n registration={selectedRegistration}\n />\n )}\n </Suspense>\n </>\n )\n}\n","import type { ChangeEvent } from 'react'\nimport type { SectionProps } from '../EventForm'\n\nimport { useCallback } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport TextField from '@mui/material/TextField'\n\nimport CollapsibleSection from '../../../components/CollapsibleSection'\n\nexport default function AdditionalInfoSection({\n disabled,\n event,\n onChange,\n onOpenChange,\n open,\n}: Readonly<SectionProps>) {\n const { t } = useTranslation()\n\n const handleChange = useCallback(\n (e: ChangeEvent<HTMLTextAreaElement | HTMLInputElement>) => {\n e.preventDefault()\n onChange?.({ description: e.target.value })\n },\n [onChange]\n )\n\n return (\n <CollapsibleSection title={t('event.description')} open={open} onOpenChange={onOpenChange}>\n <TextField\n disabled={disabled}\n rows={5}\n fullWidth\n multiline\n value={event.description}\n onChange={handleChange}\n ></TextField>\n </CollapsibleSection>\n )\n}\n","import type { ReactNode } from 'react'\n\nimport Fade from '@mui/material/Fade'\nimport Paper from '@mui/material/Paper'\nimport Popover from '@mui/material/Popover'\n\ninterface Props {\n readonly anchorEl: HTMLButtonElement | null\n readonly onClose: () => void\n readonly children: ReactNode\n}\n\nexport default function HelpPopover({ anchorEl, onClose, children }: Props) {\n const helpOpen = Boolean(anchorEl)\n\n return (\n <Popover\n anchorEl={anchorEl}\n open={helpOpen}\n anchorOrigin={{\n vertical: 'center',\n horizontal: 'center',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'left',\n }}\n TransitionComponent={Fade}\n onClose={onClose}\n >\n <Paper\n sx={{\n maxWidth: 400,\n p: 1,\n backgroundColor: 'secondary.light',\n }}\n >\n {children}\n </Paper>\n </Popover>\n )\n}\n","import type { AutocompleteChangeReason } from '@mui/material'\nimport type { SyntheticEvent } from 'react'\nimport type { DeepPartial, DogEvent, EventClass, EventState } from '../../../../../types'\n\nimport { useCallback, useMemo } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport CheckBox from '@mui/icons-material/CheckBox'\nimport CheckBoxOutlineBlank from '@mui/icons-material/CheckBoxOutlineBlank'\nimport Autocomplete from '@mui/material/Autocomplete'\nimport Avatar from '@mui/material/Avatar'\nimport Checkbox from '@mui/material/Checkbox'\nimport Chip from '@mui/material/Chip'\nimport TextField from '@mui/material/TextField'\nimport { isSameDay } from 'date-fns'\n\ninterface Props {\n readonly id: string\n readonly eventStartDate: Date\n readonly eventEndDate: Date\n readonly value: DeepPartial<EventClass>[] | undefined\n readonly classes: DeepPartial<EventClass>[]\n readonly label: string\n readonly disabled?: boolean\n readonly required?: boolean\n readonly requiredState?: EventState\n readonly errorStates?: { [Property in keyof DogEvent]?: boolean }\n readonly helperTexts?: { [Property in keyof DogEvent]?: string }\n readonly showCount?: boolean\n readonly onChange?: (\n event: SyntheticEvent,\n value: readonly DeepPartial<EventClass>[],\n reason: AutocompleteChangeReason\n ) => void\n}\n\nexport const compareEventClass = (a: DeepPartial<EventClass>, b: DeepPartial<EventClass>) =>\n isSameDay(a.date ?? new Date(), b.date ?? new Date())\n ? (a.class?.localeCompare(b.class ?? '') ?? 0)\n : (a.date?.valueOf() ?? 0) - (b.date?.valueOf() ?? 0)\n\nexport default function EventClasses(props: Props) {\n const { t } = useTranslation()\n const {\n classes,\n label,\n eventStartDate,\n eventEndDate,\n disabled,\n required,\n requiredState,\n errorStates,\n helperTexts,\n value,\n showCount,\n ...rest\n } = props\n const error = errorStates?.classes\n const helperText = helperTexts?.classes ?? ''\n const sortedValue = useMemo(() => value?.slice().sort(compareEventClass), [value])\n const groupByWeekday = useCallback((c: { date?: Date }) => t('dateFormat.wdshort', { date: c.date }), [t])\n const getLabel = useCallback((c: { class?: string }) => c.class ?? '', [])\n const isEqual = useCallback(\n (a: DeepPartial<EventClass>, b: DeepPartial<EventClass>) => compareEventClass(a, b) === 0,\n []\n )\n const groupBy = !isSameDay(eventStartDate, eventEndDate)\n const hasJudge = useCallback(\n (option: DeepPartial<EventClass>) => (Array.isArray(option.judge) ? option.judge.length : option.judge?.id),\n []\n )\n\n return (\n <Autocomplete\n {...rest}\n value={sortedValue}\n fullWidth\n disableClearable\n disableCloseOnSelect\n disabled={disabled || classes.length === 0}\n disablePortal\n multiple\n groupBy={groupBy ? groupByWeekday : undefined}\n options={classes}\n getOptionLabel={getLabel}\n isOptionEqualToValue={isEqual}\n renderOption={(optionProps, option, { selected }) => (\n <li {...optionProps} key={`${option.date}-${option.class}`}>\n <Checkbox\n icon={<CheckBoxOutlineBlank fontSize=\"small\" />}\n checkedIcon={<CheckBox fontSize=\"small\" />}\n style={{ marginRight: 8 }}\n checked={selected}\n />\n {option.class}\n </li>\n )}\n renderInput={(inputProps) => (\n <TextField {...inputProps} required={required} error={!!error} helperText={helperText} label={label} />\n )}\n renderTags={(tagValue, getTagProps) =>\n tagValue.map((option, index) => {\n const { key, ...props } = getTagProps({ index })\n return (\n <Chip\n key={key}\n {...props}\n avatar={\n groupBy ? (\n <Avatar\n sx={{\n fontWeight: 'bold',\n bgcolor: isSameDay(option.date || eventStartDate, eventStartDate)\n ? 'secondary.light'\n : 'secondary.dark',\n }}\n >\n {t('dateFormat.weekday', { date: option.date })}\n </Avatar>\n ) : undefined\n }\n label={\n (option.class ?? '') +\n (showCount && Array.isArray(option.judge) && option.judge.length > 1 ? ` x${option.judge.length}` : '')\n }\n onDelete={undefined}\n size=\"small\"\n sx={{ bgcolor: hasJudge(option) ? 'background.ok' : 'transparent' }}\n variant={hasJudge(option) ? 'filled' : 'outlined'}\n />\n )\n })\n }\n />\n )\n}\n","import type { AutocompleteFreeSoloValueMapping, AutocompleteProps } from '@mui/material'\nimport type { AutocompleteInputChangeReason, AutocompleteRenderInputParams } from '@mui/material/Autocomplete'\nimport type { ReactNode, SyntheticEvent } from 'react'\nimport type { DogEvent } from '../../../../../types'\nimport type { PartialEvent } from '../../EventForm'\nimport type { FieldRequirements } from '../validation'\n\nimport { useCallback, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport HelpOutlined from '@mui/icons-material/HelpOutlined'\nimport Autocomplete from '@mui/material/Autocomplete'\nimport IconButton from '@mui/material/IconButton'\nimport TextField from '@mui/material/TextField'\nimport { Box } from '@mui/system'\n\nimport useDebouncedCallback from '../../../../../hooks/useDebouncedCallback'\nimport { validateEventField } from '../validation'\n\nexport type Property = keyof Omit<\n PartialEvent,\n | 'id'\n | 'createdAt'\n | 'createdBy'\n | 'deletedAt'\n | 'deletedBy'\n | 'modifiedAt'\n | 'modifiedBy'\n | 'headquarters'\n | 'invitationAttachment'\n>\n\nexport type EventPropertyProps<P extends Property, freeSolo extends boolean> = Omit<\n AutocompleteProps<PartialEvent[P], false, false, freeSolo>,\n 'id' | 'renderInput' | 'onChange' | 'value'\n> & {\n id: P\n event: PartialEvent\n fields?: FieldRequirements\n onChange?: (props: Partial<DogEvent>) => void\n helpClick?: React.MouseEventHandler<HTMLButtonElement>\n validateInput?: (value: string) => string\n mapValue?: (value?: any) => PartialEvent[P]\n endAdornment?: ReactNode\n}\n\nconst getInputInitValue = <P extends Property, freeSolo extends boolean>(\n prop: string | PartialEvent[P] | null,\n props: EventPropertyProps<P, freeSolo>\n) => {\n if (prop === null) {\n return ''\n }\n if (typeof prop === 'string') {\n return prop\n }\n if (props.getOptionLabel) {\n return props.getOptionLabel(prop)\n }\n if (typeof prop === 'number') {\n return `${prop}`\n }\n return ''\n}\n\nconst EventProperty = <P extends Property, freeSolo extends boolean>(props: EventPropertyProps<P, freeSolo>) => {\n const { t } = useTranslation()\n const { id, event, fields, helpClick, endAdornment, onChange, validateInput, mapValue, ...acProps } = props\n const value = event[id]\n const fixedValue = value ?? null\n const [inputValue, setInputValue] = useState(getInputInitValue(fixedValue, props))\n const isRequired = fields?.required[id] ?? false\n const error = (isRequired || fixedValue) && validateEventField(event, id, true)\n const helperText: string = error ? t(`validation.event.${error.key}`, error.opts) : ''\n\n const handleChange = useCallback(\n (\n e: SyntheticEvent<Element, globalThis.Event>,\n value: PartialEvent[P] | AutocompleteFreeSoloValueMapping<freeSolo> | null\n ) => {\n if (!acProps.options.length) {\n return\n }\n const valueOrUndef = value || undefined\n const mappedValueOrUndef = valueOrUndef && mapValue ? mapValue(valueOrUndef) : valueOrUndef\n onChange?.({ [id]: mappedValueOrUndef })\n },\n [acProps.options.length, id, mapValue, onChange]\n )\n\n const debouncedonChange = useDebouncedCallback((value) => {\n if (!props.freeSolo) {\n return\n }\n onChange?.({ [id]: value === '' ? undefined : value })\n })\n\n const handleInputChange = useCallback(\n (e: SyntheticEvent<Element, globalThis.Event>, value: string, reason: AutocompleteInputChangeReason) => {\n if (reason === 'reset' && value === '') return\n const validated = validateInput?.(value) ?? value\n if (inputValue !== validated) {\n setInputValue(validated)\n debouncedonChange(validated)\n }\n },\n [debouncedonChange, inputValue, validateInput]\n )\n\n const renderInput = useCallback(\n (params: AutocompleteRenderInputParams) => (\n <Box sx={{ display: 'flex', flex: '0 0 auto', position: 'relative' }}>\n <TextField\n {...params}\n label={t(`event.${id}`, '')}\n required={isRequired}\n error={!!error}\n helperText={helperText}\n slotProps={{\n input: {\n ...params.InputProps,\n endAdornment: (\n <>\n {endAdornment}\n {params.InputProps.endAdornment}\n </>\n ),\n },\n }}\n />\n <IconButton onClick={helpClick} sx={{ display: helpClick ? 'flex' : 'none', margin: 'auto' }}>\n <HelpOutlined />\n </IconButton>\n </Box>\n ),\n [endAdornment, error, helpClick, helperText, id, isRequired, t]\n )\n\n return (\n <Autocomplete\n id={id}\n {...acProps}\n value={fixedValue}\n inputValue={inputValue}\n renderInput={renderInput}\n onChange={handleChange}\n onInputChange={handleInputChange}\n />\n )\n}\n\nEventProperty.displayName = 'EventProperty'\n\nexport default EventProperty\n","import type { ChangeEvent, SyntheticEvent } from 'react'\nimport type {\n DeepPartial,\n DogEvent,\n EventClass,\n EventType,\n Organizer,\n Person,\n RegistrationClass,\n User,\n} from '../../../../types'\nimport type { DateValue } from '../../../components/DateRange'\nimport type { PartialEvent, SectionProps } from '../EventForm'\n\nimport { useCallback, useMemo, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport Grid2 from '@mui/material/Grid2'\nimport TextField from '@mui/material/TextField'\nimport { add, differenceInDays, eachDayOfInterval, isAfter, isSameDay } from 'date-fns'\n\nimport { zonedEndOfDay, zonedStartOfDay } from '../../../../i18n/dates'\nimport {\n defaultEntryEndDate,\n defaultEntryStartDate,\n isDetaultEntryEndDate,\n isDetaultEntryStartDate,\n} from '../../../../lib/event'\nimport { getRuleDate } from '../../../../rules'\nimport CollapsibleSection from '../../../components/CollapsibleSection'\nimport DateRange from '../../../components/DateRange'\n\nimport HelpPopover from './basicInfoSection/HelpPopover'\nimport EventClasses from './components/EventClasses'\nimport EventProperty from './components/EventProperty'\nimport { OFFICIAL_EVENT_TYPES } from './validation'\n\nexport interface Props extends Readonly<SectionProps> {\n readonly event: PartialEvent\n readonly eventTypes?: string[]\n readonly eventTypeClasses?: Record<string, RegistrationClass[]>\n readonly officials?: User[]\n readonly organizers?: Organizer[]\n readonly secretaries?: User[]\n readonly selectedEventType?: EventType\n}\n\nconst getTypeClasses = (eventType?: string, eventTypeClasses?: Record<string, RegistrationClass[]>) =>\n OFFICIAL_EVENT_TYPES.includes(eventType ?? '')\n ? (eventTypeClasses?.[eventType ?? ''] ?? [])\n : (eventTypeClasses?.unofficialEvents ?? [])\n\nexport default function BasicInfoSection({\n disabled,\n event,\n errorStates,\n helperTexts,\n fields,\n eventTypes,\n eventTypeClasses,\n officials,\n open,\n onOpenChange,\n organizers,\n onChange,\n secretaries,\n selectedEventType,\n}: Props) {\n const { t } = useTranslation()\n const [helpAnchorEl, setHelpAnchorEl] = useState<HTMLButtonElement | null>(null)\n const typeOptions = eventClassOptions(event, getTypeClasses(event.eventType, eventTypeClasses))\n const error =\n (errorStates &&\n (errorStates.startDate ||\n errorStates.endDate ||\n errorStates.kcId ||\n errorStates.eventType ||\n errorStates.classes ||\n errorStates.organizer ||\n errorStates.location ||\n errorStates.official ||\n errorStates.secretary)) ||\n false\n const helperText = error\n ? t('validation.event.errors')\n : t('validation.event.effectiveRules', { date: new Date(getRuleDate(event.startDate)) })\n const availableOfficials = useMemo(\n () =>\n officials?.filter(\n (o) =>\n !selectedEventType?.official ||\n !event.eventType ||\n (Array.isArray(o.officer) && o.officer.includes(event.eventType))\n ) ?? [],\n [event.eventType, officials, selectedEventType?.official]\n )\n const hasEntries = (event.entries ?? 0) > 0\n const handleDateChange = useCallback(\n (start: DateValue, end: DateValue) => {\n start = zonedStartOfDay(start ?? event.startDate)\n end = zonedEndOfDay(end ?? event.endDate)\n\n let { entryEndDate, entryStartDate } = event\n\n if (!isSameDay(start, event.startDate)) {\n if (isSameDay(end, event.endDate)) {\n // startDate changed and endDate remained the same => change endDate based on the previous distance between days\n end = add(start, { days: differenceInDays(event.endDate, event.startDate) })\n }\n if (isDetaultEntryStartDate(entryStartDate, event.startDate)) {\n entryStartDate = defaultEntryStartDate(start)\n }\n if (isDetaultEntryEndDate(entryEndDate, event.startDate)) {\n entryEndDate = defaultEntryEndDate(start)\n }\n }\n onChange?.({\n startDate: start,\n endDate: end,\n entryStartDate,\n entryEndDate,\n classes: updateClassDates(event, start, end),\n })\n },\n [event, onChange]\n )\n const openHelp = useCallback(\n (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => setHelpAnchorEl(e.currentTarget),\n []\n )\n const closeHelp = useCallback(() => setHelpAnchorEl(null), [])\n const handleTypeChange = useCallback(\n ({ eventType }: Partial<DogEvent>) => {\n const filterClasses = getTypeClasses(eventType, eventTypeClasses)\n const classes = event.classes.filter((c) => filterClasses.includes(c.class))\n const official = OFFICIAL_EVENT_TYPES.includes(eventType ?? '')\n const judges =\n official && (event.judges.length === 0 || !event.judges[0].official)\n ? [{ id: 0, name: '', official: true }, ...event.judges]\n : event.judges\n onChange?.({ eventType, classes, judges })\n },\n [event.classes, event.judges, eventTypeClasses, onChange]\n )\n const handleClassesChange = useCallback(\n (e: SyntheticEvent<Element, Event>, values: readonly DeepPartial<EventClass>[]) =>\n onChange?.({ classes: [...values] }),\n [onChange]\n )\n const handleNameChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => onChange?.({ name: e.target.value }),\n [onChange]\n )\n const isEqualId = useCallback((o?: { id?: number | string }, v?: { id?: number | string }) => o?.id === v?.id, [])\n const getId = useCallback((o?: string | { id?: number | string }) => (typeof o === 'string' ? o : (o?.id ?? '')), [])\n const getName = useCallback((o?: string | { name?: string }) => (typeof o === 'string' ? o : (o?.name ?? '')), [])\n const getNameOrEmail = useCallback(\n (o?: string | Partial<Person>) => (typeof o === 'string' ? o : o?.name || o?.email || ''),\n []\n )\n\n return (\n <CollapsibleSection\n title=\"Tapahtuman perustiedot\"\n open={open}\n onOpenChange={onOpenChange}\n error={error}\n helperText={helperText}\n >\n <Grid2 container spacing={1}>\n <Grid2 container spacing={1}>\n <Grid2 sx={{ width: 600 }}>\n <DateRange\n startLabel={t('event.startDate')}\n endLabel={t('event.endDate')}\n start={event.startDate}\n startDisabled={hasEntries || disabled}\n startError={errorStates?.startDate}\n startHelperText={helperTexts?.startDate}\n end={event.endDate}\n endDisabled={disabled}\n endError={errorStates?.endDate}\n endHelperText={helperTexts?.endDate}\n required\n onChange={handleDateChange}\n />\n </Grid2>\n <Grid2 sx={{ width: 300, display: 'none' /* KOE-451 */ }}>\n <EventProperty\n id=\"kcId\"\n disabled={disabled}\n freeSolo\n event={event}\n fields={fields}\n options={[]}\n getOptionLabel={(o) => (o === undefined ? '' : `${o}`)}\n onChange={onChange}\n helpClick={openHelp}\n />\n <HelpPopover anchorEl={helpAnchorEl} onClose={closeHelp}>\n {t('event.kcId_info')}\n </HelpPopover>\n </Grid2>\n </Grid2>\n <Grid2 container spacing={1}>\n <Grid2 sx={{ width: 300 }}>\n <EventProperty\n id=\"eventType\"\n disabled={hasEntries || disabled}\n event={event}\n fields={fields}\n options={eventTypes ?? []}\n onChange={handleTypeChange}\n />\n </Grid2>\n <Grid2 sx={{ width: 600 }}>\n <EventClasses\n id=\"class\"\n disabled={disabled}\n eventStartDate={event.startDate}\n eventEndDate={event.endDate}\n required={fields?.required.classes}\n errorStates={errorStates}\n helperTexts={helperTexts}\n requiredState={fields?.state.classes}\n value={event.classes}\n classes={typeOptions}\n label={t('event.classes')}\n showCount\n onChange={handleClassesChange}\n />\n </Grid2>\n </Grid2>\n <Grid2 container spacing={1}>\n <Grid2 sx={{ width: 600 }}>\n <TextField\n disabled={disabled}\n label=\"Tapahtuman nimi\"\n fullWidth\n value={event.name ?? ''}\n onChange={handleNameChange}\n />\n </Grid2>\n </Grid2>\n <Grid2 container spacing={1}>\n <Grid2 sx={{ width: 600 }}>\n <EventProperty\n disabled={disabled}\n event={event}\n fields={fields}\n getOptionKey={getId}\n getOptionLabel={getName}\n id=\"organizer\"\n isOptionEqualToValue={isEqualId}\n mapValue={(v: Organizer) => (v ? { id: v.id, name: v.name } : v)}\n onChange={onChange}\n options={organizers ?? []}\n renderOption={(props, option) => {\n if (!option) return null\n return (\n <li {...props} key={option.id}>\n {option.name}\n </li>\n )\n }}\n />\n </Grid2>\n <Grid2 sx={{ width: 300 }}>\n <EventProperty\n disabled={disabled}\n event={event}\n fields={fields}\n freeSolo\n id=\"location\"\n onChange={onChange}\n options={[]}\n />\n </Grid2>\n </Grid2>\n <Grid2 container spacing={1}>\n <Grid2 sx={{ width: 450 }}>\n <EventProperty\n disabled={disabled}\n event={event}\n fields={fields}\n getOptionKey={getId}\n getOptionLabel={getNameOrEmail}\n id=\"official\"\n isOptionEqualToValue={isEqualId}\n onChange={onChange}\n options={availableOfficials}\n />\n </Grid2>\n <Grid2 sx={{ width: 450 }}>\n <EventProperty\n disabled={disabled}\n event={event}\n fields={fields}\n getOptionKey={getId}\n getOptionLabel={getNameOrEmail}\n id=\"secretary\"\n isOptionEqualToValue={isEqualId}\n onChange={onChange}\n options={secretaries ?? []}\n />\n </Grid2>\n </Grid2>\n </Grid2>\n </CollapsibleSection>\n )\n}\n\nfunction eventClassOptions(event: PartialEvent | undefined, typeClasses: RegistrationClass[]) {\n if (!event?.startDate || !event?.endDate) {\n return []\n }\n const days = eachDayOfInterval({\n start: event.startDate,\n end: event.endDate,\n })\n const result: EventClass[] = []\n for (const day of days) {\n result.push(\n ...typeClasses.map((c) => ({\n class: c,\n date: day,\n }))\n )\n }\n return result\n}\n\nfunction updateClassDates(event: PartialEvent, start: Date, end: Date) {\n const result: EventClass[] = []\n for (const c of event.classes) {\n const date = zonedStartOfDay(add(start, { days: differenceInDays(c.date ?? event.startDate, event.startDate) }))\n if (!isAfter(date, end)) {\n result.push({ ...c, date })\n }\n }\n return result\n}\n","import type { ChangeEvent } from 'react'\nimport type { PublicContactInfo } from '../../../../../types'\n\nimport { useCallback, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport Checkbox from '@mui/material/Checkbox'\nimport FormControlLabel from '@mui/material/FormControlLabel'\nimport FormGroup from '@mui/material/FormGroup'\nimport TextField from '@mui/material/TextField'\n\ninterface Props {\n readonly disabled?: boolean\n readonly defaults: PublicContactInfo | undefined\n readonly name: string\n readonly show?: Partial<PublicContactInfo>\n readonly onChange: (name: string, props: PublicContactInfo) => void\n}\n\nexport default function ContactInfoSelect({ disabled, name, show, defaults, onChange }: Props) {\n const { t } = useTranslation()\n const [state, setState] = useState({\n name: show?.name ?? '',\n email: show?.email ?? '',\n phone: show?.phone ?? '',\n })\n\n const handleChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n const prop = event.target.name as keyof PublicContactInfo\n console.log(prop)\n const value = {\n ...state,\n [prop]: event.target.value,\n }\n setState(value)\n onChange(name, value)\n },\n [name, onChange, state]\n )\n\n const handleCheck = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n const prop = event.target.name as keyof PublicContactInfo\n const value = {\n ...state,\n [prop]: event.target.checked ? (defaults?.[prop] ?? '') : '',\n }\n setState(value)\n onChange(name, value)\n },\n [defaults, name, onChange, state]\n )\n\n return (\n <FormGroup>\n <FormControlLabel\n disabled={disabled}\n control={<Checkbox checked={state.name !== ''} name=\"name\" onChange={handleCheck} />}\n label={t('contact.name')}\n />\n <FormControlLabel\n disabled={disabled}\n control={<Checkbox checked={state.email !== ''} name=\"email\" onChange={handleCheck} />}\n label={t('contact.email')}\n />\n <FormControlLabel\n disabled={disabled}\n control={<Checkbox checked={state.phone !== ''} name=\"phone\" onChange={handleCheck} />}\n label={t('contact.phone')}\n />\n <TextField disabled={disabled} name=\"name\" value={state.name} onChange={handleChange} />\n <TextField disabled={disabled} name=\"email\" value={state.email} onChange={handleChange} />\n <TextField disabled={disabled} name=\"phone\" value={state.phone} onChange={handleChange} />\n </FormGroup>\n )\n}\n","import type { ContactInfo, DeepPartial, PublicContactInfo, User } from '../../../../types'\n\nimport { useTranslation } from 'react-i18next'\nimport Grid2 from '@mui/material/Grid2'\n\nimport CollapsibleSection from '../../../components/CollapsibleSection'\n\nimport ContactInfoSelect from './contactInfoSection/ContactInfoSelect'\n\ninterface Props {\n readonly contactInfo: DeepPartial<ContactInfo> | undefined\n readonly official: Partial<User> | undefined\n readonly secretary: Partial<User> | undefined\n readonly disabled?: boolean\n readonly error?: boolean\n readonly helperText?: string\n readonly open?: boolean\n readonly onChange: (changes: { contactInfo: DeepPartial<ContactInfo> }) => void\n readonly onOpenChange?: (value: boolean) => void\n}\n\nexport default function ContactInfoSection({\n contactInfo,\n disabled,\n error,\n helperText,\n onChange,\n onOpenChange,\n official,\n open,\n secretary,\n}: Props) {\n const { t } = useTranslation()\n const handleChange = (name: string, props: Partial<PublicContactInfo>) =>\n onChange({\n contactInfo: {\n ...contactInfo,\n [name]: props,\n },\n })\n\n return (\n <CollapsibleSection\n title={t('event.contactInfo')}\n open={open}\n onOpenChange={onOpenChange}\n error={error}\n helperText={helperText}\n >\n <Grid2 container spacing={1}>\n <Grid2 container spacing={1}>\n <Grid2 sx={{ width: 300 }}>\n {t(`event.official`)}\n <ContactInfoSelect\n disabled={disabled}\n defaults={official}\n name=\"official\"\n show={contactInfo?.official}\n onChange={handleChange}\n />\n </Grid2>\n <Grid2 sx={{ width: 300 }}>\n {t(`event.secretary`)}\n <ContactInfoSelect\n disabled={disabled}\n defaults={secretary}\n name=\"secretary\"\n show={contactInfo?.secretary}\n onChange={handleChange}\n />\n </Grid2>\n </Grid2>\n </Grid2>\n </CollapsibleSection>\n )\n}\n","import type { AutocompleteChangeReason } from '@mui/material'\nimport type { SyntheticEvent } from 'react'\nimport type { RegistrationClass, RegistrationDate } from '../../../../../../types'\nimport type { SectionProps } from '../../../EventForm'\n\nimport { useCallback, useMemo } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport Box from '@mui/material/Box'\nimport Stack from '@mui/material/Stack'\nimport { useRecoilValue } from 'recoil'\n\nimport { applyNewGroupsToDogEventClass } from '../../../../../../lib/event'\nimport AutocompleteMulti from '../../../../../components/AutocompleteMulti'\nimport { adminEventTypeGroupsSelector } from '../../../../recoil'\n\ninterface Props extends Pick<SectionProps, 'disabled' | 'event' | 'onChange'> {\n eventClass: RegistrationClass\n}\n\nexport const ClassGroups = ({ disabled, event, eventClass, onChange }: Readonly<Props>) => {\n const { t } = useTranslation()\n const typeGroups = useRecoilValue(adminEventTypeGroupsSelector(event.eventType))\n const defaultGroups = useMemo(() => typeGroups.filter((g) => g !== 'kp'), [typeGroups])\n const classes = useMemo(() => event.classes.filter((c) => c.class === eventClass), [event.classes, eventClass])\n const options = useMemo(\n () => classes.flatMap((c) => typeGroups.map((time) => ({ date: c.date, time }))),\n [classes, typeGroups]\n )\n const value = useMemo(\n () =>\n classes.flatMap<RegistrationDate>(\n (c) =>\n c.groups?.map<RegistrationDate>((time) => ({ date: c.date, time })) ??\n defaultGroups.map((time) => ({ date: c.date, time })) // by default all but kp are selected\n ),\n [classes, defaultGroups]\n )\n\n const getGroupLabel = useCallback(\n (o: RegistrationDate) =>\n t('dateFormat.weekday', { date: o.date }) + (o.time ? ' ' + t(`registration.timeLong.${o.time}`) : ''),\n [t]\n )\n\n const handleChange = useCallback(\n (e: SyntheticEvent<Element, Event>, value: RegistrationDate[], _reason: AutocompleteChangeReason) => {\n onChange?.(applyNewGroupsToDogEventClass(event, eventClass, defaultGroups, value))\n },\n [defaultGroups, event, eventClass, onChange]\n )\n\n return (\n <Stack direction=\"row\" gap={1} alignItems=\"center\" key={eventClass}>\n <Box minWidth={40}>{eventClass}</Box>\n <AutocompleteMulti\n disabled={disabled}\n label={t('registration.dates')}\n onChange={handleChange}\n isOptionEqualToValue={(o, v) => o.date?.valueOf() === v.date?.valueOf() && o.time === v.time}\n getOptionLabel={getGroupLabel}\n options={options}\n value={value}\n />\n </Stack>\n )\n}\n","import type { PublicDogEvent } from '../types'\n\nimport { useRecoilValue } from 'recoil'\n\nimport { getEventDays } from '../lib/event'\nimport { adminEventTypeGroupsSelector } from '../pages/admin/recoil'\n\nexport const useAdminEventDatesOptions = (\n event: Pick<PublicDogEvent, 'classes' | 'endDate' | 'startDate'> & Partial<Pick<PublicDogEvent, 'eventType'>>,\n eventClass?: string\n) => {\n const eventTypeGroups = useRecoilValue(adminEventTypeGroupsSelector(event.eventType))\n\n if (event.classes?.length) {\n return event.classes\n .filter((c) => (eventClass ? c.class === eventClass : true))\n .flatMap((c) => (c.groups ?? eventTypeGroups).map((time) => ({ date: c.date, time })))\n }\n\n return getEventDays(event).flatMap((date) => eventTypeGroups.map((time) => ({ date, time })))\n}\n","import type { AutocompleteChangeReason } from '@mui/material'\nimport type { SyntheticEvent } from 'react'\nimport type { RegistrationDate } from '../../../../../../types'\nimport type { SectionProps } from '../../../EventForm'\n\nimport { useCallback, useEffect, useMemo } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport Stack from '@mui/material/Stack'\nimport { useRecoilValue } from 'recoil'\n\nimport { useAdminEventDatesOptions } from '../../../../../../hooks/useAdminEventDatesOptions'\nimport { useAdminEventRegistrationDates } from '../../../../../../hooks/useAdminEventRegistrationDates'\nimport { applyNewGroupsToDogEventDates } from '../../../../../../lib/event'\nimport AutocompleteMulti from '../../../../../components/AutocompleteMulti'\nimport { adminEventTypeGroupsSelector } from '../../../../recoil'\n\ntype Props = Pick<SectionProps, 'disabled' | 'event' | 'onChange'>\n\nexport const EventGroups = ({ disabled, event, onChange }: Readonly<Props>) => {\n const { t } = useTranslation()\n const options = useAdminEventDatesOptions(event)\n const defaultDates = useAdminEventRegistrationDates(event)\n const typeGroups = useRecoilValue(adminEventTypeGroupsSelector(event.eventType))\n const defaultGroups = useMemo(() => typeGroups.filter((g) => g !== 'kp'), [typeGroups])\n\n const value: RegistrationDate[] = useMemo(\n () =>\n applyNewGroupsToDogEventDates(\n event,\n defaultGroups,\n event.dates?.filter((d): d is RegistrationDate => !!d.date && !!d.time) ?? defaultDates\n ).dates ?? defaultDates,\n [defaultDates, defaultGroups, event]\n )\n\n const getGroupLabel = useCallback(\n (o: RegistrationDate) =>\n t('dateFormat.weekday', { date: o.date }) + (o.time ? ' ' + t(`registration.timeLong.${o.time}`) : ''),\n [t]\n )\n\n const handleChange = useCallback(\n (e: SyntheticEvent<Element, Event>, newValue: RegistrationDate[], _reason: AutocompleteChangeReason) => {\n onChange?.(applyNewGroupsToDogEventDates(event, defaultGroups, newValue))\n },\n [defaultGroups, event, onChange]\n )\n\n useEffect(() => {\n if (typeGroups.length <= 1) return\n\n const lengthChanged = event.dates?.length !== value.length\n const dateChanged = !lengthChanged && event.dates?.some((v, i) => value[i].date.valueOf() !== v.date.valueOf())\n if (lengthChanged || dateChanged) {\n onChange?.({ classes: [], dates: value })\n }\n }, [event.dates, onChange, typeGroups.length, value])\n\n if (typeGroups.length <= 1) return null\n\n return (\n <Stack direction=\"row\" gap={1} alignItems=\"center\">\n <AutocompleteMulti\n disabled={disabled}\n label={t('registration.dates')}\n getOptionLabel={getGroupLabel}\n isOptionEqualToValue={(o, v) => o.date?.valueOf() === v.date?.valueOf() && o.time === v.time}\n onChange={handleChange}\n options={options}\n value={value}\n />\n </Stack>\n )\n}\n","import type { RegistrationClass } from '../../../../../types'\nimport type { SectionProps } from '../../EventForm'\n\nimport { useMemo } from 'react'\nimport Stack from '@mui/material/Stack'\n\nimport { getUniqueEventClasses } from '../../../../../lib/event'\nimport { OFFICIAL_EVENT_TYPES } from '../validation'\n\nimport { ClassGroups } from './eventDates/ClassGroups'\nimport { EventGroups } from './eventDates/EventGroups'\n\ninterface Props extends Pick<SectionProps, 'disabled' | 'event' | 'onChange'> {\n readonly eventTypeClasses?: RegistrationClass[]\n}\n\nexport const EventDates = ({ disabled, event, eventTypeClasses, onChange }: Readonly<Props>) => {\n const classes = useMemo(() => getUniqueEventClasses(event), [event])\n const isOfficial = useMemo(() => OFFICIAL_EVENT_TYPES.includes(event.eventType ?? ''), [event.eventType])\n\n if (isOfficial ? eventTypeClasses?.length === 0 : event.classes.length === 0) {\n return <EventGroups disabled={disabled} event={event} onChange={onChange} />\n }\n\n return (\n <Stack gap={1}>\n {classes.map((c) => (\n <ClassGroups key={c} disabled={disabled} event={event} eventClass={c} onChange={onChange} />\n ))}\n </Stack>\n )\n}\n","export default function PlacesDisplay({ value }: { readonly value: number }) {\n return <>{value === 0 ? '' : value}</>\n}\n","import type { ChangeEvent } from 'react'\nimport type { DeepPartial, EventClass } from '../../../../../types'\nimport type { SectionProps } from '../../EventForm'\n\nimport { useCallback, useEffect, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport Box from '@mui/material/Box'\nimport Checkbox from '@mui/material/Checkbox'\nimport FormControlLabel from '@mui/material/FormControlLabel'\nimport FormHelperText from '@mui/material/FormHelperText'\nimport Stack from '@mui/material/Stack'\nimport Table from '@mui/material/Table'\nimport TableBody from '@mui/material/TableBody'\nimport TableCell from '@mui/material/TableCell'\nimport TableHead from '@mui/material/TableHead'\nimport TableRow from '@mui/material/TableRow'\nimport Typography from '@mui/material/Typography'\nimport { enqueueSnackbar } from 'notistack'\n\nimport { getEventClassesByDays, getUniqueEventClasses } from '../../../../../lib/event'\nimport { NumberInput } from '../../../../components/NumberInput'\nimport { compareEventClass } from '../components/EventClasses'\n\nimport PlacesDisplay from './eventFormPlaces/PlacesDisplay'\n\nexport default function EventFormPlaces({ event, disabled, helperTexts, onChange }: Readonly<SectionProps>) {\n const { t } = useTranslation()\n const [classesEnabled, setClassesEnabled] = useState(\n event.classes?.reduce((prev, cur) => prev + (cur?.places ?? 0), 0) > 0\n )\n const uniqueClasses = getUniqueEventClasses(event)\n const classesByDays = getEventClassesByDays(event)\n\n const handleChange = (c: DeepPartial<EventClass>) => (value?: number) => {\n const newClasses = event.classes.map((ec) => structuredClone(ec))\n const cls = newClasses.find((ec) => compareEventClass(ec, c) === 0)\n if (cls) {\n cls.places = Math.max(0, Math.min(value ?? 0, 200))\n }\n const total = newClasses.reduce((prev, cur) => prev + (cur?.places ?? 0), 0)\n onChange?.({ classes: newClasses, places: total > 0 ? total : event.places })\n }\n\n const handlePlacesChange = useCallback(\n (value?: number) => onChange?.({ places: Math.min(Math.max(value ?? 0, 0), 999) }),\n [onChange]\n )\n\n const handleByClassesChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>, checked: boolean) => {\n setClassesEnabled(checked)\n const newClasses = event.classes.map((ec) => structuredClone(ec))\n const count = newClasses.length\n for (let diff = event.places ?? 0, i = 0; i < count; i++) {\n const classValue = checked ? Math.min(Math.max(Math.round(diff / (count - i)), 0), 200) : 0\n newClasses[i].places = classValue\n diff -= classValue\n }\n onChange?.({ classes: newClasses })\n },\n [event.classes, event.places, onChange]\n )\n\n useEffect(() => {\n // KOE-808 fix places count\n if (classesEnabled) {\n const total = event.classes.reduce((acc, cur) => acc + (cur?.places ?? 0), 0)\n if (total !== event.places) {\n onChange?.({ places: total })\n enqueueSnackbar(`Korjaus: Koepaikkojen määrä muutettu ${event.places} -> ${total}`, { variant: 'info' })\n }\n }\n }, [classesEnabled, event.classes, event.places, onChange])\n\n return (\n <Box sx={{ p: 1, border: '1px dashed #ddd', borderRadius: 1 }}>\n <Stack direction=\"column\" alignItems=\"normal\">\n <Stack direction=\"row\" justifyContent=\"space-between\" alignItems=\"start\">\n <Typography variant=\"subtitle1\">Koepaikkojen määrä</Typography>\n <FormControlLabel\n sx={{ m: 0 }}\n disabled={disabled}\n control={<Checkbox sx={{ py: 0 }} size=\"small\" checked={classesEnabled} onChange={handleByClassesChange} />}\n label=\"Luokittain\"\n name=\"classesEnabled\"\n />\n </Stack>\n <Table size=\"small\" sx={{ '& .MuiTextField-root': { m: 0, width: '10ch' } }}>\n <TableHead>\n <TableRow>\n <TableCell>{t('date')}</TableCell>\n {uniqueClasses.map((c) => (\n <TableCell key={`head${c}`} align=\"center\">\n {c}\n </TableCell>\n ))}\n <TableCell align=\"center\">Yhteensä</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {classesByDays.map(({ day, classes }) => {\n let dayTotal = 0\n return (\n <TableRow key={day.toISOString()}>\n <TableCell component=\"th\" scope=\"row\">\n {t('dateFormat.wdshort', { date: day })}\n </TableCell>\n {uniqueClasses.map((c) => {\n const cls = classes.find((cl) => cl.class === c)\n dayTotal += cls?.places ?? 0\n return (\n <TableCell key={c} align=\"center\">\n {cls ? (\n <NumberInput\n disabled={disabled || !classesEnabled}\n value={cls.places}\n onChange={handleChange(cls)}\n />\n ) : (\n ''\n )}\n </TableCell>\n )\n })}\n <TableCell align=\"center\">\n <PlacesDisplay value={dayTotal} />\n </TableCell>\n </TableRow>\n )\n })}\n <TableRow>\n <TableCell component=\"th\" scope=\"row\">\n Yhteensä\n </TableCell>\n {uniqueClasses.map((c) => (\n <TableCell key={c} align=\"center\">\n <PlacesDisplay\n value={event.classes\n .filter((ec) => ec.class === c)\n .reduce((prev, cur) => prev + (cur?.places ?? 0), 0)}\n />\n </TableCell>\n ))}\n <TableCell align=\"center\">\n <NumberInput\n id=\"event.places\"\n disabled={disabled || classesEnabled}\n value={event.places}\n onChange={handlePlacesChange}\n />\n </TableCell>\n </TableRow>\n </TableBody>\n </Table>\n <FormHelperText error>{helperTexts?.places}</FormHelperText>\n </Stack>\n </Box>\n )\n}\n","import type { SyntheticEvent } from 'react'\nimport type { Priority } from '../../../../lib/priority'\nimport type { EventClass, RegistrationClass } from '../../../../types'\nimport type { DateValue } from '../../../components/DateRange'\nimport type { SectionProps } from '../EventForm'\n\nimport { useCallback, useEffect, useMemo } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport FormHelperText from '@mui/material/FormHelperText'\nimport Grid2 from '@mui/material/Grid2'\nimport { clamp, sub } from 'date-fns'\nimport { enqueueSnackbar } from 'notistack'\n\nimport { zonedEndOfDay, zonedStartOfDay } from '../../../../i18n/dates'\nimport { getPrioritySort, PRIORITY, priorityValuesToPriority } from '../../../../lib/priority'\nimport AutocompleteMulti from '../../../components/AutocompleteMulti'\nimport CollapsibleSection from '../../../components/CollapsibleSection'\nimport DateRange from '../../../components/DateRange'\n\nimport { EventDates } from './entrySection/EventDates'\nimport EventFormPlaces from './entrySection/EventFormPlaces'\n\nexport interface Props extends Readonly<SectionProps> {\n readonly eventTypeClasses?: RegistrationClass[]\n}\n\nexport default function EntrySection(props: Props) {\n const { t } = useTranslation(['translation', 'breed'])\n const { disabled, event, eventTypeClasses, fields, helperTexts, onChange, onOpenChange, open } = props\n const prioritySort = getPrioritySort(t)\n const error = helperTexts?.entryStartDate ?? helperTexts?.entryEndDate ?? helperTexts?.places\n const helperText = error ? t('validation.event.errors') : ''\n const eventPriority = useMemo(\n () => priorityValuesToPriority(event.priority).sort(prioritySort),\n [event.priority, prioritySort]\n )\n const sortedPriorities = useMemo(() => PRIORITY.slice().sort(prioritySort), [prioritySort])\n\n const handleDateChange = useCallback(\n (start: DateValue, end: DateValue) =>\n onChange?.({\n entryStartDate: start ? zonedStartOfDay(start) : undefined,\n entryEndDate: end ? zonedEndOfDay(end) : undefined,\n }),\n [onChange]\n )\n const handlePriorityChange = useCallback(\n (e: SyntheticEvent<Element, Event>, value: readonly Priority[]) =>\n onChange?.({ priority: value.map((p) => p.value) }),\n [onChange]\n )\n\n useEffect(() => {\n // KOE-808 make sure classes are inside event dates\n if (!event.classes.some((c) => c.date < event.startDate || c.date > event.endDate)) return\n\n const newClasses: EventClass[] = []\n const interval = { start: event.startDate, end: event.endDate }\n for (const cls of event.classes) {\n if (cls.date < interval.start || cls.date > interval.end) {\n const date = clamp(cls.date, interval)\n newClasses.push({ ...cls, date })\n enqueueSnackbar(\n `Korjaus: ${cls.class}/${t('dateFormat.wdshort', { date: cls.date })} siirretty ${cls.class}/${t('dateFormat.wdshort', { date })}`,\n { variant: 'info' }\n )\n } else {\n newClasses.push(cls)\n }\n }\n onChange?.({ classes: newClasses })\n }, [event.classes, event.endDate, event.startDate, onChange, t])\n\n return (\n <CollapsibleSection\n title=\"Ilmoittautuminen\"\n open={open}\n onOpenChange={onOpenChange}\n error={!!error}\n helperText={helperText}\n >\n <Grid2 container spacing={1}>\n <Grid2 container spacing={1}>\n <Grid2 width={600}>\n <DateRange\n startDisabled={disabled}\n startLabel=\"Ilmoittautumisaika alkaa\"\n endLabel=\"Ilmoittautumisaika päättyy\"\n start={event.entryStartDate ?? null}\n defaultStart={sub(event.startDate, { weeks: 6 })}\n end={event.entryEndDate ?? null}\n defaultEnd={sub(event.startDate, { weeks: 3 })}\n range={{ start: event.createdAt ?? sub(event.startDate, { weeks: 9 }), end: event.startDate }}\n required={fields?.required.entryStartDate ?? fields?.required.entryEndDate}\n onChange={handleDateChange}\n />\n <FormHelperText error>{helperTexts?.entryStartDate ?? helperTexts?.entryEndDate}</FormHelperText>\n </Grid2>\n </Grid2>\n <Grid2 container spacing={1}>\n <Grid2 minWidth={600} maxWidth={900}>\n <EventDates disabled={disabled} event={event} eventTypeClasses={eventTypeClasses} onChange={onChange} />\n </Grid2>\n </Grid2>\n <Grid2 container spacing={1}>\n <Grid2 width={600}>\n <EventFormPlaces disabled={disabled} {...props} />\n </Grid2>\n </Grid2>\n <Grid2 container spacing={1}>\n <Grid2 minWidth={600} maxWidth={900}>\n <AutocompleteMulti\n disabled={disabled}\n disablePortal\n groupBy={(o) => t(o.group)}\n isOptionEqualToValue={(o, v) => o?.value === v?.value}\n getOptionLabel={(o) => t(o.name)}\n options={sortedPriorities}\n onChange={handlePriorityChange}\n value={eventPriority}\n label={'Etusijat'}\n />\n </Grid2>\n </Grid2>\n </Grid2>\n </CollapsibleSection>\n )\n}\n","import type { ChangeEvent } from 'react'\nimport type { Headquarters } from '../../../../types'\nimport type { SectionProps } from '../EventForm'\n\nimport { useCallback } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport Grid2 from '@mui/material/Grid2'\nimport TextField from '@mui/material/TextField'\n\nimport CollapsibleSection from '../../../components/CollapsibleSection'\n\ninterface Props extends Readonly<Omit<SectionProps, 'event'>> {\n readonly headquarters?: Partial<Headquarters>\n}\n\nexport default function HeadquartersSection({\n headquarters,\n disabled,\n onChange,\n onOpenChange,\n open,\n errorStates,\n helperTexts,\n}: Props) {\n const { t } = useTranslation()\n const handleChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>, props: Partial<Headquarters>) => {\n e.preventDefault()\n onChange?.({ headquarters: { ...props } })\n },\n [onChange]\n )\n const handleNameChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => handleChange(e, { name: e.target.value }),\n [handleChange]\n )\n const handleAddressChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => handleChange(e, { address: e.target.value }),\n [handleChange]\n )\n const handleZipCodeChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => handleChange(e, { zipCode: e.target.value }),\n [handleChange]\n )\n const handleDistrictChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => handleChange(e, { postalDistrict: e.target.value }),\n [handleChange]\n )\n\n return (\n <CollapsibleSection\n title={t('event.headquarters.title')}\n open={open}\n onOpenChange={onOpenChange}\n error={errorStates?.headquarters}\n helperText={helperTexts?.headquarters}\n >\n <Grid2 container spacing={1}>\n <Grid2 container spacing={1}>\n <Grid2 sx={{ width: 300 }}>\n <TextField\n disabled={disabled}\n label={t('event.headquarters.name')}\n defaultValue={headquarters?.name ?? ''}\n onChange={handleNameChange}\n fullWidth\n />\n </Grid2>\n <Grid2 sx={{ width: 300 }}>\n <TextField\n disabled={disabled}\n label={t('event.headquarters.address')}\n defaultValue={headquarters?.address ?? ''}\n onChange={handleAddressChange}\n fullWidth\n />\n </Grid2>\n </Grid2>\n <Grid2 container spacing={1}>\n <Grid2 sx={{ width: 300 }}>\n <TextField\n disabled={disabled}\n label={t('event.headquarters.zipCode')}\n defaultValue={headquarters?.zipCode ?? ''}\n onChange={handleZipCodeChange}\n fullWidth\n />\n </Grid2>\n <Grid2 sx={{ width: 300 }}>\n <TextField\n disabled={disabled}\n label={t('event.headquarters.postalDistrict')}\n defaultValue={headquarters?.postalDistrict ?? ''}\n onChange={handleDistrictChange}\n fullWidth\n />\n </Grid2>\n </Grid2>\n </Grid2>\n </CollapsibleSection>\n )\n}\n","import type { DeepPartial, EventClass, EventType, Judge, PublicJudge } from '../../../../../types'\nimport type { PartialEvent } from '../../EventForm'\n\nimport { isSameDay } from 'date-fns'\n\nexport type PartialPublicJudge = Partial<PublicJudge>\nexport type PartialPublicJudgeValue = PartialPublicJudge | PartialPublicJudge[]\n\nexport const filterJudges = (\n judges: Judge[],\n eventJudges: PublicJudge[],\n id: number | undefined,\n eventType?: EventType\n) =>\n judges\n .filter((j) => !eventType?.official || j.eventTypes.includes(eventType.eventType))\n .filter((j) => j.id === id || !eventJudges.find((ej) => ej.id === j.id))\n\nexport const hasJudge = (c: DeepPartial<EventClass>, id?: number) =>\n Array.isArray(c.judge) ? c.judge.find((j) => j.id === id) : c.judge?.id === id\n\nexport const filterClassesByJudgeId = (classes?: EventClass[], id?: number) => classes?.filter((c) => hasJudge(c, id))\n\nexport const toArray = (j?: PartialPublicJudge): PartialPublicJudge[] => (j ? [j] : [])\nexport const makeArray = (j?: PartialPublicJudgeValue) => (Array.isArray(j) ? [...j] : toArray(j))\nexport const selectJudge = (j?: PartialPublicJudgeValue, judge?: PublicJudge): PartialPublicJudge[] => {\n const a = makeArray(j)\n if (judge) {\n const index = a.findIndex((cj) => cj.id === judge.id)\n if (index === -1) {\n a.push(judge)\n } else {\n a[index] = judge\n }\n }\n return a\n}\n\nexport const removeJudge = (j?: PartialPublicJudgeValue, id?: number): PartialPublicJudge[] => {\n const a = makeArray(j)\n return a.filter((cj) => cj.id !== id)\n}\n\nexport const updateJudge = (\n event: PartialEvent,\n id: number | undefined,\n judge: PublicJudge | undefined,\n values?: DeepPartial<EventClass>[]\n) => {\n const isSelected = (c: DeepPartial<EventClass>) =>\n values?.find((v) => event && isSameDay(v.date ?? event.startDate, c.date ?? event.startDate) && v.class === c.class)\n return event.classes?.map((c) => ({\n ...c,\n judge: isSelected(c) ? selectJudge(c.judge, judge) : removeJudge(c.judge, id),\n }))\n}\n","import type { PublicJudge } from '../../../../../types'\nimport type { SectionProps } from '../../EventForm'\n\nimport Grid2 from '@mui/material/Grid2'\n\nimport EventClasses from '../components/EventClasses'\n\nimport { filterClassesByJudgeId, updateJudge } from './utils'\n\ninterface Props extends Pick<SectionProps, 'event' | 'disabled' | 'onChange'> {\n readonly judge: PublicJudge\n readonly index: number\n}\n\nconst JudgeClasses = ({ disabled, event, index, judge, onChange }: Props) => {\n return (\n <Grid2 sx={{ width: 300 }} display={event.eventType === 'NOWT' ? 'NONE' : undefined}>\n <EventClasses\n id={`class${index}`}\n disabled={disabled}\n eventStartDate={event.startDate}\n eventEndDate={event.endDate}\n value={filterClassesByJudgeId(event.classes, judge.id)}\n classes={[...event.classes]}\n label=\"Arvostelee luokat\"\n onChange={(_e, values) =>\n onChange?.({\n classes: updateJudge(event, judge.id, judge, [...values]),\n })\n }\n />\n </Grid2>\n )\n}\n\nexport default JudgeClasses\n","import type { EventType, Judge, PublicJudge } from '../../../../../types'\nimport type { SectionProps } from '../../EventForm'\n\nimport { useTranslation } from 'react-i18next'\nimport DeleteOutline from '@mui/icons-material/DeleteOutline'\nimport Button from '@mui/material/Button'\nimport Grid2 from '@mui/material/Grid2'\n\nimport AutocompleteSingle from '../../../../components/AutocompleteSingle'\n\nimport JudgeClasses from './JudgeClasses'\nimport { filterClassesByJudgeId, filterJudges, hasJudge, updateJudge } from './utils'\n\ninterface Props extends Pick<SectionProps, 'event' | 'disabled' | 'onChange'> {\n readonly judges: Judge[]\n readonly selectedEventType?: EventType\n readonly judge: PublicJudge\n readonly index: number\n}\n\nexport const OfficialJudge = ({ event, judge, index, selectedEventType, judges, disabled, onChange }: Props) => {\n const { t } = useTranslation()\n\n const title = selectedEventType?.official && index === 0 ? t('judgeChief') : t('judge') + ` ${index + 1}`\n const value = judges.find((j) => j.id === judge.id)\n\n return (\n <Grid2 container spacing={1} alignItems=\"center\">\n <Grid2 sx={{ width: 300 }}>\n <AutocompleteSingle\n disabled={disabled}\n value={value}\n label={title}\n error={!!judge.id && !value}\n helperText={!!judge.id && !value ? `Tuomari ${judge.name} (${judge.id}) ei ole käytettävissä` : ''}\n getOptionLabel={(o) => o?.name || ''}\n options={filterJudges(judges, event.judges, judge.id, selectedEventType)}\n onChange={(value) => {\n const newJudge: PublicJudge | undefined = value\n ? { id: value.id, name: value.name, official: true }\n : undefined\n const newJudges = [...event.judges]\n const oldJudge = newJudges.splice(index, 1)[0]\n if (newJudge) {\n newJudges.splice(index, 0, newJudge)\n }\n onChange?.({\n judges: newJudges,\n classes: updateJudge(event, newJudge?.id, newJudge, filterClassesByJudgeId(event.classes, oldJudge.id)),\n })\n }}\n />\n </Grid2>\n <JudgeClasses disabled={disabled} event={event} index={index} judge={judge} onChange={onChange} />\n <Grid2>\n <Button\n startIcon={<DeleteOutline />}\n disabled={disabled || (selectedEventType?.official && index === 0)}\n onClick={() =>\n onChange?.({\n judges: event.judges.filter((j) => j !== judge),\n classes: event.classes.map((c) => (hasJudge(c, judge.id) ? { ...c, judge: undefined } : c)),\n })\n }\n >\n Poista tuomari\n </Button>\n </Grid2>\n </Grid2>\n )\n}\n","import type { CountryCode } from '../types/countries'\n\nexport const countries: readonly CountryCode[] = [\n 'AF',\n 'AX',\n 'NL',\n 'AL',\n 'DZ',\n 'AS',\n 'AD',\n 'AO',\n 'AI',\n 'AQ',\n 'AG',\n 'AE',\n 'AR',\n 'AM',\n 'AW',\n 'AU',\n 'AZ',\n 'BS',\n 'BH',\n 'BD',\n 'BB',\n 'BE',\n 'BZ',\n 'BJ',\n 'BM',\n 'BT',\n 'BO',\n 'BA',\n 'BW',\n 'BV',\n 'BR',\n 'IO',\n 'VG',\n 'BN',\n 'BG',\n 'BF',\n 'BI',\n 'KY',\n 'CL',\n 'CK',\n 'CR',\n 'CW',\n 'DJ',\n 'DM',\n 'DO',\n 'EC',\n 'EG',\n 'SV',\n 'ER',\n 'ES',\n 'ZA',\n 'GS',\n 'KR',\n 'SS',\n 'ET',\n 'FK',\n 'FJ',\n 'PH',\n 'FO',\n 'GA',\n 'GM',\n 'GE',\n 'GH',\n 'GI',\n 'GD',\n 'GL',\n 'GP',\n 'GU',\n 'GT',\n 'GG',\n 'GN',\n 'GW',\n 'GY',\n 'HT',\n 'HM',\n 'HN',\n 'HK',\n 'SJ',\n 'ID',\n 'IN',\n 'IQ',\n 'IR',\n 'IE',\n 'IS',\n 'GB',\n 'IL',\n 'IT',\n 'TL',\n 'AT',\n 'JM',\n 'JP',\n 'YE',\n 'JE',\n 'JO',\n 'CX',\n 'KH',\n 'CM',\n 'CA',\n 'CV',\n 'BQ',\n 'KZ',\n 'KE',\n 'CF',\n 'CN',\n 'KG',\n 'KI',\n 'CO',\n 'KM',\n 'CD',\n 'CG',\n 'CC',\n 'GR',\n 'HR',\n 'CU',\n 'KW',\n 'CY',\n 'LA',\n 'LV',\n 'LS',\n 'LB',\n 'LR',\n 'LY',\n 'LI',\n 'LT',\n 'LU',\n 'EH',\n 'MO',\n 'MG',\n 'MW',\n 'MV',\n 'MY',\n 'ML',\n 'MT',\n 'IM',\n 'MA',\n 'MH',\n 'MQ',\n 'MR',\n 'MU',\n 'YT',\n 'MX',\n 'FM',\n 'MD',\n 'MC',\n 'MN',\n 'ME',\n 'MS',\n 'MZ',\n 'MM',\n 'NA',\n 'NR',\n 'NP',\n 'NI',\n 'NE',\n 'NG',\n 'NU',\n 'NF',\n 'NO',\n 'CI',\n 'OM',\n 'PK',\n 'PW',\n 'PS',\n 'PA',\n 'PG',\n 'PY',\n 'PE',\n 'PN',\n 'KP',\n 'MK',\n 'MP',\n 'PT',\n 'PR',\n 'PL',\n 'GQ',\n 'QA',\n 'FR',\n 'TF',\n 'GF',\n 'PF',\n 'RE',\n 'RO',\n 'RW',\n 'SE',\n 'SH',\n 'KN',\n 'LC',\n 'VC',\n 'BL',\n 'MF',\n 'PM',\n 'DE',\n 'SB',\n 'ZM',\n 'WS',\n 'SM',\n 'ST',\n 'SA',\n 'SN',\n 'RS',\n 'SC',\n 'SL',\n 'SG',\n 'SX',\n 'SK',\n 'SI',\n 'SO',\n 'LK',\n 'SD',\n 'FI',\n 'SR',\n 'CH',\n 'SZ',\n 'SY',\n 'TJ',\n 'TW',\n 'TZ',\n 'DK',\n 'TH',\n 'TG',\n 'TK',\n 'TO',\n 'TT',\n 'TD',\n 'CZ',\n 'TN',\n 'TR',\n 'TM',\n 'TC',\n 'TV',\n 'UG',\n 'UA',\n 'HU',\n 'UY',\n 'NC',\n 'NZ',\n 'UZ',\n 'BY',\n 'VU',\n 'VA',\n 'VE',\n 'RU',\n 'VN',\n 'EE',\n 'WF',\n 'US',\n 'UM',\n 'VI',\n 'ZW',\n]\n","import type { EventType, PublicJudge } from '../../../../../types'\nimport type { SectionProps } from '../../EventForm'\n\nimport { useTranslation } from 'react-i18next'\nimport DeleteOutline from '@mui/icons-material/DeleteOutline'\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport Grid2 from '@mui/material/Grid2'\nimport TextField from '@mui/material/TextField'\n\nimport { countries } from '../../../../../lib/countries'\nimport AutocompleteSingle from '../../../../components/AutocompleteSingle'\n\nimport JudgeClasses from './JudgeClasses'\nimport { filterClassesByJudgeId, hasJudge, updateJudge } from './utils'\n\ninterface Props extends Pick<SectionProps, 'event' | 'disabled' | 'onChange'> {\n readonly selectedEventType?: EventType\n readonly judge: PublicJudge\n readonly index: number\n}\n\nexport const UnofficialJudge = ({ event, judge, index, selectedEventType, disabled, onChange }: Props) => {\n const { t } = useTranslation()\n\n const title = selectedEventType?.official && index === 0 ? t('judgeChief') : t('judge') + ` ${index + 1}`\n\n return (\n <Grid2 key={'unofficial-' + index} container spacing={1} alignItems=\"center\">\n <Grid2 sx={{ width: 300 }}>\n <TextField\n fullWidth\n label={title}\n value={judge.name}\n onChange={(e) => {\n const newJudges = [...event.judges]\n const newJudge = (newJudges[index] = { ...newJudges[index], name: e.target.value })\n onChange?.({\n judges: newJudges,\n classes: updateJudge(event, judge.id, newJudge, filterClassesByJudgeId(event.classes, judge.id)),\n })\n }}\n />\n </Grid2>\n <JudgeClasses disabled={disabled} event={event} index={index} judge={judge} onChange={onChange} />\n <Grid2 sx={{ width: 200 }}>\n <AutocompleteSingle\n options={countries}\n getOptionLabel={(option) => t(option, { ns: 'country' })}\n renderOption={(props, option) => (\n <Box component=\"li\" sx={{ '& > img': { mr: 2, flexShrink: 0 } }} {...props}>\n <img\n loading=\"lazy\"\n width=\"20\"\n srcSet={`https://flagcdn.com/w40/${option.toLowerCase()}.png 2x`}\n src={`https://flagcdn.com/w20/${option.toLowerCase()}.png`}\n alt=\"\"\n />\n {t(option, { ns: 'country' })}\n </Box>\n )}\n value={judge.foreing ? judge.country : 'FI'}\n label={'Maa'}\n disabled={!judge.foreing}\n onChange={(country) => {\n const newJudges = [...event.judges]\n const newJudge = (newJudges[index] = { ...newJudges[index], country: country ?? undefined })\n onChange?.({\n judges: newJudges,\n classes: updateJudge(event, judge.id, newJudge, filterClassesByJudgeId(event.classes, judge.id)),\n })\n }}\n />\n </Grid2>\n <Grid2>\n <Button\n startIcon={<DeleteOutline />}\n disabled={disabled}\n onClick={() =>\n onChange?.({\n judges: event.judges.filter((j) => j !== judge),\n classes: event.classes.map((c) => (hasJudge(c, judge.id) ? { ...c, judge: undefined } : c)),\n })\n }\n >\n Poista tuomari\n </Button>\n </Grid2>\n </Grid2>\n )\n}\n","import type { DeepPartial, DogEvent, EventType, Judge } from '../../../../types'\nimport type { PartialEvent, SectionProps } from '../EventForm'\n\nimport { useEffect, useMemo } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport AddOutlined from '@mui/icons-material/AddOutlined'\nimport Button from '@mui/material/Button'\nimport Grid2 from '@mui/material/Grid2'\n\nimport CollapsibleSection from '../../../components/CollapsibleSection'\n\nimport { OfficialJudge } from './judgeSection/OfficialJudge'\nimport { UnofficialJudge } from './judgeSection/UnofficialJudge'\nimport { makeArray } from './judgeSection/utils'\nimport { validateEventField } from './validation'\n\ninterface Props extends Readonly<SectionProps> {\n readonly judges: Judge[]\n readonly selectedEventType?: EventType\n}\n\nconst onlyValidJudges = (\n classes: PartialEvent['classes'],\n judges: PartialEvent['judges']\n): Pick<DeepPartial<DogEvent>, 'judges' | 'classes'> => {\n const validJudges = judges.filter((j) => j.official || j.foreing)\n return {\n judges: validJudges,\n classes: classes.map((c) => ({\n ...c,\n judge: makeArray(c.judge).filter((j) => validJudges.find((vj) => vj.id === j.id)),\n })),\n }\n}\n\nexport default function JudgesSection({\n event,\n disabled,\n judges,\n fields,\n onChange,\n onOpenChange,\n open,\n selectedEventType,\n}: Props) {\n const { t } = useTranslation()\n const officialJudges = event.judges.filter((j) => j.official)\n const otherJudges = event.judges.filter((j) => !j.official)\n const unofficialJudges = otherJudges.filter((j) => !j.foreing)\n const validationError = useMemo(\n () => event && fields?.required.judges && validateEventField(event, 'judges', true),\n [event, fields?.required.judges]\n )\n const error = useMemo(\n () => !!validationError || officialJudges.some((ej) => ej.id && !judges.find((j) => j.id === ej.id)),\n [judges, officialJudges, validationError]\n )\n const helperText: string = useMemo(() => {\n if (validationError) {\n return t(`validation.event.${validationError.key}`, {\n ...validationError.opts,\n state: fields?.state?.judges ?? 'draft',\n })\n }\n return error ? t('validation.event.errors') : ''\n }, [error, fields?.state?.judges, t, validationError])\n\n useEffect(() => {\n if (selectedEventType?.official && unofficialJudges.length) {\n onChange?.(onlyValidJudges(event.classes, event.judges))\n }\n }, [event.classes, event.judges, onChange, selectedEventType?.official, unofficialJudges.length])\n\n return (\n <CollapsibleSection\n title={t('judges')}\n open={open}\n onOpenChange={onOpenChange}\n error={error}\n helperText={helperText}\n >\n <Grid2 container spacing={1}>\n {event.judges.map((judge, index) =>\n judge.official ? (\n <OfficialJudge\n key={judge.id || judge.name || index}\n event={event}\n disabled={disabled}\n judges={judges}\n onChange={onChange}\n selectedEventType={selectedEventType}\n judge={judge}\n index={index}\n />\n ) : (\n <UnofficialJudge\n key={judge.id || judge.name || index}\n event={event}\n disabled={disabled}\n onChange={onChange}\n selectedEventType={selectedEventType}\n judge={judge}\n index={index}\n />\n )\n )}\n <Grid2>\n <Button\n disabled={disabled}\n startIcon={<AddOutlined />}\n onClick={() => {\n onChange?.({\n judges: [...event.judges].concat({ id: 0, name: '', official: true }),\n })\n }}\n >\n Lisää tuomari\n </Button>\n <Button\n disabled={disabled}\n startIcon={<AddOutlined />}\n onClick={() => {\n onChange?.({\n judges: [...event.judges].concat({\n id: (otherJudges.length + 1) * -1,\n name: '',\n official: false,\n foreing: true,\n }),\n })\n }}\n >\n Lisää ulkomainen tuomari\n </Button>\n <Button\n disabled={disabled || (selectedEventType?.official ?? true)}\n startIcon={<AddOutlined />}\n sx={{ display: (selectedEventType?.official ?? true) ? 'NONE' : undefined }}\n onClick={() =>\n onChange?.({\n judges: [...event.judges].concat({ id: (otherJudges.length + 1) * -1, name: '', official: false }),\n })\n }\n >\n Lisää epävirallinen tuomari\n </Button>\n </Grid2>\n </Grid2>\n </CollapsibleSection>\n )\n}\n","import type { DogEvent } from '../../../../../types'\nimport type { EventPropertyProps } from './EventProperty'\n\nimport { useCallback } from 'react'\nimport InputAdornment from '@mui/material/InputAdornment'\n\nimport EventProperty from './EventProperty'\n\ntype Props = EventPropertyProps<'cost' | 'costMember', true>\n\nconst validate = (v: string) => v.replace(/\\D/g, '')\n\nconst numberOrUndefined = (value?: string | number) => {\n const number = Number(value)\n if (value === null || isNaN(number)) return undefined\n return number\n}\n\nexport default function EventPrice(props: Props) {\n const toString = useCallback((v?: string | number) => v?.toString() ?? '', [])\n const handleChange = useCallback(\n (newProps: Partial<DogEvent>) => {\n props.onChange?.({ [props.id]: numberOrUndefined(newProps[props.id]) })\n },\n [props]\n )\n return (\n <EventProperty\n {...props}\n freeSolo\n getOptionLabel={toString}\n endAdornment={<InputAdornment position=\"end\">€</InputAdornment>}\n onChange={handleChange}\n validateInput={validate}\n />\n )\n}\n","import type { SectionProps } from '../EventForm'\n\nimport { useTranslation } from 'react-i18next'\nimport Grid2 from '@mui/material/Grid2'\nimport { useRecoilValue } from 'recoil'\n\nimport CollapsibleSection from '../../../components/CollapsibleSection'\nimport { eventMemerPricesSelector, eventPricesSelector } from '../../../recoil'\n\nimport EventPrice from './components/EventPrice'\n\nexport default function PaymentSection({\n disabled,\n errorStates,\n event,\n fields,\n onChange,\n open,\n onOpenChange,\n}: Readonly<SectionProps>) {\n const { t } = useTranslation()\n const priceOptions = useRecoilValue(eventPricesSelector)\n const memberPriceOptions = useRecoilValue(eventMemerPricesSelector)\n const error = errorStates?.cost ?? errorStates?.costMember\n const helperText = error ? t('validation.event.errors') : ''\n\n return (\n <CollapsibleSection\n title={t('paymentDetails')}\n open={open}\n onOpenChange={onOpenChange}\n error={error}\n helperText={helperText}\n >\n <Grid2 container spacing={1}>\n <Grid2 container spacing={1}>\n <Grid2 sx={{ width: 200 }}>\n <EventPrice\n id=\"cost\"\n disabled={disabled}\n options={priceOptions}\n event={event}\n fields={fields}\n onChange={onChange}\n />\n </Grid2>\n <Grid2 sx={{ width: 200 }}>\n <EventPrice\n id=\"costMember\"\n disabled={disabled}\n options={memberPriceOptions}\n event={event}\n fields={fields}\n onChange={onChange}\n />\n </Grid2>\n </Grid2>\n </Grid2>\n </CollapsibleSection>\n )\n}\n","import type { Theme } from '@mui/material'\nimport type { DeepPartial, DogEvent, EventState } from '../../../types'\nimport type { FieldRequirements } from './eventForm/validation'\n\nimport { useCallback, useMemo, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport Cancel from '@mui/icons-material/Cancel'\nimport Save from '@mui/icons-material/Save'\nimport { useMediaQuery } from '@mui/material'\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport Paper from '@mui/material/Paper'\nimport Stack from '@mui/material/Stack'\nimport { useRecoilValue, waitForAll } from 'recoil'\n\nimport { isEventOver, merge } from '../../../lib/utils'\nimport { AsyncButton } from '../../components/AsyncButton'\nimport AutocompleteSingle from '../../components/AutocompleteSingle'\nimport {\n adminActiveEventTypesSelector,\n adminActiveJudgesSelector,\n adminEventTypeClassesAtom,\n adminUserOrganizersSelector,\n adminUsersAtom,\n} from '../recoil'\n\nimport AdditionalInfoSection from './eventForm/AdditionalInfoSection'\nimport BasicInfoSection from './eventForm/BasicInfoSection'\nimport ContactInfoSection from './eventForm/ContactInfoSection'\nimport EntrySection from './eventForm/EntrySection'\nimport HeadquartersSection from './eventForm/HeadquartersSection'\nimport JudgesSection from './eventForm/JudgesSection'\nimport PaymentSection from './eventForm/PaymentSection'\nimport { requiredFields, validateEvent } from './eventForm/validation'\n\nexport interface PartialEvent\n extends Omit<\n DeepPartial<DogEvent>,\n 'startDate' | 'endDate' | 'classes' | 'judges' | 'official' | 'secretary' | 'dates'\n > {\n startDate: DogEvent['startDate']\n endDate: DogEvent['endDate']\n classes: DogEvent['classes']\n judges: DogEvent['judges']\n official?: Partial<DogEvent['official']>\n secretary?: Partial<DogEvent['secretary']>\n dates?: DogEvent['dates']\n}\n\nexport interface SectionProps {\n readonly event: PartialEvent\n readonly disabled?: boolean\n readonly fields?: FieldRequirements\n readonly errorStates?: { [Property in keyof DogEvent]?: boolean }\n readonly helperTexts?: { [Property in keyof DogEvent]?: string }\n readonly open?: boolean\n readonly onChange?: (event: DeepPartial<DogEvent>) => void\n readonly onOpenChange?: (value: boolean) => void\n}\n\ninterface Props {\n readonly event: DogEvent\n readonly changes?: boolean\n readonly disabled?: boolean\n readonly onSave?: () => Promise<void>\n readonly onCancel?: () => void\n readonly onChange?: (event: DogEvent) => void\n}\n\nconst SELECTABLE_EVENT_STATES: EventState[] = ['draft', 'tentative', 'confirmed', 'cancelled']\n\nexport default function EventForm({ event, changes, disabled, onSave, onCancel, onChange }: Props) {\n const { t } = useTranslation()\n const md = useMediaQuery((theme: Theme) => theme.breakpoints.up('md'))\n const [activeEventTypes, activeJudges, eventTypeClasses, users, organizers] = useRecoilValue(\n waitForAll([\n adminActiveEventTypesSelector,\n adminActiveJudgesSelector,\n adminEventTypeClassesAtom,\n adminUsersAtom,\n adminUserOrganizersSelector,\n ])\n )\n const [errors, setErrors] = useState(event ? validateEvent(event) : [])\n const [open, setOpen] = useState<{ [key: string]: boolean | undefined }>({\n basic: true,\n judges: md,\n entry: md,\n payment: md,\n hq: md,\n contact: md,\n info: md,\n })\n const valid = errors.length === 0\n const allDisabled = disabled || isEventOver(event)\n const stateDisabled = allDisabled || !SELECTABLE_EVENT_STATES.includes(event.state ?? 'draft')\n const fields = useMemo(() => requiredFields(event), [event])\n const officials = useMemo(() => users.filter((u) => u.officer), [users])\n const secretaries = useMemo(\n () =>\n event.organizer?.id ? users.filter((u) => !!u.officer || !!u.roles?.[event.organizer?.id ?? '']) : officials,\n [event.organizer?.id, officials, users]\n )\n const selectedEventType = useMemo(\n () => activeEventTypes?.find((et) => et.eventType === event.eventType),\n [activeEventTypes, event.eventType]\n )\n const selectedEventTypeClasses = useMemo(\n () => eventTypeClasses?.[event.eventType],\n [event.eventType, eventTypeClasses]\n )\n\n const handleChange = useCallback(\n (props: DeepPartial<DogEvent>) => {\n if (!event) {\n return\n }\n const newState = merge<DogEvent>(event, props)\n setErrors(validateEvent(newState))\n onChange?.(newState)\n },\n [event, onChange]\n )\n\n const handleOpenChange = useCallback(\n (id: keyof typeof open, value: boolean) => {\n const newState = md\n ? {\n ...open,\n [id]: value,\n }\n : {\n basic: false,\n judges: false,\n entry: false,\n payment: false,\n hq: false,\n contact: false,\n info: false,\n [id]: value,\n }\n setOpen(newState)\n },\n [md, open]\n )\n const getStateLabel = useCallback((o: EventState): string => t(`event.states.${o}`), [t])\n const handleStateChange = useCallback(\n (value: NonNullable<EventState>) => handleChange({ state: value || undefined }),\n [handleChange]\n )\n const handleBasicOpenChange = useCallback((value: boolean) => handleOpenChange('basic', value), [handleOpenChange])\n const handleJudgesOpenChange = useCallback((value: boolean) => handleOpenChange('judges', value), [handleOpenChange])\n const handleEntryOpenChange = useCallback((value: boolean) => handleOpenChange('entry', value), [handleOpenChange])\n const handlePaymentOpenChange = useCallback(\n (value: boolean) => handleOpenChange('payment', value),\n [handleOpenChange]\n )\n const handleHQOpenChange = useCallback((value: boolean) => handleOpenChange('hq', value), [handleOpenChange])\n const handleContactOpenChange = useCallback(\n (value: boolean) => handleOpenChange('contact', value),\n [handleOpenChange]\n )\n const handleInfoOpenChange = useCallback((value: boolean) => handleOpenChange('info', value), [handleOpenChange])\n\n const { errorStates, helperTexts } = useMemo(() => {\n const errorStates: { [Property in keyof PartialEvent]?: boolean } = {}\n const helperTexts: { [Property in keyof PartialEvent]?: string } = {}\n for (const error of errors) {\n helperTexts[error.opts.field] = t(`validation.event.${error.key}`, error.opts)\n errorStates[error.opts.field] = true\n }\n return { errorStates, helperTexts }\n }, [errors, t])\n\n return (\n <Paper\n elevation={2}\n sx={{\n display: 'flex',\n flexDirection: 'column',\n flexGrow: 1,\n overflow: 'auto',\n maxHeight: '100%',\n maxWidth: '100%',\n }}\n >\n <Box sx={{ p: 1 }}>\n <AutocompleteSingle\n disabled={stateDisabled}\n disableClearable\n getOptionLabel={getStateLabel}\n label={t('event.state')}\n onChange={handleStateChange}\n options={SELECTABLE_EVENT_STATES}\n sx={{ width: 200 }}\n value={event?.state ?? 'draft'}\n />\n </Box>\n\n <Box\n sx={{\n pb: 0.5,\n overflow: 'auto',\n bgcolor: 'background.form',\n '& .MuiInputBase-root': { bgcolor: 'background.default' },\n }}\n >\n <BasicInfoSection\n disabled={allDisabled}\n errorStates={errorStates}\n event={event}\n eventTypeClasses={eventTypeClasses}\n eventTypes={activeEventTypes.map((et) => et.eventType)}\n fields={fields}\n helperTexts={helperTexts}\n officials={officials}\n onChange={handleChange}\n onOpenChange={handleBasicOpenChange}\n open={open.basic}\n organizers={organizers}\n secretaries={secretaries}\n selectedEventType={selectedEventType}\n />\n <JudgesSection\n disabled={allDisabled}\n errorStates={errorStates}\n event={event}\n fields={fields}\n helperTexts={helperTexts}\n judges={activeJudges}\n onChange={handleChange}\n onOpenChange={handleJudgesOpenChange}\n open={open.judges}\n selectedEventType={selectedEventType}\n />\n <EntrySection\n disabled={allDisabled}\n errorStates={errorStates}\n event={event}\n eventTypeClasses={selectedEventTypeClasses}\n fields={fields}\n helperTexts={helperTexts}\n onChange={handleChange}\n onOpenChange={handleEntryOpenChange}\n open={open.entry}\n />\n <PaymentSection\n disabled={allDisabled}\n errorStates={errorStates}\n event={event}\n fields={fields}\n onChange={handleChange}\n onOpenChange={handlePaymentOpenChange}\n open={open.payment}\n />\n <HeadquartersSection\n disabled={allDisabled}\n errorStates={errorStates}\n headquarters={event.headquarters}\n fields={fields}\n helperTexts={helperTexts}\n onChange={handleChange}\n onOpenChange={handleHQOpenChange}\n open={open.hq}\n />\n <ContactInfoSection\n disabled={allDisabled}\n error={errorStates.contactInfo}\n contactInfo={event.contactInfo}\n official={event.official}\n secretary={event.secretary}\n helperText={helperTexts.contactInfo}\n onChange={handleChange}\n onOpenChange={handleContactOpenChange}\n open={open.contact}\n />\n <AdditionalInfoSection\n disabled={allDisabled}\n errorStates={errorStates}\n event={event}\n fields={fields}\n helperTexts={helperTexts}\n onChange={handleChange}\n onOpenChange={handleInfoOpenChange}\n open={open.info}\n />\n </Box>\n\n <Stack\n spacing={1}\n direction=\"row\"\n justifyContent=\"flex-end\"\n sx={{ p: 1, borderTop: '1px solid', borderColor: '#bdbdbd' }}\n >\n <AsyncButton\n color=\"primary\"\n disabled={!changes || !valid || allDisabled}\n startIcon={<Save />}\n variant=\"contained\"\n onClick={onSave}\n >\n {t('save')}\n </AsyncButton>\n <Button startIcon={<Cancel />} variant=\"outlined\" onClick={onCancel}>\n {t('cancel')}\n </Button>\n </Stack>\n </Paper>\n )\n}\n","import type { ReactNode } from 'react'\n\nimport Box from '@mui/material/Box'\n\ninterface Props {\n children?: ReactNode\n minWidth?: number\n}\n\nconst FullPageFlex = ({ children, minWidth }: Props) => {\n return (\n <Box\n sx={{\n display: 'flex',\n p: 0,\n overflow: minWidth ? undefined : 'hidden',\n height: '100%',\n flexDirection: 'column',\n alignItems: 'flex-start',\n }}\n >\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n flexGrow: 1,\n width: '100%',\n minHeight: 300,\n minWidth,\n }}\n >\n {children}\n </Box>\n </Box>\n )\n}\n\nexport default FullPageFlex\n","import type { ValidationResult, Validators } from '../../../../i18n/validation'\nimport type { DogEvent, EventState, PublicContactInfo } from '../../../../types'\nimport type { PartialEvent } from '../EventForm'\n\nimport { zonedEndOfDay, zonedStartOfDay } from '../../../../i18n/dates'\nimport { unique } from '../../../../lib/utils'\n\ntype EventCallback = (event: PartialEvent) => boolean\ntype EventFlag = boolean | EventCallback\ntype EventFlags = Partial<{\n [Property in keyof DogEvent]: EventFlag\n}>\n\ntype RequiredFieldState = Partial<{\n [Property in keyof DogEvent]: EventState\n}>\n\ntype RequiredFields = Partial<{\n [Property in keyof DogEvent]: boolean\n}>\n\nconst STATE_INCLUSION: Record<EventState, EventState[]> = {\n draft: ['draft'],\n tentative: ['tentative', 'draft'],\n confirmed: ['confirmed', 'tentative', 'draft'],\n cancelled: ['cancelled'],\n // following are not user-selectable states\n picked: ['confirmed'],\n invited: ['confirmed'],\n started: ['confirmed'],\n ended: ['confirmed'],\n completed: ['confirmed'],\n}\n\nexport const OFFICIAL_EVENT_TYPES = ['NOU', 'NOME-B', 'NOME-B SM', 'NOME-A', 'NOME-A SM', 'NOWT', 'NOWT SM', 'NKM']\n\nconst REQUIRED_BY_STATE: Record<EventState, EventFlags> = {\n draft: {\n startDate: true,\n endDate: true,\n eventType: true,\n organizer: true,\n secretary: true,\n },\n tentative: {\n location: true,\n },\n confirmed: {\n classes: (event: PartialEvent) => event.eventType === 'NOME-B' || event.eventType === 'NOWT',\n // kcId: true,\n official: (event: PartialEvent) => !!event.eventType && OFFICIAL_EVENT_TYPES.includes(event.eventType),\n judges: true,\n places: true,\n entryStartDate: true,\n entryEndDate: true,\n cost: true,\n costMember: (event: PartialEvent) => !!event.costMember,\n contactInfo: true,\n headquarters: true,\n },\n cancelled: {},\n //\n picked: {},\n invited: {},\n started: {},\n ended: {},\n completed: {},\n}\n\nconst contactInfoShown = (contact?: Partial<PublicContactInfo>) => !!contact?.email || !!contact?.phone\n\nconst getMinJudgeCount = (event: PartialEvent) => {\n if (event.eventType === 'NOWT' || event.eventType === 'NOME-A') {\n return 2\n }\n return 1\n}\n\nconst ZIPCODE_REGEXP = /^\\d{5}$/\n\nexport const VALIDATORS: Validators<PartialEvent, 'event'> = {\n classes: (event, required) => {\n if (!required) {\n return false\n }\n if (!event.classes?.length) {\n return 'classes'\n }\n return false\n },\n contactInfo: (event, required) => {\n const contactInfo = event.contactInfo\n if (required && !contactInfoShown(contactInfo?.official) && !contactInfoShown(contactInfo?.secretary)) {\n return 'contactInfo'\n }\n if (required && !contactInfo?.secretary?.email) return 'secretaryEmail'\n return false\n },\n cost: (event, required) => required && !event.cost,\n costMember: (event) => {\n const cost = event.cost ?? 0\n if (event.costMember && cost < event.costMember) {\n return 'costMemberHigh'\n }\n return false\n },\n headquarters: (event, required) => {\n const headquarters = event.headquarters\n if (headquarters?.zipCode && !ZIPCODE_REGEXP.exec(headquarters.zipCode)) {\n return 'zipCode'\n }\n return false\n },\n judges: (event, required) => {\n if (!required) {\n return false\n }\n\n const minCount = getMinJudgeCount(event)\n if (event.judges?.filter((j) => j.id || j.name).length < minCount) {\n return { key: 'judgeCount', opts: { field: 'judges', length: minCount } }\n }\n\n if (event.eventType === 'NOWT') {\n // KOE-317 classes are required, but judges don't have to be assigned to classes\n return false\n }\n\n const list: string[] = []\n for (const c of event.classes) {\n if (Array.isArray(c.judge) ? !c.judge.length : !c.judge?.id) {\n list.push(c.class)\n }\n }\n return list.length ? { key: 'classesJudge', opts: { field: 'judges', list, length: list.length } } : false\n },\n\n places: (event, required) => {\n if (required && !event.places) {\n return true\n }\n const list: string[] = []\n if (required && event.eventType === 'NOME-B') {\n for (const c of event.classes) {\n if (!c.places) {\n list.push(c.class)\n }\n }\n }\n return list.length ? { key: 'placesClass', opts: { field: 'places', list, length: list.length } } : false\n },\n startDate: (event, required) => (required && event.startDate < zonedStartOfDay(new Date()) ? 'startDate' : false),\n endDate: (event, required) => (required && event.endDate < zonedEndOfDay(new Date()) ? 'endDate' : false),\n}\n\nexport type FieldRequirements = {\n state: RequiredFieldState\n required: RequiredFields\n}\n\nexport function requiredFields(event: PartialEvent): FieldRequirements {\n const states = STATE_INCLUSION[event.state ?? 'draft']\n const result: FieldRequirements = {\n state: {},\n required: {},\n }\n for (const state of states) {\n const required = REQUIRED_BY_STATE[state]\n for (const prop in required) {\n result.state[prop as keyof DogEvent] = state\n result.required[prop as keyof DogEvent] = resolve(required[prop as keyof DogEvent] ?? false, event)\n }\n }\n return result\n}\n\nfunction resolve(value: EventFlag | undefined, event: PartialEvent): boolean {\n return typeof value === 'function' ? value(event) : !!value\n}\n\nexport function validateEventField(\n event: PartialEvent,\n field: keyof DogEvent,\n required: boolean\n): ValidationResult<PartialEvent, 'event'> {\n const validator =\n VALIDATORS[field] ?? (() => required && (typeof event[field] === 'undefined' || event[field] === ''))\n const result = validator(event, required)\n if (!result) {\n return false\n }\n const state = event.state ?? 'draft'\n if (result === true) {\n return {\n key: 'validationError',\n opts: { field, state },\n }\n }\n if (typeof result === 'string') {\n return {\n key: result,\n opts: { field, state, type: event.eventType },\n }\n }\n return {\n key: result.key,\n opts: { state, type: event.eventType, ...result.opts },\n }\n}\n\nexport function validateEvent(event: PartialEvent) {\n const required = requiredFields(event).required\n const errors = []\n let field: keyof DogEvent\n const fields = unique(Object.keys(event).concat(Object.keys(required))) as Array<keyof DogEvent>\n for (field of fields) {\n const result = validateEventField(event, field, !!required[field])\n if (result) {\n if (typeof jest === 'undefined') {\n console.log(result)\n }\n errors.push(result)\n }\n }\n return errors\n}\n","import type { AtomEffect } from 'recoil'\nimport type { DogEvent } from '../../../../types'\n\nimport { DefaultValue } from 'recoil'\n\nimport { getAdminEvents } from '../../../../api/event'\nimport { idTokenAtom } from '../../../recoil'\n\nconst byStartDate = (a: DogEvent, b: DogEvent) => a.startDate.valueOf() - b.startDate.valueOf()\nconst sortEvents = (events: DogEvent[]): DogEvent[] => [...events].sort(byStartDate)\n\nexport const adminRemoteEventsEffect: AtomEffect<DogEvent[]> = ({ getPromise, setSelf, trigger }) => {\n if (trigger === 'get') {\n setSelf(\n getPromise(idTokenAtom).then((token) =>\n token ? getAdminEvents(token).then((events) => sortEvents(events)) : new DefaultValue()\n )\n /*\n Promise.all([getPromise(idTokenAtom), getPromise(adminEventsFetchedAtom)]).then(([token, lastModified]) =>\n token ? getAdminEvents(token, lastModified).then((events) => sortEvents(events)) : new DefaultValue()\n )\n */\n )\n }\n}\n","import type { ConfirmedEvent, DogEvent } from '../../../../types'\n\nimport { isPast } from 'date-fns'\nimport i18next from 'i18next'\nimport { DefaultValue, selector, selectorFamily } from 'recoil'\n\nimport { isConfirmedEvent } from '../../../../lib/typeGuards'\nimport { uniqueFn } from '../../../../lib/utils'\n\nimport {\n adminEventFilterTextAtom,\n adminEventIdAtom,\n adminEventsAtom,\n adminNewEventAtom,\n adminShowPastEventsAtom,\n} from './atoms'\n\nexport const adminEventSelector = selectorFamily<DogEvent | undefined, string | undefined>({\n key: 'adminEventSelector',\n get:\n (eventId) =>\n ({ get }) => {\n if (!eventId) {\n return get(adminNewEventAtom)\n }\n const events = get(adminEventsAtom)\n return events.find((e) => e.id === eventId)\n },\n set:\n (eventId) =>\n ({ get, set }, value) => {\n if (!value || value instanceof DefaultValue) {\n return\n }\n const events = get(adminEventsAtom)\n const index = events.findIndex((e) => e.id === eventId)\n const newEvents = [...events]\n const insert = index === -1\n newEvents.splice(insert ? newEvents.length : index, insert ? 0 : 1, value)\n set(adminEventsAtom, newEvents)\n },\n})\n\nexport const confirmedAdminEventSelector = selectorFamily<ConfirmedEvent | null, string | undefined>({\n key: 'confirmedAdminEvent',\n get:\n (eventId) =>\n ({ get }) => {\n const event = get(adminEventSelector(eventId))\n return isConfirmedEvent(event) ? event : null\n },\n})\n\nexport const adminCurrentEventSelector = selector({\n key: 'adminCurrentEvent',\n get: ({ get }) => {\n const eventId = get(adminEventIdAtom)\n return eventId ? get(adminEventSelector(eventId)) : undefined\n },\n set: ({ get, set }, newValue) => {\n if (!newValue || newValue instanceof DefaultValue) {\n return\n }\n const eventId = get(adminEventIdAtom)\n if (!eventId) {\n return\n }\n set(adminEventSelector(eventId), newValue)\n },\n})\n\nexport const adminFilteredEventsSelector = selector({\n key: 'adminFilteredEvents',\n get: ({ get }) => {\n const events = get(adminEventsAtom)\n const filter = get(adminEventFilterTextAtom).toLocaleLowerCase(i18next.language)\n const showPast = get(adminShowPastEventsAtom)\n\n return events.filter((event) => {\n return (\n !event.deletedAt &&\n (showPast || !event.startDate || !isPast(event.startDate)) &&\n (!filter ||\n [event.eventType, event.name, event.location, event.official?.name, event.secretary?.name]\n .join(' ')\n .toLocaleLowerCase(i18next.language)\n .includes(filter))\n )\n })\n },\n})\n\nexport const adminEventOrganizersSelector = selector({\n key: 'adminEventOrganizers',\n get: ({ get }) => {\n const events = get(adminEventsAtom)\n return uniqueFn(\n events.map((event) => event.organizer),\n (a, b) => a.id === b.id\n ).sort((a, b) => a.name.localeCompare(b.name, i18next.language))\n },\n})\n","import type { GridColumnVisibilityModel } from '@mui/x-data-grid'\nimport type { DogEvent, RegistrationClass } from '../../../../types'\n\nimport { addYears } from 'date-fns'\nimport { atom, atomFamily, selector } from 'recoil'\n\nimport { newEventEntryEndDate, newEventEntryStartDate, newEventStartDate } from '../../../../lib/event'\nimport { uniqueClasses } from '../../../../lib/utils'\nimport { localStorageEffect, logEffect, sessionStorageEffect } from '../../../recoil'\n\nimport { adminRemoteEventsEffect } from './effects'\nimport { adminCurrentEventSelector, adminEventSelector } from './selectors'\n\nexport const adminEventsFetchedAtom = atom<number | undefined>({\n key: 'adminEventsFetched',\n default: addYears(new Date(), -1).valueOf(),\n effects: [logEffect, sessionStorageEffect],\n})\n\nexport const adminEventsAtom = atom<DogEvent[]>({\n key: 'adminEvents',\n default: [],\n effects: [logEffect, sessionStorageEffect, adminRemoteEventsEffect],\n})\n\nexport const adminNewEventAtom = atom<DogEvent>({\n key: 'newEvent',\n default: {\n state: 'draft',\n startDate: newEventStartDate,\n endDate: newEventStartDate,\n entryStartDate: newEventEntryStartDate,\n entryEndDate: newEventEntryEndDate,\n classes: [],\n judges: [{ id: 0, name: '', official: true }],\n } as unknown as DogEvent,\n effects: [logEffect, localStorageEffect],\n})\n\nexport const adminShowPastEventsAtom = atom<boolean>({\n key: 'adminShowPastEvents',\n default: false,\n effects: [logEffect, localStorageEffect],\n})\n\nexport const adminEventFilterTextAtom = atom<string>({\n key: 'adminEventFilterText',\n default: '',\n effects: [logEffect, localStorageEffect],\n})\n\nexport const adminEventIdAtom = atom<string | undefined>({\n key: 'adminEventId',\n default: undefined,\n effects: [logEffect, localStorageEffect],\n})\n\nexport const adminEventClassAtom = atom<RegistrationClass | string>({\n key: 'adminEventClass',\n default: selector({\n key: 'adminEventClass/default',\n get: ({ get }) => {\n const event = get(adminCurrentEventSelector)\n return uniqueClasses(event)[0]\n },\n }),\n effects: [logEffect, sessionStorageEffect],\n})\n\nexport const adminEventColumnsAtom = atom<GridColumnVisibilityModel>({\n key: 'adminEventColumns',\n default: { id: false },\n effects: [logEffect, localStorageEffect],\n})\n\n/**\n * Existing event editing, edits stored to session storage\n */\nexport const adminEditableEventByIdAtom = atomFamily<DogEvent | undefined, string>({\n key: 'adminEditableEvent/Id',\n default: adminEventSelector,\n effects: [logEffect, sessionStorageEffect],\n})\n","import type { DogEvent } from '../../../../types'\n\nimport { useTranslation } from 'react-i18next'\nimport { useNavigate } from 'react-router-dom'\nimport { diff } from 'deep-object-diff'\nimport { useSnackbar } from 'notistack'\nimport { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil'\n\nimport { copyEventWithRegistrations, putEvent } from '../../../../api/event'\nimport { copyDogEvent, sanitizeDogEvent } from '../../../../lib/event'\nimport { Path } from '../../../../routeConfig'\nimport { eventsAtom, idTokenAtom, userSelector } from '../../../recoil'\n\nimport { adminEventIdAtom, adminNewEventAtom } from './atoms'\nimport { adminCurrentEventSelector } from './selectors'\n\nexport const useAdminEventActions = () => {\n const token = useRecoilValue(idTokenAtom)\n const user = useRecoilValue(userSelector)\n const setAdminEventId = useSetRecoilState(adminEventIdAtom)\n const [currentAdminEvent, setCurrentAdminEvent] = useRecoilState(adminCurrentEventSelector)\n const setNewEvent = useSetRecoilState(adminNewEventAtom)\n const [publicEvents, setPublicEvents] = useRecoilState(eventsAtom)\n const { enqueueSnackbar } = useSnackbar()\n const { t } = useTranslation()\n const navigate = useNavigate()\n\n return {\n copyCurrent,\n copyCurrentTest,\n deleteCurrent,\n save,\n }\n\n function updatePublicEvents(event: DogEvent, remove?: boolean): void {\n if (event.id) {\n const index = publicEvents.findIndex((e) => e.id === event.id)\n if (index >= 0) {\n const newEvents = [...publicEvents]\n if (remove) {\n newEvents.splice(index, 1)\n } else {\n newEvents.splice(index, 1, sanitizeDogEvent(event))\n }\n setPublicEvents(newEvents)\n } else if (!remove) {\n setPublicEvents([...publicEvents, sanitizeDogEvent(event)])\n }\n }\n }\n\n function copyCurrent() {\n if (!currentAdminEvent) {\n return\n }\n\n const copy = copyDogEvent(currentAdminEvent)\n\n setNewEvent(copy)\n navigate(Path.admin.newEvent)\n }\n\n async function copyCurrentTest() {\n if (!currentAdminEvent) {\n return\n }\n const saved = await copyEventWithRegistrations(currentAdminEvent.id, token)\n setAdminEventId(saved.id)\n setCurrentAdminEvent(saved)\n updatePublicEvents(saved)\n return saved\n }\n\n async function save(event: Partial<DogEvent>): Promise<DogEvent | undefined> {\n let changes: Partial<DogEvent> = event\n if (event.id && event.id === currentAdminEvent?.id) {\n const changedKeys = Object.keys(diff(currentAdminEvent, event))\n changes = { id: event.id }\n for (const key of changedKeys) {\n //@ts-expect-error typescript is just so stupid sometimes\n changes[key] = event[key]\n }\n }\n console.log(changes)\n const saved = await putEvent(changes, token)\n setAdminEventId(saved.id)\n setCurrentAdminEvent(saved)\n updatePublicEvents(saved)\n\n return saved\n }\n\n async function deleteCurrent() {\n if (!currentAdminEvent || currentAdminEvent.deletedAt) {\n return\n }\n\n await save({\n ...currentAdminEvent,\n deletedAt: new Date(),\n deletedBy: user?.name ?? user?.email,\n })\n\n updatePublicEvents(currentAdminEvent, true)\n\n enqueueSnackbar(t('deleteEventComplete'), { variant: 'info' })\n }\n}\n","import type { AtomEffect } from 'recoil'\nimport type { EmailTemplate, EmailTemplateId } from '../../../../types'\n\nimport i18next from 'i18next'\n\nimport { getEmailTemplates } from '../../../../api/email'\nimport { exhaustiveStringTuple } from '../../../../lib/typeGuards'\nimport { idTokenAtom } from '../../../recoil'\n\nconst templateIds = exhaustiveStringTuple<EmailTemplateId>()(\n 'access',\n 'cancel-early',\n 'cancel-picked',\n 'cancel-reserve',\n 'invitation',\n 'picked',\n 'receipt',\n 'refund',\n 'registration',\n 'reserve'\n)\n\nexport const adminRemoteEmailTemplatesEffect: AtomEffect<EmailTemplate[]> = ({ getPromise, setSelf, trigger }) => {\n if (trigger === 'get') {\n setSelf(\n getPromise(idTokenAtom).then((token) =>\n getEmailTemplates(token).then((emailTemplates) => {\n if (emailTemplates.length < templateIds.length) {\n for (const id of templateIds) {\n if (!emailTemplates.find((t) => t.id === id)) {\n emailTemplates.push({\n createdAt: new Date(),\n createdBy: '',\n en: '',\n fi: '',\n id: id as EmailTemplateId,\n modifiedAt: new Date(),\n modifiedBy: '',\n })\n }\n }\n }\n return emailTemplates.sort((a, b) => a.id.localeCompare(b.id, i18next.language))\n })\n )\n )\n }\n}\n","import type { EmailTemplate } from '../../../../types'\n\nimport { selectorFamily } from 'recoil'\n\nimport { adminEmailTemplatesAtom } from './atoms'\n\nexport const adminEmailTemplateSelector = selectorFamily<EmailTemplate | undefined, string | undefined>({\n key: 'adminEmailTemplateSelector',\n get:\n (templateId) =>\n ({ get }) => {\n if (!templateId) {\n return undefined\n }\n const templates = get(adminEmailTemplatesAtom)\n return templates.find((i) => i.id === templateId)\n },\n})\n","import type { EmailTemplate } from '../../../../types'\n\nimport { atom, atomFamily } from 'recoil'\n\nimport { logEffect, sessionStorageEffect } from '../../../recoil/effects'\n\nimport { adminRemoteEmailTemplatesEffect } from './effects'\nimport { adminEmailTemplateSelector } from './selectors'\n\nexport const adminEmailTemplatesAtom = atom<EmailTemplate[]>({\n key: 'adminEmailTemplates',\n default: [],\n effects: [logEffect, sessionStorageEffect, adminRemoteEmailTemplatesEffect],\n})\n\nexport const adminEditableTemplateByIdAtom = atomFamily<EmailTemplate | undefined, string | undefined>({\n key: 'adminEditableEmailTemplate/Id',\n default: adminEmailTemplateSelector,\n effects: [logEffect, sessionStorageEffect],\n})\n","import type { EmailTemplate } from '../../../../types'\n\nimport { useSnackbar } from 'notistack'\nimport { useRecoilState, useRecoilValue } from 'recoil'\n\nimport { putEmailTemplate } from '../../../../api/email'\nimport { idTokenAtom } from '../../../recoil'\n\nimport { adminEmailTemplatesAtom } from './atoms'\n\nexport const useAdminEmailTemplatesActions = () => {\n const token = useRecoilValue(idTokenAtom)\n const { enqueueSnackbar } = useSnackbar()\n const [emailTemplates, setEmailTemplates] = useRecoilState(adminEmailTemplatesAtom)\n\n return {\n async save(template: EmailTemplate) {\n const templates = [...emailTemplates]\n try {\n if (!token) throw new Error('missing token')\n const saved = await putEmailTemplate(template, token)\n const index = templates.findIndex((i) => i.id === saved.id)\n templates.splice(index, 1, saved)\n setEmailTemplates(templates)\n return true\n } catch (e: any) {\n enqueueSnackbar(`Virhe: ${e.result ?? ''}`, { variant: 'error' })\n }\n return false\n },\n }\n}\n","import type { EventType, EventTypeData } from '../types'\n\nimport http, { withToken } from './http'\n\nconst PATH = '/eventType/'\n\nexport async function getEventTypes(token: string, refresh?: boolean, signal?: AbortSignal) {\n const qs = refresh ? '?refresh' : ''\n return http.get<Array<EventType>>(PATH + qs, withToken({ signal }, token))\n}\n\nexport async function putEventType(eventType: EventTypeData, token?: string, signal?: AbortSignal): Promise<EventType> {\n return http.post<EventTypeData, EventType>(PATH, eventType, withToken({ signal }, token))\n}\n","import type { AtomEffect } from 'recoil'\nimport type { EventType } from '../../../../types'\n\nimport i18next from 'i18next'\nimport { DefaultValue } from 'recoil'\n\nimport { getEventTypes } from '../../../../api/eventType'\nimport { idTokenAtom } from '../../../recoil/user'\n\nexport const adminRemoteEventTypesEffect: AtomEffect<EventType[]> = ({ getPromise, setSelf, trigger }) => {\n if (trigger === 'get') {\n setSelf(\n getPromise(idTokenAtom).then((token) =>\n token\n ? getEventTypes(token).then((eventTypes) =>\n eventTypes.sort((a, b) => a.eventType.localeCompare(b.eventType, i18next.language))\n )\n : new DefaultValue()\n )\n )\n }\n}\n","import type { EventType, RegistrationClass, RegistrationTime } from '../../../../types'\n\nimport { atom } from 'recoil'\n\nimport { localStorageEffect, logEffect } from '../../../recoil/effects'\n\nimport { adminRemoteEventTypesEffect } from './effects'\n\nexport const adminEventTypesAtom = atom<EventType[]>({\n key: 'adminEventTypes',\n default: [],\n effects: [logEffect, localStorageEffect, adminRemoteEventTypesEffect],\n})\n\nexport const adminEventTypeFilterAtom = atom<string>({\n key: 'adminEventTypeFilter',\n default: '',\n})\n\nexport const adminEventTypeClassesAtom = atom<Record<string, RegistrationClass[]>>({\n key: 'adminEventTypeClasses',\n default: {\n unofficialEvents: ['ALO', 'AVO', 'VOI'],\n NOU: [],\n 'NOME-B': ['ALO', 'AVO', 'VOI'],\n 'NOME-B SM': ['VOI'],\n 'NOME-A': [],\n 'NOME-A SM': [],\n NOWT: ['ALO', 'AVO', 'VOI'],\n 'NOWT SM': ['VOI'],\n },\n})\n\nexport const adminEventTypeGroupsAtom = atom<Record<string, RegistrationTime[]>>({\n key: 'adminEventTypeGroups',\n default: {\n unofficialEvents: ['ap', 'ip', 'kp'],\n NOU: ['ap', 'ip', 'kp'],\n 'NOME-B': ['ap', 'ip', 'kp'],\n 'NOME-B SM': ['ap', 'ip', 'kp'],\n 'NOME-A': ['kp'],\n 'NOME-A SM': ['kp'],\n NOWT: ['kp'],\n 'NOWT SM': ['kp'],\n NKM: ['kp'],\n },\n})\n","import type { EventType, EventTypeData } from '../../../../types'\n\nimport i18next from 'i18next'\nimport { useRecoilState, useRecoilValue } from 'recoil'\n\nimport { getEventTypes, putEventType } from '../../../../api/eventType'\nimport { idTokenAtom } from '../../../recoil/user'\n\nimport { adminEventTypesAtom } from './atoms'\n\nconst sortEventTypes = (eventTypes: EventType[]) =>\n [...eventTypes].sort((a, b) => a.eventType.localeCompare(b.eventType, i18next.language))\n\nexport const useAdminEventTypeActions = () => {\n const [eventTypes, setEventTypes] = useRecoilState(adminEventTypesAtom)\n const token = useRecoilValue(idTokenAtom)\n\n return {\n refresh,\n save,\n }\n\n async function refresh() {\n if (!token) throw new Error('missing token')\n const eventTypes = await getEventTypes(token, true)\n setEventTypes(sortEventTypes(eventTypes))\n }\n\n async function save(eventType: EventTypeData) {\n const index = eventTypes.findIndex((j) => j.eventType === eventType.eventType)\n const insert = index === -1\n const saved = await putEventType(eventType, token)\n const newEventTypes = eventTypes.map<EventType>((j) => ({ ...j }))\n newEventTypes.splice(insert ? newEventTypes.length : index, insert ? 0 : 1, saved)\n setEventTypes(sortEventTypes(newEventTypes))\n }\n}\n","import type { Language, RegistrationTime } from '../../../../types'\n\nimport i18next from 'i18next'\nimport { selector, selectorFamily } from 'recoil'\n\nimport { OFFICIAL_EVENT_TYPES } from '../../components/eventForm/validation'\n\nimport { adminEventTypeFilterAtom, adminEventTypeGroupsAtom, adminEventTypesAtom } from './atoms'\n\nexport const adminActiveEventTypesSelector = selector({\n key: 'adminActiveEventTypes',\n get: ({ get }) => get(adminEventTypesAtom).filter((et) => et.active),\n})\n\nexport const adminFilteredEventTypesSelector = selector({\n key: 'adminFilteredEventTypes',\n get: ({ get }) => {\n const filter = get(adminEventTypeFilterAtom).toLocaleLowerCase(i18next.language)\n const list = get(adminEventTypesAtom)\n\n if (!filter) {\n return list\n }\n return list.filter((eventType) =>\n [eventType.eventType, eventType.description[i18next.language as Language]]\n .join(' ')\n .toLocaleLowerCase(i18next.language)\n .includes(filter)\n )\n },\n})\n\nexport const adminEventTypeGroupsSelector = selectorFamily<RegistrationTime[], string | undefined>({\n key: 'adminEventTypeGroupsSelector',\n get:\n (eventType) =>\n ({ get }) => {\n if (!eventType) return []\n const groups = get(adminEventTypeGroupsAtom)\n\n return OFFICIAL_EVENT_TYPES.includes(eventType) ? (groups[eventType] ?? []) : groups.unofficialEvents\n },\n})\n","import type { Judge } from '../types'\n\nimport http, { withToken } from './http'\n\nconst PATH = '/judge/'\n\nexport async function getJudges(token: string, refresh?: boolean, signal?: AbortSignal) {\n const qs = refresh ? '?refresh' : ''\n return http.get<Array<Judge>>(PATH + qs, withToken({ signal }, token))\n}\n\nexport async function putJudge(judge: Judge, token: string, signal?: AbortSignal): Promise<Judge> {\n return http.post<Judge, Judge>(PATH, judge, withToken({ signal }, token))\n}\n","import type { AtomEffect } from 'recoil'\nimport type { Judge } from '../../../../types'\n\nimport i18next from 'i18next'\nimport { DefaultValue } from 'recoil'\n\nimport { getJudges } from '../../../../api/judge'\nimport { idTokenAtom } from '../../../recoil/user'\n\nexport const adminRemoteJudgesEffect: AtomEffect<Judge[]> = ({ getPromise, setSelf, trigger }) => {\n if (trigger === 'get') {\n setSelf(\n getPromise(idTokenAtom).then((token) =>\n token\n ? getJudges(token).then((judges) => judges.sort((a, b) => a.name.localeCompare(b.name, i18next.language)))\n : new DefaultValue()\n )\n )\n }\n}\n","import type { Judge } from '../../../../types'\n\nimport { atom } from 'recoil'\n\nimport { logEffect, sessionStorageEffect } from '../../../recoil/effects'\n\nimport { adminRemoteJudgesEffect } from './effects'\n\nexport const adminJudgesAtom = atom<Judge[]>({\n key: 'adminJudges',\n default: [],\n effects: [logEffect, sessionStorageEffect, adminRemoteJudgesEffect],\n})\n\nexport const adminJudgeFilterAtom = atom<string>({\n key: 'adminJudgeFilter',\n default: '',\n})\n","import type { Judge } from '../../../../types'\n\nimport i18next from 'i18next'\nimport { useRecoilState, useRecoilValue, useResetRecoilState } from 'recoil'\n\nimport { getJudges, putJudge } from '../../../../api/judge'\nimport { idTokenAtom } from '../../../recoil/user'\nimport { adminUsersAtom } from '../user'\n\nimport { adminJudgesAtom } from './atoms'\n\nexport const useAdminJudgesActions = () => {\n const [judges, setJudges] = useRecoilState(adminJudgesAtom)\n const resetUsers = useResetRecoilState(adminUsersAtom)\n const token = useRecoilValue(idTokenAtom)\n\n const find = (id: number) => judges.find((item) => item.id === id)\n\n const refresh = async () => {\n if (!token) throw new Error('missing token')\n const judges = await getJudges(token, true)\n const sortedJudges = [...judges].sort((a, b) => a.name.localeCompare(b.name, i18next.language))\n setJudges(sortedJudges)\n resetUsers()\n }\n\n const save = async (judge: Judge) => {\n const index = judges.findIndex((j) => j.id === judge.id)\n if (index === -1) {\n throw new Error(`Judge by id ${judge.id} not found!`)\n }\n if (!token) throw new Error('missing token')\n const saved = await putJudge(judge, token)\n const newJudges = judges.map<Judge>((j) => ({ ...j }))\n newJudges.splice(index, 1, saved)\n setJudges(newJudges)\n }\n\n return {\n find,\n refresh,\n save,\n }\n}\n","import i18next from 'i18next'\nimport { selector } from 'recoil'\n\nimport { adminJudgeFilterAtom, adminJudgesAtom } from './atoms'\n\nexport const adminActiveJudgesSelector = selector({\n key: 'adminActiveJudges',\n get: ({ get }) => get(adminJudgesAtom).filter((item) => item.active),\n})\n\nexport const adminFilteredJudgesSelector = selector({\n key: 'adminFilteredJudges',\n get: ({ get }) => {\n const filter = get(adminJudgeFilterAtom).toLocaleLowerCase(i18next.language)\n const list = get(adminJudgesAtom)\n\n if (!filter) {\n return list\n }\n return list.filter((judge) =>\n [judge.id, judge.email, judge.name, judge.location, judge.phone, judge.district, ...judge.eventTypes]\n .join(' ')\n .toLocaleLowerCase(i18next.language)\n .includes(filter)\n )\n },\n})\n","import type { Official } from '../types'\n\nimport http, { withToken } from './http'\n\nconst PATH = '/official/'\n\nexport async function getOfficials(token: string, refresh?: boolean, signal?: AbortSignal) {\n const qs = refresh ? '?refresh' : ''\n return http.get<Array<Official>>(PATH + qs, withToken({ signal }, token))\n}\n","import type { AtomEffect } from 'recoil'\nimport type { Official } from '../../../../types'\n\nimport i18next from 'i18next'\nimport { DefaultValue } from 'recoil'\n\nimport { getOfficials } from '../../../../api/official'\nimport { idTokenAtom } from '../../../recoil'\n\nexport const adminRemoteOfficialsEffect: AtomEffect<Official[]> = ({ getPromise, setSelf, trigger }) => {\n if (trigger === 'get') {\n setSelf(\n getPromise(idTokenAtom).then((token) =>\n token\n ? getOfficials(token).then((officials) =>\n officials.sort((a, b) => a.name.localeCompare(b.name, i18next.language))\n )\n : new DefaultValue()\n )\n )\n }\n}\n","import type { Official } from '../../../../types'\n\nimport { atom } from 'recoil'\n\nimport { logEffect, sessionStorageEffect } from '../../../recoil/effects'\n\nimport { adminRemoteOfficialsEffect } from './effects'\n\nexport const adminOfficialsAtom = atom<Official[]>({\n key: 'adminOfficials',\n default: [],\n effects: [logEffect, sessionStorageEffect, adminRemoteOfficialsEffect],\n})\n\nexport const adminOfficialFilterAtom = atom<string>({\n key: 'adminOfficialFilter',\n default: '',\n})\n","import i18next from 'i18next'\nimport { useRecoilValue, useResetRecoilState, useSetRecoilState } from 'recoil'\n\nimport { getOfficials } from '../../../../api/official'\nimport { idTokenAtom } from '../../../recoil'\nimport { adminUsersAtom } from '../user'\n\nimport { adminOfficialsAtom } from './atoms'\n\nexport const useAdminOfficialsActions = () => {\n const token = useRecoilValue(idTokenAtom)\n const setOfficials = useSetRecoilState(adminOfficialsAtom)\n const resetUsers = useResetRecoilState(adminUsersAtom)\n\n const refresh = async () => {\n if (!token) throw new Error('missing token')\n const officials = await getOfficials(token, true)\n const sortedOfficials = [...officials].sort((a, b) => a.name.localeCompare(b.name, i18next.language))\n setOfficials(sortedOfficials)\n resetUsers()\n }\n\n return {\n refresh,\n }\n}\n","import i18next from 'i18next'\nimport { selector } from 'recoil'\n\nimport { adminOfficialFilterAtom, adminOfficialsAtom } from './atoms'\n\nexport const adminFilteredOfficialsSelector = selector({\n key: 'adminFilteredOfficials',\n get: ({ get }) => {\n const filter = get(adminOfficialFilterAtom).toLocaleLowerCase(i18next.language)\n const list = get(adminOfficialsAtom)\n\n if (!filter) {\n return list\n }\n return list.filter((official) =>\n [official.id, official.email, official.name, official.district, official.location, official.phone]\n .join(' ')\n .toLocaleLowerCase(i18next.language)\n .includes(filter)\n )\n },\n})\n","import type { Registration } from '../../../../types'\n\nimport { atomFamily } from 'recoil'\n\nimport { logEffect, sessionStorageEffect } from '../../../recoil'\n\nimport { adminEventRegistrationSelector } from './selectors'\n\nexport const adminEditableEventRegistrationByEventIdAndIdAtom = atomFamily<\n Registration | undefined,\n { eventId: string; id: string }\n>({\n key: 'adminEditableEventRegistration/eventId+Id',\n default: adminEventRegistrationSelector,\n effects: [logEffect, sessionStorageEffect],\n})\n","import type { Organizer } from '../types'\n\nimport http, { withToken } from './http'\n\nconst PATH = '/admin/organizer/'\n\nexport async function getAdminOrganizers(token: string, refresh?: boolean, signal?: AbortSignal) {\n const qs = refresh ? '?refresh' : ''\n return http.get<Array<Organizer>>(PATH + qs, withToken({ signal }, token))\n}\n\nexport async function putOrganizer(organizer: Organizer, token: string, signal?: AbortSignal): Promise<Organizer> {\n return http.post<Organizer, Organizer>(PATH, organizer, withToken({ signal }, token))\n}\n","import type { AtomEffect } from 'recoil'\nimport type { Organizer } from '../../../../types'\n\nimport i18next from 'i18next'\nimport { DefaultValue } from 'recoil'\n\nimport { getAdminOrganizers } from '../../../../api/organizer'\nimport { idTokenAtom } from '../../../recoil'\n\nexport const adminRemoteOrganizersEffect: AtomEffect<Organizer[]> = ({ setSelf, getPromise, trigger }) => {\n if (trigger === 'get') {\n setSelf(\n getPromise(idTokenAtom).then((token) =>\n token\n ? getAdminOrganizers(token).then((organizers) =>\n organizers.sort((a, b) => a.name.localeCompare(b.name, i18next.language))\n )\n : new DefaultValue()\n )\n )\n }\n}\n","import type { GridColumnVisibilityModel } from '@mui/x-data-grid'\nimport type { Organizer } from '../../../../types'\n\nimport { atom } from 'recoil'\n\nimport { localStorageEffect, logEffect, sessionStorageEffect } from '../../../recoil/effects'\n\nimport { adminRemoteOrganizersEffect } from './effects'\n\nexport const adminOrganizersAtom = atom<Organizer[]>({\n key: 'adminOrganizers',\n default: [],\n effects: [logEffect, sessionStorageEffect, adminRemoteOrganizersEffect],\n})\n\nexport const adminOrganizerFilterAtom = atom<string>({\n key: 'adminOrganizerFilter',\n default: '',\n})\n\nexport const adminOrganizerIdAtom = atom<string | undefined>({\n key: 'adminOrganizerId',\n default: '',\n effects: [logEffect, localStorageEffect],\n})\n\nexport const adminOrganizerColumnsAtom = atom<GridColumnVisibilityModel>({\n key: 'adminOrganizerColumns',\n default: { id: false },\n effects: [logEffect, localStorageEffect],\n})\n\nexport const adminEventOrganizerIdAtom = atom<string>({\n key: 'adminEventOrganizerId',\n default: '',\n effects: [logEffect, localStorageEffect],\n})\n\nexport const adminUsersOrganizerIdAtom = atom<string>({\n key: 'adminUsersOrganizerId',\n default: '',\n effects: [logEffect, localStorageEffect],\n})\n\nexport const adminShowOnlyOrganizersWithUsersAtom = atom<boolean>({\n key: 'adminShowOnlyOrganizersWithUsers',\n default: true,\n effects: [logEffect, localStorageEffect],\n})\n","import type { Organizer } from '../../../../types'\n\nimport i18next from 'i18next'\nimport { useRecoilState, useRecoilValue } from 'recoil'\n\nimport { getAdminOrganizers, putOrganizer } from '../../../../api/organizer'\nimport { idTokenAtom } from '../../../recoil'\n\nimport { adminOrganizersAtom } from './atoms'\n\nconst nameSort = (a: Organizer, b: Organizer) => a.name.localeCompare(b.name, i18next.language)\n\nexport const useAdminOrganizersActions = () => {\n const [organizers, setOrganizers] = useRecoilState(adminOrganizersAtom)\n const token = useRecoilValue(idTokenAtom)\n\n return {\n refresh,\n save,\n }\n\n function refresh() {\n if (!token) throw new Error('missing token')\n getAdminOrganizers(token, true).then((organizers) => {\n setOrganizers([...organizers].sort(nameSort))\n })\n }\n\n async function save(organizer: Organizer) {\n if (!token) throw new Error('missing token')\n const saved = await putOrganizer(organizer, token)\n\n setOrganizers([...organizers.filter((o) => o.id !== saved.id), saved].sort(nameSort))\n }\n}\n","import type { Organizer } from '../../../../types'\n\nimport i18next from 'i18next'\nimport { selector, selectorFamily } from 'recoil'\n\nimport { unique } from '../../../../lib/utils'\nimport { adminUsersAtom } from '../user'\n\nimport {\n adminOrganizerFilterAtom,\n adminOrganizerIdAtom,\n adminOrganizersAtom,\n adminShowOnlyOrganizersWithUsersAtom,\n} from './atoms'\n\nexport const adminFilteredOrganizersSelector = selector({\n key: 'adminFilteredOrganizers',\n get: ({ get }) => {\n const filter = get(adminOrganizerFilterAtom).toLocaleLowerCase(i18next.language)\n const list = get(adminOrganizersAtom)\n const withUsers = get(adminShowOnlyOrganizersWithUsersAtom)\n const users = withUsers ? get(adminUsersAtom) : []\n const ids = unique(users.flatMap((u) => Object.keys(u.roles ?? {}))).filter(Boolean)\n const result = ids.length ? list.filter((o) => ids.includes(o.id)) : list\n\n return filter ? result.filter((o) => o.name.toLocaleLowerCase(i18next.language).includes(filter)) : result\n },\n})\n\nexport const adminOrganizerSelector = selectorFamily<Organizer | undefined, string | undefined>({\n key: 'adminOrganizerSelector',\n get:\n (organizerId) =>\n ({ get }) => {\n const events = get(adminOrganizersAtom)\n return events.find((e) => e.id === organizerId)\n },\n})\n\nexport const adminCurrentOrganizerSelector = selector({\n key: 'adminCurrentOrganizerSelector',\n get: ({ get }) => {\n const organizerId = get(adminOrganizerIdAtom)\n return organizerId ? get(adminOrganizerSelector(organizerId)) : undefined\n },\n})\n","import type { AtomEffect } from 'recoil'\nimport type { Registration } from '../../../../types'\n\nimport { DefaultValue } from 'recoil'\n\nimport { getRegistrations } from '../../../../api/registration'\nimport { idTokenAtom } from '../../../recoil'\n\nexport const adminRemoteRegistrationsEffect =\n (eventId: string): AtomEffect<Registration[]> =>\n ({ getPromise, node, setSelf, trigger }) => {\n if (trigger === 'get') {\n setSelf(\n getPromise(idTokenAtom).then((token) => {\n if (!token) return new DefaultValue()\n\n return getRegistrations(eventId, token).then((registrations) => registrations ?? new DefaultValue())\n })\n )\n }\n }\n","import type { Registration } from '../../../../types'\n\nimport { atom, atomFamily } from 'recoil'\n\nimport { emptyBreeder, emptyDog, emptyPerson } from '../../../components/RegistrationForm'\nimport { localStorageEffect, logEffect } from '../../../recoil'\n\nimport { adminRemoteRegistrationsEffect } from './effects'\n\nexport const adminBackgroundActionsRunningAtom = atom<boolean>({\n key: 'adminBackgroundActionsRunningAtom',\n default: false,\n})\n\nexport const adminRegistrationIdAtom = atom<string | undefined>({\n key: 'adminRegistrationId',\n default: undefined,\n effects: [logEffect, localStorageEffect],\n})\n\nexport const adminEventRegistrationsAtom = atomFamily<Registration[], string>({\n key: 'adminEventRegistrations',\n effects: (eventId) => [logEffect, adminRemoteRegistrationsEffect(eventId)],\n})\n\nexport const adminNewRegistrationAtom = atom<Registration | undefined>({\n key: 'adminNewRegistration',\n default: {\n id: '',\n createdAt: new Date(),\n createdBy: 'anonymous',\n modifiedAt: new Date(),\n modifiedBy: 'anonymous',\n agreeToTerms: false,\n breeder: { ...emptyBreeder },\n dates: [],\n dog: { ...emptyDog },\n eventId: '',\n eventType: '',\n handler: { ...emptyPerson },\n language: 'fi',\n notes: '',\n owner: { ...emptyPerson },\n payer: { ...emptyPerson },\n ownerHandles: true,\n ownerPays: true,\n qualifyingResults: [],\n reserve: 'DAY',\n },\n effects: [logEffect, localStorageEffect],\n})\n","import type { Registration } from '../../../../types'\n\nimport { selectorFamily } from 'recoil'\n\nimport { adminEventRegistrationsAtom } from './atoms'\n\nexport const adminEventRegistrationSelector = selectorFamily<Registration | undefined, { eventId: string; id: string }>(\n {\n key: 'adminEventRegistrationSelector/eventId',\n get:\n ({ eventId, id }) =>\n ({ get }) => {\n const registrations = get(adminEventRegistrationsAtom(eventId)) ?? []\n return registrations.find((r) => r.id === id)\n },\n }\n)\n\nexport const adminEventRegistrationsSelector = selectorFamily<Registration[], string>({\n key: 'adminEventRegistrationsSelector/eventId',\n get:\n (eventId) =>\n ({ get }) =>\n get(adminEventRegistrationsAtom(eventId)) ?? [],\n set:\n (eventId) =>\n ({ set }, newValue) =>\n set(adminEventRegistrationsAtom(eventId), newValue),\n})\n","import type { AtomEffect } from 'recoil'\nimport type { User } from '../../../../types'\n\nimport { DefaultValue } from 'recoil'\n\nimport { getUsers } from '../../../../api/user'\nimport { idTokenAtom } from '../../../recoil'\n\nexport const adminRemoteUsersEffect: AtomEffect<User[]> = ({ getPromise, onSet, setSelf, trigger }) => {\n if (trigger === 'get') {\n setSelf(\n getPromise(idTokenAtom).then((token) => (token ? getUsers(token).then((users) => users) : new DefaultValue()))\n )\n }\n\n onSet((_newValue, _oldValue, reset) => {\n // re-fetch on reset\n /// fetchUsers()\n })\n}\n","import type { GridColumnVisibilityModel } from '@mui/x-data-grid'\nimport type { User } from '../../../../types'\n\nimport { atom } from 'recoil'\n\nimport { localStorageEffect, logEffect, sessionStorageEffect } from '../../../recoil/effects'\n\nimport { adminRemoteUsersEffect } from './effects'\n\nexport const adminUsersAtom = atom<User[]>({\n key: 'adminUsers',\n default: [],\n effects: [logEffect, sessionStorageEffect, adminRemoteUsersEffect],\n})\n\nexport const adminUserFilterAtom = atom<string>({\n key: 'adminUserFilter',\n default: '',\n})\n\nexport const adminUserIdAtom = atom<string | undefined>({\n key: 'adminUserId',\n default: '',\n effects: [logEffect, localStorageEffect],\n})\n\nexport const adminUsersColumnsAtom = atom<GridColumnVisibilityModel>({\n key: 'adminUsersColumns',\n default: {\n district: false,\n eventTypes: true,\n location: false,\n name: true,\n roles: true,\n },\n effects: [logEffect, localStorageEffect],\n})\n","import type { User, UserRole } from '../../../../types'\n\nimport { useSnackbar } from 'notistack'\nimport { useRecoilState, useRecoilValue } from 'recoil'\n\nimport { putAdmin, putRole, putUser } from '../../../../api/user'\nimport { reportError } from '../../../../lib/client/error'\nimport { idTokenAtom } from '../../../recoil'\nimport { adminOrganizersAtom } from '../organizers'\n\nimport { adminUsersAtom } from './atoms'\n\nexport const useAdminUserActions = () => {\n const token = useRecoilValue(idTokenAtom)\n const { enqueueSnackbar } = useSnackbar()\n const [users, setUsers] = useRecoilState(adminUsersAtom)\n const orgs = useRecoilValue(adminOrganizersAtom)\n\n const replaceUser = (user: User) => {\n const oldIndex = users.findIndex((u) => u.id === user.id)\n const newUsers = [...users]\n newUsers.splice(oldIndex === -1 ? users.length : oldIndex, oldIndex === -1 ? 0 : 1, user)\n setUsers(newUsers)\n }\n\n return {\n addUser: async (user: User) => {\n try {\n const added = await putUser(user, token)\n replaceUser(added)\n if (user.name !== added.name) {\n const orgId = Object.keys(user.roles ?? {})[0]\n const org = orgs.find((o) => o.id === orgId)\n enqueueSnackbar(`Käyttäjälle '${added.name}' ('${added.email}') lisätty oikeus yhdistykseen '${org?.name}'`, {\n variant: 'info',\n })\n } else {\n enqueueSnackbar(`Käyttäjä '${added.name}' lisätty, sähköpostilla '${added.email}'`, { variant: 'info' })\n }\n } catch (e) {\n reportError(e)\n }\n },\n addRole: async (user: User, orgId: string, role: UserRole) => {\n try {\n const saved = await putRole({ userId: user.id, orgId, role }, token)\n replaceUser(saved)\n } catch (e) {\n reportError(e)\n }\n },\n removeRole: async (user: User, orgId: string) => {\n try {\n const saved = await putRole({ userId: user.id, orgId, role: 'none' }, token)\n replaceUser(saved)\n } catch (e) {\n reportError(e)\n }\n },\n setAdmin: async (user: User) => {\n try {\n const saved = await putAdmin({ userId: user.id, admin: !!user.admin }, token)\n replaceUser(saved)\n } catch (e) {\n reportError(e)\n }\n },\n }\n}\n","import type { User, UserWithRoles } from '../../../../types'\n\nimport i18next from 'i18next'\nimport { selector, selectorFamily } from 'recoil'\n\nimport { unique } from '../../../../lib/utils'\nimport { adminUserOrgIdsSelector, isAdminSelector, userSelector } from '../../../recoil'\nimport { adminEventOrganizersSelector, adminEventsAtom, adminFilteredEventsSelector } from '../events'\nimport { adminEventOrganizerIdAtom, adminOrganizersAtom, adminUsersOrganizerIdAtom } from '../organizers'\n\nimport { adminUserFilterAtom, adminUserIdAtom, adminUsersAtom } from './atoms'\n\nexport const adminUsersOrganizersSelector = selector({\n key: 'adminUserOrganizersSelector',\n get: ({ get }) => {\n const users = get(adminUsersAtom)\n const orgs = get(adminOrganizersAtom)\n\n const orgIds = unique(users.filter((u): u is UserWithRoles => !!u.roles).flatMap((u) => Object.keys(u.roles)))\n\n const filteredOrgs = orgs.filter((o) => orgIds.includes(o.id))\n orgIds\n .filter((id) => !filteredOrgs.find((o) => o.id === id))\n .forEach((id) => filteredOrgs.push({ id, name: `(tuntematon/poistettu yhdistys: ${id})` }))\n\n return filteredOrgs\n },\n})\n\nexport const adminFilteredUsersSelector = selector({\n key: 'adminFilteredUsers',\n get: ({ get }) => {\n const isAdmin = get(isAdminSelector)\n const filter = get(adminUserFilterAtom).toLocaleLowerCase(i18next.language)\n const users = get(adminUsersAtom)\n const orgIds = get(adminUserOrgIdsSelector)\n const orgId = get(adminUsersOrganizerIdAtom)\n\n let result = isAdmin\n ? users\n : users.filter((u) => u.roles && Object.keys(u.roles).some((id) => orgIds.includes(id)))\n\n if (orgId) {\n result = result.filter((u) => u.roles?.[orgId])\n }\n\n if (filter) {\n result = result.filter((user) =>\n [user.id, user.email, user.name, user.location, user.phone]\n .join(' ')\n .toLocaleLowerCase(i18next.language)\n .includes(filter)\n )\n }\n\n return result\n },\n})\n\nexport const adminUserSelector = selectorFamily<User | undefined, string | undefined>({\n key: 'adminUserSelector',\n get:\n (userId) =>\n ({ get }) => {\n const events = get(adminUsersAtom)\n return events.find((e) => e.id === userId)\n },\n})\n\nexport const adminCurrentUserSelector = selector({\n key: 'adminCurrentAdminUser',\n get: ({ get }) => {\n const userId = get(adminUserIdAtom)\n return userId ? get(adminUserSelector(userId)) : undefined\n },\n})\n\nexport const adminUserOrganizersSelector = selector({\n key: 'adminUserOrganizers',\n get: ({ get }) => {\n const user = get(userSelector)\n const list = get(adminOrganizersAtom)\n\n return user?.admin ? list.filter((o) => o.paytrailMerchantId) : list.filter((o) => user?.roles?.[o.id])\n },\n})\n\nexport const adminUserEventOrganizersSelector = selector({\n key: 'adminUserEventOrganizers',\n get: ({ get }) => {\n const user = get(userSelector)\n const list = get(adminEventOrganizersSelector)\n\n return user?.admin ? list : list.filter((o) => user?.roles?.[o.id])\n },\n})\n\nexport const adminUserAdminOrganizersSelector = selector({\n key: 'adminUserAdminOrganizers',\n get: ({ get }) => {\n const user = get(userSelector)\n const organizers = get(adminOrganizersAtom)\n\n return user?.admin ? organizers : organizers.filter((o) => user?.roles?.[o.id] === 'admin')\n },\n})\n\nexport const adminUserEventsSelector = selector({\n key: 'adminUserEvents',\n get: ({ get }) => {\n const user = get(userSelector)\n const events = get(adminEventsAtom)\n\n return user?.admin ? events : events.filter((e) => user?.roles?.[e.organizer.id])\n },\n})\n\nexport const adminUserFilteredEventsSelector = selector({\n key: 'adminUserFilteredEvents',\n get: ({ get }) => {\n const user = get(userSelector)\n const events = get(adminFilteredEventsSelector)\n const orgId = get(adminEventOrganizerIdAtom)\n const userEvents = user?.admin ? events : events.filter((e) => user?.roles?.[e.organizer.id])\n\n return orgId ? userEvents.filter((e) => e.organizer.id === orgId) : userEvents\n },\n})\n","import type { ButtonProps } from '@mui/material'\nimport type { MouseEvent } from 'react'\n\nimport { useCallback, useState } from 'react'\nimport Button from '@mui/material/Button'\n\ntype ClickEvent = MouseEvent<HTMLButtonElement, globalThis.MouseEvent>\n\ninterface Props extends Omit<ButtonProps, 'onClick'> {\n onClick?: (event: ClickEvent) => Promise<void>\n}\n\nexport const AsyncButton = (props: Props) => {\n const { disabled, onClick, ...rest } = props\n const [loading, setLoading] = useState(false)\n\n const handleClick = useCallback(\n async (event: ClickEvent) => {\n if (loading) return\n setLoading(true)\n await props.onClick?.(event)\n setLoading(false)\n },\n [loading, props]\n )\n\n return <Button disabled={loading || disabled} onClick={handleClick} {...rest} />\n}\n","import type { AutocompleteProps } from '@mui/material'\n\nimport CheckBox from '@mui/icons-material/CheckBox'\nimport CheckBoxOutlineBlank from '@mui/icons-material/CheckBoxOutlineBlank'\nimport Autocomplete from '@mui/material/Autocomplete'\nimport Checkbox from '@mui/material/Checkbox'\nimport TextField from '@mui/material/TextField'\n\ntype OmitProps =\n | 'disableCloseOnSelect'\n | 'fullWidth'\n | 'freeSolo'\n | 'multiple'\n | 'renderInput'\n | 'renderOption'\n | 'renderTags'\n\nexport type AutocompleteMultiProps<T> = Omit<AutocompleteProps<T, true, false, false>, OmitProps> & {\n error?: boolean\n helperText?: string\n label: string\n}\n\nexport default function AutocompleteMulti<T>(props: AutocompleteMultiProps<T>) {\n const { error, helperText, label, disabled, ...acProps } = props\n const getLabel = props.getOptionLabel ?? ((o?: T): string => (o as string) ?? '')\n\n return (\n <Autocomplete\n autoHighlight\n disabled={disabled || (acProps.options.length === 0 && acProps.value?.length === 0)}\n data-testid={label}\n {...acProps}\n fullWidth\n multiple\n renderInput={(inputProps) => <TextField {...inputProps} label={label} error={error} helperText={helperText} />}\n renderOption={({ key, ...optionProps }, option, { selected }) => (\n <li key={key} {...optionProps}>\n <Checkbox\n icon={<CheckBoxOutlineBlank fontSize=\"small\" />}\n checkedIcon={<CheckBox fontSize=\"small\" />}\n style={{ marginRight: 8 }}\n checked={selected}\n />\n {getLabel(option)}\n </li>\n )}\n />\n )\n}\n","import type { AutocompleteChangeDetails, AutocompleteChangeReason, AutocompleteProps } from '@mui/material'\nimport type { SyntheticEvent } from 'react'\n\nimport { useCallback, useMemo } from 'react'\nimport Autocomplete from '@mui/material/Autocomplete'\nimport TextField from '@mui/material/TextField'\n\ntype OmitProps = 'fullWidth' | 'freeSolo' | 'multiple' | 'renderInput' | 'onChange'\n\ntype Props<T, DisableClearable extends boolean | undefined> = Omit<\n AutocompleteProps<T, false, DisableClearable, false>,\n OmitProps\n> & {\n error?: boolean\n helperText?: string\n label: string\n onChange?: (value: DisableClearable extends true ? NonNullable<T> : T | null) => void\n}\n\nexport default function AutocompleteSingle<T, DisableClearable extends boolean | undefined>(\n props: Props<T, DisableClearable>\n) {\n const { error, helperText, label, value, options, color, isOptionEqualToValue, onChange, onInputChange, ...acProps } =\n props\n const handleChange = useCallback(\n (\n event: SyntheticEvent<Element, Event>,\n value: DisableClearable extends true ? NonNullable<T> : T | null,\n reason: AutocompleteChangeReason,\n details?: AutocompleteChangeDetails<T> | undefined\n ) => {\n onChange?.(value)\n },\n [onChange]\n )\n\n // @ts-expect-error Type 'null' is not assignable to type 'DisableClearable extends true ? NonNullable<T> : T | null'\n const fixedValue: DisableClearable extends true ? NonNullable<T> : T | null = value ?? null\n const compareOption = useMemo(\n () => isOptionEqualToValue ?? ((option: T, value: T) => option === value),\n [isOptionEqualToValue]\n )\n const validOption = useMemo(\n () => fixedValue === null || props.options.find((option) => compareOption(option, fixedValue)),\n [compareOption, fixedValue, props.options]\n )\n const fixedOptions = useMemo(\n () => (validOption || fixedValue === null ? options : [...options, fixedValue]),\n [validOption, fixedValue, options]\n )\n\n return (\n <Autocomplete<T, false, DisableClearable, false>\n autoHighlight\n data-testid={label}\n {...acProps}\n value={fixedValue}\n options={fixedOptions}\n multiple={false}\n fullWidth\n isOptionEqualToValue={compareOption}\n onChange={handleChange}\n renderInput={(inputProps) => <TextField {...inputProps} label={label} error={error} helperText={helperText} />}\n />\n )\n}\n","import type { SelectChangeEvent } from '@mui/material/Select'\nimport type { ChangeEvent } from 'react'\nimport type { PublicDogEvent, Registration } from '../../types'\n\nimport { useCallback, useState } from 'react'\nimport { Trans, useTranslation } from 'react-i18next'\nimport Button from '@mui/material/Button'\nimport Dialog from '@mui/material/Dialog'\nimport DialogActions from '@mui/material/DialogActions'\nimport DialogContent from '@mui/material/DialogContent'\nimport DialogContentText from '@mui/material/DialogContentText'\nimport DialogTitle from '@mui/material/DialogTitle'\nimport FormControl from '@mui/material/FormControl'\nimport FormHelperText from '@mui/material/FormHelperText'\nimport InputLabel from '@mui/material/InputLabel'\nimport Link from '@mui/material/Link'\nimport MenuItem from '@mui/material/MenuItem'\nimport Select from '@mui/material/Select'\nimport TextField from '@mui/material/TextField'\n\nimport { isPredefinedReason } from '../../lib/registration'\n\ninterface Props {\n readonly admin?: boolean\n readonly disabled?: boolean\n readonly event: PublicDogEvent | null | undefined\n readonly onCancel?: (reason: string) => void\n readonly onClose?: () => void\n readonly open: boolean\n readonly registration: Registration | null | undefined\n}\n\nconst CancelDialog = ({ admin, disabled, event, onCancel, onClose, open, registration }: Props) => {\n const { t } = useTranslation()\n const [reason, setReason] = useState(\n registration?.cancelReason && isPredefinedReason(registration.cancelReason) ? registration.cancelReason : ''\n )\n const [freeReason, setFreeReason] = useState(\n registration?.cancelReason && !isPredefinedReason(registration.cancelReason) ? registration?.cancelReason : ''\n )\n\n const handleReasonChange = useCallback((event: SelectChangeEvent) => {\n setReason(event.target.value)\n }, [])\n\n const handleFreeReasonChange = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n setFreeReason(event.target.value)\n }, [])\n\n const handleCancel = useCallback(\n () => onCancel?.(reason === 'other' ? freeReason : reason),\n [freeReason, onCancel, reason]\n )\n\n if (!event || !registration) {\n return null\n }\n\n return (\n <Dialog\n open={open}\n onClose={onClose}\n aria-labelledby=\"cancel-dialog-title\"\n aria-describedby=\"cancel-dialog-description\"\n >\n <DialogTitle id=\"cancel-dialog-title\">{t('registration.cancelDialog.title')}</DialogTitle>\n <DialogContent>\n <DialogContentText id=\"cancel-dialog-description\">\n {disabled\n ? t('registration.cancelDialog.lateText', {\n registration,\n event,\n contact: event.contactInfo?.secretary?.phone ?? event.contactInfo?.secretary?.email,\n })\n : t('registration.cancelDialog.text', { registration, event })}\n </DialogContentText>\n <DialogContentText id=\"cancel-dialog-description2\" sx={{ py: 1, display: disabled ? 'none' : 'block' }}>\n {t('registration.cancelDialog.confirmation')}\n </DialogContentText>\n <FormControl fullWidth sx={{ my: 1 }}>\n <InputLabel id=\"reason-label\">{t('registration.cancelDialog.reason')}</InputLabel>\n <Select\n id=\"reaseon\"\n labelId=\"reason-label\"\n label={t('registration.cancelDialog.reason')}\n value={reason}\n onChange={handleReasonChange}\n >\n <MenuItem value=\"dog-heat\">{t('registration.cancelReason.dog-heat')}</MenuItem>\n <MenuItem value=\"handler-sick\">{t('registration.cancelReason.handler-sick')}</MenuItem>\n <MenuItem value=\"dog-sick\">{t('registration.cancelReason.dog-sick')}</MenuItem>\n <MenuItem value=\"other\">{t('registration.cancelReason.other')}</MenuItem>\n <MenuItem value=\"gdpr\">{t('registration.cancelReason.gdpr')}</MenuItem>\n </Select>\n <FormHelperText>\n {!admin && (reason === 'handler-sick' || reason === 'dog-sick') && (\n <>\n {t(`registration.cancelReason.${reason}-info`)}  \n <a href={`mailto://${event.contactInfo?.secretary?.email}`}>{event.contactInfo?.secretary?.email}</a>\n </>\n )}\n </FormHelperText>\n </FormControl>\n {reason === 'other' && (\n <TextField\n fullWidth\n label={t('registration.cancelDialog.reason_other')}\n value={freeReason}\n onChange={handleFreeReasonChange}\n />\n )}\n <DialogContentText id=\"cancel-dialog-description3\" sx={{ py: 1 }}>\n <Trans t={t} i18nKey=\"registration.cancelDialog.terms\">\n Katso tarkemmat peruutusehdot{' '}\n <Link\n target=\"_blank\"\n rel=\"noopener\"\n href=\"https://yttmk.yhdistysavain.fi/noutajien-metsastyskokeet-2/ohjeistukset/kokeen-ja-tai-kilpailun-ilmoitta/\"\n >\n säännöistä\n </Link>\n .\n </Trans>\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button\n onClick={handleCancel}\n disabled={disabled || reason === '' || (reason === 'other' && freeReason === '')}\n autoFocus\n variant=\"contained\"\n >\n {t('registration.cancelDialog.cta')}\n </Button>\n <Button onClick={onClose} variant=\"outlined\">\n {t('close')}\n </Button>\n </DialogActions>\n </Dialog>\n )\n}\n\nexport default CancelDialog\n","import type { ReactNode } from 'react'\n\nimport { useState } from 'react'\nimport KeyboardArrowDown from '@mui/icons-material/KeyboardArrowDown'\nimport KeyboardArrowRight from '@mui/icons-material/KeyboardArrowRight'\nimport Box from '@mui/material/Box'\nimport Collapse from '@mui/material/Collapse'\nimport FormHelperText from '@mui/material/FormHelperText'\nimport IconButton from '@mui/material/IconButton'\nimport Typography from '@mui/material/Typography'\n\ninterface Props {\n readonly border?: boolean\n readonly children?: ReactNode\n readonly error?: boolean\n readonly helperText?: string\n readonly initOpen?: boolean\n readonly onOpenChange?: (open: boolean) => void\n readonly open?: boolean\n readonly title: string\n}\n\nexport default function CollapsibleSection({\n border = true,\n children,\n error,\n helperText,\n initOpen,\n onOpenChange,\n open,\n title,\n}: Props) {\n const [state, setState] = useState(initOpen !== false)\n const controlled = open !== undefined\n const isOpen = controlled ? open : state\n const toggle = () => {\n const value = !isOpen\n if (!controlled) {\n setState(value)\n }\n if (onOpenChange) {\n onOpenChange(value)\n }\n }\n return (\n <Box\n sx={{\n display: 'flex',\n alignItems: 'flex-start',\n pr: { xs: 0.5, sm: 1 },\n borderTop: border ? '2px solid' : 'none',\n borderColor: 'background.selected',\n }}\n >\n <IconButton size=\"small\" color={'primary'} onClick={toggle} disabled={controlled && !onOpenChange}>\n {isOpen ? <KeyboardArrowDown /> : <KeyboardArrowRight />}\n </IconButton>\n <Box sx={{ pt: '5px', width: 'calc(100% - 34px)', overflowX: 'auto' }}>\n <Box sx={{ userSelect: 'none', mb: '2px' }} onClick={toggle}>\n <Typography>{title}</Typography>\n <FormHelperText error={error} sx={{ color: 'success.main', display: helperText ? 'block' : 'none' }}>\n {helperText}\n </FormHelperText>\n </Box>\n <Collapse in={isOpen} timeout=\"auto\">\n <Box sx={{ p: { xs: 0.5, sm: 1 }, borderTop: '1px dashed #bdbdbd' }}>{children}</Box>\n </Collapse>\n </Box>\n </Box>\n )\n}\n","import type { DogEvent } from '../../types'\n\nimport { useMemo } from 'react'\nimport { useTranslation } from 'react-i18next'\n\ninterface Props {\n readonly event: Pick<DogEvent, 'cost' | 'costMember'>\n}\n\nexport default function CostInfo({ event }: Props) {\n const { t } = useTranslation()\n const text = useMemo(\n () =>\n event.costMember\n ? `${event.cost}\\u00A0€${t('event.costMember')}\\u00A0${event.costMember}\\u00A0€`\n : `${event.cost}\\u00A0€`,\n [event.cost, event.costMember, t]\n )\n\n return <>{text}</>\n}\n","import type { Theme } from '@mui/material'\n\nimport { useTranslation } from 'react-i18next'\nimport Box from '@mui/material/Box'\nimport FormControl from '@mui/material/FormControl'\nimport { DatePicker } from '@mui/x-date-pickers'\nimport { isSameDay, isValid } from 'date-fns'\n\nimport useDebouncedCallback from '../../hooks/useDebouncedCallback'\n\nexport type DateValue = Date | null\n\nexport interface Props {\n readonly defaultStart?: Date\n readonly defaultEnd?: Date\n readonly start: DateValue\n readonly startDisabled?: boolean\n readonly startLabel: string\n readonly startError?: boolean\n readonly startHelperText?: string\n readonly end: DateValue\n readonly endDisabled?: boolean\n readonly endLabel: string\n readonly endError?: boolean\n readonly endHelperText?: string\n readonly range?: { start?: Date; end?: Date }\n readonly required?: boolean\n readonly onChange?: (start: DateValue, end: DateValue) => void\n}\n\nfunction dayStyle(date: Date, selected: boolean, defaultDate?: Date) {\n const isDefault = !!defaultDate && isSameDay(date, defaultDate)\n const hilight = isDefault && !selected\n return {\n border: hilight ? (theme: Theme) => `2px solid ${theme.palette.secondary.light}` : undefined,\n }\n}\n\nfunction coerceToDateValue(d: DateValue) {\n return d && isValid(d) ? d : null\n}\n\nexport default function DateRange({\n defaultEnd,\n defaultStart,\n end,\n endDisabled,\n endError,\n endHelperText,\n endLabel,\n range,\n required,\n start,\n startDisabled,\n startError,\n startHelperText,\n startLabel,\n onChange,\n}: Props) {\n const { t } = useTranslation()\n const startChanged = useDebouncedCallback((date: DateValue) => {\n const d = coerceToDateValue(date)\n onChange?.(d, end)\n })\n const endChanged = useDebouncedCallback((date: DateValue) => {\n const d = coerceToDateValue(date)\n onChange?.(start, d)\n })\n\n return (\n <Box sx={{ width: '100%' }}>\n <FormControl sx={{ pr: 0.5, width: '50%' }}>\n <DatePicker\n referenceDate={defaultStart}\n disabled={startDisabled}\n label={startLabel}\n value={start}\n format={t('dateFormatString.long')}\n minDate={range?.start}\n maxDate={range?.end}\n onChange={startChanged}\n slotProps={{\n actionBar: {\n actions: ['clear', 'cancel', 'accept'],\n },\n day: ({ day, selected }) => ({ sx: dayStyle(day, selected, defaultStart) }),\n textField: { required, error: startError, helperText: startHelperText },\n toolbar: {\n hidden: true,\n },\n }}\n />\n </FormControl>\n\n <FormControl sx={{ pl: 0.5, width: '50%' }}>\n <DatePicker\n referenceDate={defaultEnd}\n disabled={endDisabled}\n label={endLabel}\n value={end}\n format={t('dateFormatString.long')}\n minDate={start ? start : range?.start}\n maxDate={range?.end}\n onChange={endChanged}\n slotProps={{\n actionBar: {\n actions: ['clear', 'cancel', 'accept'],\n },\n day: ({ day, selected }) => ({ sx: dayStyle(day, selected, defaultEnd) }),\n textField: { required, error: endError, helperText: endHelperText },\n toolbar: {\n hidden: true,\n },\n }}\n />\n </FormControl>\n </Box>\n )\n}\n","import type { PublicDogEvent } from '../types'\n\nimport { useTranslation } from 'react-i18next'\n\nexport type MinimalEventForStatus = Pick<PublicDogEvent, 'state' | 'entryOrigEndDate'>\n\nfunction getStatusKey(event: MinimalEventForStatus) {\n if (event.state === 'tentative' || event.state === 'cancelled') {\n return event.state\n }\n if (event.entryOrigEndDate) {\n return 'extended'\n }\n}\n\nexport default function useEventStatus(event: MinimalEventForStatus) {\n const { t } = useTranslation()\n\n const statusKey = getStatusKey(event)\n\n return statusKey ? '(' + t(`event.states.${statusKey}_info`) + ')' : ''\n}\n","import type { MinimalEventForStatus } from '../../hooks/useEventStatus'\n\nimport Typography from '@mui/material/Typography'\n\nimport useEventStatus from '../../hooks/useEventStatus'\n\ninterface Props {\n readonly event: MinimalEventForStatus\n}\n\nexport const EntryStatus = ({ event }: Props) => {\n const status = useEventStatus(event)\n\n if (!status) return null\n\n return (\n <Typography display=\"inline\" ml={1}>\n {status}\n </Typography>\n )\n}\n","import { useEffect } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { isRouteErrorResponse, useAsyncError, useRouteError } from 'react-router-dom'\nimport Typography from '@mui/material/Typography'\n\nimport { rum } from '../../lib/client/rum'\n\nimport LinkButton from './LinkButton'\n\nexport const ErrorInfo = () => {\n const { t } = useTranslation()\n const routeError = useRouteError()\n const asyncError = useAsyncError()\n const error = routeError ?? asyncError\n\n useEffect(() => {\n rum()?.recordError(error)\n })\n\n if (isRouteErrorResponse(error) || error instanceof Response) {\n return (\n <>\n <Typography variant=\"h1\">{error.status}</Typography>\n <Typography variant=\"body1\">{error.statusText}</Typography>\n {'data' in error && error.data?.message && <p>{error.data.message}</p>}\n <LinkButton to=\"/\" text={t('goHome')}></LinkButton>\n </>\n )\n }\n return (\n <>\n <Typography variant=\"h1\">Oops</Typography>\n <LinkButton to=\"/\" text={t('goHome')}></LinkButton>\n </>\n )\n}\n","import type { MouseEventHandler, ReactNode } from 'react'\n\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\n\ninterface Props {\n readonly active?: boolean\n readonly startIcon?: ReactNode\n readonly endIcon?: ReactNode\n readonly onClick?: MouseEventHandler\n readonly children?: ReactNode\n readonly label: string\n}\n\nexport default function AppBarButton(props: Props) {\n return (\n <Button\n aria-label={props.label}\n onClick={props.onClick}\n startIcon={props.startIcon}\n endIcon={props.endIcon}\n color=\"secondary\"\n sx={{\n borderBottom: props.active ? '2px solid #fcfcfc' : '2px solid transparent',\n borderRadius: 0,\n textTransform: 'none',\n textWrap: 'nowrap',\n py: '4px',\n '& .MuiButton-startIcon': { mr: { xs: 0, md: 1 } },\n '& .MuiButton-endIcon': { ml: { xs: 0, md: 1 } },\n }}\n >\n <Box sx={{ display: { xs: 'none', md: 'block' } }}>{props.children}</Box>\n </Button>\n )\n}\n","import type { MouseEvent } from 'react'\n\nimport { useCallback, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useLocation } from 'react-router-dom'\nimport ExpandMore from '@mui/icons-material/ExpandMore'\nimport HelpOutlineOutlined from '@mui/icons-material/HelpOutlineOutlined'\nimport Menu from '@mui/material/Menu'\nimport MenuItem from '@mui/material/MenuItem'\n\nimport AppBarButton from './AppBarButton'\n\nexport default function HelpMenu() {\n const { t } = useTranslation()\n const location = useLocation()\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null)\n const open = Boolean(anchorEl)\n\n const handleClick = useCallback((event: MouseEvent<HTMLElement>) => setAnchorEl(event.currentTarget), [setAnchorEl])\n const handleClose = useCallback(() => setAnchorEl(null), [setAnchorEl])\n\n return (\n <>\n <AppBarButton\n onClick={handleClick}\n startIcon={<HelpOutlineOutlined />}\n endIcon={<ExpandMore />}\n label={t('support')}\n >\n {t('support')}\n </AppBarButton>\n <Menu\n anchorEl={anchorEl}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n open={open}\n onClose={handleClose}\n onClick={handleClose}\n >\n <MenuItem\n href=\"/support\"\n target=\"_blank\"\n component=\"a\"\n onClick={handleClose}\n disabled={location.pathname === '/support'}\n >\n {t('supportContact')}\n </MenuItem>\n </Menu>\n </>\n )\n}\n","import type { Language } from '../../../../types'\n\nimport { useCallback } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport MenuItem from '@mui/material/MenuItem'\nimport { useRecoilState } from 'recoil'\n\nimport { languageAtom } from '../../../recoil'\n\ninterface Props {\n readonly locale: Language\n}\nexport function LanguageMenuItem({ locale }: Props) {\n const { t } = useTranslation()\n const [language, setLanguage] = useRecoilState(languageAtom)\n\n const handleClick = useCallback(() => setLanguage(locale), [locale, setLanguage])\n\n return (\n <MenuItem key={locale} selected={language === locale} onClick={handleClick}>\n {t(`locale.${locale}`)}\n </MenuItem>\n )\n}\n","import type { MouseEvent } from 'react'\nimport type { Language } from '../../../types'\n\nimport { useCallback, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport ExpandMore from '@mui/icons-material/ExpandMore'\nimport LanguageIcon from '@mui/icons-material/Language'\nimport Menu from '@mui/material/Menu'\nimport { useRecoilValue } from 'recoil'\n\nimport { locales } from '../../../i18n'\nimport { languageAtom } from '../../recoil'\n\nimport { LanguageMenuItem } from './languageMenu/LanguageMenuItem'\nimport AppBarButton from './AppBarButton'\n\nexport default function LanguageMenu() {\n const { t } = useTranslation()\n const language = useRecoilValue(languageAtom)\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null)\n const open = Boolean(anchorEl)\n\n const handleClick = useCallback((event: MouseEvent<HTMLElement>) => setAnchorEl(event.currentTarget), [setAnchorEl])\n const handleClose = useCallback(() => setAnchorEl(null), [setAnchorEl])\n\n return (\n <>\n <AppBarButton\n onClick={handleClick}\n startIcon={<LanguageIcon />}\n endIcon={<ExpandMore />}\n label={t('languageMenu')}\n >\n {t(`locale.${language}`)}\n </AppBarButton>\n <Menu\n anchorEl={anchorEl}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n open={open}\n onClose={handleClose}\n onClick={handleClose}\n >\n {Object.keys(locales).map((locale) => (\n <LanguageMenuItem key={locale} locale={locale as Language} />\n ))}\n </Menu>\n </>\n )\n}\n","import { useCallback, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport ExpandMore from '@mui/icons-material/ExpandMore'\nimport PersonOutline from '@mui/icons-material/PersonOutline'\nimport Menu from '@mui/material/Menu'\nimport MenuItem from '@mui/material/MenuItem'\n\nimport { useUserActions } from '../../../recoil/user/actions'\nimport AppBarButton from '../AppBarButton'\n\ninterface Props {\n readonly userName: string\n}\n\nexport default function LoggedInUserMenu({ userName }: Props) {\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null)\n const { t } = useTranslation()\n const actions = useUserActions()\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLElement>) => setAnchorEl(event.currentTarget),\n [setAnchorEl]\n )\n const handleClose = useCallback(() => setAnchorEl(null), [setAnchorEl])\n\n return (\n <>\n <AppBarButton onClick={handleClick} startIcon={<PersonOutline />} endIcon={<ExpandMore />} label=\"user\">\n {userName}\n </AppBarButton>\n <Menu\n anchorEl={anchorEl}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n open={!!anchorEl}\n onClose={handleClose}\n onClick={handleClose}\n >\n <MenuItem onClick={async () => actions.signOut()}>{t('logout')}</MenuItem>\n </Menu>\n </>\n )\n}\n","import { useTranslation } from 'react-i18next'\nimport PersonOutline from '@mui/icons-material/PersonOutline'\n\nimport { useUserActions } from '../../../recoil'\nimport AppBarButton from '../AppBarButton'\n\nexport default function LoginButton() {\n const { t } = useTranslation()\n const actions = useUserActions()\n\n return (\n <AppBarButton onClick={actions.login} startIcon={<PersonOutline />} label={t(`login`)}>\n {t(`login`)}\n </AppBarButton>\n )\n}\n","import { useRecoilValue } from 'recoil'\n\nimport { userSelector } from '../../recoil'\n\nimport LoggedInUserMenu from './userMenu/LoggedInUserMenu'\nimport LoginButton from './userMenu/LoginButton'\n\nexport default function UserMenu() {\n const user = useRecoilValue(userSelector)\n\n if (user) {\n return <LoggedInUserMenu userName={user?.name || user.email} />\n }\n\n return <LoginButton />\n}\n","import { Suspense, useCallback, useEffect } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useNavigate } from 'react-router-dom'\nimport ManageAccountsOutlined from '@mui/icons-material/ManageAccountsOutlined'\nimport Menu from '@mui/icons-material/Menu'\nimport AppBar from '@mui/material/AppBar'\nimport IconButton from '@mui/material/IconButton'\nimport Toolbar from '@mui/material/Toolbar'\nimport Typography from '@mui/material/Typography'\nimport { useRecoilValue } from 'recoil'\n\nimport logo from '../../assets/snj-logo.png'\nimport { Path } from '../../routeConfig'\nimport { hasAdminAccessSelector, idTokenAtom, userSelector, useUserActions } from '../recoil'\n\nimport AppBarButton from './header/AppBarButton'\nimport HelpMenu from './header/HelpMenu'\nimport LanguageMenu from './header/LanguageMenu'\nimport UserMenu from './header/UserMenu'\n\ninterface Props {\n readonly toggleMenu?: () => void\n}\n\nconst Header = ({ toggleMenu }: Props) => {\n const { t } = useTranslation()\n const actions = useUserActions()\n const navigate = useNavigate()\n const user = useRecoilValue(userSelector)\n const idToken = useRecoilValue(idTokenAtom)\n const hasAdminAccess = useRecoilValue(hasAdminAccessSelector)\n const inAdmin = !!toggleMenu\n\n const handleHomeClick = useCallback(() => navigate(Path.home), [navigate])\n const handleAdminClick = useCallback(() => navigate(Path.admin.root), [navigate])\n\n useEffect(() => {\n if (idToken && !user) {\n // SignOut if fetching user information has failed for some reason\n actions.signOut(false)\n }\n }, [actions, idToken, user])\n\n return (\n <AppBar position=\"fixed\" elevation={0}>\n <Toolbar variant=\"dense\" disableGutters sx={{ width: '100%', px: 1, height: 36, minHeight: 36 }}>\n {toggleMenu ? (\n <IconButton color=\"secondary\" sx={{ display: { sm: 'inline-flex', md: 'none' } }} onClick={toggleMenu}>\n <Menu />\n </IconButton>\n ) : null}\n <AppBarButton\n active={hasAdminAccess && !inAdmin}\n startIcon={\n <img\n src={logo}\n width=\"20\"\n height=\"28\"\n alt=\"Suomen noutajakoirajärjestö\"\n style={{ marginTop: '-4px', marginBottom: '-4px' }}\n />\n }\n label=\"home\"\n onClick={handleHomeClick}\n >\n Koekalenteri\n </AppBarButton>\n {hasAdminAccess ? (\n <AppBarButton\n active={inAdmin}\n startIcon={<ManageAccountsOutlined />}\n onClick={handleAdminClick}\n label=\"admin\"\n >\n {t('admin')}\n </AppBarButton>\n ) : null}\n <Typography\n variant=\"h6\"\n color=\"#fdfdfd\"\n noWrap\n component=\"div\"\n sx={{ ml: 1, flexGrow: 1, flexShrink: 10000 }}\n ></Typography>\n <Suspense>\n <LanguageMenu />\n <UserMenu />\n <HelpMenu />\n </Suspense>\n </Toolbar>\n </AppBar>\n )\n}\n\nexport default Header\n","import type { TooltipProps } from '@mui/material/Tooltip'\n\nimport { styled } from '@mui/material'\nimport Box from '@mui/material/Box'\nimport Tooltip, { tooltipClasses } from '@mui/material/Tooltip'\nimport Typography from '@mui/material/Typography'\n\nexport interface TooltipContent {\n text: string\n icon: JSX.Element\n}\n\nconst IconsTooltipContent = ({ items }: { items: TooltipContent[] }) => (\n <Box>\n {items.map((item) => (\n <Box key={item.text} display=\"flex\" alignItems=\"center\">\n {item.icon} <Typography fontSize=\"small\">{item.text}</Typography>\n </Box>\n ))}\n </Box>\n)\n\ninterface Props extends Omit<TooltipProps, 'title'> {\n items: TooltipContent[]\n}\n\nexport const IconsTooltip = styled(({ className, items, children, ...props }: Props) => {\n if (!items.length) return <>{children}</>\n\n return (\n <Tooltip {...props} classes={{ popper: className }} title={<IconsTooltipContent items={items} />}>\n {children}\n </Tooltip>\n )\n})({\n [`& .${tooltipClasses.tooltip}`]: {\n maxWidth: 'none',\n },\n})\n","import type { ComponentProps, MouseEventHandler } from 'react'\n\nimport { Link, useNavigate } from 'react-router-dom'\nimport Box from '@mui/material/Box'\n\ninterface Props extends Omit<ComponentProps<typeof Link>, 'className' | 'onClick'> {\n readonly text: string\n readonly sx?: Record<string, any>\n readonly back?: boolean\n}\n\nexport default function LinkButton({ to, text, sx, back, ...rest }: Props) {\n const navigate = useNavigate()\n const handleClick: MouseEventHandler<HTMLAnchorElement> = (e) => {\n e.stopPropagation()\n if (back) {\n e.preventDefault()\n navigate(-1)\n }\n }\n\n return (\n <Box sx={{ px: 1, ...sx }} role=\"button\">\n <Link className=\"link\" to={to} onClick={handleClick} {...rest}>\n {text}\n </Link>\n </Box>\n )\n}\n","import { forwardRef } from 'react'\nimport CircularProgress from '@mui/material/CircularProgress'\n\nconst LoadingIndicator = forwardRef((props, ref) => (\n <div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center', height: '100%', minHeight: '50vh' }}>\n <CircularProgress ref={ref} />\n </div>\n))\n\nexport default LoadingIndicator\n","import type { TextFieldProps } from '@mui/material'\nimport type { ChangeEventHandler } from 'react'\n\nimport { useCallback, useEffect, useState } from 'react'\nimport TextField from '@mui/material/TextField'\n\nimport useDebouncedCallback from '../../hooks/useDebouncedCallback'\n\ninterface Props extends Omit<TextFieldProps<'standard'>, 'onChange'> {\n readonly formatValue?: (value: number | undefined) => string\n readonly parseInput?: (value: string) => number\n readonly pattern?: string\n readonly value?: number\n readonly onChange?: (value: number | undefined) => void\n}\n\nconst defaultFormatter = (value: number | undefined) => (value !== undefined ? `${value}` : '')\n\nexport const NumberInput = ({\n formatValue = defaultFormatter,\n parseInput = parseInt,\n pattern = '[0-9]{1,3}',\n value,\n onChange,\n ...props\n}: Props) => {\n const [stringValue, setStringValue] = useState<string>(formatValue(value))\n const [focused, setFocused] = useState(false)\n\n const dispatchChange = useDebouncedCallback((value: number | undefined) => onChange?.(value))\n const handleChange = useCallback<ChangeEventHandler<HTMLInputElement>>(\n (e) => {\n if (e.target.value !== stringValue) {\n setStringValue(e.target.value)\n }\n let newValue: number | undefined = parseInput(e.target.value)\n if (isNaN(newValue)) {\n newValue = undefined\n }\n if (newValue !== value) {\n dispatchChange(newValue)\n }\n },\n [dispatchChange, parseInput, stringValue, value]\n )\n\n const handleFocus = useCallback(() => setFocused(true), [])\n const handleBlur = useCallback(() => {\n setStringValue(formatValue(value))\n setFocused(false)\n }, [formatValue, value])\n\n useEffect(() => {\n if (!focused) setStringValue(formatValue(value))\n }, [focused, formatValue, value])\n\n return (\n <TextField\n {...props}\n onChange={handleChange}\n onBlur={handleBlur}\n onFocus={handleFocus}\n value={stringValue}\n type=\"text\"\n inputMode=\"numeric\"\n size=\"small\"\n slotProps={{\n input: {\n ...props.slotProps?.input,\n inputProps: {\n pattern,\n // @ts-expect-error wtf\n style: { textAlign: 'right', padding: 4, ...props.slotProps?.input?.inputProps?.style },\n },\n },\n }}\n ></TextField>\n )\n}\n","import { useMemo } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport Chip from '@mui/material/Chip'\n\nimport { getPrioritySort, priorityValuesToPriority } from '../../lib/priority'\n\ninterface Props {\n readonly priority: string[]\n}\n\nexport const PriorityChips = ({ priority }: Props) => {\n const { t } = useTranslation(['translation', 'breed'])\n const prioritySort = getPrioritySort(t)\n const sortedPriorities = useMemo(\n () => priorityValuesToPriority(priority).sort(prioritySort),\n [priority, prioritySort]\n )\n\n return (\n <>\n {sortedPriorities.map((p) => (\n <Chip key={p.value} label={t(p.name)} size=\"small\" sx={{ mx: '1px', height: '20px' }} />\n ))}\n </>\n )\n}\n","import Avatar from '@mui/material/Avatar'\n\ninterface Props {\n points?: number\n}\n\nconst RankingPoints = ({ points }: Props) => (\n <Avatar\n sx={{\n width: 20,\n height: 20,\n bgcolor: 'secondary.dark',\n fontSize: '0.8rem',\n display: points ? undefined : 'none',\n }}\n variant=\"rounded\"\n >\n {points}\n </Avatar>\n)\n\nexport default RankingPoints\n","import type { ReactNode } from 'react'\nimport type { ConfirmedEvent, PublicDogEvent } from '../../types'\n\nimport { useTranslation } from 'react-i18next'\nimport PictureAsPdfOutlined from '@mui/icons-material/PictureAsPdfOutlined'\nimport Grid2 from '@mui/material/Grid2'\nimport Link from '@mui/material/Link'\nimport Paper from '@mui/material/Paper'\nimport Typography from '@mui/material/Typography'\n\nimport { judgeName } from '../../lib/judge'\nimport { printContactInfo } from '../../lib/utils'\nimport { Path } from '../../routeConfig'\n\nimport CollapsibleSection from './CollapsibleSection'\nimport CostInfo from './CostInfo'\nimport { EntryStatus } from './EntryStatus'\nimport { PriorityChips } from './PriorityChips'\n\ninterface Props {\n readonly event: PublicDogEvent\n readonly invitationAttachment?: string | undefined\n}\n\nconst Header = ({ children }: { children: ReactNode }) => (\n <Grid2 size={{ xs: 4 }} alignContent=\"top\" sx={{ borderRight: '1px dashed #eee', borderBottom: '1px solid #eee' }}>\n <Typography variant=\"caption\">{children}</Typography>\n </Grid2>\n)\n\nconst Data = ({ children }: { children: ReactNode }) => (\n <Grid2 size={{ xs: 7 }} alignContent=\"center\" sx={{ borderBottom: '1px solid #eee' }}>\n <Typography variant=\"body2\" component=\"div\">\n {children}\n </Typography>\n </Grid2>\n)\n\nexport default function RegistrationEventInfo({ event, invitationAttachment }: Props) {\n const { t } = useTranslation()\n const title = `${event.eventType} ${t('dateFormat.datespan', { start: event.startDate, end: event.endDate })} ${\n event.location + (event.name ? ` (${event.name})` : '')\n }`\n\n return (\n <Paper sx={{ p: { xs: 0, sm: 1 }, mb: 1, width: '100%' }} elevation={2}>\n <CollapsibleSection title={title} border={false}>\n <Grid2\n container\n justifyContent=\"space-between\"\n alignItems=\"flex-start\"\n sx={{ '& .MuiGrid2-root': { overflow: 'hidden', textOverflow: 'ellipsis' } }}\n >\n <Grid2 container size={{ sm: 12, md: 6, lg: 4 }} columnSpacing={1}>\n <Header>{t('entryTime')}</Header>\n <Data>\n <b>{t('dateFormat.datespan', { start: event.entryStartDate, end: event.entryEndDate })}</b> \n <EntryStatus event={event} />\n </Data>\n <Header>{t('event.organizer')}</Header>\n <Data>{event.organizer?.name}</Data>\n <Header>{t('event.judges')}</Header>\n <Data>{event.judges.map((j) => judgeName(j, t)).join(', ')}</Data>\n {printContactInfo(event.contactInfo?.official) ? (\n <>\n <Header>{t('event.official')}</Header>\n <Data>{printContactInfo(event.contactInfo?.official)}</Data>\n </>\n ) : null}\n {printContactInfo(event.contactInfo?.secretary) ? (\n <>\n <Header>{t('event.secretary')}</Header>\n <Data>{printContactInfo(event.contactInfo?.secretary)}</Data>\n </>\n ) : null}\n </Grid2>\n <Grid2 container size={{ sm: 12, md: 6, lg: 4 }} columnSpacing={1}>\n <Header>{t('event.cost')}</Header>\n <Data>\n <CostInfo event={event} />\n </Data>\n {event.priority ? (\n <>\n <Header>{t('event.priority')}</Header>\n <Data>\n <PriorityChips priority={event.priority} />\n </Data>\n </>\n ) : null}\n {event.description ? (\n <>\n <Header>{t('event.description')}</Header>\n <Data>{event.description}</Data>\n </>\n ) : null}\n {invitationAttachment && event.state === 'invited' ? (\n <>\n <Header>{t('event.attachments')}</Header>\n <Data>\n <PictureAsPdfOutlined fontSize=\"small\" sx={{ verticalAlign: 'middle', pr: 0.5 }} />\n <Link\n href={Path.invitationAttachment({ ...event, invitationAttachment } as ConfirmedEvent)}\n rel=\"noopener\"\n target=\"_blank\"\n type=\"application/pdf\"\n variant=\"caption\"\n >\n Kutsu.pdf\n </Link>\n </Data>\n </>\n ) : null}\n </Grid2>\n </Grid2>\n </CollapsibleSection>\n </Paper>\n )\n}\n","import type { ChangeEventHandler } from 'react'\nimport type { Registration } from '../../../types'\n\nimport { useCallback, useEffect, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport TextField from '@mui/material/TextField'\n\nimport useDebouncedCallback from '../../../hooks/useDebouncedCallback'\nimport CollapsibleSection from '../CollapsibleSection'\n\ninterface Props {\n readonly disabled?: boolean\n readonly notes?: string\n readonly onChange?: (props: Partial<Registration>) => void\n readonly onOpenChange?: (value: boolean) => void\n readonly open?: boolean\n}\n\nexport function AdditionalInfo({ disabled, notes, onChange, onOpenChange, open }: Props) {\n const { t } = useTranslation()\n const [value, setValue] = useState(notes ?? '')\n\n const dispatchChange = useDebouncedCallback((notes: string) => onChange?.({ notes }))\n\n const handleChange = useCallback<ChangeEventHandler<HTMLTextAreaElement>>(\n (e) => {\n const newValue = e.target.value\n setValue(newValue)\n dispatchChange(newValue)\n },\n [dispatchChange]\n )\n\n useEffect(() => {\n setValue(notes ?? '')\n }, [notes])\n\n return (\n <CollapsibleSection title={t('registration.notes')} open={open} onOpenChange={onOpenChange}>\n <TextField\n disabled={disabled}\n label={t('registration.notes')}\n multiline\n name=\"notes\"\n onChange={handleChange}\n rows={4}\n sx={{ width: '100%' }}\n value={value}\n />\n </CollapsibleSection>\n )\n}\n","import type { Dog } from '../types'\n\nimport http from './http'\n\nconst PATH = '/dog/'\n\nexport async function getDog(regNo: string, refresh?: boolean, signal?: AbortSignal): Promise<Dog> {\n const encodedRegNo = regNo.replace('/', '~')\n const qs = refresh ? '?refresh' : ''\n return http.get<Dog>(`${PATH}${encodedRegNo}${qs}`, { signal })\n}\n","import type { Dog, ManualTestResult, RegistrationBreeder, RegistrationPerson } from '../../../types'\n\nimport { atom, atomFamily } from 'recoil'\n\nimport { logEffect } from '../effects'\nimport { localStorageEffect } from '../effects/storage'\n\ntype DogCachedBasePerson = Omit<RegistrationPerson, 'membership'>\ninterface DogCachedHandlerPerson extends DogCachedBasePerson {\n membership: Record<string, boolean>\n}\n\ninterface DogCachedOwnerPerson extends DogCachedBasePerson {\n ownerHandles: boolean\n ownerPays: boolean\n membership: Record<string, boolean>\n}\n\nexport interface DogCachedInfo {\n breeder: RegistrationBreeder\n dog: Dog\n handler: DogCachedHandlerPerson\n owner: DogCachedOwnerPerson\n payer: RegistrationPerson\n results: ManualTestResult[]\n rfid: boolean\n}\n\nexport type DogCache = Record<string, Partial<DogCachedInfo>>\n\nexport const dogCacheAtom = atom<DogCache>({\n key: 'dog-cache',\n default: {},\n effects: [localStorageEffect],\n})\n\nexport const dogAtom = atomFamily<Dog | undefined, string>({\n key: 'dog/regNo',\n default: undefined,\n effects: [logEffect],\n})\n","import type { DeepPartial, Dog } from '../../../types'\nimport type { DogCachedInfo } from './atoms'\n\nimport { diff } from 'deep-object-diff'\nimport { useSnackbar } from 'notistack'\nimport { useRecoilState } from 'recoil'\n\nimport { getDog } from '../../../api/dog'\nimport { hasChanges, merge } from '../../../lib/utils'\nimport { emptyDog } from '../../components/RegistrationForm'\nimport { useDogCache } from '../../components/registrationForm/hooks/useDogCache'\n\nimport { dogAtom } from './atoms'\n\nconst INIT_CACHE: DeepPartial<DogCachedInfo> = { owner: { ownerHandles: true, ownerPays: true } }\nconst isErrObject = (err: unknown): err is object => typeof err === 'object'\n\nexport function useDogActions(regNo: string) {\n const [dog, setDog] = useRecoilState(dogAtom(regNo))\n const [cache, setCache] = useDogCache(regNo)\n const { enqueueSnackbar } = useSnackbar()\n\n return {\n fetch: async (): Promise<DeepPartial<DogCachedInfo>> => {\n if (!regNo) {\n return { dog: emptyDog }\n }\n if (dog?.regNo === regNo) {\n return applyCache(regNo, cache, dog)\n }\n try {\n const fetched = await getDog(regNo)\n if (fetched?.regNo === regNo) {\n if (!fetched.results) {\n fetched.results = []\n }\n setDog(fetched)\n return applyCache(regNo, cache, fetched)\n }\n } catch (err) {\n if (isErrObject(err) && 'status' in err) {\n if (err.status === 404) {\n return { dog: emptyDog }\n }\n }\n enqueueSnackbar('Koiran tietojen haku epäonnistui 😞', { variant: 'error' })\n throw err\n }\n return { dog: emptyDog }\n },\n refresh: async (oldInfo?: DeepPartial<Dog>): Promise<DeepPartial<DogCachedInfo> | undefined> => {\n if (!regNo) {\n return { dog: emptyDog }\n }\n try {\n const updated = await getDog(regNo, true)\n if (updated.regNo === regNo) {\n if (!updated.results) {\n updated.results = []\n }\n setDog(updated)\n return applyCache(regNo, cache, updated, oldInfo)\n }\n } catch (err) {\n enqueueSnackbar('Koiran tietojen päivitys epäonnistui 😞', { variant: 'error' })\n return applyCache(regNo, cache, dog)\n }\n },\n updateCache: (props: DeepPartial<DogCachedInfo>) => {\n const newCache = merge(cache ?? INIT_CACHE, props)\n const newCacheDog = diff(dog ?? {}, newCache.dog ?? {})\n if (hasChanges(newCache?.dog, newCacheDog)) {\n newCache.dog = newCacheDog\n }\n setCache(newCache)\n return applyCache(regNo, newCache, dog)\n },\n }\n}\n\nexport function applyCache(\n regNo: string,\n cache?: DeepPartial<DogCachedInfo>,\n dog?: Dog,\n oldInfo?: DeepPartial<Dog>\n): DeepPartial<DogCachedInfo> {\n const result: DeepPartial<DogCachedInfo> = { ...cache, dog, rfid: false }\n\n if (dog) {\n // when we have some official info\n result.dog = merge<DeepPartial<Dog>>(\n {\n dam: {\n name: cache?.dog?.dam?.name || oldInfo?.dam?.name,\n titles: cache?.dog?.dam?.titles || oldInfo?.dam?.titles,\n },\n sire: {\n name: cache?.dog?.sire?.name || oldInfo?.sire?.name,\n titles: cache?.dog?.sire?.titles || oldInfo?.sire?.titles,\n },\n },\n dog\n )\n\n // titles and rfid are the only thing that overwrites official information, when the official info is empty\n if (!result.dog.titles && cache?.dog?.titles) {\n result.dog.titles = cache.dog.titles\n }\n if (!result.dog.rfid && cache?.dog?.rfid) {\n result.dog.rfid = cache.dog.rfid\n result.rfid = true\n }\n } else {\n result.dog = Object.assign({}, cache?.dog ?? {}, { regNo })\n }\n\n return result\n}\n","import { selector } from 'recoil'\n\nimport { validateRegNo } from '../../components/registrationForm/validation'\n\nimport { dogCacheAtom } from './atoms'\n\nexport const cachedDogRegNumbersSelector = selector<string[]>({\n key: 'cachedDogRegNumbers',\n get: ({ get }) => Object.keys(get(dogCacheAtom) ?? {}).filter(validateRegNo),\n})\n","import type { DeepPartial } from '../../../../types'\nimport type { DogCache, DogCachedInfo } from '../../../recoil/dog'\n\nimport { useCallback, useMemo } from 'react'\nimport { useRecoilState } from 'recoil'\n\nimport { isEmpty } from '../../../../lib/utils'\nimport { dogCacheAtom } from '../../../recoil/dog'\nimport { validateRegNo } from '../validation'\n\ntype Setter = (props: DeepPartial<DogCachedInfo>) => DeepPartial<DogCachedInfo> | undefined\ntype HookResult = [DeepPartial<DogCachedInfo> | undefined, Setter]\n\n/**\n * Hook for using locally stored cache dog related information.\n * @note The setter will replace (Object.assign) the provided keys to the cache.\n * @param regNo - Dog registration number\n */\nexport function useDogCache(regNo: string = ''): HookResult {\n const [cache, setCache] = useRecoilState(dogCacheAtom)\n const cached = useMemo(() => (regNo ? cache?.[regNo] : undefined), [cache, regNo])\n const setCached = useCallback<Setter>(\n (props) => {\n if (!validateRegNo(regNo) || isEmpty(props)) {\n return\n }\n const result = cached ? Object.assign({}, cached, props) : props\n setCache(Object.assign({}, filterInvalid(cache), { [regNo]: result }))\n return result\n },\n [cache, cached, regNo, setCache]\n )\n\n return [cached, setCached]\n}\n\nexport function filterInvalid(cache?: DogCache): DogCache {\n const result: DogCache = {}\n if (!cache) {\n return result\n }\n for (const regNo of Object.keys(cache).filter(validateRegNo)) {\n result[regNo] = cache[regNo]\n }\n return result\n}\n","import type { DeepPartial } from '../../../../types'\nimport type { DogCachedInfo } from '../../../recoil/dog'\n\nimport { useCallback } from 'react'\n\nimport { useDogCache } from './useDogCache'\n\ntype CacheKey = keyof DogCachedInfo\ntype KeySetter<K extends CacheKey> = (props: DeepPartial<DogCachedInfo[K]>) => DeepPartial<DogCachedInfo[K]> | undefined\ntype KeyHookResult<K extends CacheKey> = [DeepPartial<DogCachedInfo[K]> | undefined, KeySetter<K>]\n\n/**\n * Hook for using partial dog cache.\n * @note The setter will replace the cache in this key (as opposed to merging with existing data)\n * @param regNo - Dog registration number\n * @param key - Cache key, one of: breeder, dog, handler, owner, results\n */\nexport function useDogCacheKey<K extends CacheKey>(regNo: string | undefined, key: K): KeyHookResult<K> {\n const [cache, setCache] = useDogCache(regNo)\n const setCached = useCallback<KeySetter<K>>(\n (props) => {\n const cached = setCache({ [key]: props })\n return cached?.[key]\n },\n [key, setCache]\n )\n\n return [cache?.[key], setCached]\n}\n","import type { DeepPartial, Registration, RegistrationBreeder } from '../../../types'\n\nimport { useCallback } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport Grid2 from '@mui/material/Grid2'\nimport TextField from '@mui/material/TextField'\n\nimport CollapsibleSection from '../CollapsibleSection'\n\nimport { useDogCacheKey } from './hooks/useDogCacheKey'\n\ninterface Props {\n readonly reg: DeepPartial<Registration>\n readonly disabled?: boolean\n readonly error?: boolean\n readonly helperText?: string\n readonly onChange?: (props: DeepPartial<Registration>) => void\n readonly onOpenChange?: (value: boolean) => void\n readonly open?: boolean\n}\n\nexport function BreederInfo({ reg, disabled, error, helperText, onChange, onOpenChange, open }: Props) {\n const { t } = useTranslation()\n const [cache, setCache] = useDogCacheKey(reg.dog?.regNo, 'breeder')\n\n const handleChange = useCallback(\n (props: Partial<RegistrationBreeder>) => {\n const breeder = setCache({ ...cache, ...props })\n onChange?.({ breeder })\n },\n [cache, onChange, setCache]\n )\n\n return (\n <CollapsibleSection\n title={t('registration.breeder')}\n error={error}\n helperText={helperText}\n open={open && !!reg.dog?.regNo}\n onOpenChange={onOpenChange}\n >\n <Grid2 container spacing={1}>\n <Grid2 size={{ xs: 12, sm: 6 }}>\n <TextField\n disabled={disabled}\n error={!reg.breeder?.name}\n fullWidth\n id=\"breeder_name\"\n label={t('contact.name')}\n value={reg.breeder?.name ?? ''}\n onChange={(e) => handleChange({ name: e.target.value })}\n />\n </Grid2>\n <Grid2 size={{ xs: 12, sm: 6 }}>\n <TextField\n disabled={disabled}\n error={!reg.breeder?.location}\n fullWidth\n id=\"breeder_location\"\n label={t('contact.city')}\n value={reg.breeder?.location ?? ''}\n onChange={(e) => handleChange({ location: e.target.value })}\n />\n </Grid2>\n </Grid2>\n </CollapsibleSection>\n )\n}\n","import type { ChangeEvent } from 'react'\n\nimport { useCallback, useEffect, useState } from 'react'\nimport Grid2 from '@mui/material/Grid2'\nimport TextField from '@mui/material/TextField'\n\nimport useDebouncedCallback from '../../../../hooks/useDebouncedCallback'\n\ninterface Props {\n readonly className?: string\n readonly disabledName?: boolean\n readonly disabledTitles?: boolean\n readonly id: string\n readonly name?: string\n readonly nameLabel: string\n readonly onChange?: (props: { titles?: string; name?: string }) => void\n readonly titles?: string\n readonly titlesLabel: string\n}\nexport function TitlesAndName({\n className,\n disabledName,\n disabledTitles,\n id,\n name,\n nameLabel,\n onChange,\n titles,\n titlesLabel,\n}: Props) {\n const [localName, setLocalName] = useState('')\n const [localTitles, setLocalTitles] = useState('')\n\n const handleChange = useDebouncedCallback(onChange)\n\n const handleTitlesChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value.toLocaleUpperCase()\n setLocalTitles(value)\n handleChange({ name: localName, titles: value })\n },\n [handleChange, localName]\n )\n\n const handleNameChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value.toLocaleUpperCase()\n setLocalName(value)\n handleChange({ name: value, titles: localTitles })\n },\n [handleChange, localTitles]\n )\n\n useEffect(() => {\n setLocalName((name ?? '').toLocaleUpperCase())\n setLocalTitles((titles ?? '').toLocaleUpperCase())\n }, [name, titles])\n\n return (\n <Grid2 container spacing={1} size={{ xs: 12 }}>\n <Grid2 size={{ xs: 12, md: 6 }}>\n <TextField\n className={className}\n disabled={disabledTitles}\n fullWidth\n id={`${id}_titles`}\n label={titlesLabel}\n onChange={handleTitlesChange}\n value={localTitles}\n />\n </Grid2>\n <Grid2 size={{ xs: 12, md: 6 }}>\n <TextField\n className={className}\n disabled={disabledName}\n error={!disabledName && !name}\n fullWidth\n id={`${id}_name`}\n label={nameLabel}\n onChange={handleNameChange}\n value={localName}\n />\n </Grid2>\n </Grid2>\n )\n}\n","import type { SyntheticEvent } from 'react'\nimport type { BreedCode, DeepPartial, Dog, DogGender, Registration } from '../../../types'\nimport type { DogCachedInfo } from '../../recoil/dog'\n\nimport { useCallback, useEffect, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport Autocomplete from '@mui/material/Autocomplete'\nimport Button from '@mui/material/Button'\nimport CircularProgress from '@mui/material/CircularProgress'\nimport FormControl from '@mui/material/FormControl'\nimport FormHelperText from '@mui/material/FormHelperText'\nimport Grid2 from '@mui/material/Grid2'\nimport TextField from '@mui/material/TextField'\nimport { Box } from '@mui/system'\nimport { DatePicker } from '@mui/x-date-pickers'\nimport { differenceInMinutes, subMonths, subYears } from 'date-fns'\nimport { useRecoilValue } from 'recoil'\n\nimport { hasChanges } from '../../../lib/utils'\nimport { useDogActions } from '../../recoil/dog'\nimport { cachedDogRegNumbersSelector } from '../../recoil/dog/selectors'\nimport AutocompleteSingle from '../AutocompleteSingle'\nimport CollapsibleSection from '../CollapsibleSection'\nimport { emptyDog } from '../RegistrationForm'\n\nimport { TitlesAndName } from './dogInfo/TitlesAndName'\nimport { validateRegNo } from './validation'\n\nexport function shouldAllowRefresh(dog?: DeepPartial<Dog>) {\n if (!dog?.regNo) {\n return false\n }\n if (dog.refreshDate && differenceInMinutes(new Date(), dog.refreshDate) <= 5) {\n return false\n }\n return !!dog.refreshDate\n}\n\ninterface Props {\n readonly reg: DeepPartial<Registration>\n readonly eventDate: Date\n readonly minDogAgeMonths: number\n readonly disabled?: boolean\n readonly error?: boolean\n readonly helperText?: string\n readonly onChange?: (props: DeepPartial<Registration>, replace?: boolean) => void\n readonly onOpenChange?: (value: boolean) => void\n readonly open?: boolean\n readonly orgId: string\n}\n\ninterface State {\n regNo: string\n mode: 'fetch' | 'manual' | 'update' | 'notfound' | 'autofetch' | 'error'\n rfid: boolean\n}\n\nexport const DogInfo = ({\n reg,\n eventDate,\n minDogAgeMonths,\n disabled,\n error,\n helperText,\n onChange,\n onOpenChange,\n open,\n orgId,\n}: Props) => {\n const { t } = useTranslation()\n const { t: breed } = useTranslation('breed')\n const [state, setState] = useState<State>({\n regNo: reg?.dog?.regNo ?? '',\n mode: reg?.dog?.regNo ? 'update' : 'fetch',\n rfid: false,\n })\n const disabledByMode = disabled || state.mode !== 'manual'\n const sireDamDisabled = disabledByMode && (disabled || state.mode !== 'update')\n const rfidDisabled = disabledByMode && !state.rfid\n const validRegNo = validateRegNo(state.regNo)\n const [loading, setLoading] = useState(false)\n const [delayed, setDelayed] = useState(false)\n const allowRefresh = shouldAllowRefresh(reg?.dog)\n const cachedRegNos = useRecoilValue(cachedDogRegNumbersSelector)\n const actions = useDogActions(state.regNo)\n\n const handleChange = useCallback(\n (props: DeepPartial<DogCachedInfo>) => {\n const cache = actions.updateCache(props)\n onChange?.({ dog: cache.dog })\n },\n [actions, onChange]\n )\n\n const updateDog = useCallback(\n (cache?: DeepPartial<DogCachedInfo>) => {\n const dog = cache?.dog ?? {}\n const oldDog = reg?.dog ?? {}\n let replace = false\n if (hasChanges(oldDog, dog)) {\n const changes: DeepPartial<Registration> = { dog: cache?.dog }\n if (reg?.dog?.regNo !== cache?.dog?.regNo) {\n const {\n ownerHandles,\n ownerPays,\n membership: ownerMembership,\n ...owner\n } = cache?.owner || { ownerHandles: true, ownerPays: true }\n changes.breeder = cache?.breeder\n changes.handler = cache?.handler && { ...cache?.handler, membership: cache?.handler?.membership?.[orgId] }\n changes.owner = cache?.owner && { ...owner, membership: ownerMembership?.[orgId] }\n changes.ownerHandles = ownerHandles\n changes.ownerPays = ownerPays\n changes.results = []\n replace = true\n }\n onChange?.(changes, replace)\n }\n },\n [onChange, orgId, reg?.dog]\n )\n\n const buttonClick = useCallback(() => {\n if (delayed || loading) {\n return\n }\n const load = async () => {\n let delay = 100\n switch (state.mode) {\n case 'autofetch':\n case 'fetch':\n try {\n const cache = await actions.fetch()\n updateDog(cache)\n if (state.regNo) {\n setState((prev) => ({\n ...prev,\n mode: cache?.dog?.regNo ? 'update' : 'notfound',\n rfid: !!cache.rfid || !cache?.dog?.rfid,\n }))\n }\n } catch (err) {\n updateDog(emptyDog)\n setState((prev) => ({ ...prev, mode: 'error' }))\n }\n delay = 500\n break\n case 'update':\n updateDog(await actions.refresh(reg.dog))\n delay = 500\n break\n case 'notfound':\n setState((prev) => ({ ...prev, mode: 'manual' }))\n break\n default:\n setState({ regNo: '', mode: 'fetch', rfid: false })\n break\n }\n return delay\n }\n setLoading(true)\n setDelayed(true)\n load().then(\n (delay) => {\n setLoading(false)\n setTimeout(() => setDelayed(false), delay)\n },\n (reason) => {\n console.error(reason)\n setLoading(false)\n }\n )\n }, [actions, delayed, loading, reg.dog, state.mode, state.regNo, updateDog])\n\n const handleRegNoChange = useCallback(\n (event: SyntheticEvent<Element, Event>, value: string | null) => {\n if (value !== null && value !== state.regNo) {\n const upper = value.toLocaleUpperCase().trim()\n setState({ regNo: upper, mode: 'fetch', rfid: false })\n }\n },\n [state.regNo]\n )\n const handleRegNoSelect = useCallback(\n (event: SyntheticEvent<Element, Event>, value: string | null) => {\n if (value !== null && value !== state.regNo) {\n const upper = value.toLocaleUpperCase().trim()\n setState({ regNo: upper, mode: 'autofetch', rfid: false })\n }\n },\n [state.regNo]\n )\n\n useEffect(() => {\n if (state.regNo !== (reg.dog?.regNo ?? '')) {\n if (document.visibilityState === 'hidden') {\n setState((prev) => ({ ...prev, regNo: reg.dog?.regNo ?? '' }))\n return\n }\n if ((validRegNo && state.mode === 'autofetch') || state.regNo === '') {\n buttonClick()\n }\n }\n }, [buttonClick, reg.dog?.regNo, state.mode, state.regNo, validRegNo])\n\n return (\n <CollapsibleSection\n title={t('registration.dog')}\n error={error}\n helperText={helperText}\n open={open}\n onOpenChange={onOpenChange}\n >\n <Grid2 container spacing={1} alignItems=\"flex-start\">\n <Grid2 size={{ xs: 12, sm: 7, md: 6, lg: 3 }}>\n <FormControl fullWidth>\n <Box sx={{ display: 'flex', alignItems: 'center' }}>\n <Autocomplete\n id=\"txtReknro\"\n disabled={disabled || !disabledByMode}\n freeSolo\n renderInput={(props) => <TextField {...props} error={!validRegNo} label={t('dog.regNo')} />}\n value={state.regNo}\n inputValue={state.regNo}\n onChange={handleRegNoSelect}\n onInputChange={handleRegNoChange}\n options={cachedRegNos ?? []}\n sx={{ display: 'flex', flexGrow: 1, mr: 1 }}\n />\n <Button\n disabled={disabled || !validRegNo || (state.mode === 'update' && !allowRefresh)}\n variant=\"contained\"\n onClick={buttonClick}\n >\n {t(`registration.cta.${state.mode}`)}\n </Button>\n <CircularProgress size={28} sx={{ ml: 1, display: loading ? undefined : 'none' }} />\n </Box>\n <FormHelperText error={['notfound', 'error'].includes(state.mode)}>\n {t(`registration.cta.helper.${state.mode}`, { date: reg?.dog?.refreshDate })}\n </FormHelperText>\n </FormControl>\n </Grid2>\n <Grid2 size={{ xs: 12, sm: 5, md: 6, lg: 3 }}>\n <TextField\n className={rfidDisabled && reg?.dog?.rfid ? 'fact' : ''}\n disabled={disabled || rfidDisabled}\n fullWidth\n label={t('dog.rfid')}\n value={reg?.dog?.rfid ?? ''}\n error={!rfidDisabled && !reg?.dog?.rfid}\n onChange={(e) => handleChange({ dog: { rfid: e.target.value } })}\n />\n </Grid2>\n <Grid2 container spacing={1} size={{ xs: 12, lg: 6 }}>\n <TitlesAndName\n className={disabledByMode && reg?.dog?.breedCode ? 'fact' : ''}\n disabledTitles={disabled || (disabledByMode && state.mode !== 'update')}\n disabledName={disabledByMode}\n id=\"dog\"\n name={reg?.dog?.name}\n nameLabel={t('dog.name')}\n onChange={(props) => handleChange({ dog: props })}\n titles={reg?.dog?.titles}\n titlesLabel={t('dog.titles')}\n />\n </Grid2>\n <Grid2 size={{ xs: 6, sm: 3, lg: 3 }}>\n <FormControl className={disabledByMode && reg?.dog?.dob ? 'fact' : ''} fullWidth>\n <DatePicker\n referenceDate={subYears(new Date(), 2)}\n disabled={disabledByMode}\n format={t('dateFormatString.long')}\n label={t('dog.dob')}\n maxDate={subMonths(eventDate, minDogAgeMonths)}\n minDate={subYears(new Date(), 15)}\n onChange={(value: any) => value && handleChange({ dog: { dob: value } })}\n openTo={'year'}\n value={reg?.dog?.dob ?? null}\n views={['year', 'month', 'day']}\n />\n </FormControl>\n </Grid2>\n <Grid2 size={{ xs: 6, sm: 3, lg: 3 }}>\n <AutocompleteSingle<DogGender | '', true>\n className={disabledByMode && reg?.dog?.gender ? 'fact' : ''}\n disableClearable\n disabled={disabledByMode}\n error={!disabledByMode && !reg?.dog?.gender}\n getOptionLabel={(o) => (o ? t(`dog.genderChoises.${o}`) : '')}\n isOptionEqualToValue={(o, v) => o === v}\n label={t('dog.gender')}\n onChange={(value) => handleChange({ dog: { gender: value ? value : undefined } })}\n options={['F', 'M'] as DogGender[]}\n value={reg?.dog?.gender ?? ''}\n />\n </Grid2>\n <Grid2 size={{ xs: 12, sm: 6 }}>\n <AutocompleteSingle<BreedCode | '', true>\n className={disabledByMode && reg?.dog?.breedCode ? 'fact' : ''}\n disableClearable\n disabled={disabledByMode}\n error={!disabledByMode && !reg?.dog?.breedCode}\n getOptionLabel={(o) => (o ? breed(o) : '')}\n isOptionEqualToValue={(o, v) => o === v}\n label={t('dog.breed')}\n onChange={(value) => handleChange({ dog: { breedCode: value ? value : undefined } })}\n options={['122', '111', '121', '312', '110', '263']}\n value={reg?.dog?.breedCode}\n />\n </Grid2>\n <Grid2 size={{ xs: 12, lg: 6 }}>\n <TextField\n disabled={sireDamDisabled}\n fullWidth\n id={'sire'}\n label={t('dog.sire.name')}\n onChange={(e) => handleChange({ dog: { sire: { name: e.target.value } } })}\n error={!sireDamDisabled && !reg?.dog?.sire?.name}\n value={reg?.dog?.sire?.name ?? ''}\n />\n </Grid2>\n <Grid2 size={{ xs: 12, lg: 6 }}>\n <TextField\n disabled={sireDamDisabled}\n fullWidth\n id={'dam'}\n label={t('dog.dam.name')}\n onChange={(e) => handleChange({ dog: { dam: { name: e.target.value } } })}\n error={!sireDamDisabled && !reg?.dog?.dam?.name}\n value={reg?.dog?.dam?.name ?? ''}\n />\n </Grid2>\n </Grid2>\n </CollapsibleSection>\n )\n}\n","import type { SyntheticEvent } from 'react'\nimport type {\n PublicConfirmedEvent,\n Registration,\n RegistrationClass,\n RegistrationDate,\n RegistrationTime,\n ReserveChoise,\n} from '../../../types'\n\nimport { useCallback, useEffect, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport Grid2 from '@mui/material/Grid2'\nimport { format, isSameDay } from 'date-fns'\n\nimport { useAdminEventRegistrationDates } from '../../../hooks/useAdminEventRegistrationDates'\nimport { registrationDates, unique, uniqueClasses, uniqueDate } from '../../../lib/utils'\nimport { isRegistrationClass } from '../../admin/EventViewPage'\nimport AutocompleteMulti from '../AutocompleteMulti'\nimport AutocompleteSingle from '../AutocompleteSingle'\nimport CollapsibleSection from '../CollapsibleSection'\n\ninterface Props {\n readonly classDate?: string\n readonly classDisabled?: boolean\n readonly className?: string\n readonly disabled?: boolean\n readonly errorStates: { [Property in keyof Registration]?: boolean }\n readonly event: PublicConfirmedEvent\n readonly helperTexts: { [Property in keyof Registration]?: string }\n readonly onChange?: (props: Partial<Registration>) => void\n readonly onOpenChange?: (value: boolean) => void\n readonly open?: boolean\n readonly reg: Registration\n}\n\nexport function EntryInfo({\n classDate,\n classDisabled,\n className,\n disabled,\n errorStates,\n event,\n helperTexts,\n onChange,\n onOpenChange,\n open,\n reg,\n}: Props) {\n const { t } = useTranslation()\n const getRegDateLabel = useCallback((o: Date) => t('dateFormat.wdshort', { date: o }), [t])\n const getRegDateTimeLabel = useCallback(\n (o: RegistrationDate) =>\n t('dateFormat.weekday', { date: o.date }) + (o.time ? ' ' + t(`registration.timeLong.${o.time}`) : ''),\n [t]\n )\n const getReserveChoiceLabel = useCallback(\n (o: ReserveChoise | ''): string => (o !== '' ? t(`registration.reserveChoises.${o}`) : ''),\n [t]\n )\n\n const classes = uniqueClasses(event)\n const regDates = useAdminEventRegistrationDates(event, reg.class ?? className)\n const dates = uniqueDate(regDates.map((rd) => rd.date))\n const selectedDates = reg.dates.filter((rd) => dates.find((d) => isSameDay(d, rd.date)))\n const tmpDates = selectedDates.length ? selectedDates.map((rd) => rd.date) : dates\n const [filterDates, setFilterDates] = useState<Date[]>(\n uniqueDate(\n classDate ? regDates.filter((d) => format(d.date, 'dd.MM.') === classDate).map((rd) => rd.date) : tmpDates\n )\n )\n const isValidRegistrationDate = (rd: RegistrationDate) => filterDates.find((fd) => isSameDay(fd, rd.date))\n const datesAndTimes = regDates.filter(isValidRegistrationDate)\n const groups = unique(datesAndTimes.map((dt) => dt.time).filter((time): time is RegistrationTime => !!time))\n const showDatesFilter = dates.length > 1\n const showDatesAndTimes = groups.length > 1\n const error = errorStates.class ?? errorStates.dates ?? errorStates.reserve\n const datesText = showDatesFilter ? reg.dates.map(getRegDateTimeLabel).join(' / ') : ''\n const reserveText = reg.reserve ? t(`registration.reserveChoises.${reg.reserve}`) : ''\n const infoText = [reg.class ?? reg.eventType, datesText, reserveText].filter(Boolean).join(', ')\n const helperText = error ? t('validation.registration.required', { field: 'classesDetails' }) : infoText\n const sizeSwitch = showDatesFilter && showDatesAndTimes\n\n useEffect(() => {\n if (!showDatesFilter) {\n const validFilters = filterDates.filter((fd) => dates.find((d) => d.valueOf() === fd.valueOf()))\n if (!validFilters.length && dates.length) {\n setFilterDates(dates)\n }\n }\n }, [dates, filterDates, showDatesFilter])\n\n useEffect(() => {\n const changes: Partial<Registration> = {}\n let newClass: string | undefined | null = undefined\n if (className && reg.class !== className) {\n newClass = className\n } else if (reg.class && !classes.includes(reg.class)) {\n newClass = classes.length > 0 ? classes[0] : null\n } else if (!reg.class && classes.length) {\n newClass = classes[0]\n }\n if (isRegistrationClass(newClass) || newClass === null) {\n changes.class = newClass\n }\n\n const cdates = changes.class || !showDatesAndTimes ? registrationDates(event, groups, changes.class) : datesAndTimes\n const ddates = cdates.filter(isValidRegistrationDate)\n const rdates = reg.dates.filter((rd) => ddates.find((d) => isSameDay(d.date, rd.date) && d.time === rd.time))\n if (!rdates.length || rdates.length !== reg.dates.length) {\n if (ddates.length) changes.dates = ddates\n }\n\n if (showDatesFilter) {\n const usedDates = changes.dates || reg.dates\n if (filterDates.length === 0) changes.dates = []\n const missingDates = filterDates.filter((filterDate) => !usedDates.find((ud) => isSameDay(ud.date, filterDate)))\n const addDates = cdates.filter((cd) => missingDates.find((date) => isSameDay(date, cd.date)))\n if (addDates.length) changes.dates = [...usedDates, ...addDates]\n }\n\n if (changes.dates)\n changes.dates.sort((a, b) => {\n if (a.date !== b.date) return a.date.valueOf() - b.date.valueOf()\n if (a.time && b.time) return a.time.localeCompare(b.time)\n return 0\n })\n\n if (Object.keys(changes).length) {\n onChange?.(changes)\n }\n // TODO: re-eanble when react-hooks plugin is reinstalled: eslint-disable-next-line react-hooks/exhaustive-deps\n }, [classes, className, event, filterDates, groups])\n\n const handleClassChange = useCallback((value: RegistrationClass) => onChange?.({ class: value }), [onChange])\n const handleDatesAndTimesChange = useCallback(\n (_e: SyntheticEvent<Element, Event>, value: readonly RegistrationDate[]) => onChange?.({ dates: [...value] }),\n [onChange]\n )\n const handleReserveChange = useCallback(\n (value: '' | ReserveChoise) => onChange?.({ reserve: value || undefined }),\n [onChange]\n )\n\n return (\n <CollapsibleSection\n title={t('registration.class')}\n border={false}\n error={error}\n helperText={helperText}\n open={open}\n onOpenChange={onOpenChange}\n >\n <Grid2 container spacing={1}>\n <Grid2\n sx={{ display: event.classes.length === 0 ? 'none' : 'block' }}\n size={{ xs: 12, md: sizeSwitch ? 6 : 2 }}\n >\n <AutocompleteSingle\n disableClearable\n disabled={classDisabled || disabled}\n error={errorStates.class}\n helperText={helperTexts.class}\n label={t('registration.class')}\n onChange={handleClassChange}\n options={classes}\n value={reg.class ?? undefined}\n />\n </Grid2>\n <Grid2 size={{ xs: 12, md: sizeSwitch ? 6 : 4 }}>\n <AutocompleteSingle\n disableClearable\n disabled={disabled}\n error={errorStates.reserve}\n helperText={helperTexts.reserve}\n label={t('registration.reserve')}\n onChange={handleReserveChange}\n getOptionLabel={getReserveChoiceLabel}\n options={['ANY', 'DAY', 'WEEK' /*, 'NO'*/] as ReserveChoise[]}\n value={reg.reserve}\n />\n </Grid2>\n <Grid2 size={{ xs: 12, md: 6 }} sx={{ display: showDatesFilter ? undefined : 'none' }}>\n <AutocompleteMulti\n disabled={disabled}\n error={errorStates.dates || (showDatesFilter && filterDates.length === 0)}\n helperText={t('registration.datesFilterInfo')}\n label={t('registration.datesFilter')}\n onChange={(_, value) => setFilterDates(value.sort((a, b) => a.valueOf() - b.valueOf()))}\n isOptionEqualToValue={(o, v) => o.valueOf() === v.valueOf()}\n getOptionLabel={getRegDateLabel}\n options={dates}\n value={filterDates}\n />\n </Grid2>\n <Grid2 size={{ xs: 12, md: 6 }} sx={{ display: showDatesAndTimes ? undefined : 'none' }}>\n <AutocompleteMulti\n disabled={disabled}\n error={errorStates.dates}\n helperText={t('registration.datesInfo')}\n label={t('registration.dates')}\n onChange={handleDatesAndTimesChange}\n isOptionEqualToValue={(o, v) => o.date?.valueOf() === v.date?.valueOf() && o.time === v.time}\n getOptionLabel={getRegDateTimeLabel}\n options={datesAndTimes}\n value={reg.dates}\n />\n </Grid2>\n </Grid2>\n </CollapsibleSection>\n )\n}\n","import type { DeepPartial, Registration, RegistrationPerson } from '../../../types'\n\nimport { useCallback, useEffect } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport Grid2 from '@mui/material/Grid2'\nimport TextField from '@mui/material/TextField'\nimport { MuiTelInput } from 'mui-tel-input'\n\nimport CollapsibleSection from '../CollapsibleSection'\n\nimport { useDogCacheKey } from './hooks/useDogCacheKey'\n\ninterface Props {\n readonly admin?: boolean\n readonly reg: DeepPartial<Registration>\n readonly disabled?: boolean\n readonly error?: boolean\n readonly helperText?: string\n readonly onChange?: (props: DeepPartial<Registration>) => void\n readonly onOpenChange?: (value: boolean) => void\n readonly open?: boolean\n readonly orgId: string\n}\n\nexport function HandlerInfo({ admin, reg, disabled, error, helperText, onChange, onOpenChange, open, orgId }: Props) {\n const { t, i18n } = useTranslation()\n const [cache, setCache] = useDogCacheKey(reg.dog?.regNo, 'handler')\n\n const handleChange = useCallback(\n (props: Partial<RegistrationPerson>) => {\n const membership =\n props.membership === undefined ? cache?.membership : { ...cache?.membership, [orgId]: props.membership }\n const cached = setCache({ ...cache, ...props, membership })\n if (cached) {\n onChange?.({ handler: { ...cached, membership: cached.membership?.[orgId] ?? false } })\n }\n },\n [cache, onChange, orgId, setCache]\n )\n\n useEffect(() => {\n // Don't change registrations based on cache when secretary handles them\n if (admin || reg.ownerHandles) return\n\n const cachedMembership = cache?.membership?.[orgId]\n if (cachedMembership !== undefined && reg.handler?.membership !== cachedMembership) {\n onChange?.({ handler: { ...reg.handler, membership: cachedMembership } })\n }\n }, [admin, cache, onChange, orgId, reg.handler, reg.ownerHandles])\n\n return (\n <CollapsibleSection\n title={t('registration.handler')}\n error={error}\n helperText={helperText}\n open={open}\n onOpenChange={onOpenChange}\n >\n <Grid2 container spacing={1}>\n <Grid2 size={{ xs: 12, sm: 6 }}>\n <TextField\n disabled={disabled}\n error={!reg.handler?.name}\n fullWidth\n id=\"handler_name\"\n label={t('contact.name')}\n name=\"name\"\n onChange={(e) => handleChange({ name: e.target.value })}\n value={reg.handler?.name ?? ''}\n slotProps={{\n input: { autoComplete: 'name' },\n }}\n />\n </Grid2>\n <Grid2 size={{ xs: 12, sm: 6 }}>\n <TextField\n disabled={disabled}\n error={!reg.handler?.location}\n fullWidth\n id=\"handler_city\"\n label={t('contact.city')}\n name=\"city\"\n onChange={(e) => handleChange({ location: e.target.value })}\n value={reg.handler?.location ?? ''}\n slotProps={{\n input: { autoComplete: 'address-level2' },\n }}\n />\n </Grid2>\n <Grid2 size={{ xs: 12, sm: 6 }}>\n <TextField\n disabled={disabled}\n error={!reg.handler?.email}\n fullWidth\n id=\"handler_email\"\n label={t('contact.email')}\n name=\"email\"\n onChange={(e) => handleChange({ email: e.target.value.trim() })}\n value={reg.handler?.email ?? ''}\n slotProps={{\n input: { autoComplete: 'email' },\n }}\n />\n </Grid2>\n <Grid2 size={{ xs: 12, sm: 6 }}>\n <MuiTelInput\n langOfCountryName={i18n.language}\n defaultCountry=\"FI\"\n forceCallingCode\n InputProps={{ autoComplete: 'tel' }}\n disabled={disabled}\n error={!reg.handler?.phone}\n fullWidth\n id=\"handler_phone\"\n label={t('contact.phone')}\n name=\"phone\"\n onChange={(phone) => handleChange({ phone })}\n value={reg.handler?.phone ?? ''}\n />\n </Grid2>\n </Grid2>\n </CollapsibleSection>\n )\n}\n","import type { DeepPartial, Registration } from '../../../types'\n\nimport { useCallback } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport Checkbox from '@mui/material/Checkbox'\nimport FormControlLabel from '@mui/material/FormControlLabel'\nimport FormGroup from '@mui/material/FormGroup'\n\nimport CollapsibleSection from '../CollapsibleSection'\n\nimport { useDogCacheKey } from './hooks/useDogCacheKey'\n\ninterface Props {\n readonly reg: DeepPartial<Registration>\n readonly disabled?: boolean\n readonly onChange?: (props: DeepPartial<Registration>) => void\n readonly orgId: string\n}\n\nconst MembershipInfo = ({ reg, disabled, onChange, orgId }: Props) => {\n const { t } = useTranslation()\n const [ownerCache, setOwnerCache] = useDogCacheKey(reg.dog?.regNo, 'owner')\n const [handlerCache, setHandlerCache] = useDogCacheKey(reg.dog?.regNo, 'handler')\n\n const handleChange = useCallback(\n (props: DeepPartial<Pick<Registration, 'owner' | 'handler'>>) => {\n const changes = {}\n let cachedOwner, cachedHandler\n\n if (props.owner) {\n const membership =\n props.owner?.membership === undefined\n ? ownerCache?.membership\n : { ...ownerCache?.membership, [orgId]: props.owner.membership }\n cachedOwner = setOwnerCache({\n ...reg.owner,\n ownerHandles: reg.ownerHandles,\n ownerPays: reg.ownerPays,\n ...ownerCache,\n ...props.owner,\n membership,\n })\n }\n\n if (props.handler) {\n const membership =\n props.handler?.membership === undefined\n ? handlerCache?.membership\n : { ...handlerCache?.membership, [orgId]: props.handler.membership }\n cachedHandler = setHandlerCache({ ...reg.handler, ...handlerCache, ...props.handler, membership })\n }\n\n if (cachedOwner) {\n const { ownerHandles, ownerPays, ...owner } = cachedOwner\n Object.assign(changes, { owner: { ...owner, membership: owner.membership?.[orgId] } })\n }\n if (cachedHandler) {\n Object.assign(changes, { handler: { ...cachedHandler, membership: cachedHandler.membership?.[orgId] } })\n }\n\n if (Object.keys(changes).length) {\n onChange?.(changes)\n }\n },\n [handlerCache, onChange, orgId, ownerCache, setHandlerCache, setOwnerCache]\n )\n\n const open = !!reg.dog?.regNo\n\n return (\n <CollapsibleSection\n title={t('registration.membership')}\n open={open}\n error={!open}\n helperText={!open ? t('validation.registration.choose', { field: 'dog' }) : undefined}\n >\n <FormGroup>\n <FormControlLabel\n control={\n <Checkbox\n disabled={disabled}\n checked={reg.owner?.membership ?? false}\n onChange={(e) => handleChange({ owner: { membership: e.target.checked } })}\n />\n }\n label={t('registration.ownerIsMember')}\n name=\"ownerIsMember\"\n />\n <FormControlLabel\n disabled={disabled || reg.ownerHandles}\n control={\n <Checkbox\n checked={reg.ownerHandles ? (reg.owner?.membership ?? false) : (reg.handler?.membership ?? false)}\n onChange={(e) => handleChange({ handler: { membership: e.target.checked } })}\n />\n }\n label={t('registration.handlerIsMember')}\n name=\"handlerIsMember\"\n />\n </FormGroup>\n </CollapsibleSection>\n )\n}\n\nexport default MembershipInfo\n","import type { DeepPartial, Registration, RegistrationPerson } from '../../../types'\n\nimport { useCallback, useEffect } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport FormControlLabel from '@mui/material/FormControlLabel'\nimport FormGroup from '@mui/material/FormGroup'\nimport Grid2 from '@mui/material/Grid2'\nimport Switch from '@mui/material/Switch'\nimport TextField from '@mui/material/TextField'\nimport { MuiTelInput } from 'mui-tel-input'\n\nimport CollapsibleSection from '../CollapsibleSection'\n\nimport { useDogCacheKey } from './hooks/useDogCacheKey'\n\ninterface Props {\n readonly admin?: boolean\n readonly reg: DeepPartial<Registration>\n readonly disabled?: boolean\n readonly error?: boolean\n readonly helperText?: string\n readonly onChange?: (props: DeepPartial<Registration>) => void\n readonly onOpenChange?: (value: boolean) => void\n readonly open?: boolean\n readonly orgId: string\n}\n\nexport function OwnerInfo({ admin, reg, disabled, error, helperText, onChange, onOpenChange, open, orgId }: Props) {\n const { t, i18n } = useTranslation()\n const [cache, setCache] = useDogCacheKey(reg.dog?.regNo, 'owner')\n\n const handleChange = useCallback(\n (props: Partial<RegistrationPerson & { ownerHandles: boolean; ownerPays: boolean }>) => {\n const membership =\n props.membership === undefined ? cache?.membership : { ...cache?.membership, [orgId]: props.membership }\n const cached = setCache({ ...cache, ...props, membership })\n\n if (cached) {\n const { ownerHandles, ownerPays, ...owner } = cached\n onChange?.({\n owner: { ...owner, membership: owner.membership?.[orgId] ?? false },\n ownerHandles: ownerHandles ?? props.ownerHandles ?? true,\n ownerPays: ownerPays ?? props.ownerPays ?? true,\n })\n }\n },\n [cache, onChange, orgId, setCache]\n )\n\n useEffect(() => {\n // Don't change registrations based on cache when secretary handles them\n if (admin) return\n\n const cachedMembership = cache?.membership?.[orgId]\n if (cachedMembership !== undefined && reg.owner?.membership !== cachedMembership) {\n onChange?.({ owner: { ...reg.owner, membership: cachedMembership } })\n }\n }, [admin, cache, onChange, orgId, reg.owner])\n\n return (\n <CollapsibleSection\n title={t('registration.owner')}\n error={error}\n helperText={helperText}\n open={open && !!reg.dog?.regNo}\n onOpenChange={onOpenChange}\n >\n <Grid2 container spacing={1}>\n <Grid2 size={{ xs: 12, sm: 6 }}>\n <TextField\n disabled={disabled}\n error={!reg.owner?.name}\n fullWidth\n id=\"owner_name\"\n label={t('contact.name')}\n name=\"name\"\n onChange={(e) => handleChange({ name: e.target.value })}\n value={reg.owner?.name ?? ''}\n slotProps={{\n input: { autoComplete: 'name' },\n }}\n />\n </Grid2>\n <Grid2 size={{ xs: 12, sm: 6 }}>\n <TextField\n disabled={disabled}\n error={!reg.owner?.location}\n fullWidth\n id=\"owner_city\"\n label={t('contact.city')}\n name=\"city\"\n onChange={(e) => handleChange({ location: e.target.value })}\n value={reg.owner?.location ?? ''}\n slotProps={{\n input: { autoComplete: 'address-level2' },\n }}\n />\n </Grid2>\n <Grid2 size={{ xs: 12, sm: 6 }}>\n <TextField\n disabled={disabled}\n error={!reg.owner?.email}\n fullWidth\n id=\"owner_email\"\n label={t('contact.email')}\n name=\"email\"\n onChange={(e) => handleChange({ email: e.target.value.trim() })}\n value={reg.owner?.email ?? ''}\n slotProps={{\n input: { autoComplete: 'email' },\n }}\n />\n </Grid2>\n <Grid2 size={{ xs: 12, sm: 6 }}>\n <MuiTelInput\n langOfCountryName={i18n.language}\n defaultCountry=\"FI\"\n forceCallingCode\n InputProps={{ autoComplete: 'tel' }}\n disabled={disabled}\n error={!reg.owner?.phone}\n fullWidth\n id=\"owner_phone\"\n label={t('contact.phone')}\n name=\"phone\"\n onChange={(phone) => handleChange({ phone })}\n value={reg.owner?.phone ?? ''}\n />\n </Grid2>\n </Grid2>\n <FormGroup>\n <FormControlLabel\n disabled={disabled}\n control={\n <Switch\n checked={reg.ownerHandles ?? true}\n onChange={(e) => handleChange({ ownerHandles: e.target.checked })}\n />\n }\n label={t('registration.ownerHandles')}\n name=\"ownerHandles\"\n />\n <FormControlLabel\n disabled={disabled}\n control={\n <Switch checked={reg.ownerPays ?? true} onChange={(e) => handleChange({ ownerPays: e.target.checked })} />\n }\n label={t('registration.ownerPays')}\n name=\"ownerPays\"\n />\n </FormGroup>\n </CollapsibleSection>\n )\n}\n","import type { DeepPartial, Registration, RegistrationPerson } from '../../../types'\n\nimport { useCallback } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport Grid2 from '@mui/material/Grid2'\nimport TextField from '@mui/material/TextField'\nimport { MuiTelInput } from 'mui-tel-input'\n\nimport CollapsibleSection from '../CollapsibleSection'\n\nimport { useDogCacheKey } from './hooks/useDogCacheKey'\n\ninterface Props {\n readonly reg: DeepPartial<Registration>\n readonly disabled?: boolean\n readonly error?: boolean\n readonly helperText?: string\n readonly onChange?: (props: DeepPartial<Registration>) => void\n readonly onOpenChange?: (value: boolean) => void\n readonly open?: boolean\n}\n\nexport function PayerInfo({ reg, disabled, error, helperText, onChange, onOpenChange, open }: Props) {\n const { t, i18n } = useTranslation()\n const [cache, setCache] = useDogCacheKey(reg.dog?.regNo, 'payer')\n\n const handleChange = useCallback(\n (props: Partial<RegistrationPerson>) => {\n const payer = setCache({ ...cache, ...props })\n onChange?.({ payer })\n },\n [cache, onChange, setCache]\n )\n\n return (\n <CollapsibleSection\n title={t('registration.payer')}\n error={error}\n helperText={helperText}\n open={open}\n onOpenChange={onOpenChange}\n >\n <Grid2 container spacing={1}>\n <Grid2 size={{ xs: 12, sm: 6 }}>\n <TextField\n disabled={disabled}\n error={!reg.payer?.name}\n fullWidth\n id=\"payer_name\"\n label={t('contact.name')}\n name=\"name\"\n onChange={(e) => handleChange({ name: e.target.value })}\n value={reg.payer?.name ?? ''}\n slotProps={{\n input: { autoComplete: 'name' },\n }}\n />\n </Grid2>\n <Grid2 size={{ xs: 12, sm: 6 }}>\n <TextField\n disabled={disabled}\n error={!reg.payer?.email}\n fullWidth\n id=\"payer_email\"\n label={t('contact.email')}\n name=\"email\"\n onChange={(e) => handleChange({ email: e.target.value.trim() })}\n value={reg.payer?.email ?? ''}\n slotProps={{\n input: { autoComplete: 'email' },\n }}\n />\n </Grid2>\n <Grid2 size={{ xs: 12, sm: 6 }}>\n <MuiTelInput\n langOfCountryName={i18n.language}\n defaultCountry=\"FI\"\n forceCallingCode\n InputProps={{ autoComplete: 'tel' }}\n disabled={disabled}\n error={!reg.payer?.phone}\n fullWidth\n id=\"payer_phone\"\n label={t('contact.phone')}\n name=\"phone\"\n onChange={(phone) => handleChange({ phone })}\n value={reg.payer?.phone ?? ''}\n />\n </Grid2>\n </Grid2>\n </CollapsibleSection>\n )\n}\n","import type { EventResultRequirement, EventResultRequirements, EventResultRequirementsByDate } from '../../../../rules'\nimport type { ManualTestResult, QualifyingResult } from '../../../../types'\n\nimport { nanoid } from 'nanoid'\n\nimport { unique } from '../../../../lib/utils'\nimport { objectContains } from '../validation'\n\nconst asArray = (v: EventResultRequirements | EventResultRequirement) => (Array.isArray(v) ? v : [v])\n\nfunction findFirstMissing(requirements: EventResultRequirementsByDate | undefined, results: QualifyingResult[]) {\n if (!requirements || typeof requirements.rules === 'function') {\n return []\n }\n for (const rule of requirements.rules) {\n for (const opt of asArray(rule)) {\n const { count, ...rest } = opt\n if (results.filter((r) => objectContains(r, rest)).length < count) {\n return rest\n }\n }\n }\n}\n\nexport function availableTypes(requirements?: EventResultRequirementsByDate, eventType?: string) {\n if (!requirements || typeof requirements.rules === 'function') {\n switch (eventType) {\n case 'NOME-B SM':\n return ['NOME-B']\n case 'NOME-A SM':\n return ['NOME-A', 'NOME-A KV']\n case 'NOWT SM':\n return ['NOWT']\n }\n return []\n }\n return unique(requirements.rules.flatMap((rule) => asArray(rule).map((opt) => opt.type)))\n}\n\nconst availableSMResults = (type?: string, eventType?: string, hasKVA?: boolean) => {\n switch (eventType) {\n case 'NOME-B SM':\n return [hasKVA ? undefined : 'FI KVA-B', 'VOI1', 'VOI2', 'VOI3'].filter(Boolean)\n case 'NOWT SM':\n return [hasKVA ? undefined : 'FI KVA-WT', 'VOI1', 'VOI2', 'VOI3'].filter(Boolean)\n case 'NOME-A SM':\n if (type === 'NOME-A')\n return [hasKVA ? undefined : 'FI KVA-FT', 'A1 CERT', 'A1 RES-CERT', 'A1', 'A2', 'A3'].filter(Boolean)\n\n if (type === 'NOME-A KV') return ['EXC CACIT', 'EXC RES-CACIT', 'EXC', 'VG', 'G']\n }\n return []\n}\n\nexport function availableResults(\n requirements?: EventResultRequirementsByDate,\n type?: string,\n eventType?: string,\n existingResults?: ManualTestResult[]\n) {\n if (!requirements || typeof requirements.rules === 'function') {\n if (eventType?.includes(' SM')) {\n const hasKVA = existingResults?.some((r) => r.result.startsWith('FI KVA'))\n\n return availableSMResults(type, eventType, hasKVA)\n }\n return []\n }\n return unique(\n requirements.rules.flatMap((rule) =>\n asArray(rule)\n .filter((opt) => !type || opt.type === type)\n .map((opt) => (opt.cert ? 'CERT' : opt.result))\n )\n )\n}\n\nexport function createMissingResult(\n requirements: EventResultRequirementsByDate | undefined,\n results: Array<QualifyingResult | ManualTestResult>,\n regNo: string\n): ManualTestResult {\n const rule = findFirstMissing(requirements, results)\n return {\n id: nanoid(10),\n regNo,\n date: new Date(),\n official: false,\n qualifying: true,\n type: '',\n judge: '',\n location: '',\n result: '',\n class: '',\n ...rule,\n }\n}\n\nexport function resultBorderColor(qualifying: boolean | undefined) {\n if (qualifying === true) {\n return 'success.light'\n }\n if (qualifying === false) {\n return 'error.main'\n }\n}\n\nexport function getResultId(result: ManualTestResult | QualifyingResult) {\n if ('id' in result) {\n return result.id\n }\n return result.type + result.class + result.date.toISOString()\n}\n","import type { EventResultRequirementsByDate } from '../../../../rules'\nimport type { ManualTestResult, QualifyingResult, TestResult } from '../../../../types'\n\nimport { useCallback } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport DeleteOutline from '@mui/icons-material/DeleteOutline'\nimport Button from '@mui/material/Button'\nimport FormControl from '@mui/material/FormControl'\nimport Grid2 from '@mui/material/Grid2'\nimport Stack from '@mui/material/Stack'\nimport TextField from '@mui/material/TextField'\nimport { DatePicker } from '@mui/x-date-pickers'\nimport { addMonths } from 'date-fns'\n\nimport AutocompleteSingle from '../../AutocompleteSingle'\nimport RankingPoints from '../../RankingPoints'\n\nimport { availableResults, availableTypes, resultBorderColor } from './utils'\n\ninterface Props {\n readonly eventType?: string\n readonly dob?: Date\n readonly result: QualifyingResult | ManualTestResult\n readonly manualResults?: ManualTestResult[]\n readonly disabled?: boolean\n readonly requirements?: EventResultRequirementsByDate\n readonly onChange?: (result: ManualTestResult, props: Partial<TestResult>) => void\n readonly onRemove?: (result: ManualTestResult) => void\n}\n\nconst isManualResult = (result: QualifyingResult | ManualTestResult): result is ManualTestResult => !result.official\nconst getSuffix = (\n result: QualifyingResult | ManualTestResult\n): ' CERT' | ' CACIT' | ' RES-CERT' | ' RES-CACIT' | '' => {\n if (result.cacit) return ' CACIT'\n if (result.cert) return ' CERT'\n if (result.resCacit) return ' RES-CACIT'\n if (result.resCert) return ' RES-CERT'\n return ''\n}\n\nconst parseResult = (result?: string): Partial<TestResult> => {\n if (!result) return {}\n\n if (result === 'FI KVA-B') return { result: 'FI KVA-B', class: 'VOI' }\n if (result === 'FI KVA-WT') return { result: 'FI KVA-WT', class: 'VOI' }\n if (result === 'FI KVA-FT') return { result: 'FI KVA-FT' }\n\n const resCert = result.includes('RES-CERT')\n const cert = !resCert && result.includes('CERT')\n const resCacit = result.includes('RES-CACIT')\n const cacit = !resCacit && result.includes('CACIT')\n const realResult = result.replace(/(RES-CERT|CERT|RES-CACIT|CACIT)/, '').trim()\n const testClass = realResult.length === 4 ? realResult.slice(0, -1) : undefined\n\n return {\n result: realResult,\n cert,\n resCert,\n cacit,\n resCacit,\n class: testClass,\n }\n}\n\nexport default function QualifyingResultRow({\n eventType,\n dob,\n result,\n manualResults,\n disabled,\n requirements,\n onChange,\n onRemove,\n}: Props) {\n const { t } = useTranslation()\n const handleChange = useCallback(\n (result: QualifyingResult | ManualTestResult, props: Partial<TestResult>) => {\n if (isManualResult(result)) onChange?.(result, { ...props, points: undefined })\n },\n [onChange]\n )\n const handleRemove = useCallback(() => {\n if (isManualResult(result)) onRemove?.(result)\n }, [onRemove, result])\n const maxDate = new Date()\n const date9Months = dob ? addMonths(dob, 9) : maxDate\n const minDate = date9Months < maxDate ? date9Months : maxDate\n\n return (\n <Grid2 container spacing={1} alignItems=\"center\">\n <Grid2 size={{ xs: 6, sm: 3.5, md: 2 }}>\n <AutocompleteSingle\n disabled={result.official || disabled}\n disableClearable\n options={availableTypes(requirements, eventType)}\n label={t('testResult.eventType')}\n onChange={(value) => {\n const testResult = availableResults(requirements, value, eventType, manualResults)[0]\n handleChange(result, { type: value, ...parseResult(testResult) })\n }}\n value={result.type}\n />\n </Grid2>\n <Grid2 size={{ xs: 6, sm: 4, md: 2.5, lg: 2 }}>\n <AutocompleteSingle\n disabled={result.official || disabled}\n disableClearable\n options={availableResults(requirements, result.type, eventType, manualResults)}\n label={t('testResult.result')}\n onChange={(value) => {\n handleChange(result, {\n ...parseResult(value),\n })\n }}\n sx={{\n '& fieldset': {\n borderColor: resultBorderColor(result.qualifying),\n borderWidth: !result.result || result.qualifying === undefined ? undefined : 2,\n },\n '& .Mui-disabled .MuiOutlinedInput-notchedOutline': {\n borderColor: resultBorderColor(result.qualifying),\n },\n }}\n value={`${result.result}${getSuffix(result)}`}\n />\n </Grid2>\n <Grid2 size={{ xs: 6, sm: 4, md: 2.5, lg: 2 }}>\n <FormControl fullWidth>\n <DatePicker\n disabled={result.official || disabled}\n format={t('dateFormatString.long')}\n label={t('testResult.date')}\n maxDate={maxDate}\n minDate={minDate}\n onChange={(value: any) => handleChange(result, { date: value || undefined })}\n slotProps={{\n textField: { error: !result.date },\n }}\n value={result.date || null}\n />\n </FormControl>\n </Grid2>\n <Grid2 size={{ xs: 6, sm: 3.5, md: 2 }}>\n <TextField\n disabled={result.official || disabled}\n error={!result.location}\n fullWidth\n label={t('testResult.location')}\n onChange={(e) => handleChange(result, { location: e.target.value })}\n value={result.location}\n />\n </Grid2>\n <Grid2 size={{ xs: 12, sm: 4, md: 3, lg: 2 }}>\n <TextField\n disabled={result.official || disabled}\n error={!result.judge}\n fullWidth\n label={t('testResult.judge')}\n onChange={(e) => handleChange(result, { judge: e.target.value })}\n value={result.judge}\n />\n </Grid2>\n <Grid2 flex={1}>\n <Stack direction=\"row\" gap={1} justifyContent=\"end\" alignItems=\"center\">\n <Button\n sx={{ display: result.official ? 'none' : undefined }}\n disabled={disabled}\n startIcon={<DeleteOutline />}\n onClick={handleRemove}\n variant=\"outlined\"\n >\n {t('registration.cta.deleteResult')}\n </Button>\n <RankingPoints points={result.points} />\n </Stack>\n </Grid2>\n </Grid2>\n )\n}\n","import type { EventResultRequirementsByDate } from '../../../rules'\nimport type { ManualTestResult, QualifyingResult, Registration, TestResult } from '../../../types'\n\nimport { useCallback, useMemo } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport AddOutlined from '@mui/icons-material/AddOutlined'\nimport Button from '@mui/material/Button'\nimport Grid2 from '@mui/material/Grid2'\nimport Stack from '@mui/material/Stack'\nimport Typography from '@mui/material/Typography'\n\nimport CollapsibleSection from '../CollapsibleSection'\nimport RankingPoints from '../RankingPoints'\n\nimport QualifyingResultRow from './qualifyingResultsInfo/QualifyingResultRow'\nimport { createMissingResult, getResultId } from './qualifyingResultsInfo/utils'\n\ninterface Props {\n readonly eventType?: string\n readonly regNo?: string\n readonly dob?: Date\n readonly rankingPeriod?: { min?: Date; max?: Date }\n readonly results?: ManualTestResult[]\n readonly requirements?: EventResultRequirementsByDate\n readonly qualifyingResults?: QualifyingResult[]\n readonly disabled?: boolean\n readonly error?: boolean\n readonly helperText?: string\n readonly onChange?: (props: Partial<Registration>) => void\n readonly onOpenChange?: (value: boolean) => void\n readonly open?: boolean\n}\n\nexport default function QualifyingResultsInfo({\n eventType,\n regNo,\n dob,\n rankingPeriod,\n results,\n requirements,\n qualifyingResults,\n disabled,\n error,\n helperText,\n onChange,\n onOpenChange,\n open,\n}: Props) {\n const { t } = useTranslation()\n const disableResultInput = disabled || !requirements?.rules.length || !regNo\n\n const qualifying = useMemo(() => {\n if (!regNo) {\n return []\n }\n const newResults: Array<QualifyingResult | ManualTestResult> = (qualifyingResults ?? []).map((r) => ({\n ...r,\n id: getResultId(r),\n regNo,\n }))\n if (results) {\n for (const result of results) {\n if (!newResults.find((r) => !r.official && r.id && r.id === result.id)) {\n newResults.push({ ...result, official: false, qualifying: undefined })\n }\n }\n }\n return newResults\n }, [qualifyingResults, results, regNo])\n\n const handleChange = useCallback(\n (result: QualifyingResult | ManualTestResult, props: Partial<TestResult>) => {\n const index = qualifying.findIndex((r) => !r.official && r.id && r.id === result.id)\n if (index >= 0) {\n const newResults = qualifying.slice(0)\n newResults.splice(index, 1, { ...result, ...props })\n onChange?.({ results: newResults.filter((r): r is ManualTestResult => !r.official) })\n }\n },\n [onChange, qualifying]\n )\n\n const handleAddResult = useCallback(\n () =>\n onChange?.({\n results: [...(results ?? []), createMissingResult(requirements, qualifying, regNo ?? '')],\n }),\n [onChange, results, requirements, qualifying, regNo]\n )\n\n const handleRemoveResult = useCallback(\n (result: ManualTestResult) => {\n onChange?.({\n results: (results ?? []).filter((r) => r.id !== result.id),\n })\n },\n [onChange, results]\n )\n\n const totalPoints = useMemo(() => qualifying.reduce((acc, r) => acc + (r.points ?? 0), 0), [qualifying])\n\n return (\n <CollapsibleSection\n title={t('registration.qualifyingResults')}\n error={error}\n helperText={helperText}\n open={open && !!regNo}\n onOpenChange={onOpenChange}\n >\n <Grid2 container spacing={1}>\n <Grid2 display={rankingPeriod?.min ? undefined : 'none'}>\n <Typography variant=\"caption\">{`${t('registration.rankingTime')}: ${t('dateFormat.datespan', { start: rankingPeriod?.min, end: rankingPeriod?.max })}`}</Typography>\n </Grid2>\n {qualifying.map((result) => (\n <QualifyingResultRow\n eventType={eventType}\n dob={dob}\n key={getResultId(result)}\n disabled={disabled}\n result={result}\n manualResults={results}\n requirements={requirements}\n onChange={handleChange}\n onRemove={handleRemoveResult}\n />\n ))}\n <Stack direction=\"row\" mt={1} ml={1} justifyContent=\"space-between\" width=\"100%\">\n <Button\n startIcon={<AddOutlined />}\n disabled={disableResultInput}\n onClick={handleAddResult}\n variant=\"outlined\"\n >\n {t('registration.cta.addResult')}\n </Button>\n <Stack\n display={totalPoints ? undefined : 'none'}\n direction=\"row\"\n gap={1}\n justifyContent=\"end\"\n alignItems=\"center\"\n >\n <Typography variant=\"caption\">Karsintapisteet yht.:</Typography>\n <RankingPoints points={totalPoints} />\n </Stack>\n </Stack>\n </Grid2>\n </CollapsibleSection>\n )\n}\n","import type { Theme } from '@mui/material'\nimport type { TFunction } from 'i18next'\nimport type {\n DeepPartial,\n Language,\n ManualTestResult,\n PublicConfirmedEvent,\n Registration,\n TestResult,\n} from '../../types'\n\nimport { useCallback, useEffect, useMemo, useState } from 'react'\nimport { Trans, useTranslation } from 'react-i18next'\nimport Cancel from '@mui/icons-material/Cancel'\nimport CheckOutlined from '@mui/icons-material/CheckOutlined'\nimport ExpandMore from '@mui/icons-material/ExpandMore'\nimport { useMediaQuery } from '@mui/material'\nimport Accordion from '@mui/material/Accordion'\nimport AccordionDetails from '@mui/material/AccordionDetails'\nimport AccordionSummary from '@mui/material/AccordionSummary'\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport Checkbox from '@mui/material/Checkbox'\nimport Collapse from '@mui/material/Collapse'\nimport FormControl from '@mui/material/FormControl'\nimport FormControlLabel from '@mui/material/FormControlLabel'\nimport FormHelperText from '@mui/material/FormHelperText'\nimport Link from '@mui/material/Link'\nimport Paper from '@mui/material/Paper'\nimport Stack from '@mui/material/Stack'\nimport { diff } from 'deep-object-diff'\n\nimport { isDevEnv } from '../../lib/env'\nimport { hasChanges, merge } from '../../lib/utils'\nimport { getRequirements } from '../../rules'\n\nimport { AdditionalInfo } from './registrationForm/AdditionalInfo'\nimport { BreederInfo } from './registrationForm/BreederInfo'\nimport { DogInfo } from './registrationForm/DogInfo'\nimport { EntryInfo } from './registrationForm/EntryInfo'\nimport { HandlerInfo } from './registrationForm/HandlerInfo'\nimport MembershipInfo from './registrationForm/MembershipInfo'\nimport { OwnerInfo } from './registrationForm/OwnerInfo'\nimport { PayerInfo } from './registrationForm/PayerInfo'\nimport QualifyingResultsInfo from './registrationForm/QualifyingResultsInfo'\nimport { filterRelevantResults, validateRegistration } from './registrationForm/validation'\nimport { AsyncButton } from './AsyncButton'\n\ninterface Props {\n readonly admin?: boolean\n readonly changes?: boolean\n readonly classDate?: string\n readonly classDisabled?: boolean\n readonly className?: string\n readonly disabled?: boolean\n readonly event: PublicConfirmedEvent\n readonly onCancel?: () => void\n readonly onChange?: (registration: Registration) => void\n readonly onSave?: () => Promise<void>\n readonly registration: Registration\n readonly savedRegistration?: Registration | null\n}\n\nexport const emptyDog = {\n regNo: '',\n results: [],\n}\nexport const emptyBreeder = {\n name: '',\n location: '',\n}\nexport const emptyPerson = {\n name: '',\n phone: '',\n email: '',\n location: '',\n membership: false,\n}\n\nexport default function RegistrationForm({\n admin,\n changes,\n classDate,\n classDisabled,\n className,\n disabled,\n event,\n onCancel,\n onChange,\n onSave,\n registration,\n savedRegistration,\n}: Props) {\n const { t, i18n } = useTranslation()\n const large = useMediaQuery((theme: Theme) => theme.breakpoints.up('md'))\n const [errors, setErrors] = useState(validateRegistration(registration, event))\n const [open, setOpen] = useState<{ [key: string]: boolean | undefined }>({})\n const [rankingPeriod, setRankingPeriod] = useState<{ min?: Date; max?: Date }>({})\n\n const valid = errors.length === 0 && registration.qualifies\n const isMember = registration.handler?.membership || registration.owner?.membership\n const paymentAmount = event.costMember && isMember ? event.costMember : event.cost\n const ctaText = useMemo(() => {\n if (registration.id) return 'Tallenna muutokset'\n if (admin) return 'Vahvista ja lähetä maksulinkki'\n return 'Vahvista ja siirry maksamaan'\n }, [admin, registration.id])\n\n const requirements = useMemo(\n () =>\n getRequirements(\n registration?.eventType ?? '',\n registration?.class,\n registration?.dates && registration.dates.length ? registration.dates[0].date : new Date()\n ),\n [registration?.eventType, registration?.class, registration?.dates]\n )\n\n const handleChange = useCallback(\n (props: DeepPartial<Registration> | undefined = {}, replace?: boolean) => {\n if (disabled) return\n if (props.class || props.results || props.dog?.results || (props.dog && !registration.qualifies)) {\n const cls = props.class ?? registration.class\n const dogResults = props.dog?.results ?? registration.dog?.results ?? []\n const results = props.results ?? registration.results ?? []\n const filtered = filterRelevantResults(event, cls, dogResults as TestResult[], results as ManualTestResult[])\n props.qualifyingResults = filtered.relevant\n props.qualifies = filtered.qualifies\n setRankingPeriod({ min: filtered.minResultDate, max: filtered.maxResultDate })\n }\n\n const newState = replace ? Object.assign({}, registration, props) : merge<Registration>(registration, props ?? {})\n if (hasChanges(registration, newState)) {\n onChange?.(newState)\n if (isDevEnv()) {\n console.debug('changed', diff(registration, newState))\n }\n }\n },\n [disabled, registration, event, onChange]\n )\n\n const handleOpenChange = useCallback(\n (id: keyof typeof open, value: boolean) => {\n const newState = large\n ? {\n ...open,\n [id]: value,\n }\n : {\n entry: false,\n dog: false,\n breeder: false,\n owner: false,\n handler: registration.ownerHandles,\n payer: registration.ownerPays,\n qr: false,\n info: false,\n [id]: value,\n }\n setOpen(newState)\n },\n [large, open, registration.ownerHandles, registration.ownerPays]\n )\n\n const [helperTexts, errorStates] = useMemo(() => {\n const states: { [Property in keyof Registration]?: boolean } = {}\n const texts = getSectionHelperTexts(registration, t)\n for (const error of errors) {\n texts[error.opts.field] = t(`validation.registration.${error.key}`, error.opts)\n states[error.opts.field] = true\n }\n if (!registration?.dog?.regNo) {\n texts.breeder = texts.owner = texts.qualifyingResults = t('validation.registration.choose', { field: 'dog' })\n states.breeder = states.owner = states.qualifyingResults = true\n }\n return [texts, states]\n }, [errors, registration, t])\n\n useEffect(() => {\n setOpen({\n entry: true,\n dog: large,\n breeder: large,\n owner: large,\n handler: large,\n qr: large,\n info: large,\n })\n }, [large])\n\n useEffect(() => {\n setErrors(validateRegistration(registration, event))\n\n const filtered = filterRelevantResults(\n event,\n registration?.class,\n registration?.dog?.results ?? [],\n registration?.results\n )\n setRankingPeriod({ min: filtered.minResultDate, max: filtered.maxResultDate })\n const newState = { ...registration, qualifies: filtered.qualifies, qualifyingResults: filtered.relevant }\n\n if (hasChanges(savedRegistration ?? registration, newState)) {\n if (isDevEnv()) {\n console.log('changes', diff(savedRegistration ?? registration, newState))\n }\n handleChange({ qualifies: filtered.qualifies, qualifyingResults: filtered.relevant })\n }\n }, [event, handleChange, registration, savedRegistration])\n\n useEffect(() => {\n // update language on new registrations\n if (!registration.id && i18n.language !== registration.language) {\n handleChange?.({ language: i18n.language as Language })\n }\n }, [i18n.language, handleChange, registration.language, registration.id])\n\n return (\n <Paper\n elevation={2}\n sx={{\n display: 'flex',\n flexDirection: 'column',\n flexGrow: 1,\n overflow: 'auto',\n maxHeight: '100%',\n maxWidth: '100%',\n }}\n >\n <Box\n sx={{\n pb: 0.5,\n overflow: 'auto',\n borderRadius: 1,\n bgcolor: 'background.form',\n '& .MuiInputBase-root': {\n bgcolor: 'background.default',\n },\n '& .fact input.Mui-disabled': {\n color: 'success.main',\n WebkitTextFillColor: (theme) => theme.palette.success.main,\n },\n minWidth: 350,\n }}\n >\n <EntryInfo\n reg={registration}\n event={event}\n classDate={classDate}\n classDisabled={classDisabled}\n className={className}\n disabled={disabled}\n errorStates={errorStates}\n helperTexts={helperTexts}\n onChange={handleChange}\n onOpenChange={(value) => handleOpenChange('entry', value)}\n open={open.entry}\n />\n <DogInfo\n reg={registration}\n eventDate={event.startDate}\n minDogAgeMonths={9}\n disabled={disabled}\n error={errorStates.dog}\n helperText={helperTexts.dog}\n onChange={handleChange}\n onOpenChange={(value) => handleOpenChange('dog', value)}\n open={open.dog}\n orgId={event.organizer.id}\n />\n <BreederInfo\n reg={registration}\n disabled={disabled}\n error={errorStates.breeder}\n helperText={helperTexts.breeder}\n onChange={handleChange}\n onOpenChange={(value) => handleOpenChange('breeder', value)}\n open={open.breeder}\n />\n <OwnerInfo\n admin={admin}\n reg={registration}\n disabled={disabled}\n error={errorStates.owner}\n helperText={helperTexts.owner}\n onChange={handleChange}\n onOpenChange={(value) => handleOpenChange('owner', value)}\n open={open.owner}\n orgId={event.organizer.id}\n />\n <Collapse in={!registration.ownerHandles}>\n <HandlerInfo\n admin={admin}\n reg={registration}\n disabled={disabled}\n error={errorStates.handler}\n helperText={helperTexts.handler}\n onChange={handleChange}\n onOpenChange={(value) => handleOpenChange('handler', value)}\n open={open.handler}\n orgId={event.organizer.id}\n />\n </Collapse>\n <Collapse in={!registration.ownerPays}>\n <PayerInfo\n reg={registration}\n disabled={disabled}\n error={errorStates.payer}\n helperText={helperTexts.payer}\n onChange={handleChange}\n onOpenChange={(value) => handleOpenChange('payer', value)}\n open={open.payer}\n />\n </Collapse>\n <QualifyingResultsInfo\n eventType={event.eventType}\n regNo={registration.dog?.regNo}\n dob={registration.dog?.dob}\n disabled={disabled}\n rankingPeriod={rankingPeriod}\n requirements={requirements}\n results={registration.results}\n qualifyingResults={registration.qualifyingResults}\n error={!registration.qualifies || errorStates.qualifyingResults}\n helperText={helperTexts.qualifyingResults}\n onChange={handleChange}\n onOpenChange={(value) => handleOpenChange('qr', value)}\n open={open.qr}\n />\n <AdditionalInfo\n disabled={disabled}\n notes={registration.notes}\n onChange={handleChange}\n onOpenChange={(value) => handleOpenChange('info', value)}\n open={open.info}\n />\n <MembershipInfo reg={registration} orgId={event.organizer.id} onChange={handleChange} />\n <Box sx={{ p: 1, pl: 4, borderTop: '1px solid #bdbdbd' }}>\n <FormControl error={errorStates.agreeToTerms} disabled={!!registration.id}>\n <FormControlLabel\n disabled={disabled}\n control={\n <Checkbox\n checked={registration.agreeToTerms}\n onChange={(e) => handleChange({ agreeToTerms: e.target.checked })}\n />\n }\n label={\n <Trans t={t} i18nKey=\"registration.terms\">\n Hyväksyn{' '}\n <Link\n target=\"_blank\"\n rel=\"noopener\"\n href=\"https://yttmk.yhdistysavain.fi/noutajien-metsastyskokeet-2/ohjeistukset/kokeen-ja-tai-kilpailun-ilmoitta/\"\n >\n ilmoittautmisen ehdot\n </Link>{' '}\n ja{' '}\n <Link target=\"_blank\" rel=\"noopener\" href=\"https://www.snj.fi/snj/tietosuojaseloste/\">\n tietosuojaselosteen\n </Link>\n </Trans>\n }\n name=\"agreeToTerms\"\n />\n </FormControl>\n <FormHelperText error>{helperTexts.agreeToTerms}</FormHelperText>\n </Box>\n </Box>\n\n <Stack\n spacing={1}\n direction=\"row\"\n justifyContent=\"flex-end\"\n sx={{ p: 1, borderTop: '1px solid', borderColor: '#bdbdbd' }}\n useFlexGap\n >\n <Box my=\"auto\">\n <b>Maksettava:</b> {paymentAmount - (registration.paidAmount ?? 0)} €\n </Box>\n <AsyncButton\n color=\"primary\"\n disabled={disabled || !changes || !valid}\n onClick={onSave}\n startIcon={<CheckOutlined />}\n variant=\"contained\"\n >\n {ctaText}\n </AsyncButton>\n <Button startIcon={<Cancel />} variant=\"outlined\" onClick={onCancel}>\n Peruuta\n </Button>\n </Stack>\n {!valid && (\n <Accordion variant=\"outlined\" sx={{ backgroundColor: 'background.form' }}>\n <AccordionSummary expandIcon={<ExpandMore />}>Miksi en voi siirtyä eteenpäin?</AccordionSummary>\n <AccordionDetails>\n Puutteelliset tiedot:\n <ul style={{ margin: 0 }}>\n {errors.map((e, i) => (\n <li key={i}>{t(`registration.${e.opts.field}` as any)} </li>\n ))}\n {!registration.qualifies ? <li>{t('registration.qualifyingResults')}</li> : null}\n </ul>\n </AccordionDetails>\n </Accordion>\n )}\n </Paper>\n )\n}\n\nfunction getSectionHelperTexts(\n registration: Registration,\n t: TFunction<'translation', undefined>\n): { [Property in keyof Registration]?: string } {\n return {\n breeder: `${registration.breeder?.name || ''}`,\n dog: registration.dog?.regNo ? `${registration.dog.regNo} - ${registration.dog.name}` : '',\n handler: registration.ownerHandles ? t('registration.ownerHandles') : `${registration.handler?.name || ''}`,\n owner: `${registration.owner?.name || ''}`,\n payer: registration.ownerPays ? t('registration.ownerPays') : `${registration.payer?.name || ''}`,\n qualifyingResults: t('registration.qualifyingResultsInfo', {\n class: registration.class,\n eventType: registration.eventType,\n qualifies: t(registration.qualifies ? 'registration.qyalifyingResultsYes' : 'registration.qualifyingResultsNo'),\n }),\n reserve: t('registration.reserveHelp'),\n }\n}\n","import type { Theme } from '@mui/material'\nimport type { DataGridProps } from '@mui/x-data-grid'\n\nimport { useState } from 'react'\nimport { styled } from '@mui/material'\nimport { DataGrid } from '@mui/x-data-grid'\n\nconst DataGridWithDefaults = (props: DataGridProps) => {\n const [page, setPage] = useState(0)\n return (\n <DataGrid\n paginationModel={{ page, pageSize: 100 }}\n onPaginationModelChange={(model) => setPage(model.page)}\n pageSizeOptions={[100]}\n initialState={{ density: 'compact' }}\n disableColumnMenu\n {...props}\n />\n )\n}\n\nconst StyledDataGrid = styled(DataGridWithDefaults)(({ theme }: { theme: Theme }) => {\n return {\n '& .MuiDataGrid-row:nth-of-type(2n+1)': {\n backgroundColor: theme.palette.background.oddRow,\n },\n '& .MuiDataGrid-cell:focus': {\n outline: 'none',\n },\n '& .MuiDataGrid-row.Mui-selected': {\n backgroundColor: theme.palette.background.selected,\n },\n '& .MuiDataGrid-row:hover': {\n backgroundColor: undefined,\n },\n '& .MuiDataGrid-row.Mui-selected:hover': {\n backgroundColor: theme.palette.background.hover,\n },\n '& .MuiDataGrid-row:hover > .MuiDataGrid-cell': {\n backgroundColor: theme.palette.background.hover,\n },\n }\n})\n\nexport default StyledDataGrid\n","import type { SvgIconProps } from '@mui/material'\nimport type { hasPriority } from '../../../lib/registration'\n\nimport StarBorderOutlined from '@mui/icons-material/StarBorderOutlined'\nimport StarHalfOutlined from '@mui/icons-material/StarHalfOutlined'\nimport StarOutlined from '@mui/icons-material/StarOutlined'\n\nimport { DIM_OPACITY } from './constants'\n\ninterface PriorityIconProps extends SvgIconProps {\n dim?: boolean\n priority: ReturnType<typeof hasPriority>\n}\n\nexport const PriorityIcon = ({ dim, priority, ...props }: PriorityIconProps) => {\n const Icon = priority === 0.5 ? StarHalfOutlined : priority ? StarOutlined : StarBorderOutlined\n const opacity = !dim || priority ? 1 : DIM_OPACITY\n\n return <Icon {...props} opacity={opacity} />\n}\n","export const DIM_OPACITY = 0.1\n","// # Version 2024052601, Last Updated Sun May 26 07:07:01 2024 UTC\nexport const VALID_TLDS = [\n 'AAA',\n 'AARP',\n 'ABB',\n 'ABBOTT',\n 'ABBVIE',\n 'ABC',\n 'ABLE',\n 'ABOGADO',\n 'ABUDHABI',\n 'AC',\n 'ACADEMY',\n 'ACCENTURE',\n 'ACCOUNTANT',\n 'ACCOUNTANTS',\n 'ACO',\n 'ACTOR',\n 'AD',\n 'ADS',\n 'ADULT',\n 'AE',\n 'AEG',\n 'AERO',\n 'AETNA',\n 'AF',\n 'AFL',\n 'AFRICA',\n 'AG',\n 'AGAKHAN',\n 'AGENCY',\n 'AI',\n 'AIG',\n 'AIRBUS',\n 'AIRFORCE',\n 'AIRTEL',\n 'AKDN',\n 'AL',\n 'ALIBABA',\n 'ALIPAY',\n 'ALLFINANZ',\n 'ALLSTATE',\n 'ALLY',\n 'ALSACE',\n 'ALSTOM',\n 'AM',\n 'AMAZON',\n 'AMERICANEXPRESS',\n 'AMERICANFAMILY',\n 'AMEX',\n 'AMFAM',\n 'AMICA',\n 'AMSTERDAM',\n 'ANALYTICS',\n 'ANDROID',\n 'ANQUAN',\n 'ANZ',\n 'AO',\n 'AOL',\n 'APARTMENTS',\n 'APP',\n 'APPLE',\n 'AQ',\n 'AQUARELLE',\n 'AR',\n 'ARAB',\n 'ARAMCO',\n 'ARCHI',\n 'ARMY',\n 'ARPA',\n 'ART',\n 'ARTE',\n 'AS',\n 'ASDA',\n 'ASIA',\n 'ASSOCIATES',\n 'AT',\n 'ATHLETA',\n 'ATTORNEY',\n 'AU',\n 'AUCTION',\n 'AUDI',\n 'AUDIBLE',\n 'AUDIO',\n 'AUSPOST',\n 'AUTHOR',\n 'AUTO',\n 'AUTOS',\n 'AW',\n 'AWS',\n 'AX',\n 'AXA',\n 'AZ',\n 'AZURE',\n 'BA',\n 'BABY',\n 'BAIDU',\n 'BANAMEX',\n 'BAND',\n 'BANK',\n 'BAR',\n 'BARCELONA',\n 'BARCLAYCARD',\n 'BARCLAYS',\n 'BAREFOOT',\n 'BARGAINS',\n 'BASEBALL',\n 'BASKETBALL',\n 'BAUHAUS',\n 'BAYERN',\n 'BB',\n 'BBC',\n 'BBT',\n 'BBVA',\n 'BCG',\n 'BCN',\n 'BD',\n 'BE',\n 'BEATS',\n 'BEAUTY',\n 'BEER',\n 'BENTLEY',\n 'BERLIN',\n 'BEST',\n 'BESTBUY',\n 'BET',\n 'BF',\n 'BG',\n 'BH',\n 'BHARTI',\n 'BI',\n 'BIBLE',\n 'BID',\n 'BIKE',\n 'BING',\n 'BINGO',\n 'BIO',\n 'BIZ',\n 'BJ',\n 'BLACK',\n 'BLACKFRIDAY',\n 'BLOCKBUSTER',\n 'BLOG',\n 'BLOOMBERG',\n 'BLUE',\n 'BM',\n 'BMS',\n 'BMW',\n 'BN',\n 'BNPPARIBAS',\n 'BO',\n 'BOATS',\n 'BOEHRINGER',\n 'BOFA',\n 'BOM',\n 'BOND',\n 'BOO',\n 'BOOK',\n 'BOOKING',\n 'BOSCH',\n 'BOSTIK',\n 'BOSTON',\n 'BOT',\n 'BOUTIQUE',\n 'BOX',\n 'BR',\n 'BRADESCO',\n 'BRIDGESTONE',\n 'BROADWAY',\n 'BROKER',\n 'BROTHER',\n 'BRUSSELS',\n 'BS',\n 'BT',\n 'BUILD',\n 'BUILDERS',\n 'BUSINESS',\n 'BUY',\n 'BUZZ',\n 'BV',\n 'BW',\n 'BY',\n 'BZ',\n 'BZH',\n 'CA',\n 'CAB',\n 'CAFE',\n 'CAL',\n 'CALL',\n 'CALVINKLEIN',\n 'CAM',\n 'CAMERA',\n 'CAMP',\n 'CANON',\n 'CAPETOWN',\n 'CAPITAL',\n 'CAPITALONE',\n 'CAR',\n 'CARAVAN',\n 'CARDS',\n 'CARE',\n 'CAREER',\n 'CAREERS',\n 'CARS',\n 'CASA',\n 'CASE',\n 'CASH',\n 'CASINO',\n 'CAT',\n 'CATERING',\n 'CATHOLIC',\n 'CBA',\n 'CBN',\n 'CBRE',\n 'CC',\n 'CD',\n 'CENTER',\n 'CEO',\n 'CERN',\n 'CF',\n 'CFA',\n 'CFD',\n 'CG',\n 'CH',\n 'CHANEL',\n 'CHANNEL',\n 'CHARITY',\n 'CHASE',\n 'CHAT',\n 'CHEAP',\n 'CHINTAI',\n 'CHRISTMAS',\n 'CHROME',\n 'CHURCH',\n 'CI',\n 'CIPRIANI',\n 'CIRCLE',\n 'CISCO',\n 'CITADEL',\n 'CITI',\n 'CITIC',\n 'CITY',\n 'CK',\n 'CL',\n 'CLAIMS',\n 'CLEANING',\n 'CLICK',\n 'CLINIC',\n 'CLINIQUE',\n 'CLOTHING',\n 'CLOUD',\n 'CLUB',\n 'CLUBMED',\n 'CM',\n 'CN',\n 'CO',\n 'COACH',\n 'CODES',\n 'COFFEE',\n 'COLLEGE',\n 'COLOGNE',\n 'COM',\n 'COMMBANK',\n 'COMMUNITY',\n 'COMPANY',\n 'COMPARE',\n 'COMPUTER',\n 'COMSEC',\n 'CONDOS',\n 'CONSTRUCTION',\n 'CONSULTING',\n 'CONTACT',\n 'CONTRACTORS',\n 'COOKING',\n 'COOL',\n 'COOP',\n 'CORSICA',\n 'COUNTRY',\n 'COUPON',\n 'COUPONS',\n 'COURSES',\n 'CPA',\n 'CR',\n 'CREDIT',\n 'CREDITCARD',\n 'CREDITUNION',\n 'CRICKET',\n 'CROWN',\n 'CRS',\n 'CRUISE',\n 'CRUISES',\n 'CU',\n 'CUISINELLA',\n 'CV',\n 'CW',\n 'CX',\n 'CY',\n 'CYMRU',\n 'CYOU',\n 'CZ',\n 'DABUR',\n 'DAD',\n 'DANCE',\n 'DATA',\n 'DATE',\n 'DATING',\n 'DATSUN',\n 'DAY',\n 'DCLK',\n 'DDS',\n 'DE',\n 'DEAL',\n 'DEALER',\n 'DEALS',\n 'DEGREE',\n 'DELIVERY',\n 'DELL',\n 'DELOITTE',\n 'DELTA',\n 'DEMOCRAT',\n 'DENTAL',\n 'DENTIST',\n 'DESI',\n 'DESIGN',\n 'DEV',\n 'DHL',\n 'DIAMONDS',\n 'DIET',\n 'DIGITAL',\n 'DIRECT',\n 'DIRECTORY',\n 'DISCOUNT',\n 'DISCOVER',\n 'DISH',\n 'DIY',\n 'DJ',\n 'DK',\n 'DM',\n 'DNP',\n 'DO',\n 'DOCS',\n 'DOCTOR',\n 'DOG',\n 'DOMAINS',\n 'DOT',\n 'DOWNLOAD',\n 'DRIVE',\n 'DTV',\n 'DUBAI',\n 'DUNLOP',\n 'DUPONT',\n 'DURBAN',\n 'DVAG',\n 'DVR',\n 'DZ',\n 'EARTH',\n 'EAT',\n 'EC',\n 'ECO',\n 'EDEKA',\n 'EDU',\n 'EDUCATION',\n 'EE',\n 'EG',\n 'EMAIL',\n 'EMERCK',\n 'ENERGY',\n 'ENGINEER',\n 'ENGINEERING',\n 'ENTERPRISES',\n 'EPSON',\n 'EQUIPMENT',\n 'ER',\n 'ERICSSON',\n 'ERNI',\n 'ES',\n 'ESQ',\n 'ESTATE',\n 'ET',\n 'EU',\n 'EUROVISION',\n 'EUS',\n 'EVENTS',\n 'EXCHANGE',\n 'EXPERT',\n 'EXPOSED',\n 'EXPRESS',\n 'EXTRASPACE',\n 'FAGE',\n 'FAIL',\n 'FAIRWINDS',\n 'FAITH',\n 'FAMILY',\n 'FAN',\n 'FANS',\n 'FARM',\n 'FARMERS',\n 'FASHION',\n 'FAST',\n 'FEDEX',\n 'FEEDBACK',\n 'FERRARI',\n 'FERRERO',\n 'FI',\n 'FIDELITY',\n 'FIDO',\n 'FILM',\n 'FINAL',\n 'FINANCE',\n 'FINANCIAL',\n 'FIRE',\n 'FIRESTONE',\n 'FIRMDALE',\n 'FISH',\n 'FISHING',\n 'FIT',\n 'FITNESS',\n 'FJ',\n 'FK',\n 'FLICKR',\n 'FLIGHTS',\n 'FLIR',\n 'FLORIST',\n 'FLOWERS',\n 'FLY',\n 'FM',\n 'FO',\n 'FOO',\n 'FOOD',\n 'FOOTBALL',\n 'FORD',\n 'FOREX',\n 'FORSALE',\n 'FORUM',\n 'FOUNDATION',\n 'FOX',\n 'FR',\n 'FREE',\n 'FRESENIUS',\n 'FRL',\n 'FROGANS',\n 'FRONTIER',\n 'FTR',\n 'FUJITSU',\n 'FUN',\n 'FUND',\n 'FURNITURE',\n 'FUTBOL',\n 'FYI',\n 'GA',\n 'GAL',\n 'GALLERY',\n 'GALLO',\n 'GALLUP',\n 'GAME',\n 'GAMES',\n 'GAP',\n 'GARDEN',\n 'GAY',\n 'GB',\n 'GBIZ',\n 'GD',\n 'GDN',\n 'GE',\n 'GEA',\n 'GENT',\n 'GENTING',\n 'GEORGE',\n 'GF',\n 'GG',\n 'GGEE',\n 'GH',\n 'GI',\n 'GIFT',\n 'GIFTS',\n 'GIVES',\n 'GIVING',\n 'GL',\n 'GLASS',\n 'GLE',\n 'GLOBAL',\n 'GLOBO',\n 'GM',\n 'GMAIL',\n 'GMBH',\n 'GMO',\n 'GMX',\n 'GN',\n 'GODADDY',\n 'GOLD',\n 'GOLDPOINT',\n 'GOLF',\n 'GOO',\n 'GOODYEAR',\n 'GOOG',\n 'GOOGLE',\n 'GOP',\n 'GOT',\n 'GOV',\n 'GP',\n 'GQ',\n 'GR',\n 'GRAINGER',\n 'GRAPHICS',\n 'GRATIS',\n 'GREEN',\n 'GRIPE',\n 'GROCERY',\n 'GROUP',\n 'GS',\n 'GT',\n 'GU',\n 'GUCCI',\n 'GUGE',\n 'GUIDE',\n 'GUITARS',\n 'GURU',\n 'GW',\n 'GY',\n 'HAIR',\n 'HAMBURG',\n 'HANGOUT',\n 'HAUS',\n 'HBO',\n 'HDFC',\n 'HDFCBANK',\n 'HEALTH',\n 'HEALTHCARE',\n 'HELP',\n 'HELSINKI',\n 'HERE',\n 'HERMES',\n 'HIPHOP',\n 'HISAMITSU',\n 'HITACHI',\n 'HIV',\n 'HK',\n 'HKT',\n 'HM',\n 'HN',\n 'HOCKEY',\n 'HOLDINGS',\n 'HOLIDAY',\n 'HOMEDEPOT',\n 'HOMEGOODS',\n 'HOMES',\n 'HOMESENSE',\n 'HONDA',\n 'HORSE',\n 'HOSPITAL',\n 'HOST',\n 'HOSTING',\n 'HOT',\n 'HOTELS',\n 'HOTMAIL',\n 'HOUSE',\n 'HOW',\n 'HR',\n 'HSBC',\n 'HT',\n 'HU',\n 'HUGHES',\n 'HYATT',\n 'HYUNDAI',\n 'IBM',\n 'ICBC',\n 'ICE',\n 'ICU',\n 'ID',\n 'IE',\n 'IEEE',\n 'IFM',\n 'IKANO',\n 'IL',\n 'IM',\n 'IMAMAT',\n 'IMDB',\n 'IMMO',\n 'IMMOBILIEN',\n 'IN',\n 'INC',\n 'INDUSTRIES',\n 'INFINITI',\n 'INFO',\n 'ING',\n 'INK',\n 'INSTITUTE',\n 'INSURANCE',\n 'INSURE',\n 'INT',\n 'INTERNATIONAL',\n 'INTUIT',\n 'INVESTMENTS',\n 'IO',\n 'IPIRANGA',\n 'IQ',\n 'IR',\n 'IRISH',\n 'IS',\n 'ISMAILI',\n 'IST',\n 'ISTANBUL',\n 'IT',\n 'ITAU',\n 'ITV',\n 'JAGUAR',\n 'JAVA',\n 'JCB',\n 'JE',\n 'JEEP',\n 'JETZT',\n 'JEWELRY',\n 'JIO',\n 'JLL',\n 'JM',\n 'JMP',\n 'JNJ',\n 'JO',\n 'JOBS',\n 'JOBURG',\n 'JOT',\n 'JOY',\n 'JP',\n 'JPMORGAN',\n 'JPRS',\n 'JUEGOS',\n 'JUNIPER',\n 'KAUFEN',\n 'KDDI',\n 'KE',\n 'KERRYHOTELS',\n 'KERRYLOGISTICS',\n 'KERRYPROPERTIES',\n 'KFH',\n 'KG',\n 'KH',\n 'KI',\n 'KIA',\n 'KIDS',\n 'KIM',\n 'KINDLE',\n 'KITCHEN',\n 'KIWI',\n 'KM',\n 'KN',\n 'KOELN',\n 'KOMATSU',\n 'KOSHER',\n 'KP',\n 'KPMG',\n 'KPN',\n 'KR',\n 'KRD',\n 'KRED',\n 'KUOKGROUP',\n 'KW',\n 'KY',\n 'KYOTO',\n 'KZ',\n 'LA',\n 'LACAIXA',\n 'LAMBORGHINI',\n 'LAMER',\n 'LANCASTER',\n 'LAND',\n 'LANDROVER',\n 'LANXESS',\n 'LASALLE',\n 'LAT',\n 'LATINO',\n 'LATROBE',\n 'LAW',\n 'LAWYER',\n 'LB',\n 'LC',\n 'LDS',\n 'LEASE',\n 'LECLERC',\n 'LEFRAK',\n 'LEGAL',\n 'LEGO',\n 'LEXUS',\n 'LGBT',\n 'LI',\n 'LIDL',\n 'LIFE',\n 'LIFEINSURANCE',\n 'LIFESTYLE',\n 'LIGHTING',\n 'LIKE',\n 'LILLY',\n 'LIMITED',\n 'LIMO',\n 'LINCOLN',\n 'LINK',\n 'LIPSY',\n 'LIVE',\n 'LIVING',\n 'LK',\n 'LLC',\n 'LLP',\n 'LOAN',\n 'LOANS',\n 'LOCKER',\n 'LOCUS',\n 'LOL',\n 'LONDON',\n 'LOTTE',\n 'LOTTO',\n 'LOVE',\n 'LPL',\n 'LPLFINANCIAL',\n 'LR',\n 'LS',\n 'LT',\n 'LTD',\n 'LTDA',\n 'LU',\n 'LUNDBECK',\n 'LUXE',\n 'LUXURY',\n 'LV',\n 'LY',\n 'MA',\n 'MADRID',\n 'MAIF',\n 'MAISON',\n 'MAKEUP',\n 'MAN',\n 'MANAGEMENT',\n 'MANGO',\n 'MAP',\n 'MARKET',\n 'MARKETING',\n 'MARKETS',\n 'MARRIOTT',\n 'MARSHALLS',\n 'MATTEL',\n 'MBA',\n 'MC',\n 'MCKINSEY',\n 'MD',\n 'ME',\n 'MED',\n 'MEDIA',\n 'MEET',\n 'MELBOURNE',\n 'MEME',\n 'MEMORIAL',\n 'MEN',\n 'MENU',\n 'MERCKMSD',\n 'MG',\n 'MH',\n 'MIAMI',\n 'MICROSOFT',\n 'MIL',\n 'MINI',\n 'MINT',\n 'MIT',\n 'MITSUBISHI',\n 'MK',\n 'ML',\n 'MLB',\n 'MLS',\n 'MM',\n 'MMA',\n 'MN',\n 'MO',\n 'MOBI',\n 'MOBILE',\n 'MODA',\n 'MOE',\n 'MOI',\n 'MOM',\n 'MONASH',\n 'MONEY',\n 'MONSTER',\n 'MORMON',\n 'MORTGAGE',\n 'MOSCOW',\n 'MOTO',\n 'MOTORCYCLES',\n 'MOV',\n 'MOVIE',\n 'MP',\n 'MQ',\n 'MR',\n 'MS',\n 'MSD',\n 'MT',\n 'MTN',\n 'MTR',\n 'MU',\n 'MUSEUM',\n 'MUSIC',\n 'MV',\n 'MW',\n 'MX',\n 'MY',\n 'MZ',\n 'NA',\n 'NAB',\n 'NAGOYA',\n 'NAME',\n 'NATURA',\n 'NAVY',\n 'NBA',\n 'NC',\n 'NE',\n 'NEC',\n 'NET',\n 'NETBANK',\n 'NETFLIX',\n 'NETWORK',\n 'NEUSTAR',\n 'NEW',\n 'NEWS',\n 'NEXT',\n 'NEXTDIRECT',\n 'NEXUS',\n 'NF',\n 'NFL',\n 'NG',\n 'NGO',\n 'NHK',\n 'NI',\n 'NICO',\n 'NIKE',\n 'NIKON',\n 'NINJA',\n 'NISSAN',\n 'NISSAY',\n 'NL',\n 'NO',\n 'NOKIA',\n 'NORTON',\n 'NOW',\n 'NOWRUZ',\n 'NOWTV',\n 'NP',\n 'NR',\n 'NRA',\n 'NRW',\n 'NTT',\n 'NU',\n 'NYC',\n 'NZ',\n 'OBI',\n 'OBSERVER',\n 'OFFICE',\n 'OKINAWA',\n 'OLAYAN',\n 'OLAYANGROUP',\n 'OLLO',\n 'OM',\n 'OMEGA',\n 'ONE',\n 'ONG',\n 'ONL',\n 'ONLINE',\n 'OOO',\n 'OPEN',\n 'ORACLE',\n 'ORANGE',\n 'ORG',\n 'ORGANIC',\n 'ORIGINS',\n 'OSAKA',\n 'OTSUKA',\n 'OTT',\n 'OVH',\n 'PA',\n 'PAGE',\n 'PANASONIC',\n 'PARIS',\n 'PARS',\n 'PARTNERS',\n 'PARTS',\n 'PARTY',\n 'PAY',\n 'PCCW',\n 'PE',\n 'PET',\n 'PF',\n 'PFIZER',\n 'PG',\n 'PH',\n 'PHARMACY',\n 'PHD',\n 'PHILIPS',\n 'PHONE',\n 'PHOTO',\n 'PHOTOGRAPHY',\n 'PHOTOS',\n 'PHYSIO',\n 'PICS',\n 'PICTET',\n 'PICTURES',\n 'PID',\n 'PIN',\n 'PING',\n 'PINK',\n 'PIONEER',\n 'PIZZA',\n 'PK',\n 'PL',\n 'PLACE',\n 'PLAY',\n 'PLAYSTATION',\n 'PLUMBING',\n 'PLUS',\n 'PM',\n 'PN',\n 'PNC',\n 'POHL',\n 'POKER',\n 'POLITIE',\n 'PORN',\n 'POST',\n 'PR',\n 'PRAMERICA',\n 'PRAXI',\n 'PRESS',\n 'PRIME',\n 'PRO',\n 'PROD',\n 'PRODUCTIONS',\n 'PROF',\n 'PROGRESSIVE',\n 'PROMO',\n 'PROPERTIES',\n 'PROPERTY',\n 'PROTECTION',\n 'PRU',\n 'PRUDENTIAL',\n 'PS',\n 'PT',\n 'PUB',\n 'PW',\n 'PWC',\n 'PY',\n 'QA',\n 'QPON',\n 'QUEBEC',\n 'QUEST',\n 'RACING',\n 'RADIO',\n 'RE',\n 'READ',\n 'REALESTATE',\n 'REALTOR',\n 'REALTY',\n 'RECIPES',\n 'RED',\n 'REDSTONE',\n 'REDUMBRELLA',\n 'REHAB',\n 'REISE',\n 'REISEN',\n 'REIT',\n 'RELIANCE',\n 'REN',\n 'RENT',\n 'RENTALS',\n 'REPAIR',\n 'REPORT',\n 'REPUBLICAN',\n 'REST',\n 'RESTAURANT',\n 'REVIEW',\n 'REVIEWS',\n 'REXROTH',\n 'RICH',\n 'RICHARDLI',\n 'RICOH',\n 'RIL',\n 'RIO',\n 'RIP',\n 'RO',\n 'ROCKS',\n 'RODEO',\n 'ROGERS',\n 'ROOM',\n 'RS',\n 'RSVP',\n 'RU',\n 'RUGBY',\n 'RUHR',\n 'RUN',\n 'RW',\n 'RWE',\n 'RYUKYU',\n 'SA',\n 'SAARLAND',\n 'SAFE',\n 'SAFETY',\n 'SAKURA',\n 'SALE',\n 'SALON',\n 'SAMSCLUB',\n 'SAMSUNG',\n 'SANDVIK',\n 'SANDVIKCOROMANT',\n 'SANOFI',\n 'SAP',\n 'SARL',\n 'SAS',\n 'SAVE',\n 'SAXO',\n 'SB',\n 'SBI',\n 'SBS',\n 'SC',\n 'SCB',\n 'SCHAEFFLER',\n 'SCHMIDT',\n 'SCHOLARSHIPS',\n 'SCHOOL',\n 'SCHULE',\n 'SCHWARZ',\n 'SCIENCE',\n 'SCOT',\n 'SD',\n 'SE',\n 'SEARCH',\n 'SEAT',\n 'SECURE',\n 'SECURITY',\n 'SEEK',\n 'SELECT',\n 'SENER',\n 'SERVICES',\n 'SEVEN',\n 'SEW',\n 'SEX',\n 'SEXY',\n 'SFR',\n 'SG',\n 'SH',\n 'SHANGRILA',\n 'SHARP',\n 'SHAW',\n 'SHELL',\n 'SHIA',\n 'SHIKSHA',\n 'SHOES',\n 'SHOP',\n 'SHOPPING',\n 'SHOUJI',\n 'SHOW',\n 'SI',\n 'SILK',\n 'SINA',\n 'SINGLES',\n 'SITE',\n 'SJ',\n 'SK',\n 'SKI',\n 'SKIN',\n 'SKY',\n 'SKYPE',\n 'SL',\n 'SLING',\n 'SM',\n 'SMART',\n 'SMILE',\n 'SN',\n 'SNCF',\n 'SO',\n 'SOCCER',\n 'SOCIAL',\n 'SOFTBANK',\n 'SOFTWARE',\n 'SOHU',\n 'SOLAR',\n 'SOLUTIONS',\n 'SONG',\n 'SONY',\n 'SOY',\n 'SPA',\n 'SPACE',\n 'SPORT',\n 'SPOT',\n 'SR',\n 'SRL',\n 'SS',\n 'ST',\n 'STADA',\n 'STAPLES',\n 'STAR',\n 'STATEBANK',\n 'STATEFARM',\n 'STC',\n 'STCGROUP',\n 'STOCKHOLM',\n 'STORAGE',\n 'STORE',\n 'STREAM',\n 'STUDIO',\n 'STUDY',\n 'STYLE',\n 'SU',\n 'SUCKS',\n 'SUPPLIES',\n 'SUPPLY',\n 'SUPPORT',\n 'SURF',\n 'SURGERY',\n 'SUZUKI',\n 'SV',\n 'SWATCH',\n 'SWISS',\n 'SX',\n 'SY',\n 'SYDNEY',\n 'SYSTEMS',\n 'SZ',\n 'TAB',\n 'TAIPEI',\n 'TALK',\n 'TAOBAO',\n 'TARGET',\n 'TATAMOTORS',\n 'TATAR',\n 'TATTOO',\n 'TAX',\n 'TAXI',\n 'TC',\n 'TCI',\n 'TD',\n 'TDK',\n 'TEAM',\n 'TECH',\n 'TECHNOLOGY',\n 'TEL',\n 'TEMASEK',\n 'TENNIS',\n 'TEVA',\n 'TF',\n 'TG',\n 'TH',\n 'THD',\n 'THEATER',\n 'THEATRE',\n 'TIAA',\n 'TICKETS',\n 'TIENDA',\n 'TIPS',\n 'TIRES',\n 'TIROL',\n 'TJ',\n 'TJMAXX',\n 'TJX',\n 'TK',\n 'TKMAXX',\n 'TL',\n 'TM',\n 'TMALL',\n 'TN',\n 'TO',\n 'TODAY',\n 'TOKYO',\n 'TOOLS',\n 'TOP',\n 'TORAY',\n 'TOSHIBA',\n 'TOTAL',\n 'TOURS',\n 'TOWN',\n 'TOYOTA',\n 'TOYS',\n 'TR',\n 'TRADE',\n 'TRADING',\n 'TRAINING',\n 'TRAVEL',\n 'TRAVELERS',\n 'TRAVELERSINSURANCE',\n 'TRUST',\n 'TRV',\n 'TT',\n 'TUBE',\n 'TUI',\n 'TUNES',\n 'TUSHU',\n 'TV',\n 'TVS',\n 'TW',\n 'TZ',\n 'UA',\n 'UBANK',\n 'UBS',\n 'UG',\n 'UK',\n 'UNICOM',\n 'UNIVERSITY',\n 'UNO',\n 'UOL',\n 'UPS',\n 'US',\n 'UY',\n 'UZ',\n 'VA',\n 'VACATIONS',\n 'VANA',\n 'VANGUARD',\n 'VC',\n 'VE',\n 'VEGAS',\n 'VENTURES',\n 'VERISIGN',\n 'VERSICHERUNG',\n 'VET',\n 'VG',\n 'VI',\n 'VIAJES',\n 'VIDEO',\n 'VIG',\n 'VIKING',\n 'VILLAS',\n 'VIN',\n 'VIP',\n 'VIRGIN',\n 'VISA',\n 'VISION',\n 'VIVA',\n 'VIVO',\n 'VLAANDEREN',\n 'VN',\n 'VODKA',\n 'VOLVO',\n 'VOTE',\n 'VOTING',\n 'VOTO',\n 'VOYAGE',\n 'VU',\n 'WALES',\n 'WALMART',\n 'WALTER',\n 'WANG',\n 'WANGGOU',\n 'WATCH',\n 'WATCHES',\n 'WEATHER',\n 'WEATHERCHANNEL',\n 'WEBCAM',\n 'WEBER',\n 'WEBSITE',\n 'WED',\n 'WEDDING',\n 'WEIBO',\n 'WEIR',\n 'WF',\n 'WHOSWHO',\n 'WIEN',\n 'WIKI',\n 'WILLIAMHILL',\n 'WIN',\n 'WINDOWS',\n 'WINE',\n 'WINNERS',\n 'WME',\n 'WOLTERSKLUWER',\n 'WOODSIDE',\n 'WORK',\n 'WORKS',\n 'WORLD',\n 'WOW',\n 'WS',\n 'WTC',\n 'WTF',\n 'XBOX',\n 'XEROX',\n 'XIHUAN',\n 'XIN',\n 'XN--11B4C3D',\n 'XN--1CK2E1B',\n 'XN--1QQW23A',\n 'XN--2SCRJ9C',\n 'XN--30RR7Y',\n 'XN--3BST00M',\n 'XN--3DS443G',\n 'XN--3E0B707E',\n 'XN--3HCRJ9C',\n 'XN--3PXU8K',\n 'XN--42C2D9A',\n 'XN--45BR5CYL',\n 'XN--45BRJ9C',\n 'XN--45Q11C',\n 'XN--4DBRK0CE',\n 'XN--4GBRIM',\n 'XN--54B7FTA0CC',\n 'XN--55QW42G',\n 'XN--55QX5D',\n 'XN--5SU34J936BGSG',\n 'XN--5TZM5G',\n 'XN--6FRZ82G',\n 'XN--6QQ986B3XL',\n 'XN--80ADXHKS',\n 'XN--80AO21A',\n 'XN--80AQECDR1A',\n 'XN--80ASEHDB',\n 'XN--80ASWG',\n 'XN--8Y0A063A',\n 'XN--90A3AC',\n 'XN--90AE',\n 'XN--90AIS',\n 'XN--9DBQ2A',\n 'XN--9ET52U',\n 'XN--9KRT00A',\n 'XN--B4W605FERD',\n 'XN--BCK1B9A5DRE4C',\n 'XN--C1AVG',\n 'XN--C2BR7G',\n 'XN--CCK2B3B',\n 'XN--CCKWCXETD',\n 'XN--CG4BKI',\n 'XN--CLCHC0EA0B2G2A9GCD',\n 'XN--CZR694B',\n 'XN--CZRS0T',\n 'XN--CZRU2D',\n 'XN--D1ACJ3B',\n 'XN--D1ALF',\n 'XN--E1A4C',\n 'XN--ECKVDTC9D',\n 'XN--EFVY88H',\n 'XN--FCT429K',\n 'XN--FHBEI',\n 'XN--FIQ228C5HS',\n 'XN--FIQ64B',\n 'XN--FIQS8S',\n 'XN--FIQZ9S',\n 'XN--FJQ720A',\n 'XN--FLW351E',\n 'XN--FPCRJ9C3D',\n 'XN--FZC2C9E2C',\n 'XN--FZYS8D69UVGM',\n 'XN--G2XX48C',\n 'XN--GCKR3F0F',\n 'XN--GECRJ9C',\n 'XN--GK3AT1E',\n 'XN--H2BREG3EVE',\n 'XN--H2BRJ9C',\n 'XN--H2BRJ9C8C',\n 'XN--HXT814E',\n 'XN--I1B6B1A6A2E',\n 'XN--IMR513N',\n 'XN--IO0A7I',\n 'XN--J1AEF',\n 'XN--J1AMH',\n 'XN--J6W193G',\n 'XN--JLQ480N2RG',\n 'XN--JVR189M',\n 'XN--KCRX77D1X4A',\n 'XN--KPRW13D',\n 'XN--KPRY57D',\n 'XN--KPUT3I',\n 'XN--L1ACC',\n 'XN--LGBBAT1AD8J',\n 'XN--MGB9AWBF',\n 'XN--MGBA3A3EJT',\n 'XN--MGBA3A4F16A',\n 'XN--MGBA7C0BBN0A',\n 'XN--MGBAAM7A8H',\n 'XN--MGBAB2BD',\n 'XN--MGBAH1A3HJKRD',\n 'XN--MGBAI9AZGQP6J',\n 'XN--MGBAYH7GPA',\n 'XN--MGBBH1A',\n 'XN--MGBBH1A71E',\n 'XN--MGBC0A9AZCG',\n 'XN--MGBCA7DZDO',\n 'XN--MGBCPQ6GPA1A',\n 'XN--MGBERP4A5D4AR',\n 'XN--MGBGU82A',\n 'XN--MGBI4ECEXP',\n 'XN--MGBPL2FH',\n 'XN--MGBT3DHD',\n 'XN--MGBTX2B',\n 'XN--MGBX4CD0AB',\n 'XN--MIX891F',\n 'XN--MK1BU44C',\n 'XN--MXTQ1M',\n 'XN--NGBC5AZD',\n 'XN--NGBE9E0A',\n 'XN--NGBRX',\n 'XN--NODE',\n 'XN--NQV7F',\n 'XN--NQV7FS00EMA',\n 'XN--NYQY26A',\n 'XN--O3CW4H',\n 'XN--OGBPF8FL',\n 'XN--OTU796D',\n 'XN--P1ACF',\n 'XN--P1AI',\n 'XN--PGBS0DH',\n 'XN--PSSY2U',\n 'XN--Q7CE6A',\n 'XN--Q9JYB4C',\n 'XN--QCKA1PMC',\n 'XN--QXA6A',\n 'XN--QXAM',\n 'XN--RHQV96G',\n 'XN--ROVU88B',\n 'XN--RVC1E0AM3E',\n 'XN--S9BRJ9C',\n 'XN--SES554G',\n 'XN--T60B56A',\n 'XN--TCKWE',\n 'XN--TIQ49XQYJ',\n 'XN--UNUP4Y',\n 'XN--VERMGENSBERATER-CTB',\n 'XN--VERMGENSBERATUNG-PWB',\n 'XN--VHQUV',\n 'XN--VUQ861B',\n 'XN--W4R85EL8FHU5DNRA',\n 'XN--W4RS40L',\n 'XN--WGBH1C',\n 'XN--WGBL6A',\n 'XN--XHQ521B',\n 'XN--XKC2AL3HYE2A',\n 'XN--XKC2DL3A5EE0H',\n 'XN--Y9A3AQ',\n 'XN--YFRO4I67O',\n 'XN--YGBI2AMMX',\n 'XN--ZFR164B',\n 'XXX',\n 'XYZ',\n 'YACHTS',\n 'YAHOO',\n 'YAMAXUN',\n 'YANDEX',\n 'YE',\n 'YODOBASHI',\n 'YOGA',\n 'YOKOHAMA',\n 'YOU',\n 'YOUTUBE',\n 'YT',\n 'YUN',\n 'ZA',\n 'ZAPPOS',\n 'ZARA',\n 'ZERO',\n 'ZIP',\n 'ZM',\n 'ZONE',\n 'ZUERICH',\n 'ZW',\n '',\n]\n","import { toASCII } from 'punycode'\n\nimport { VALID_TLDS } from './topLevelDomains'\n\nconst USEREXP = /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+){0,4}$/i\nconst DOMAINEXP = /^(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.){1,4}[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i\n\nexport const validEmail = (email: string): boolean => {\n const parts = email.split('@')\n\n if (parts.length !== 2) {\n return false\n }\n\n const [user, domain] = parts\n if (user.match(USEREXP) === null) {\n return false\n }\n\n const asciiDomain = toASCII(domain) // allow internationalized domain name\n if (asciiDomain.match(DOMAINEXP) === null) {\n return false\n }\n\n // check TLD\n const tld = asciiDomain.split('.').pop()\n if (!tld || !VALID_TLDS.includes(tld.toUpperCase())) return false\n\n return true\n}\n","import type { ValidationResult, Validators2, WideValidationResult } from '../../../i18n/validation'\nimport type {\n EventRequirement,\n EventResultRequirement,\n EventResultRequirements,\n EventResultRequirementsByDate,\n} from '../../../rules'\nimport type {\n BreedCode,\n Dog,\n DogEvent,\n ManualTestResult,\n Person,\n PublicConfirmedEvent,\n QualifyingResult,\n QualifyingResults,\n Registration,\n RegistrationBreeder,\n RegistrationClass,\n TestResult,\n} from '../../../types'\n\nimport { differenceInMonths, startOfYear } from 'date-fns'\nimport { matchIsValidTel } from 'mui-tel-input'\n\nimport { validEmail } from '../../../lib/email'\nimport { getRequirements, REQUIREMENTS } from '../../../rules'\n\nconst RE_RegNo = /^[A-ZÖ]{1,2}[A-Z\\-/ .]{0,8}[\\d/]{4,12}$/\nconst RE_FinnishVeryOldRegNo = /^SF\\d{5}[0-9A-Z]?\\/1?8?\\d{2}$/\nconst RE_FinnishOldRegNo = /^FIN\\d{5}\\/\\d{2}$/\nconst RE_FinnishRegNo = /^(FI|ER)\\d{5}\\/\\d{2}$/\n\nexport const validateRegNo = (input: string): boolean => RE_RegNo.test(input)\n\nexport const isFinnishRegNo = (regNo: string): boolean =>\n RE_FinnishRegNo.test(regNo) || RE_FinnishOldRegNo.test(regNo) || RE_FinnishVeryOldRegNo.test(regNo)\n\nexport const isModernFinnishRegNo = (regNo: string): boolean => RE_FinnishRegNo.test(regNo)\n\nfunction validateBreeder(breeder: RegistrationBreeder | undefined) {\n return !breeder || !breeder.name || !breeder.location\n}\n\nexport function validatePerson(person: Person | undefined, location = true) {\n if (!person || !person.email || !person.name || (location && !person.location) || !person.phone) {\n return 'required'\n }\n if (!validEmail(person.email)) return 'email'\n if (!matchIsValidTel(person.phone)) {\n console.error('invalid phone: ', person.phone)\n return 'phone'\n }\n\n return false\n}\n\nconst VALIDATORS: Validators2<Registration, 'registration', PublicConfirmedEvent> = {\n agreeToTerms: (reg) => (!reg.agreeToTerms ? 'terms' : false),\n breeder: (reg) => (validateBreeder(reg.breeder) ? 'required' : false),\n class: (reg, _req, evt) => evt.classes.length > 0 && !reg.class,\n dates: (reg) => reg.dates.length === 0,\n dog: (reg, _req, evt) => validateDog(evt, reg),\n handler: (reg) => (reg.ownerHandles ? false : validatePerson(reg.handler)),\n id: () => false,\n notes: () => false,\n owner: (reg) => validatePerson(reg.owner),\n payer: (reg) => (reg.ownerPays ? false : validatePerson(reg.payer, false)),\n reserve: (reg) => (!reg.reserve ? 'reserve' : false),\n results: () => false,\n}\n\nexport function validateRegistrationField(\n registration: Registration,\n field: keyof Registration,\n event: PublicConfirmedEvent\n): ValidationResult<Registration, 'registration'> {\n const validator = VALIDATORS[field] ?? ((value) => typeof value[field] === 'undefined' || value[field] === '')\n const result = validator(registration, true, event)\n if (!result) {\n return false\n }\n if (result === true) {\n return {\n key: 'choose',\n opts: { field },\n }\n }\n if (typeof result === 'string') {\n return {\n key: result,\n opts: { field },\n }\n }\n return result\n}\n\nconst NOT_VALIDATED = ['createdAt', 'createdBy', 'modifiedAt', 'modifiedBy', 'deletedAt', 'deletedBy']\n\nexport function validateRegistration(registration: Registration, event: PublicConfirmedEvent) {\n const errors = []\n let field: keyof Registration\n for (field in registration) {\n if (NOT_VALIDATED.includes(field)) {\n continue\n }\n const result = validateRegistrationField(registration, field, event)\n if (result) {\n errors.push(result)\n }\n }\n return errors\n}\n\nexport const objectContains = (obj: Record<string, any>, req: Record<string, any>) => {\n for (const key of Object.keys(req)) {\n if (obj[key] !== req[key]) {\n return false\n }\n }\n return true\n}\n\nconst excludeByYear = (result: Partial<TestResult>, date: Date) => result.date && result.date > startOfYear(date)\n\nconst validateDogAge = (event: { eventType: string; startDate: Date }, dog: { dob?: Date }) => {\n const requirements = REQUIREMENTS[event.eventType]\n const minAge = (requirements as EventRequirement)?.age ?? 0\n if (!dog.dob || differenceInMonths(event.startDate, dog.dob) < minAge) {\n return minAge\n }\n}\n\nconst validateDogBreed = (event: { eventType: string }, dog: { breedCode?: BreedCode }) => {\n const requirements = REQUIREMENTS[event.eventType]\n const breeds = (requirements as EventRequirement)?.breedCode ?? []\n if (breeds.length && (!dog.breedCode || !breeds.includes(dog.breedCode))) {\n return dog.breedCode || '0'\n }\n}\n\nconst validateDogForEvent = (event: { eventType: string }, dog: Partial<Dog>) => {\n const requirements = REQUIREMENTS[event.eventType]\n const validator = (requirements as EventRequirement)?.dog\n if (validator) return validator(dog)\n}\n\nexport function validateDog(\n event: { eventType: string; startDate: Date },\n reg: { class?: Registration['class']; dog?: Dog; results?: Partial<TestResult>[] }\n): WideValidationResult<Registration, 'registration'> {\n const dog = reg.dog\n\n if (!dog?.regNo || !dog?.name) {\n return 'required'\n }\n\n const forEvent = validateDogForEvent(event, dog)\n if (forEvent) return { key: forEvent, opts: { field: 'dog' } }\n\n const breedCode = validateDogBreed(event, dog)\n if (breedCode) return { key: 'dogBreed', opts: { field: 'dog', type: breedCode.replace('.', '-') } }\n\n const minAge = validateDogAge(event, dog)\n if (minAge) return { key: 'dogAge', opts: { field: 'dog', length: minAge } }\n\n if (!dog?.rfid || !dog.dam?.name || !dog.sire?.name) {\n return 'required'\n }\n\n return false\n}\n\nconst byDate = (a: TestResult, b: TestResult) => new Date(a.date).valueOf() - new Date(b.date).valueOf()\nexport function filterRelevantResults(\n {\n eventType,\n startDate,\n entryEndDate,\n entryOrigEndDate,\n }: Pick<DogEvent, 'eventType' | 'startDate' | 'entryEndDate' | 'entryOrigEndDate'>,\n regClass: Registration['class'],\n officialResults?: TestResult[],\n manualResults?: ManualTestResult[]\n): QualifyingResults {\n const nextClass = regClass && getNextClass(regClass)\n const rules = getRequirements(eventType, regClass, startDate)\n const nextClassRules = nextClass && getRequirements(eventType, nextClass, startDate)\n const manualValid = manualResults?.filter((r) => r.type && r.date && r.location && r.judge)\n\n const test = findDisqualifyingResult(officialResults, manualValid, eventType, nextClass)\n if (test) {\n return test\n }\n\n const usedEntryEndDate = entryOrigEndDate ?? entryEndDate\n\n const check = checkRequiredResults(rules, officialResults, manualValid, usedEntryEndDate)\n if (check.qualifies && check.relevant.length) {\n const officialNotThisYear = officialResults?.filter((r) => !excludeByYear(r, startDate))\n const manulNotThisYear = manualValid?.filter((r) => !excludeByYear(r, startDate))\n const dis =\n nextClass &&\n checkRequiredResults(nextClassRules ?? undefined, officialNotThisYear, manulNotThisYear, usedEntryEndDate, false)\n if (dis?.qualifies) {\n return {\n relevant: check.relevant.concat(dis.relevant).sort(byDate),\n qualifies: false,\n }\n } else {\n check.relevant.push(...bestResults(eventType, regClass, officialResults, manualValid))\n }\n }\n return check\n}\n\nfunction findDisqualifyingResult(\n officialResults: TestResult[] | undefined,\n manualResults: Partial<TestResult>[] | undefined,\n eventType: string,\n nextClass?: Registration['class']\n): QualifyingResults | undefined {\n const compare = (r: Partial<TestResult>) =>\n r.type === eventType && ((r.class && r.class === nextClass) || r.result === 'NOU1')\n const officialResult = officialResults?.find(compare)\n if (officialResult) {\n return { relevant: [{ ...officialResult, qualifying: false, official: true }], qualifies: false }\n }\n const manualResult = manualResults?.find(compare)\n if (manualResult) {\n return { relevant: [{ ...manualResult, qualifying: false, official: false } as QualifyingResult], qualifies: false }\n }\n}\n\nfunction checkRequiredResults(\n requirements: EventResultRequirementsByDate | undefined,\n officialResults: TestResult[] = [],\n manualResults: ManualTestResult[] = [],\n entryEndDate: Date | undefined,\n qualifying = true\n): QualifyingResults {\n if (!requirements) {\n return { relevant: [], qualifies: qualifying }\n }\n\n const relevant: QualifyingResult[] = []\n let qualifies = false\n const counts = new Map()\n const asArray = (v: EventResultRequirements | EventResultRequirement) => (Array.isArray(v) ? v : [v])\n const getCount = (r: EventResultRequirement) => {\n const n = (counts.get(r) || 0) + 1\n counts.set(r, n)\n return n\n }\n const checkResult = (result: Partial<TestResult>, r: EventResultRequirement, official: boolean) => {\n const { count, ...resultProps } = r\n if (objectContains(result, resultProps)) {\n if (!relevant.find((rel) => rel.date === result.date))\n relevant.push({ ...result, qualifying, official } as QualifyingResult)\n if (getCount(r) >= count) {\n qualifies = true\n }\n }\n }\n\n if (typeof requirements.rules === 'function') {\n return requirements.rules(officialResults, manualResults, entryEndDate)\n }\n\n for (const resultRules of requirements.rules) {\n for (const rule of asArray(resultRules)) {\n for (const result of officialResults) {\n checkResult(result, rule, true)\n }\n for (const result of manualResults) {\n checkResult(result, rule, false)\n }\n }\n }\n\n return { relevant, qualifies }\n}\n\nfunction bestResults(\n eventType: string,\n regClass: Registration['class'],\n officialResults: TestResult[] | undefined,\n manualResults: Partial<TestResult>[] | undefined\n): QualifyingResult[] {\n const filter = (r: Partial<TestResult>) => r.type === eventType && r.class === regClass && r.result?.endsWith('1')\n const officialBest: QualifyingResult[] = officialResults?.filter(filter).map((r) => ({ ...r, official: true })) ?? []\n const manualBest: QualifyingResult[] =\n manualResults?.filter(filter).map((r) => ({ ...r, official: false }) as QualifyingResult) ?? []\n return officialBest\n .concat(manualBest)\n .sort(byDate)\n .slice(0, 3)\n .map((r) => (r.qualifying === false ? { ...r, qualifying: undefined } : r))\n}\n\nfunction getNextClass(c: RegistrationClass | undefined): RegistrationClass | undefined {\n if (c === 'ALO') {\n return 'AVO'\n }\n if (c === 'AVO') {\n return 'VOI'\n }\n}\n","import type { AtomEffect } from 'recoil'\n\nimport { isDevEnv } from '../../../lib/env'\n\nexport const logEffect: AtomEffect<any> = ({ node, onSet }) => {\n onSet((newValue, oldValue, reset) => {\n if (isDevEnv()) {\n // No logs during tests\n console.debug('recoil', node.key, { newValue, oldValue, reset })\n }\n })\n}\n","export const getStorageKeysStartingWith = (prefixes: string[]) => {\n const keys: string[] = []\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i)\n for (const prefix of prefixes) {\n if (key?.startsWith(prefix)) {\n keys.push(key)\n break\n }\n }\n }\n\n return keys\n}\n","import pkg from '../../package.json'\n\nexport const appVersion = pkg.version\n\nexport const isEarlierVersionThan = (version: string, current: string = appVersion) => {\n const currentVersionParts = current.split('.')\n const comparedVersionParts = version.split('.')\n\n for (let i = 0; i < comparedVersionParts.length; i++) {\n const current = currentVersionParts[i].split('-')\n const compared = comparedVersionParts[i].split('-')\n\n // current includes '-beta' for example, but compared does not\n if (current.length > compared.length) return true\n // current does not include '-beta' for example, but current does not\n if (current.length < compared.length) return false\n // absolute number is smaller\n if (parseInt(current[0], 10) < parseInt(compared[0], 10)) return true\n // absolute number is larger\n if (parseInt(current[0], 10) > parseInt(compared[0], 10)) return false\n // '-alpha' vs '-beta' etc, in aplhabetical order\n if (compared.length > 1 && current[1].localeCompare(compared[1]) < 0) return true\n }\n return false\n}\n","import { isTestEnv } from '../../../lib/env'\nimport { getStorageKeysStartingWith } from '../../../lib/storage'\nimport { appVersion, isEarlierVersionThan } from '../../../lib/version'\n\nexport const cleanPre112 = () => {\n const remove: string[] = getStorageKeysStartingWith([\n 'adminEvents',\n 'adminOrganizers',\n 'adminUsers',\n 'editableAdminEventRegistration/eventId+Id__',\n 'editableEmailTemplate/Id',\n 'editableEvent/Id__',\n 'editableRegistration/ids__',\n 'emailTemplates',\n 'emailTemplates',\n 'eventTypes',\n 'judges',\n 'newRegistration',\n 'officials',\n 'open/eventId__',\n 'registration/ids__',\n ])\n for (const key of remove) {\n localStorage.removeItem(key)\n }\n console.log(`Cleaned up ${remove.length} storage keys deprecated in version 1.1.2`)\n}\n\nexport const runCleaners = () => {\n if (isTestEnv()) return\n\n const currentVersion = localStorage.getItem('version') ?? ''\n\n if (currentVersion === appVersion) return\n\n if (isEarlierVersionThan('1.1.3')) cleanPre112()\n\n localStorage.setItem('version', appVersion)\n}\n","import type { AtomEffect } from 'recoil'\n\nimport { parseJSON } from '../../../lib/utils'\n\nimport { runCleaners } from './storageCleaners'\n\nrunCleaners()\n\nexport const parseStorageJSON = (value: string | null) => {\n try {\n if (value !== null) {\n return parseJSON(value)\n }\n } catch (e) {\n console.warn('JSON parse error', e)\n }\n}\n\nexport const getStorageEffect =\n (storage: Storage): AtomEffect<any> =>\n ({ node, setSelf, onSet, trigger, resetSelf }) => {\n if (trigger === 'get') {\n const savedValue = storage.getItem(node.key)\n if (savedValue !== null) {\n setSelf(parseStorageJSON(savedValue))\n }\n }\n\n onSet((newValue, _, isReset) => {\n if (document.visibilityState !== 'visible') {\n console.info(`Preventing change from invisible window to storage. Key: ${node.key}`)\n return\n }\n\n if (isReset || newValue === null || newValue === undefined) {\n storage.removeItem(node.key)\n } else {\n storage.setItem(node.key, JSON.stringify(newValue))\n }\n })\n\n const handleStorageChange = (e: StorageEvent) => {\n if (e.storageArea === storage && e.key === node.key) {\n const parsed = parseStorageJSON(e.newValue)\n if (parsed === undefined) {\n resetSelf()\n } else {\n setSelf(parsed)\n }\n }\n }\n\n window.addEventListener('storage', handleStorageChange)\n\n return () => {\n window.removeEventListener('storage', handleStorageChange)\n }\n }\n\nexport const localStorageEffect = getStorageEffect(localStorage)\nexport const sessionStorageEffect = getStorageEffect(sessionStorage)\n","import type { TFunction } from 'i18next'\nimport type { PublicDogEvent } from '../../../types'\nimport type { FilterProps } from './atoms'\n\nimport { format, formatISO } from 'date-fns'\n\nimport { formatDateSpan, zonedEndOfDay, zonedStartOfDay } from '../../../i18n/dates'\nimport { isEntryClosing, isEntryOpen, isEntryUpcoming } from '../../../lib/utils'\nimport { isRegistrationClass } from '../../admin/EventViewPage'\n\nexport const readDate = (date: string | null) => (date ? new Date(date) : null)\nexport const writeDate = (date: Date | null) => (date ? formatISO(date, { representation: 'date' }) : '')\n\nexport function withinDateFilters(\n event: Partial<Pick<PublicDogEvent, 'startDate' | 'endDate'>>,\n { start, end }: Pick<FilterProps, 'start' | 'end'>\n) {\n if (start && (!event.endDate || zonedEndOfDay(event.endDate) < zonedEndOfDay(start))) {\n return false\n }\n if (end && (!event.startDate || zonedStartOfDay(event.startDate) > zonedStartOfDay(end))) {\n return false\n }\n return true\n}\n\nexport function withinSwitchFilters(\n event: PublicDogEvent,\n { withOpenEntry, withClosingEntry, withUpcomingEntry, withFreePlaces }: FilterProps\n): boolean {\n let result: boolean | undefined\n\n if (withOpenEntry) {\n result = isEntryOpen(event)\n if (withClosingEntry) {\n result = result && isEntryClosing(event)\n }\n if (withFreePlaces) {\n result = result && event.places > (event.entries ?? 0)\n }\n }\n\n if (withUpcomingEntry) {\n result = result || isEntryUpcoming(event)\n }\n\n return result !== false\n}\n\nexport function withinEventTypeFilter(event: PublicDogEvent, { eventType, eventClass, judge, organizer }: FilterProps) {\n if (eventType.length && !eventType.includes(event.eventType)) {\n return false\n }\n return true\n}\n\nexport function withinEventTypeClassFilter(event: PublicDogEvent, { eventClass }: FilterProps) {\n if (eventClass.length && !eventClass.some((c) => event.classes.map((cl) => cl.class).includes(c))) {\n return false\n }\n return true\n}\n\nexport function withinJudgeFilter(event: PublicDogEvent, { judge }: FilterProps) {\n if (judge.length && !judge.some((name) => event.judges?.find((ej) => ej.name === name))) {\n return false\n }\n return true\n}\n\nexport function withinOrganizerFilter(event: PublicDogEvent, { organizer }: FilterProps) {\n if (organizer.length && !organizer.includes(event.organizer?.id)) {\n return false\n }\n return true\n}\n\nexport function serializeFilter(eventFilter: FilterProps): string {\n const params = new URLSearchParams()\n const bits = []\n if (eventFilter.withClosingEntry) {\n bits.push('c')\n }\n if (eventFilter.withFreePlaces) {\n bits.push('f')\n }\n if (eventFilter.withOpenEntry) {\n bits.push('o')\n }\n if (eventFilter.withUpcomingEntry) {\n bits.push('u')\n }\n if (eventFilter.start) {\n params.append('s', writeDate(eventFilter.start))\n }\n if (eventFilter.end) {\n params.append('e', writeDate(eventFilter.end))\n }\n eventFilter.eventClass.forEach((v) => params.append('c', v))\n eventFilter.eventType.forEach((v) => params.append('t', v))\n eventFilter.judge.forEach((v) => params.append('j', v.toString()))\n eventFilter.organizer.forEach((v) => params.append('o', v.toString()))\n bits.forEach((v) => params.append('b', v))\n\n return params.toString()\n}\n\nexport function deserializeFilter(input: string) {\n const searchParams = new URLSearchParams(input)\n const bits = searchParams.getAll('b')\n const result: FilterProps = {\n end: readDate(searchParams.get('e')),\n eventClass: searchParams.getAll('c').filter(isRegistrationClass),\n eventType: searchParams.getAll('t'),\n judge: searchParams.getAll('j'),\n organizer: searchParams.getAll('o'),\n start: readDate(searchParams.get('s')),\n withClosingEntry: bits.includes('c'),\n withFreePlaces: bits.includes('f'),\n withOpenEntry: bits.includes('o'),\n withUpcomingEntry: bits.includes('u'),\n }\n\n return result\n}\n\nexport function filterString(filter: FilterProps, t: TFunction): string {\n const filters: string[] = []\n if (filter.start) {\n if (filter.end) {\n filters.push(`${t('daterangeBoth')}: ${formatDateSpan(filter.start, undefined, { end: filter.end })}`)\n } else {\n filters.push(`${t('daterangeStart')}: ${format(filter.start, 'dd.MM.yyyy')}`)\n }\n } else if (filter.end) {\n filters.push(`${t('daterangeEnd')}: ${format(filter.end, 'dd.MM.yyyy')}`)\n }\n if (filter.eventType?.length) {\n filters.push(t('eventTypes') + ': ' + filter.eventType.join(', '))\n }\n if (filter.eventClass?.length) {\n filters.push(t('event.classes') + ': ' + filter.eventClass.join(', '))\n }\n if (filter.organizer?.length) {\n filters.push('Järjestäjät: ' + filter.organizer.length)\n }\n if (filter.judge?.length) {\n filters.push('Tuomarit: ' + filter.judge.length)\n }\n if (filter.withOpenEntry) {\n filters.push(t('entryOpen'))\n }\n if (filter.withUpcomingEntry) {\n filters.push(t('entryUpcoming'))\n }\n\n return filters.join(' | ')\n}\n","import type { AtomEffect } from 'recoil'\nimport type { PublicDogEvent } from '../../../types'\nimport type { FilterProps } from './atoms'\n\nimport { DefaultValue } from 'recoil'\n\nimport { getEvents } from '../../../api/event'\n\nimport { deserializeFilter, serializeFilter } from './filters'\n\nexport const remoteEventsEffect: AtomEffect<PublicDogEvent[]> = ({ setSelf, trigger }) => {\n if (trigger === 'get') {\n setSelf(getEvents().then((events) => events.sort((a, b) => a.startDate.valueOf() - b.startDate.valueOf())))\n }\n}\n\nexport const urlSyncEffect: AtomEffect<FilterProps> = ({ node, onSet, setSelf, trigger }) => {\n if (trigger === 'get') {\n // Only sync when the search is provided in url (or atleast the ? to clear)\n if (window.location.search || window.location.href.endsWith('?')) {\n setSelf(deserializeFilter(window.location.search))\n } else {\n // When not provided, look up previous value from session\n const sessionValue = sessionStorage.getItem(node.key)\n if (sessionValue !== null) {\n setSelf(deserializeFilter(sessionValue))\n const newUrl = window.location.origin + window.location.pathname + '?' + sessionValue\n window.history.pushState({ path: newUrl }, '', newUrl)\n }\n }\n }\n\n onSet((newValue, oldValue) => {\n const newSearch = serializeFilter(newValue)\n const oldSearch = oldValue instanceof DefaultValue ? undefined : serializeFilter(oldValue)\n if (oldSearch === newSearch) {\n return\n }\n const newUrl = window.location.origin + window.location.pathname + '?' + newSearch\n window.history.pushState({ path: newUrl }, '', newUrl)\n // Save the value in session, so it can be restored when returning from different route\n sessionStorage.setItem(node.key, newSearch)\n })\n}\n","import type { PublicDogEvent, RegistrationClass } from '../../../types'\n\nimport { atom } from 'recoil'\n\nimport { zonedStartOfDay } from '../../../i18n/dates'\nimport { localStorageEffect, logEffect } from '../effects'\n\nimport { remoteEventsEffect, urlSyncEffect } from './effects'\n\nexport const eventsAtom = atom<PublicDogEvent[]>({\n key: 'events',\n effects: [logEffect, localStorageEffect, remoteEventsEffect],\n})\n\nexport const eventIdAtom = atom<string | undefined>({\n key: 'eventId',\n default: '',\n effects: [logEffect, localStorageEffect],\n})\n\nexport type FilterProps = {\n start: Date | null\n end: Date | null\n withOpenEntry?: boolean\n withClosingEntry?: boolean\n withUpcomingEntry?: boolean\n withFreePlaces?: boolean\n eventType: string[]\n eventClass: RegistrationClass[]\n judge: string[]\n organizer: string[]\n}\n\nexport const eventFilterAtom = atom<FilterProps>({\n key: 'eventFilter',\n default: {\n start: zonedStartOfDay(new Date()),\n end: null,\n withOpenEntry: false,\n withUpcomingEntry: false,\n withClosingEntry: false,\n withFreePlaces: false,\n eventType: [],\n eventClass: [],\n judge: [],\n organizer: [],\n },\n effects: [logEffect, urlSyncEffect],\n})\n","import type { EventClass, PublicConfirmedEvent, PublicDogEvent, PublicJudge } from '../../../types'\n\nimport i18next from 'i18next'\nimport { selector, selectorFamily } from 'recoil'\n\nimport { isConfirmedEvent } from '../../../lib/typeGuards'\nimport { unique, uniqueFn } from '../../../lib/utils'\n\nimport { eventFilterAtom, eventIdAtom, eventsAtom } from './atoms'\nimport {\n withinDateFilters,\n withinEventTypeClassFilter,\n withinEventTypeFilter,\n withinJudgeFilter,\n withinOrganizerFilter,\n withinSwitchFilters,\n} from './filters'\n\nexport const eventSelector = selectorFamily<PublicDogEvent | null, string | undefined>({\n key: 'event',\n get:\n (eventId) =>\n ({ get }) => {\n if (!eventId) {\n return null\n }\n return get(eventsAtom).find((event) => event.id === eventId) ?? null\n },\n})\n\nexport const confirmedEventSelector = selectorFamily<PublicConfirmedEvent | null, string | undefined>({\n key: 'confirmedEvent',\n get:\n (eventId) =>\n ({ get }) => {\n const event = get(eventSelector(eventId))\n return isConfirmedEvent(event) ? event : null\n },\n})\n\nexport const currentEventSelector = selector({\n key: 'currentEvent',\n get: ({ get }) => get(eventSelector(get(eventIdAtom))),\n})\n\nexport const filteredEventsSelector = selector({\n key: 'filteredEvents',\n get: ({ get }) => {\n const filter = get(eventFilterAtom)\n const events = get(eventsAtom)\n\n return events.filter((event) => {\n return (\n event.state !== 'draft' &&\n withinDateFilters(event, filter) &&\n withinSwitchFilters(event, filter) &&\n withinEventTypeFilter(event, filter) &&\n withinEventTypeClassFilter(event, filter) &&\n withinOrganizerFilter(event, filter) &&\n withinJudgeFilter(event, filter)\n )\n })\n },\n})\n\nexport const filteredEventsForTypeSelector = selector({\n key: 'filteredEventsForType',\n get: ({ get }) => {\n const filter = get(eventFilterAtom)\n const events = get(eventsAtom)\n\n return events.filter((event) => {\n return (\n event.state !== 'draft' &&\n withinDateFilters(event, filter) &&\n withinSwitchFilters(event, filter) &&\n withinEventTypeClassFilter(event, filter) &&\n withinOrganizerFilter(event, filter) &&\n withinJudgeFilter(event, filter)\n )\n })\n },\n})\n\nexport const filteredEventsForEventClassSelector = selector({\n key: 'filteredEventsForEventClass',\n get: ({ get }) => {\n const filter = get(eventFilterAtom)\n const events = get(eventsAtom)\n\n return events.filter((event) => {\n return (\n event.state !== 'draft' &&\n withinDateFilters(event, filter) &&\n withinSwitchFilters(event, filter) &&\n withinEventTypeFilter(event, filter) &&\n withinOrganizerFilter(event, filter) &&\n withinJudgeFilter(event, filter)\n )\n })\n },\n})\n\nexport const filteredEventsForOrganizerSelector = selector({\n key: 'filteredEventsForOrganizer',\n get: ({ get }) => {\n const filter = get(eventFilterAtom)\n const events = get(eventsAtom)\n\n return events.filter((event) => {\n return (\n event.state !== 'draft' &&\n withinDateFilters(event, filter) &&\n withinSwitchFilters(event, filter) &&\n withinEventTypeFilter(event, filter) &&\n withinEventTypeClassFilter(event, filter) &&\n withinJudgeFilter(event, filter)\n )\n })\n },\n})\n\nexport const filteredEventsForJudgeSelector = selector({\n key: 'filteredEventsForJudge',\n get: ({ get }) => {\n const filter = get(eventFilterAtom)\n const events = get(eventsAtom)\n\n return events.filter((event) => {\n return (\n event.state !== 'draft' &&\n withinDateFilters(event, filter) &&\n withinSwitchFilters(event, filter) &&\n withinEventTypeFilter(event, filter) &&\n withinEventTypeClassFilter(event, filter) &&\n withinOrganizerFilter(event, filter)\n )\n })\n },\n})\n\nexport const filterEventTypesSelector = selector({\n key: 'filterEventTypes',\n get: ({ get }) => {\n const events = get(filteredEventsForTypeSelector)\n const uniqueEventTypes = unique<string>(events.map((e) => e.eventType))\n uniqueEventTypes.sort((a, b) => a.localeCompare(b, i18next.language))\n return uniqueEventTypes\n },\n})\n\nexport const filterEventClassesSelector = selector({\n key: 'filterEventClasses',\n get: ({ get }) => {\n const events = get(filteredEventsForEventClassSelector)\n const uniqueEventClasses = unique(\n events.reduce<EventClass[]>((acc, cur) => [...acc, ...cur.classes], []).map((ec) => ec.class)\n )\n uniqueEventClasses.sort((a, b) => a.localeCompare(b, i18next.language))\n return uniqueEventClasses\n },\n})\n\nconst eventOrganizersSelector = selector({\n key: 'eventOrganizers',\n get: ({ get }) => {\n const events = get(eventsAtom)\n return uniqueFn(\n events.map((event) => event.organizer),\n (a, b) => a.id === b.id\n ).sort((a, b) => a.name.localeCompare(b.name, i18next.language))\n },\n})\n\nexport const filterOrganizersSelector = selector({\n key: 'filterOrganizers',\n get: ({ get }) => {\n const events = get(filteredEventsForOrganizerSelector)\n const organizers = get(eventOrganizersSelector)\n const filter = get(eventFilterAtom)\n const usedOrganizerIds = unique<string>(\n events.reduce<string[]>((acc, cur) => [...acc, cur.organizer.id], [...filter.organizer])\n )\n\n return organizers\n .filter((o) => usedOrganizerIds.includes(o.id))\n .sort((a, b) => a.name.localeCompare(b.name, i18next.language))\n },\n})\n\nexport const filterJudgesSelector = selector({\n key: 'filterJudges',\n get: ({ get }) => {\n const events = get(filteredEventsForJudgeSelector)\n const filter = get(eventFilterAtom)\n const usedJudges = uniqueFn<PublicJudge>(\n events.reduce<PublicJudge[]>((acc, cur) => [...acc, ...cur.judges], []),\n (a, b) => a.name === b.name\n )\n usedJudges.sort((a, b) => {\n const level = Number(filter.judge.includes(a.name)) - Number(filter.judge.includes(b.name))\n\n return level === 0 ? a.name.localeCompare(b.name, i18next.language) : level\n })\n\n return usedJudges\n },\n})\n\nexport const eventPricesSelector = selector({\n key: 'eventPricesSelector',\n get: ({ get }) =>\n unique<number>(get(eventsAtom).map((e) => e.cost))\n .filter(Boolean)\n .sort((a, b) => a - b),\n})\n\nexport const eventMemerPricesSelector = selector({\n key: 'eventMemberPricesSelector',\n get: ({ get }) =>\n unique<number>(get(eventsAtom).map((e) => e.costMember))\n .filter(Boolean)\n .sort((a, b) => a - b),\n})\n","import type { AtomEffect } from 'recoil'\nimport type { Registration } from '../../../types'\n\nimport { getRegistration } from '../../../api/registration'\n\nexport const remoteRegistrationEffect =\n (param: string): AtomEffect<Registration | undefined | null> =>\n ({ node, setSelf, trigger }) => {\n if (trigger === 'get') {\n const [eventId, registrationId] = param.split(':')\n setSelf(getRegistration(eventId, registrationId).then((registration) => registration ?? null))\n }\n }\n","import type { Registration } from '../../../types'\n\nimport { DefaultValue, selectorFamily } from 'recoil'\n\nimport { registrationByIdsAtom } from './atoms'\n\nexport const registrationSelector = selectorFamily<Registration | undefined | null, string | undefined>({\n key: 'registrationSelector',\n get:\n (id) =>\n ({ get }) =>\n id ? get(registrationByIdsAtom(id)) : undefined,\n set:\n (id) =>\n ({ set }, value) => {\n if (id && value && !(value instanceof DefaultValue)) {\n set(registrationByIdsAtom(id), value)\n }\n },\n})\n","import type { Registration } from '../../../types'\n\nimport { atom, atomFamily } from 'recoil'\n\nimport { emptyBreeder, emptyDog, emptyPerson } from '../../components/RegistrationForm'\nimport { logEffect, sessionStorageEffect } from '../effects'\n\nimport { remoteRegistrationEffect } from './effects'\nimport { registrationSelector } from './selectors'\n\nexport const registrationIdAtom = atom<string | undefined>({\n key: 'registrationId',\n default: '',\n effects: [logEffect],\n})\n\nexport const newRegistrationAtom = atom<Registration | undefined>({\n key: 'newRegistration',\n default: {\n id: '',\n createdAt: new Date(),\n createdBy: 'anonymous',\n modifiedAt: new Date(),\n modifiedBy: 'anonymous',\n agreeToTerms: false,\n breeder: { ...emptyBreeder },\n dates: [],\n dog: { ...emptyDog },\n eventId: '',\n eventType: '',\n handler: { ...emptyPerson },\n language: 'fi',\n notes: '',\n owner: { ...emptyPerson },\n ownerHandles: true,\n ownerPays: true,\n payer: { ...emptyPerson },\n qualifyingResults: [],\n qualifies: false,\n reserve: 'DAY',\n state: 'creating',\n },\n effects: [logEffect, sessionStorageEffect],\n})\n\nexport const registrationByIdsAtom = atomFamily<Registration | undefined | null, string>({\n key: 'registration/ids',\n default: undefined,\n effects: (param) => [logEffect, sessionStorageEffect, remoteRegistrationEffect(param)],\n})\n\nexport const editableRegistrationByIdsAtom = atomFamily<Registration | undefined | null, string | undefined>({\n key: 'editableRegistration/ids',\n default: registrationSelector,\n effects: [logEffect, sessionStorageEffect],\n})\n","import type { Registration } from '../../../types'\n\nimport { useTranslation } from 'react-i18next'\nimport { useSnackbar } from 'notistack'\n\nimport { getRegistration, putRegistration } from '../../../api/registration'\n\nexport function useRegistrationActions() {\n const { t } = useTranslation()\n const { enqueueSnackbar } = useSnackbar()\n\n return {\n save: async (reg: Registration) => {\n const regWithOverrides = {\n ...reg,\n handler: reg.ownerHandles ? { ...reg.owner } : reg.handler,\n payer: reg.ownerPays ? { ...reg.owner } : reg.payer,\n }\n const saved = await putRegistration(regWithOverrides)\n const emails = [saved.handler.email]\n if (saved.owner.email !== saved.handler.email) {\n emails.push(saved.owner.email)\n }\n if (reg.paymentStatus === 'SUCCESS') {\n enqueueSnackbar(\n t(reg.id ? 'registration.modified' : 'registration.saved', {\n count: emails.length,\n to: emails.join('\\n'),\n }),\n { variant: 'success', style: { whiteSpace: 'pre-line' } }\n )\n }\n return saved\n },\n\n cancel: async (reg: Registration, reason: string) => {\n const mod = structuredClone(reg)\n mod.cancelled = true\n mod.cancelReason = reason\n const saved = await putRegistration(mod)\n enqueueSnackbar(t('registration.cancelDialog.done'), { variant: 'info' })\n return saved\n },\n\n confirm: async (reg: Registration) => {\n const mod = structuredClone(reg)\n mod.confirmed = true\n const saved = await putRegistration(mod)\n enqueueSnackbar(t('registration.confirmDialog.done'), { variant: 'info' })\n return saved\n },\n\n invitationRead: async (reg: Registration) => {\n if (reg.invitationRead) return reg\n const mod = structuredClone(reg)\n mod.invitationRead = true\n const saved = await putRegistration(mod)\n return saved\n },\n\n reload: async ({ eventId, id }: Pick<Registration, 'eventId' | 'id'>) => {\n const reg = await getRegistration(eventId, id)\n\n return reg\n },\n }\n}\n","import { useCallback } from 'react'\nimport { useLocation, useNavigate } from 'react-router-dom'\nimport { signOut as awsSignOut } from 'aws-amplify/auth'\nimport { enqueueSnackbar } from 'notistack'\nimport { useRecoilCallback, useRecoilState, useSetRecoilState } from 'recoil'\n\nimport { reportError } from '../../../lib/client/error'\nimport { Path } from '../../../routeConfig'\n\nimport { idTokenAtom, loginPathAtom } from './atoms'\nimport { userSelector } from './selectors'\n\nexport const useUserActions = () => {\n const location = useLocation()\n const navigate = useNavigate()\n const setIdToken = useSetRecoilState(idTokenAtom)\n const [loginPath, setLoginPath] = useRecoilState(loginPathAtom)\n\n const login = useCallback(() => {\n const newLoginPath = location.pathname === Path.login ? Path.home : location.pathname\n setLoginPath(newLoginPath)\n navigate(Path.login, { replace: true })\n }, [location.pathname, navigate, setLoginPath])\n\n const signIn = useRecoilCallback(\n ({ snapshot }) =>\n async (idToken: string) => {\n setIdToken(idToken)\n const user = await snapshot.getPromise(userSelector)\n const nameOrEmail = user?.name ?? user?.email\n if (nameOrEmail) {\n enqueueSnackbar(`Tervetuloa, ${nameOrEmail}!`, { variant: 'info' })\n }\n navigate(loginPath ?? Path.home, { replace: true })\n },\n [loginPath, navigate, setIdToken]\n )\n\n const signOut = useRecoilCallback(\n ({ reset }) =>\n async (notice: boolean = true) => {\n try {\n navigate(Path.home, { replace: true })\n reset(idTokenAtom)\n // reset(adminEventsAtom)\n sessionStorage.clear()\n if (notice) {\n enqueueSnackbar('Heippa!', { variant: 'info' })\n }\n return awsSignOut()\n } catch (e) {\n reportError(e)\n }\n },\n [navigate]\n )\n\n return { login, signIn, signOut }\n}\n","import type { Language } from '../../../types'\n\nimport { fetchAuthSession } from 'aws-amplify/auth'\nimport { atom, atomFamily } from 'recoil'\n\nimport { localStorageEffect, logEffect, sessionStorageEffect } from '../effects'\n\nimport { i18nextEffect } from './effects'\n\nconst getIdToken = async (): Promise<string | undefined> => {\n try {\n const session = await fetchAuthSession()\n return session.tokens?.idToken?.toString()\n } catch (e) {\n console.error('getIdToken', e)\n return\n }\n}\n\nexport const idTokenAtom = atom<string | undefined>({\n key: 'idToken',\n default: getIdToken(),\n effects: [logEffect, localStorageEffect],\n})\n\nexport const languageAtom = atom<Language>({\n key: 'language',\n default: 'fi',\n effects: [logEffect, localStorageEffect, i18nextEffect],\n})\n\nexport const spaAtom = atom<boolean>({\n key: 'spa',\n default: false,\n})\n\nexport const loginPathAtom = atom<string | undefined>({\n key: 'loginPath',\n default: '/',\n effects: [logEffect, sessionStorageEffect],\n})\n\nexport const openedEventAtom = atomFamily<boolean, string>({\n key: 'open/eventId',\n default: false,\n effects: [sessionStorageEffect],\n})\n","import type { AtomEffect } from 'recoil'\nimport type { Language } from '../../../types'\n\nimport i18n from 'i18next'\n\nexport const stringToLang = (str?: string | null): Language => (str === 'en' ? 'en' : 'fi')\n\nexport const i18nextEffect: AtomEffect<Language> = ({ onSet, setSelf, trigger }) => {\n if (trigger === 'get') {\n setSelf(stringToLang(i18n.language))\n }\n onSet((value) => {\n const language = stringToLang(value)\n if (i18n.language !== language) {\n i18n.changeLanguage(language)\n }\n if (document.documentElement.lang !== language) {\n document.documentElement.lang = language\n }\n // In case the value vas not valid, change it.\n if (value !== language) {\n setSelf(language)\n }\n })\n}\n","import { selector } from 'recoil'\n\nimport { getUser } from '../../../api/user'\nimport { reportError } from '../../../lib/client/error'\n\nimport { idTokenAtom } from './atoms'\n\nexport const userSelector = selector({\n key: 'user',\n get: async ({ get }) => {\n try {\n const token = get(idTokenAtom)\n if (!token) return null\n\n const user = await getUser(token)\n return user\n } catch (e) {\n reportError(e)\n }\n\n return null\n },\n /**\n * Defines the behavior of the internal selector cache. Can be useful to control the memory footprint in apps that\n * have selectors with many changing dependencies.\n * @property {'lru'|'keep-all'|'most-recent'} eviction - can be set to lru (which requires that a maxSize is set), keep-all (default), or most-recent.\n * An lru cache will evict the least-recently-used value from the selector cache when the size of the cache\n * exceeds maxSize. A keep-all policy will mean all selector dependencies and their values will be indefinitely\n * stored in the selector cache. A most-recent policy will use a cache of size 1 and will retain only the most\n * recently saved set of dependencies and their values.\n * * Note the cache stores the values of the selector based on a key containing all dependencies and their values.\n * This means the size of the internal selector cache depends on both the size of the selector values as well as\n * the number of unique values of all dependencies.\n * * Note the default eviction policy (currently keep-all) may change in the future.\n **/\n cachePolicy_UNSTABLE: {\n eviction: 'most-recent',\n },\n})\n\nexport const isAdminSelector = selector({\n key: 'isAdmin',\n get: async ({ get }) => {\n const user = get(userSelector)\n return user?.admin === true\n },\n cachePolicy_UNSTABLE: {\n eviction: 'most-recent',\n },\n})\n\nexport const isOrgAdminSelector = selector({\n key: 'isOrgAdmin',\n get: async ({ get }) => {\n const user = get(userSelector)\n const roles = user?.roles ?? {}\n return user?.admin === true || Object.keys(roles).some((key) => roles[key] === 'admin')\n },\n cachePolicy_UNSTABLE: {\n eviction: 'most-recent',\n },\n})\n\nexport const hasAdminAccessSelector = selector({\n key: 'hasAdminAccess',\n get: async ({ get }) => {\n const user = get(userSelector)\n return user?.admin === true || Object.keys(user?.roles ?? {}).length > 0\n },\n cachePolicy_UNSTABLE: {\n eviction: 'most-recent',\n },\n})\n\nexport const adminUserOrgIdsSelector = selector({\n key: 'adminUserOrgIds',\n get: async ({ get }) => {\n const user = get(userSelector)\n const roles = user?.roles ?? {}\n\n return Object.keys(roles)\n },\n})\n","import type { ConfirmedEvent, PublicDogEvent, Registration } from './types'\n\nimport { formatDate } from './i18n/dates'\n\nexport const API_BASE_URL = process.env.REACT_APP_API_BASE_URL ?? 'http://127.0.0.1:8080'\n\nconst ADMIN_ROOT = '/admin'\nconst ADMIN_EVENTS = `${ADMIN_ROOT}/event`\n\ntype RegistrationIds = Pick<Registration, 'eventId' | 'id'>\n\nconst isRegistration = (item: ConfirmedEvent | Registration): item is Registration => 'eventId' in item\nconst getItemDateAndClass = (item: ConfirmedEvent | Registration): string => {\n let date, cls\n if (isRegistration(item)) {\n date = item.dates[0].date\n cls = item.class\n } else {\n date = item.startDate\n }\n const c = cls ? `-${cls}` : ''\n return `${formatDate(date, 'dd.MM.yyyy')}${c}`\n}\n\nexport const Path = {\n home: '/',\n login: '/login',\n logout: '/logout',\n payment: (registration: RegistrationIds) => `/p/${registration.eventId}/${registration.id}`,\n register: (event: PublicDogEvent, className?: string, classDate?: string) => {\n if (className) {\n return classDate\n ? `/event/${event.eventType}/${event.id}/${className}/${classDate}`\n : `/event/${event.eventType}/${event.id}/${className}`\n }\n return `/event/${event.eventType}/${event.id}`\n },\n registration: (registration: RegistrationIds) => `/r/${registration.eventId}/${registration.id}`,\n registrationOk: (registration: RegistrationIds) => `/r/${registration.eventId}/${registration.id}/saved`,\n invitation: (registration: RegistrationIds) => `/r/${registration.eventId}/${registration.id}/invitation`,\n invitationAttachment: (item: ConfirmedEvent | Registration) =>\n `${API_BASE_URL}/file/${item.invitationAttachment}/kutsu-${item.eventType}-${getItemDateAndClass(item)}.pdf`,\n startList: (id: string = ':id') => `/startlist/${id}`,\n admin: {\n root: ADMIN_ROOT,\n index: `${ADMIN_EVENTS}`,\n\n events: `${ADMIN_EVENTS}`,\n newEvent: `${ADMIN_EVENTS}/create`,\n editEvent: (id: string = ':id') => `${ADMIN_EVENTS}/edit/${id}`,\n viewEvent: (id: string = ':id') => `${ADMIN_EVENTS}/view/${id}`,\n startList: (id: string = ':id') => `${ADMIN_EVENTS}/startlist/${id}`,\n\n orgs: `${ADMIN_ROOT}/organizations`,\n users: `${ADMIN_ROOT}/users`,\n officials: `${ADMIN_ROOT}/officials`,\n judges: `${ADMIN_ROOT}/judge`,\n eventTypes: `${ADMIN_ROOT}/types`,\n emailTemplates: `${ADMIN_ROOT}/templates`,\n },\n}\n","import type { EventResultRequirementFn } from './rules_ch'\nimport type { Dog, Registration, TestResult } from './types'\n\nimport { tz } from '@date-fns/tz'\nimport { parseISO } from 'date-fns'\n\nimport { TIME_ZONE } from './i18n/dates'\nimport { isModernFinnishRegNo } from './pages/components/registrationForm/validation'\nimport { NOME_A_CH_requirements, NOME_B_CH_requirements, NOWT_CH_requirements } from './rules_ch'\n\nexport type EventResultRequirement = Partial<TestResult> & { count: number; excludeCurrentYear?: boolean }\nexport type EventResultRequirements = Array<EventResultRequirement>\nexport type EventResultRules = EventResultRequirements | Array<EventResultRequirements> | EventResultRequirementFn\n\nexport enum RULE_DATES {\n '1977-01-01',\n '1986-01-01',\n '1991-01-01',\n '1999-01-01',\n '2006-04-01',\n '2009-01-01',\n '2016-04-01',\n '2023-04-15',\n}\nexport type RuleDate = keyof typeof RULE_DATES\n\nexport type EventRequirement = {\n age?: number\n breedCode?: Array<string>\n dog?: (dog: Partial<Dog>) => false | 'dogSM'\n results?: {\n [Property in RuleDate]?: EventResultRules\n }\n}\n\nexport type EventResultRequirementsByDate = {\n date: RuleDate\n rules: EventResultRules\n}\n\nexport type EventRequirementsByDate = {\n age?: number\n breedCode?: Array<string>\n results?: EventResultRequirementsByDate\n}\n\nexport type EventClassRequirement = {\n ALO?: EventRequirement\n AVO?: EventRequirement\n VOI?: EventRequirement\n}\n\nexport function getRuleDate(date: Date | string, available: RuleDate[] = Object.keys(RULE_DATES) as RuleDate[]) {\n if (typeof date === 'string') {\n date = new Date(date)\n }\n const asDates = available.map((v) => parseISO(v, { in: tz(TIME_ZONE) }))\n for (let i = 0; i < asDates.length; i++) {\n if (i > 0 && asDates[i] > date) {\n return available[i - 1]\n }\n }\n return available[available.length - 1]\n}\n\nconst validateDogForSM = (dog: Partial<Dog>) =>\n dog.regNo && dog.kcId && isModernFinnishRegNo(dog.regNo) ? false : 'dogSM'\n\nexport function getRequirements(eventType: string, regClass: Registration['class'], date: Date) {\n const eventRequirements = REQUIREMENTS[eventType] || {}\n const classRequirements = regClass && (eventRequirements as EventClassRequirement)[regClass]\n const requirements = classRequirements ?? (eventRequirements as EventRequirement)\n let results: EventResultRequirementsByDate | undefined\n if (requirements.results) {\n const resultRequirements = requirements.results\n const ruleDates = Object.keys(resultRequirements) as Array<RuleDate>\n const ruleDate = getRuleDate(date, ruleDates)\n results = {\n date: ruleDate,\n rules: resultRequirements[ruleDate] ?? [],\n }\n }\n return results\n}\n\nexport const REQUIREMENTS: { [key: string]: EventRequirement | EventClassRequirement } = {\n NOU: {\n age: 9,\n breedCode: ['122', '111', '121', '312', '110', '263'],\n },\n 'NOME-B': {\n ALO: {\n results: {\n '1991-01-01': [{ type: 'NOU', result: 'NOU1', count: 1 }],\n },\n },\n AVO: {\n results: {\n '1991-01-01': [{ type: 'NOME-B', result: 'ALO1', count: 1 }],\n '1999-01-01': [{ type: 'NOME-B', result: 'ALO1', count: 2 }],\n '2006-04-01': [{ type: 'NOME-B', result: 'ALO1', count: 1 }],\n '2009-01-01': [{ type: 'NOME-B', result: 'ALO1', count: 1 }],\n '2016-04-01': [{ type: 'NOME-B', result: 'ALO1', count: 2 }],\n '2023-04-15': [{ type: 'NOME-B', result: 'ALO1', count: 1 }],\n },\n },\n VOI: {\n results: {\n '1977-01-01': [{ type: 'NOME-B', result: 'AVO1', count: 1 }],\n '1986-01-01': [{ type: 'NOME-B', result: 'AVO1', count: 2 }],\n '2006-04-01': [{ type: 'NOME-B', result: 'AVO1', count: 1 }],\n '2009-01-01': [{ type: 'NOME-B', result: 'AVO1', count: 2 }],\n '2016-04-01': [{ type: 'NOME-B', result: 'AVO1', count: 2 }],\n '2023-04-15': [{ type: 'NOME-B', result: 'AVO1', count: 1 }],\n },\n },\n },\n 'NOME-B SM': {\n dog: validateDogForSM,\n results: {\n '2023-04-15': NOME_B_CH_requirements,\n },\n },\n NOWT: {\n ALO: {\n results: {\n '2006-04-01': [{ type: 'NOU', result: 'NOU1', count: 1 }],\n '2009-01-01': [{ type: 'NOU', result: 'NOU1', count: 1 }],\n '2016-04-01': [{ type: 'NOU', result: 'NOU1', count: 1 }],\n '2023-04-15': [{ type: 'NOU', result: 'NOU1', count: 1 }],\n },\n },\n AVO: {\n results: {\n '2006-04-01': [{ type: 'NOWT', result: 'ALO1', count: 1 }],\n '2009-01-01': [{ type: 'NOWT', result: 'ALO1', count: 1 }],\n '2016-04-01': [{ type: 'NOWT', result: 'ALO1', count: 1 }],\n '2023-04-15': [{ type: 'NOWT', result: 'ALO1', count: 1 }],\n },\n },\n VOI: {\n results: {\n '2006-04-01': [{ type: 'NOWT', result: 'AVO1', count: 1 }],\n '2009-01-01': [{ type: 'NOWT', result: 'AVO1', count: 1 }],\n '2016-04-01': [{ type: 'NOWT', result: 'AVO1', count: 1 }],\n '2023-04-15': [{ type: 'NOWT', result: 'AVO1', count: 1 }],\n },\n },\n },\n 'NOWT SM': {\n dog: validateDogForSM,\n results: {\n '2023-04-15': NOWT_CH_requirements,\n },\n },\n 'NOME-A': {\n results: {\n '2009-01-01': [[{ type: 'NOME-B', result: 'AVO1', count: 1 }], [{ type: 'NOWT', result: 'AVO1', count: 1 }]],\n '2016-04-01': [[{ type: 'NOME-B', result: 'AVO1', count: 2 }], [{ type: 'NOWT', result: 'AVO1', count: 2 }]],\n '2023-04-15': [\n [{ type: 'NOME-B', result: 'AVO1', count: 1 }],\n [{ type: 'NOWT', result: 'AVO1', count: 1 }],\n [{ type: 'NOME-A KV', result: 'EXC', count: 1 }],\n [{ type: 'NOME-A KV', result: 'VG', count: 1 }],\n [{ type: 'NOME-A KV', result: 'G', count: 1 }],\n ],\n },\n },\n 'NOME-A SM': {\n dog: validateDogForSM,\n results: {\n '2023-04-15': NOME_A_CH_requirements,\n },\n },\n NKM: {\n results: {\n '2016-04-01': [[{ type: 'NOME-B', result: 'VOI1', count: 2 }], [{ type: 'NOWT', cert: true, count: 2 }]],\n '2023-04-15': [[{ type: 'NOME-B', result: 'VOI1', count: 2 }], [{ type: 'NOWT', cert: true, count: 2 }]],\n },\n },\n}\n","import type { ManualTestResult, QualifyingResult, QualifyingResults, TestResult } from './types'\n\nimport { subYears } from 'date-fns'\n\nimport { zonedEndOfDay } from './i18n/dates'\nimport { NOME_B_CH_qualification_start_date } from './lib/registration'\n\nexport type EventResultRequirementFn = (\n officialResults: TestResult[],\n manualResults: ManualTestResult[],\n entryEndDate: Date | undefined\n) => QualifyingResults\n\nconst byPointsAndDate = (a: QualifyingResult, b: QualifyingResult) => {\n const aPoints = a.points ?? 0\n const bPoints = b.points ?? 0\n\n if (aPoints === bPoints) {\n return b.date.valueOf() - a.date.valueOf()\n }\n return bPoints - aPoints\n}\n\nconst getNOME_B_CH_RankingPeriod = (entryEndDate: Date) => ({\n maxResultDate: zonedEndOfDay(entryEndDate ?? new Date()),\n minResultDate: NOME_B_CH_qualification_start_date,\n})\n\nconst getNOME_A_CH_RankingPeriod = (entryEndDate: Date) => {\n const endDate = zonedEndOfDay(entryEndDate)\n\n return {\n maxResultDate: endDate,\n minResultDate: subYears(endDate, 2),\n }\n}\n\nconst getNOWT_CH_RankingPeriod = (entryEndDate: Date) => {\n const endDate = zonedEndOfDay(entryEndDate)\n\n return {\n maxResultDate: endDate,\n minResultDate: subYears(endDate, 1),\n }\n}\n\nexport const getRankingPeriod = (eventType: string, entryEndDate?: Date) => {\n if (!entryEndDate) return\n\n switch (eventType) {\n case 'NOME-B SM':\n return getNOME_B_CH_RankingPeriod(entryEndDate)\n case 'NOME-A SM':\n return getNOME_A_CH_RankingPeriod(entryEndDate)\n case 'NOWT SM':\n return getNOWT_CH_RankingPeriod(entryEndDate)\n }\n}\n\nexport const NOME_B_CH_requirements: EventResultRequirementFn = (\n officialResults,\n manualResults,\n entryEndDate\n): QualifyingResults => {\n const maxResults = 5\n const { maxResultDate, minResultDate } = getNOME_B_CH_RankingPeriod(entryEndDate ?? new Date())\n\n const resultFilter = (r: TestResult | ManualTestResult) =>\n r.type === 'NOME-B' &&\n r.class === 'VOI' &&\n ((r.date >= minResultDate && r.date <= maxResultDate && ['VOI1', 'VOI2', 'VOI3'].includes(r.result)) ||\n r.result.startsWith('FI KVA'))\n\n const POINTS: Record<string, number> = { 'FI KVA-B': 6, VOI1: 6, VOI2: 3, VOI3: 1 }\n\n const resultPoints = (r: TestResult | ManualTestResult) => POINTS[r.result] || 0\n\n // 5 best results after last NOME-B SM event's registrationEndDate are considered\n const relevant: QualifyingResult[] = officialResults\n .filter(resultFilter)\n .map((r) => ({ ...r, qualifying: true, official: true, points: resultPoints(r) }))\n .concat(\n manualResults\n .filter(resultFilter)\n .map((r) => ({ ...r, qualifying: true, official: false, points: resultPoints(r) }))\n )\n .sort(byPointsAndDate)\n\n /**\n * SM-kokeeseen ovat oikeutettuja ilmoittautumaan Suomessa rekisteröidyt noutajat, jotka ovat saavuttaneet\n * vähintään yhden VOI1-tuloksen NOME B -kokeesta ajanjaksona, joka alkaa edellisen vuoden SM-kokeen viimeisestä\n * ilmoittautumispäivästä ja päättyy seuraavan vuoden SM-kokeen viimeiseen ilmoittautumispäivään.\n * SM-kokeeseen voidaan ottaa enintään 48 koiraa.\n *\n * Varmuudella kokeeseen pääsevät: (TODO)\n * - Edellisen vuoden SMvoittajalla on oikeus osallistua kokeeseen ilman tulosvaatimuksia.\n * - Koirat, jotka ovat saavuttaneet kolme VOI1-tulosta yllä mainittuna ajanjaksona, pääsevät varmasti kokeeseen.\n * * Koirat, jotka ovat saavuttaneet KVA-arvon ennen edellisen SM-kokeen viimeistä ilmoittautumispäivää,\n * riittää kaksi VOI1-tulosta.\n *\n * Etuoikeutetut: (TODO)\n * - Ne kennelpiirien hallitsevat piirinmestarit, jotka ovat voittaneet piirinmestaruuden VOI1-tuloksella,\n * ovat etuoikeutettuja osallistumaan kokeeseen.\n */\n const qualifies = Boolean(relevant.find((r) => r.result === 'VOI1'))\n\n return { relevant: relevant.slice(0, maxResults), qualifies, minResultDate, maxResultDate }\n}\n\nexport const NOME_A_CH_requirements: EventResultRequirementFn = (\n officialResults,\n manualResults,\n entryEndDate\n): QualifyingResults => {\n /**\n * NOME A SM-kokeeseen ovat oikeutettuja ilmoittautumaan Suomessa rekisteröidyt koirat, joilla on osallistumisoikeus\n * NOME A -kokeeseen ja jotka ovat saavuttaneet korkeimman palkintosijan NOME A -kokeesta tai KV-kokeesta.\n * SM-kokeeseen voidaan ottaa enintään 24 koiraa.\n * TODO: Edellisen vuoden NOME A - mestaruuden voittajalla on oikeus osallistua kokeeseen ilman tulosvaatimuksia.\n */\n const qualifies =\n officialResults.some((r) => r.type === 'NOME-A' && r.result === 'A1') ||\n manualResults.some(\n (r) => (r.type === 'NOME-A KV' && r.result === 'EXC') || (r.type === 'NOME-A' && r.result === 'A1')\n )\n\n /**\n * Tuloksissa huomioidaan viiden parhaan NOME A- ja KV-kokeista saadun koetuloksen mukaiset pisteet,\n * jotka on saatu kokeen ilmoittautumisajan päättymistä edeltävän kahden vuoden aikana.\n */\n const maxResults = 5\n const { minResultDate, maxResultDate } = getNOME_A_CH_RankingPeriod(entryEndDate ?? new Date())\n\n const resultFilter = (result: TestResult | ManualTestResult) =>\n ['NOME-A', 'NOME-A KV'].includes(result.type) &&\n ((result.date >= minResultDate &&\n result.date <= maxResultDate &&\n ['A1', 'A2', 'A3', 'EXC', 'VG', 'G'].includes(result.result)) ||\n result.result === 'FI KVA-FT')\n\n const resultPoints = (result: TestResult | ManualTestResult) => {\n if (result.result === 'FI KVA-FT') return 6\n if (result.result === 'A1' || result.result === 'EXC') {\n if (result.cert || result.cacit) return 6\n if (result.resCert || result.resCacit) return 5\n return 4\n }\n if (result.result === 'A2' || result.result === 'VG') return 2\n if (result.result === 'A3' || result.result === 'G') return 1\n return 0\n }\n\n const relevant: QualifyingResult[] = officialResults\n .filter(resultFilter)\n .map((r) => ({ ...r, qualifying: true, official: true, points: resultPoints(r) }))\n .concat(\n manualResults\n .filter(resultFilter)\n .map((r) => ({ ...r, qualifying: true, official: false, points: resultPoints(r) }))\n )\n .sort(byPointsAndDate)\n\n return { relevant: relevant.slice(0, maxResults), qualifies, minResultDate, maxResultDate }\n}\n\nexport const NOWT_CH_requirements: EventResultRequirementFn = (\n officialResults,\n manualResults,\n entryEndDate\n): QualifyingResults => {\n /**\n * Kokeeseen ovat oikeutettuja ilmoittautumaan Suomessa rekisteröidyt noutajat, jotka ovat saavuttaneet KVA-WT arvon\n * tai vähintään yhden VOI1-tuloksen WT-kokeessa, joka on saatu kokeen ilmoittautumisajan päättymistä\n * edeltävän 12 kuukauden aikana.\n *\n * Mikäli kokeeseen osallistuvaa koiramäärää on tarpeen rajoittaa, tulee kokeen järjestäjän sopia asiasta\n * rotujärjestöjen kanssa. Tällöin koepaikat täytetään alla olevan taulukon mukaan laskettujen pisteiden perusteella.\n *\n * Tuloksissa huomioidaan viiden parhaan NOWT saadun koetuloksen mukaiset pisteet, jotka on saatu kokeen\n * ilmoittautumisajan päättymistä edeltävän 12 kuukauden aikana.\n *\n * TODO: KVA-WT koira pääsee kokeeseen ilman karsintaa, kun sillä on yksi pisteisiin oikeuttava tulos, joka on saatu\n * yllä mainittuna ajanjaksona.\n *\n * Tasapistetilanteissa kokeen järjestäjä suorittaa arvonnan.\n *\n * TODO: Edellisen vuoden WTWmestarilla on oikeus osallistua kokeeseen ilman tulosvaatimuksia.\n */\n\n const maxResults = 5\n const { minResultDate, maxResultDate } = getNOWT_CH_RankingPeriod(entryEndDate ?? new Date())\n\n const resultFilter = (result: TestResult | ManualTestResult) =>\n result.type === 'NOWT' &&\n result.class === 'VOI' &&\n ((result.date >= minResultDate &&\n result.date <= maxResultDate &&\n ['VOI1', 'VOI2', 'VOI3'].includes(result.result)) ||\n result.result === 'FI KVA-WT')\n\n const resultPoints = (result: TestResult | ManualTestResult) => {\n if (result.result === 'FI KVA-WT') return 6\n if (result.result === 'VOI1') {\n if (result.cert) return 6\n if (result.resCert) return 5\n return 4\n }\n if (result.result === 'VOI2') return 2\n if (result.result === 'VOI3') return 1\n return 0\n }\n\n const relevant: QualifyingResult[] = officialResults\n .filter(resultFilter)\n .map((r) => ({ ...r, qualifying: true, official: true, points: resultPoints(r) }))\n .concat(\n manualResults\n .filter(resultFilter)\n .map((r) => ({ ...r, qualifying: true, official: false, points: resultPoints(r) }))\n )\n .sort(byPointsAndDate)\n\n const qualifies = relevant.some((r) => r.result === 'VOI1')\n\n return { relevant: relevant.slice(0, maxResults), qualifies, minResultDate, maxResultDate }\n}\n"],"names":["AWSConfig","Geo","LocationService","region","_process$env$REACT_AP","process","Auth","Cognito","identityPoolId","_process$env$REACT_AP2","userPoolId","_process$env$REACT_AP3","userPoolClientId","_process$env$REACT_AP4","loginWith","oauth","domain","_process$env$REACT_AP5","redirectSignIn","_process$env$REACT_AP6","redirectSignOut","_process$env$REACT_AP7","responseType","scopes","_AWSConfig$Auth","isDevEnv","Error","RUM_CONFIG","sessionSampleRate","guestRoleArn","endpoint","telemetries","allowCookies","enableXRay","RUM_APPLICATION_ID","RUM_REGION","_process$env$REACT_AP8","PATH","getEmailTemplates","token","signal","http","get","withToken","putEmailTemplate","template","post","sendTemplatedEmail","message","ADMIN_PATH","getEvents","getAdminEvents","lastModified","qs","getEvent","id","getAdminEvent","putEvent","event","putInvitationAttachment","eventId","file","data","FormData","append","name","postRaw","copyEventWithRegistrations","startDate","zonedStartOfDay","nextSaturday","addDays","Date","now","APIError","constructor","response","body","_body$message","jsonStatus","statusText","status","anySignal","signals","controller","AbortController","aborted","abort","reason","addEventListener","httpWithTimeout","path","init","reviveDates","url","API_BASE_URL","timer","setTimeout","fetch","headers","Accept","clearTimeout","text","ok","json","parseJSON","e","reportError","err","Response","enqueueSnackbar","variant","_ref","_err$body$message","_err$body","_session$tokens","_session$tokens$idTok","idToken","fetchAuthSession","forceRefresh","tokens","toString","key","newValue","JSON","stringify","localStorage","setItem","dispatchEvent","StorageEvent","storageArea","Promise","resolve","HTTP","method","put","delete","Authorization","undefined","createPayment","registrationId","verifyPayment","params","createRefund","transactionId","amount","getRegistrations","getRegistration","getRegistrationAuditTrail","putRegistration","registration","putAdminRegistration","putAdminRegistrationNotes","putRegistrationGroups","groups","getStartList","getRegistrationTransactions","getUser","getUsers","putUser","user","putAdmin","item","putRole","HEADER_HEIGHT","theme","createTheme","breakpoints","values","xs","sm","md","lg","xl","components","MuiDatePicker","defaultProps","desktopModeMediaQuery","MuiDataGrid","rowHeight","MuiStack","useFlexGap","MuiSwitch","color","MuiToggleButtonGroup","mixins","containerBackground","palette","primary","light","main","dark","contrastText","secondary","error","red","A400","background","default","form","oddRow","tableHead","hover","selected","typography","button","textTransform","zIndex","snackbar","drawer","responsiveFontSizes","useAdminEventRegistrationDates","eventClass","_event$classes","eventTypeGroups","useRecoilValue","adminEventTypeGroupsSelector","eventType","defaultGroups","useMemo","length","filter","g","classes","c","class","flatMap","_c$groups","map","time","date","dates","getEventDays","useDebouncedCallback","callback","wait","timeout","useRef","cb","current","useEffect","window","useCallback","args","_cb$current","apply","getEventTitle","t","state","isEventOver","isEntryOpen","isEntryClosed","isEventOngoing","useEventTitle","useTranslation","i18nInit","lng","ns","resources","fi","translation","breed","breedAbbr","country","en","fallbackLng","supportedLngs","debug","interpolation","escapeValue","TIME_ZONE","locales","formatDate","formatStr","timeZone","locale","parseISO","isValid","format","in","tz","getDateFormatter","fmt","formatDateSpan","start","end","noYear","y","opts","isSameDay","isSameMonth","isSameYear","formatDistance","formatDistanceToNowStrict","currentFinnishTime","startOfDay","zonedEndOfDay","endOfDay","registerFormatters","i18n","_i18n$services$format","_i18n$services$format2","_i18n$services$format3","_i18n$services$format4","_i18n$services$format5","_i18n$services$format6","_i18n$services$format7","_i18n$services$format8","_i18n$services$format9","_i18n$services$format10","services","formatter","add","value","toLowerCase","fiAuthenticationDict","Code","Email","or","Password","Sending","Submit","Submitting","muiLocales","fiFI","gfiFI","dfiFI","enUS","genUS","denUS","initReactI18next","catch","console","I18n","putVocabularies","setLanguage","SnackbarCloseButton","snackbarKey","closeSnackbar","useSnackbar","_jsx","IconButton","size","onClick","children","Close","fontSize","ErrorPage","Box","sx","display","justifyContent","alignItems","flexDirection","minHeight","backgroundColor","ErrorInfo","BANNER_HEIGHT","Banner","loading","setLoading","useState","onLoad","commonImgStyles","width","height","objectFit","objectPosition","component","position","alt","src","banner1504","srcSet","banner512","banner889","style","opacity","top","left","transition","decoding","buildTimestamp","Version","lightFormat","_jsxs","right","fontFamily","p","textAlign","textShadow","pkg","HomePage","location","useLocation","_rum","rum","recordPageView","pathname","_Fragment","Header","Suspense","fallback","LoadingIndicator","Outlet","paymentResultLoader","request","URL","Array","from","searchParams","keys","startsWith","concat","reduce","acc","redirect","Path","registrationOk","paymentStatus","payment","home","RegistrationEditPage","_params$id","_params$registrationI","navigate","useNavigate","useParams","confirmedEventSelector","ids","savedRegistration","setSavedRegistration","useRecoilState","registrationByIdsAtom","setRegistration","editableRegistrationByIdsAtom","resetRegistration","useResetRecoilState","spa","spaAtom","actions","useRegistrationActions","disabled","cancelled","changes","hasChanges","handleChange","newState","handleSave","saved","save","handleCancel","LoadingPage","LinkButton","mb","to","back","RegistrationEventInfo","invitationAttachment","Typography","align","RegistrationForm","className","classDate","onSave","onCancel","onChange","ConfirmDialog","onConfirm","onClose","open","isConfirmedEvent","Dialog","DialogTitle","DialogContent","DialogContentText","py","DialogActions","Button","autoFocus","PaymentIcon","dim","props","Icon","PauseCircleOutline","EuroOutlined","DIM_OPACITY","Icons","priority","hasPriority","items","icon","PriorityIcon","getPaymentStatus","IconsTooltip","placement","RegistrationList","rows","onUnregister","useMediaQuery","down","onEdit","columns","field","valueGetter","_value","row","dog","headerName","renderCell","flex","type","regNo","breedCode","getActions","always","GridActionsCellItem","EditOutlined","label","CancelOutlined","Paper","elevation","StyledDataGrid","hideFooter","initialState","density","disableRowSelectionOnClick","getRowId","getRowClassName","px","RegistrationListPage","cancel","confirm","invitation","eventSelector","registrationSelector","cancelOpen","setCancelOpen","confirmOpen","setConfirmOpen","redirecting","setRedirecting","reloadCount","setReloadCount","allDisabled","isPast","endDate","cancelDisabled","subDays","then","handleConfirm","confirmed","handleCalcelClose","handleConfirmClose","invitationRead","replace","endsWith","emails","handler","email","owner","push","count","join","whiteSpace","reg","reload","old","overflow","Grid2","container","direction","flexWrap","pl","bgcolor","m","List","disablePadding","ListItem","ListItemIcon","minWidth","priorityIconColor","PersonOutline","ListItemText","priorityStatus","primaryTypographyProps","fontWeight","secondaryAction","paymentIconColor","CheckOutlined","registrationStatus","CancelDialog","MIN_DATE","EventFilter","judges","organizers","eventTypes","eventClasses","up","expanded","setExpanded","filterText","filterString","setFilter","handleDateRangeChange","handleEventTypeChange","handleEventClassChange","handleOrganizerChange","organizer","v","handleJudgeChange","judge","handleWithEntryOpenChange","checked","withOpenEntry","withClosingEntry","withFreePlaces","handleWithUpcomingEntryChange","withUpcomingEntry","getName","o","_o$name","getJudgeName","_o$name2","foreing","getString","compareId","compareJudge","borderBottom","Accordion","defaultExpanded","_e","AccordionSummary","expandIcon","ExpandMore","margin","noWrap","textOverflow","AccordionDetails","spacing","DateRange","range","startLabel","endLabel","AutocompleteMulti","getOptionLabel","options","isOptionEqualToValue","includes","j","Stack","FormControlLabel","control","Switch","labelPlacement","alignSelf","EmptyResult","EventPlaces","places","entries","_event$entries","TimeLeft","ml","TextGrid","styled","paddingLeft","NumberGrid","paddingRight","EventClassPlaces","_c$date","entryStatus","_c$places","_c$entries","_c$members","members","_event$members","Caption","HeaderText","paddingTop","paddingBottom","EventClassPlacesHeader","showDates","InfoItem","borderRadius","judgeClasses","unique","_c$judge","isArray","find","EventInfo","_event$contactInfo2","_event$contactInfo4","_event$entryOrigEndDa","_event$priority","official","_event$contactInfo","printContactInfo","contactInfo","secretary","_event$contactInfo3","judgeName","rankingPeriod","getRankingPeriod","entryOrigEndDate","entryEndDate","columnSpacing","order","entryStartDate","EntryStatus","cost","CostInfo","PriorityChips","minResultDate","maxResultDate","description","EventStateInfo","startList","EventListItem","odd","setOpen","openedEventAtom","infoText","showPlaces","isValidForEntry","handleClick","borderColor","pr","role","KeyboardArrowDown","KeyboardArrowRight","textWrap","offset","alignContent","register","Collapse","borderTop","borderTopColor","mt","EventList","events","i","SearchPage","eventFilterAtom","setSpa","useSetRecoilState","activeJudges","activeEventTypes","activeEventClasses","waitForAll","filterOrganizersSelector","filterJudgesSelector","filterEventTypesSelector","filterEventClassesSelector","filteredEventsSelector","search","deserializeFilter","startListLoader","StyledTableRow","TableRow","border","StartListPage","participants","useLoaderData","lastDate","lastClass","lastTime","index","flexGrow","Table","TableBody","_reg$group$date","_lastDate","result","group","valueOf","_reg$group$date2","TableCell","colSpan","toISOString","_lastDate2","Boolean","_lastDate3","number","_reg$dog$sire","_reg$dog$sire2","_reg$dog$dam","_reg$dog$dam2","gender","defaultValue","titles","dob","sire","dam","ownerHandles","breeder","issueHref","supportEmail","SupportPage","Link","href","TermsPage","element","errorElement","lazy","loader","login","logout","Navigate","admin","root","Component","newEvent","editEvent","viewEvent","orgs","officials","users","emailTemplates","Amplify","configure","router","createBrowserRouter","routes","App","language","languageAtom","closeAction","ThemeProvider","outerTheme","LocalizationProvider","dateAdapter","AdapterDateFns","adapterLocale","SnackbarProvider","anchorOrigin","vertical","horizontal","containerRoot","disableWindowBlurListener","preventDuplicate","maxSnack","action","ConfirmProvider","defaultOptions","allowClose","buttonOrder","cancellationButtonProps","confirmationButtonProps","Authenticator","Provider","RouterProvider","document","getElementById","RecoilEnv","RECOIL_DUPLICATE_ATOM_KEY_CHECKING_ENABLED","createRoot","render","StrictMode","RecoilRoot","StyledEngineProvider","injectFirst","CssBaseline","r","recordError","awsRum","AwsRum","isTestEnv","jest","isProdEnv","EntryStartWeeks","EntryEndWeeks","defaultEntryStartDate","eventStartDate","sub","weeks","defaultEntryEndDate","newEventStartDate","newEventEntryStartDate","newEventEntryEndDate","isDetaultEntryStartDate","isDetaultEntryEndDate","eachDayOfInterval","getUniqueEventClasses","_classes$map","getEventClassesByDays","day","_event$classes$filter","eventRegistrationDateKey","rd","slice","sanitizeDogEvent","createdBy","deletedAt","deletedBy","headquarters","kcId","modifiedBy","publicFields","groupDates","cur","dateValue","resolveTimes","newTimes","oldTimes","applyNewGroupsToDogEventClass","newDates","newByDate","newClasses","dateString","Object","nc","oc","_classes$find","_classes$find$groups","applyNewGroupsToDogEventDates","dateValues","oldByDate","finalDates","forEach","_newByDate$dateValue","_oldByDate$dateValue","sort","a","b","_a$time$localeCompare","_a$time","_b$time","localeCompare","copyDogEvent","_copy$name","_copy$dates","copy","structuredClone","origStartDate","days","differenceInDays","d","capitalize","s","_s$toLowerCase$replac","l","toUpperCase","reverseName","_name$split","last","first","split","trim","splitName","_parts$pop$trim","_parts$pop","_parts$shift$trim","_parts$shift","parts","lastName","pop","firstName","shift","PROVIDER_NAMES","aktia","alandsbanken","alisa","amex","collectorb2b","collectorb2c","creditcard","handelsbanken","jousto","mobilepay","nordea","omasp","oplasku","osuuspankki","paypal","pivo","saastopankki","siirto","spankki","hasName","provider","getProviderName","PRIORITY_MEMBER","PRIORITY_INVITED","PRIORIZED_BREED_CODES","PRIORITY","priorityValuesToPriority","getPrioritySort","GROUP_KEY_CANCELLED","GROUP_KEY_RESERVE","NOME_B_CH_qualification_start_date","REFUNDABLE_GROUP_KEYS","hasMembershipPriority","_registration$handler","_registration$owner","membership","hasInvitationPriority","_event$priority2","priorityByInvitation","hasBreedPriority","_registration$dog","_event$priority3","hasNomeBSMPriority","_registration$qualify","_registration$qualify2","_registration$qualify3","_registration$qualify4","qualifyingResults","kvaDateOrString","kvaDate","_registration$handler2","_registration$owner2","priorityDescriptionKey","nomeBSMPriority","byTimeAndNumber","_a$group","_b$group","_a$group$number","_a$group2","_b$group$number","_b$group2","_a$group$time","_a$group3","_b$group$time","_b$group3","byClassTimeAndNumber","_a$class","_b$class","_a$class2","_b$class2","sortRegistrationsByDateClassTimeAndNumber","_a$group4","_b$group4","_a$group$date","_a$group5","_b$group$date","_b$group5","getRegistrationNumberingGroupKey","_reg$class","_reg$group","classOrType","getRegistrationGroupKey","_reg$group$key","_reg$group2","canRefund","_reg$paidAmount","_reg$refundAmount","paidAmount","refundAmount","getRegistrationEmailTemplateData","confirmedEvent","origin","context","previousGroup","_group$number","_registration$cancelR","eventDate","reserveText","reserve","dogBreed","regDates","link","paymentLink","groupDate","groupTime","groupNumber","invitationLink","cancelReason","isPredefinedReason","subject","title","getRegistrationChanges","existing","getFixedT","diff","modified","_event$state","isDefined","keysOf","exhaustiveStringTuple","x","isEventUpcoming","isEntryUpcoming","isEntryClosing","eventDates","uniqueDate","uniqueClasses","placesForClass","cls","_event$classes2","Number","uniqueClassDates","_c$date2","registrationDates","times","arr","indexOf","uniqueFn","cmp","findIndex","f","Set","DATE_RE","TIME_RE","isDateString","test","dateReviver","_key","dateObj","isNaN","parse","isEmpty","isObject","prototype","call","isEmptyObject","clone","merge","info","phone","CircularProgress","useAdminEventRegistrationInfo","registrations","registrationClasses","_r$class","reserveByClass","byClass","allReserve","missingClasses","numbersByClass","classRegs","_r$class2","regs","Math","round","invalid","selectedByClass","allSelected","_reg$class2","stateByClass","_c$state","useAdminEventRegistrationGroups","NullComponent","useAdminRegistrationActions","eventRegistrations","setEventRegistrations","adminEventRegistrationsSelector","setEvent","adminEventSelector","setBackgroundActionsRunning","adminBackgroundActionsRunningAtom","idTokenAtom","updateAdminRegistration","insert","splice","regWithOverrides","payer","ownerPays","update","updated","saveGroups","invitedOk","invitedFailed","pickedOk","pickedFailed","reserveOk","reserveFailed","cancelledOk","cancelledFailed","transactions","refund","refundAt","refundStatus","putInternalNotes","internalNotes","determineChangesFromDrop","targetGroup","canArrangeReserve","newGroup","groupKey","targetGroupKey","_item$targetIndex","_regs$pos$group$numbe","_regs$pos","_regs$pos$group","targetIndex","directionModifier","hoverModifier","pos","_regs$group$number","_regs","_regs$group","DragableRow","_props$row","manager","useDragDropManager","ref","handlerId","hovered","drop","useDrop","accept","collect","monitor","getItem","getHandlerId","isOver","sameGroup","dragIndex","hoverIndex","hoverBoundingRect","getBoundingClientRect","mod","hoverMiddleY","bottom","getClientOffset","drag","useDrag","rowId","dropGroups","isDragging","GridRow","_props$flex","getCanDrop","_props$canDrop","canDrop","_props$group","_props$onDrop","onDrop","_props$onReject","onReject","slots","marginBottom","content","GroupColorTooltip","Tooltip","GROUP_COLORS","availableGroups","GroupColors","available","disableTooltip","selIdx","dt","getTime","mr","borderTopLeftRadius","isSelected","GroupHeader","lineHeight","NoRowsOverlay","UnlockArrange","FormControl","maxWidth","disableTypography","InfoOutlined","currency","moneyFormatter","Intl","NumberFormat","moneyCodeFormatter","currencyDisplay","formatMoney","formatMoneyWithoutCurrency","RegistrationIcons","_reg$internalNotes3","manualResultCount","rankingPoints","_r$points","points","tooltipContent","_reg$internalNotes","_reg$internalNotes2","descr","info50","paidAt","SavingsOutlined","_reg$refundAmount2","_reg$paidAmount2","_reg$paidAmount3","MarkEmailReadOutlined","ErrorOutlineOutlined","notes","CommentOutlined","SpeakerNotesOutlined","RankingPoints","useClassEntrySelectionColumns","openEditDialog","cancelRegistration","refundRegistration","entryColumns","cellClassName","DragIndicatorOutlined","sortable","headerAlign","headerClassName","_row$group","_row$dog","_row$dog2","_row$lastEmail","lastEmail","_p$row$refundAmount","_p$row$paidAmount","showInMenu","EventBusyOutlined","participantColumns","cancelledColumns","valueFormatter","ScrollDiv","withScrolling","listKey","eventGroups","eg","ClassEntrySelection","setRefundOpen","selectedRegistrationId","setSelectedRegistrationId","useConfirm","unlockArrange","setUnlockArrange","handleOpen","handleRefund","registrationsByGroup","byGroup","_byGroup$key","reserveNotNotified","some","reserveNotified","handleDrop","extra","confirmationText","cancellationText","_r$group","handleReject","log","recordEvent","sourceGroup","regGroups","handleSelectionModeChange","selection","details","handleCellClick","defaultMuiPrevented","navigator","clipboard","writeText","autoHideDuration","handleDoubleClick","DndProvider","backend","HTML5Backend","flexShrink","disableColumnMenu","noRowsOverlay","overflowY","_registrationsByGroup","_registrationsByGroup2","DragableDataGrid","autoHeight","columnHeaderHeight","onRowSelectionModelChange","rowSelectionModel","onCellClick","onRowDoubleClick","toolbar","slotProps","gap","EventDetailsDialog","useAdminEventActions","storedEvent","setStoredEvent","adminEditableEventByIdAtom","resetEvent","setChanges","fullWidth","PaperProps","maxHeight","dividers","EventForm","InfoPanel","onOpenMessageDialog","attachmentKey","setAttachmentKey","tab","setTab","handleExpandedChange","handleTabChange","stopPropagation","handleInvitationUpload","target","files","fileKey","square","disableGutters","Tabs","Tab","TableContainer","hidden","nums","TableHead","PictureAsPdfOutlined","verticalAlign","rel","fontStyle","htmlFor","FooterCell","mx","ValueCell","RefundFooter","canHaveHandlingCosts","total","selectedTotal","handlingCost","onHandlingCostChange","parseAmount","parseFloat","formatAmount","refundBase","min","refundTotal","GridFooterContainer","NumberInput","formatValue","parseInput","pattern","input","endAdornment","InputAdornment","inputProps","useRefundColumns","transactionAmount","RefundDailog","_registration$interna","loadedId","setLoadedId","setTransactions","setSelection","setHandlingCost","setInternalNotes","okTransactions","selectedTransactions","transaction","loaded","payments","_registration$interna2","dispatchNotesChange","handleNotesChange","handleCostChange","handleClose","_e$body","_details$meta","_details$meta$invalid","remaining","meta","invalidRefunds","remainingRefundBalance","remainingAmount","checkboxSelection","disableColumnResize","disableMultipleRowSelection","hideFooterPagination","hideFooterSelectedRowCount","sorting","sortModel","isRowSelectable","footer","my","TextField","multiline","AuditTrail","auditTrail","CollapsibleSection","initOpen","timestamp","columnHeaders","forwardRef","_props","RegistrationDialogBase","classDisabled","_registration$handler3","prefix","handlerName","RegistrationCreateDialog","adminNewRegistrationAtom","RegistrationEditDialog","adminEventRegistrationSelector","adminEditableEventRegistrationByEventIdAndIdAtom","setAuditTrail","at","useRegistrationEmailTemplateData","CONTACT_INFO_PROPS","ContactInfoCheckbox","Checkbox","ContactInfoGroup","setContactInfo","FormLabel","FormGroup","prop","_contactInfo$group","_event$group","_event$contactInfo$gr","_event$group2","CONTACT_INFO_GROUPS","SendMessageDialog","templateId","setText","templates","adminEmailTemplatesAtom","selectedTemplate","setSelectedTemplate","compiledTemplate","compiledSubject","_selectedTemplate$ses","ses","Handlebars","HtmlPart","SubjectPart","previewData","handleTemplateChange","preview","html","handleSend","failed","updatedRegistrations","registrationIds","ArrowForwardIosSharp","transform","marginX","marginY","dense","listEmails","AutocompleteSingle","dangerouslySetInnerHTML","__html","AsyncButton","TabPanel","activeTab","Title","REG_CLASSES","isRegistrationClass","EventViewPage","detailsOpen","setDetailsOpen","createOpen","setCreateOpen","msgDlgOpen","setMsgDlgOpen","refundOpen","selectedEventClass","setSelectedEventClass","adminEventClassAtom","adminRegistrationIdAtom","allRegistrations","selectedRegistration","recipientRegistrations","setRecipientRegistrations","messageTemplateId","setMessageTemplateId","allClasses","backgroundActionsRunning","_allClasses$findIndex","max","_","handleCancelClose","handleCreateClose","handleDetailsClose","handleRefundClose","closeMsgDlg","handleOpenMsgDialog","recipients","FullPageFlex","startIcon","FormatListBulleted","EmailOutlined","Divider","orientation","FormatListNumberedOutlined","AddCircleOutline","borderLeft","borderLeftColor","Alert","severity","Modal","AdditionalInfoSection","onOpenChange","preventDefault","HelpPopover","anchorEl","helpOpen","Popover","transformOrigin","TransitionComponent","Fade","compareEventClass","_a$date","_b$date","_a$class$localeCompar","_a$date$valueOf","_a$date2","_b$date$valueOf","_b$date2","EventClasses","_helperTexts$classes","eventEndDate","required","requiredState","errorStates","helperTexts","showCount","rest","helperText","sortedValue","groupByWeekday","getLabel","_c$class","isEqual","groupBy","hasJudge","option","_option$judge","Autocomplete","disableClearable","disableCloseOnSelect","disablePortal","multiple","renderOption","optionProps","_createElement","CheckBoxOutlineBlank","checkedIcon","CheckBox","marginRight","renderInput","renderTags","tagValue","getTagProps","_option$class","Chip","avatar","Avatar","onDelete","getInputInitValue","EventProperty","_fields$required$id","fields","helpClick","validateInput","mapValue","acProps","fixedValue","inputValue","setInputValue","isRequired","validateEventField","valueOrUndef","mappedValueOrUndef","debouncedonChange","freeSolo","handleInputChange","_validateInput","validated","InputProps","HelpOutlined","onInputChange","displayName","getTypeClasses","eventTypeClasses","_eventTypeClasses","_eventTypeClasses$uno","OFFICIAL_EVENT_TYPES","unofficialEvents","BasicInfoSection","secretaries","selectedEventType","_event$name","helpAnchorEl","setHelpAnchorEl","typeOptions","eventClassOptions","getRuleDate","availableOfficials","_officials$filter","officer","hasEntries","handleDateChange","_start","_end","updateClassDates","openHelp","currentTarget","closeHelp","handleTypeChange","filterClasses","handleClassesChange","handleNameChange","isEqualId","getId","_o$id","getNameOrEmail","startDisabled","startError","startHelperText","endDisabled","endError","endHelperText","getOptionKey","typeClasses","isAfter","ContactInfoSelect","show","defaults","_show$name","_show$email","_show$phone","setState","handleCheck","_defaults$prop","ContactInfoSection","ClassGroups","typeGroups","_c$groups$map","getGroupLabel","_reason","_o$date","_v$date","useAdminEventDatesOptions","EventGroups","defaultDates","_applyNewGroupsToDogE","_event$dates$filter","_event$dates","_event$dates2","_event$dates3","lengthChanged","dateChanged","EventDates","_event$eventType","PlacesDisplay","EventFormPlaces","classesEnabled","setClassesEnabled","prev","_cur$places","classesByDays","ec","_cur$places2","handlePlacesChange","handleByClassesChange","_event$places","classValue","_cur$places3","dayTotal","scope","_cls$places","cl","_cur$places4","FormHelperText","EntrySection","_helperTexts$entrySta","_event$entryStartDate","_event$entryEndDate","_event$createdAt","_fields$required$entr","_helperTexts$entrySta2","prioritySort","eventPriority","sortedPriorities","handlePriorityChange","interval","clamp","defaultStart","defaultEnd","createdAt","HeadquartersSection","_headquarters$name","_headquarters$address","_headquarters$zipCode","_headquarters$postalD","handleAddressChange","address","handleZipCodeChange","zipCode","handleDistrictChange","postalDistrict","filterJudges","eventJudges","ej","filterClassesByJudgeId","toArray","makeArray","selectJudge","cj","removeJudge","updateJudge","JudgeClasses","OfficialJudge","newJudge","newJudges","oldJudge","DeleteOutline","countries","UnofficialJudge","onlyValidJudges","validJudges","vj","JudgesSection","_fields$state2","_selectedEventType$of","_selectedEventType$of2","officialJudges","otherJudges","unofficialJudges","validationError","_fields$state$judges","_fields$state","AddOutlined","validate","numberOrUndefined","EventPrice","_v$toString","newProps","_props$onChange","PaymentSection","_errorStates$cost","priceOptions","eventPricesSelector","memberPriceOptions","eventMemerPricesSelector","costMember","SELECTABLE_EVENT_STATES","_event$organizer3","_event$state2","adminActiveEventTypesSelector","adminActiveJudgesSelector","adminEventTypeClassesAtom","adminUsersAtom","adminUserOrganizersSelector","errors","setErrors","validateEvent","basic","entry","hq","contact","valid","stateDisabled","requiredFields","u","_event$organizer","_u$roles","_event$organizer$id","_event$organizer2","roles","et","selectedEventTypeClasses","handleOpenChange","getStateLabel","handleStateChange","handleBasicOpenChange","handleJudgesOpenChange","handleEntryOpenChange","handlePaymentOpenChange","handleHQOpenChange","handleContactOpenChange","handleInfoOpenChange","pb","Save","Cancel","STATE_INCLUSION","draft","tentative","picked","invited","started","ended","completed","REQUIRED_BY_STATE","contactInfoShown","getMinJudgeCount","ZIPCODE_REGEXP","VALIDATORS","_contactInfo$secretar","_event$cost","exec","_event$judges","minCount","list","states","_required","_VALIDATORS$field","byStartDate","sortEvents","adminRemoteEventsEffect","getPromise","setSelf","trigger","DefaultValue","selectorFamily","adminEventsAtom","adminNewEventAtom","set","newEvents","confirmedAdminEventSelector","adminCurrentEventSelector","selector","adminEventIdAtom","adminFilteredEventsSelector","adminEventFilterTextAtom","toLocaleLowerCase","i18next","showPast","adminShowPastEventsAtom","_event$official","_event$secretary","adminEventOrganizersSelector","adminEventsFetchedAtom","atom","addYears","effects","logEffect","sessionStorageEffect","localStorageEffect","adminEventColumnsAtom","atomFamily","userSelector","setAdminEventId","currentAdminEvent","setCurrentAdminEvent","setNewEvent","publicEvents","setPublicEvents","eventsAtom","copyCurrent","copyCurrentTest","deleteCurrent","updatePublicEvents","remove","changedKeys","_user$name","templateIds","adminRemoteEmailTemplatesEffect","modifiedAt","adminEmailTemplateSelector","adminEditableTemplateByIdAtom","useAdminEmailTemplatesActions","setEmailTemplates","_e$result","getEventTypes","refresh","putEventType","adminRemoteEventTypesEffect","adminEventTypesAtom","adminEventTypeFilterAtom","NOU","NOWT","adminEventTypeGroupsAtom","NKM","sortEventTypes","useAdminEventTypeActions","setEventTypes","newEventTypes","active","adminFilteredEventTypesSelector","_groups$eventType","getJudges","putJudge","adminRemoteJudgesEffect","adminJudgesAtom","adminJudgeFilterAtom","useAdminJudgesActions","setJudges","resetUsers","sortedJudges","adminFilteredJudgesSelector","district","getOfficials","adminRemoteOfficialsEffect","adminOfficialsAtom","adminOfficialFilterAtom","useAdminOfficialsActions","setOfficials","sortedOfficials","adminFilteredOfficialsSelector","getAdminOrganizers","putOrganizer","adminRemoteOrganizersEffect","adminOrganizersAtom","adminOrganizerFilterAtom","adminOrganizerIdAtom","adminOrganizerColumnsAtom","adminEventOrganizerIdAtom","adminUsersOrganizerIdAtom","adminShowOnlyOrganizersWithUsersAtom","nameSort","useAdminOrganizersActions","setOrganizers","adminFilteredOrganizersSelector","adminOrganizerSelector","organizerId","adminCurrentOrganizerSelector","adminRemoteRegistrationsEffect","node","adminEventRegistrationsAtom","agreeToTerms","emptyBreeder","emptyDog","emptyPerson","_get","_get2","adminRemoteUsersEffect","onSet","_newValue","_oldValue","reset","adminUserFilterAtom","adminUserIdAtom","adminUsersColumnsAtom","useAdminUserActions","setUsers","replaceUser","oldIndex","newUsers","addUser","added","_user$roles","orgId","org","addRole","userId","removeRole","setAdmin","adminUsersOrganizersSelector","orgIds","filteredOrgs","adminFilteredUsersSelector","isAdmin","isAdminSelector","adminUserOrgIdsSelector","adminUserSelector","adminCurrentUserSelector","paytrailMerchantId","adminUserEventOrganizersSelector","_user$roles2","adminUserAdminOrganizersSelector","_user$roles3","adminUserEventsSelector","_user$roles4","adminUserFilteredEventsSelector","userEvents","_user$roles5","_props$onClick","_props$getOptionLabel","_acProps$value","autoHighlight","compareOption","validOption","fixedOptions","_event$contactInfo$se","_event$contactInfo$se2","_event$contactInfo2$s","_event$contactInfo3$s","_event$contactInfo4$s","setReason","freeReason","setFreeReason","handleReasonChange","handleFreeReasonChange","InputLabel","Select","labelId","MenuItem","Trans","i18nKey","controlled","isOpen","toggle","pt","overflowX","userSelect","dayStyle","defaultDate","coerceToDateValue","startChanged","endChanged","DatePicker","referenceDate","minDate","maxDate","actionBar","textField","getStatusKey","useEventStatus","statusKey","routeError","useRouteError","asyncError","useAsyncError","isRouteErrorResponse","_error$data","AppBarButton","endIcon","HelpMenu","setAnchorEl","HelpOutlineOutlined","Menu","LanguageMenuItem","LanguageMenu","LanguageIcon","LoggedInUserMenu","userName","useUserActions","signOut","LoginButton","UserMenu","toggleMenu","hasAdminAccess","hasAdminAccessSelector","inAdmin","handleHomeClick","handleAdminClick","AppBar","Toolbar","logo","marginTop","ManageAccountsOutlined","IconsTooltipContent","popper","tooltipClasses","tooltip","defaultFormatter","parseInt","_props$slotProps","_props$slotProps2","_props$slotProps2$inp","_props$slotProps2$inp2","stringValue","setStringValue","focused","setFocused","dispatchChange","handleFocus","handleBlur","onBlur","onFocus","inputMode","padding","borderRight","Data","AdditionalInfo","setValue","getDog","encodedRegNo","dogCacheAtom","dogAtom","INIT_CACHE","isErrObject","useDogActions","setDog","cache","setCache","useDogCache","applyCache","fetched","results","oldInfo","updateCache","_newCache$dog","newCache","newCacheDog","rfid","_cache$dog","_cache$dog$dam","_oldInfo$dam","_cache$dog2","_cache$dog2$dam","_oldInfo$dam2","_cache$dog3","_cache$dog3$sire","_oldInfo$sire","_cache$dog4","_cache$dog4$sire","_oldInfo$sire2","_cache$dog5","_cache$dog6","_cache$dog7","assign","cachedDogRegNumbersSelector","validateRegNo","cached","setCached","filterInvalid","useDogCacheKey","BreederInfo","_reg$dog","_reg$dog2","_reg$breeder","_reg$breeder$name","_reg$breeder2","_reg$breeder3","_reg$breeder$location","_reg$breeder4","TitlesAndName","disabledName","disabledTitles","nameLabel","titlesLabel","localName","setLocalName","localTitles","setLocalTitles","handleTitlesChange","toLocaleUpperCase","shouldAllowRefresh","refreshDate","differenceInMinutes","DogInfo","minDogAgeMonths","_reg$dog$regNo","_reg$dog7","_reg$dog8","_reg$dog9","_reg$dog$rfid","_reg$dog10","_reg$dog11","_reg$dog12","_reg$dog13","_reg$dog14","_reg$dog15","_reg$dog$dob","_reg$dog16","_reg$dog17","_reg$dog18","_reg$dog$gender","_reg$dog19","_reg$dog20","_reg$dog21","_reg$dog22","_reg$dog23","_reg$dog23$sire","_reg$dog$sire$name","_reg$dog24","_reg$dog24$sire","_reg$dog25","_reg$dog25$dam","_reg$dog$dam$name","_reg$dog26","_reg$dog26$dam","mode","disabledByMode","sireDamDisabled","rfidDisabled","validRegNo","delayed","setDelayed","allowRefresh","cachedRegNos","updateDog","_reg$dog3","oldDog","_reg$dog4","_cache$handler","_cache$handler$member","ownerMembership","buttonClick","load","delay","handleRegNoChange","upper","handleRegNoSelect","_reg$dog$regNo2","_reg$dog5","visibilityState","_reg$dog$regNo3","_reg$dog6","subYears","subMonths","openTo","views","EntryInfo","_errorStates$class","_reg$class3","getRegDateLabel","getRegDateTimeLabel","getReserveChoiceLabel","selectedDates","tmpDates","filterDates","setFilterDates","isValidRegistrationDate","fd","datesAndTimes","showDatesFilter","showDatesAndTimes","datesText","sizeSwitch","newClass","cdates","ddates","rdates","usedDates","missingDates","filterDate","ud","addDates","cd","handleClassChange","handleDatesAndTimesChange","handleReserveChange","HandlerInfo","_reg$handler2","_reg$handler$name","_reg$handler3","_reg$handler4","_reg$handler$location","_reg$handler5","_reg$handler6","_reg$handler$email","_reg$handler7","_reg$handler8","_reg$handler$phone","_reg$handler9","_cached$membership$or","_cached$membership","_cache$membership","_reg$handler","cachedMembership","autoComplete","MuiTelInput","langOfCountryName","defaultCountry","forceCallingCode","MembershipInfo","_reg$owner$membership","_reg$owner","_reg$owner$membership2","_reg$owner2","_reg$handler$membersh","ownerCache","setOwnerCache","handlerCache","setHandlerCache","cachedOwner","cachedHandler","_props$owner","_props$handler","_owner$membership","_cachedHandler$member","OwnerInfo","_reg$owner$name","_reg$owner3","_reg$owner4","_reg$owner$location","_reg$owner5","_reg$owner6","_reg$owner$email","_reg$owner7","_reg$owner8","_reg$owner$phone","_reg$owner9","_reg$ownerHandles","_reg$ownerPays","_owner$membership$org","_ref2","PayerInfo","_reg$payer","_reg$payer$name","_reg$payer2","_reg$payer3","_reg$payer$email","_reg$payer4","_reg$payer5","_reg$payer$phone","_reg$payer6","asArray","findFirstMissing","requirements","rules","rule","opt","objectContains","availableTypes","availableSMResults","hasKVA","availableResults","existingResults","cert","createMissingResult","nanoid","qualifying","resultBorderColor","getResultId","isManualResult","getSuffix","cacit","resCacit","resCert","parseResult","realResult","testClass","QualifyingResultRow","manualResults","onRemove","handleRemove","date9Months","addMonths","testResult","borderWidth","QualifyingResultsInfo","disableResultInput","newResults","handleAddResult","handleRemoveResult","totalPoints","_registration$dog4","_registration$dog5","_registration$paidAmo","large","validateRegistration","setRankingPeriod","qualifies","isMember","paymentAmount","ctaText","_registration$eventTy","getRequirements","_props$dog","_props$class","_props$dog$results","_props$dog2","_props$results","dogResults","filtered","filterRelevantResults","relevant","qr","_registration$dog2","texts","getSectionHelperTexts","_registration$dog$res","_registration$dog3","WebkitTextFillColor","success","_registration$breeder","_registration$dog6","_registration$payer","DataGridWithDefaults","page","setPage","DataGrid","paginationModel","pageSize","onPaginationModelChange","model","pageSizeOptions","outline","StarHalfOutlined","StarOutlined","StarBorderOutlined","VALID_TLDS","USEREXP","DOMAINEXP","validEmail","match","asciiDomain","toASCII","tld","RE_RegNo","RE_FinnishVeryOldRegNo","RE_FinnishOldRegNo","RE_FinnishRegNo","isFinnishRegNo","isModernFinnishRegNo","validateBreeder","validatePerson","person","matchIsValidTel","_req","evt","validateDog","validateRegistrationField","NOT_VALIDATED","obj","req","excludeByYear","startOfYear","validateDogAge","_age","REQUIREMENTS","minAge","age","differenceInMonths","validateDogBreed","_breedCode","breeds","validateDogForEvent","validator","_dog$dam","_dog$sire","forEvent","byDate","regClass","officialResults","nextClass","getNextClass","nextClassRules","manualValid","findDisqualifyingResult","usedEntryEndDate","check","checkRequiredResults","officialNotThisYear","manulNotThisYear","dis","bestResults","compare","officialResult","manualResult","counts","Map","getCount","n","checkResult","resultProps","resultRules","_officialResults$filt","_manualResults$filter","_r$result","officialBest","manualBest","oldValue","getStorageKeysStartingWith","prefixes","appVersion","isEarlierVersionThan","version","currentVersionParts","comparedVersionParts","compared","cleanPre112","removeItem","runCleaners","_localStorage$getItem","parseStorageJSON","warn","getStorageEffect","storage","resetSelf","savedValue","isReset","handleStorageChange","parsed","removeEventListener","sessionStorage","readDate","writeDate","formatISO","representation","withinDateFilters","withinSwitchFilters","withinEventTypeFilter","withinEventTypeClassFilter","withinJudgeFilter","withinOrganizerFilter","serializeFilter","eventFilter","URLSearchParams","bits","getAll","_filter$eventType","_filter$eventClass","_filter$organizer","_filter$judge","filters","remoteEventsEffect","urlSyncEffect","sessionValue","newUrl","history","pushState","newSearch","eventIdAtom","_get$find","currentEventSelector","filteredEventsForTypeSelector","filteredEventsForEventClassSelector","filteredEventsForOrganizerSelector","filteredEventsForJudgeSelector","uniqueEventTypes","uniqueEventClasses","eventOrganizersSelector","usedOrganizerIds","usedJudges","level","remoteRegistrationEffect","param","registrationIdAtom","newRegistrationAtom","setIdToken","loginPath","setLoginPath","loginPathAtom","newLoginPath","signIn","useRecoilCallback","snapshot","nameOrEmail","notice","clear","awsSignOut","getIdToken","i18nextEffect","stringToLang","str","documentElement","lang","cachePolicy_UNSTABLE","eviction","isOrgAdminSelector","ADMIN_ROOT","ADMIN_EVENTS","isRegistration","getItemDateAndClass","RULE_DATES","asDates","validateDogForSM","eventRequirements","classRequirements","_resultRequirements$r","resultRequirements","ruleDates","ruleDate","ALO","AVO","VOI","NOME_B_CH_requirements","NOWT_CH_requirements","NOME_A_CH_requirements","byPointsAndDate","_a$points","_b$points","aPoints","bPoints","getNOME_B_CH_RankingPeriod","getNOME_A_CH_RankingPeriod","getNOWT_CH_RankingPeriod","resultFilter","POINTS","VOI1","VOI2","VOI3","resultPoints","maxResults"],"sourceRoot":""}